diff options
author | comex <comexk@gmail.com> | 2023-06-26 04:23:23 +0200 |
---|---|---|
committer | comex <comexk@gmail.com> | 2023-06-26 04:24:49 +0200 |
commit | d885dd5b642807d0587acad43668cfccfdf06d1e (patch) | |
tree | b3f4ac530883702313901f9d48453577ce060175 /src/core/hle | |
parent | network.cpp: include expected.h (diff) | |
download | yuzu-d885dd5b642807d0587acad43668cfccfdf06d1e.tar yuzu-d885dd5b642807d0587acad43668cfccfdf06d1e.tar.gz yuzu-d885dd5b642807d0587acad43668cfccfdf06d1e.tar.bz2 yuzu-d885dd5b642807d0587acad43668cfccfdf06d1e.tar.lz yuzu-d885dd5b642807d0587acad43668cfccfdf06d1e.tar.xz yuzu-d885dd5b642807d0587acad43668cfccfdf06d1e.tar.zst yuzu-d885dd5b642807d0587acad43668cfccfdf06d1e.zip |
Diffstat (limited to 'src/core/hle')
-rw-r--r-- | src/core/hle/service/sockets/bsd.cpp | 8 | ||||
-rw-r--r-- | src/core/hle/service/sockets/nsd.cpp | 6 | ||||
-rw-r--r-- | src/core/hle/service/sockets/sfdnsres.cpp | 22 | ||||
-rw-r--r-- | src/core/hle/service/ssl/ssl.cpp | 20 | ||||
-rw-r--r-- | src/core/hle/service/ssl/ssl_backend.h | 4 | ||||
-rw-r--r-- | src/core/hle/service/ssl/ssl_backend_none.cpp | 3 | ||||
-rw-r--r-- | src/core/hle/service/ssl/ssl_backend_openssl.cpp | 14 | ||||
-rw-r--r-- | src/core/hle/service/ssl/ssl_backend_schannel.cpp | 45 |
8 files changed, 62 insertions, 60 deletions
diff --git a/src/core/hle/service/sockets/bsd.cpp b/src/core/hle/service/sockets/bsd.cpp index 6677689dc..6034cc0b5 100644 --- a/src/core/hle/service/sockets/bsd.cpp +++ b/src/core/hle/service/sockets/bsd.cpp @@ -270,10 +270,10 @@ void BSD::GetSockOpt(HLERequestContext& ctx) { std::vector<u8> optval(ctx.GetWriteBufferSize()); - LOG_WARNING(Service, "called. fd={} level={} optname=0x{:x} len=0x{:x}", fd, level, optname, - optval.size()); + LOG_DEBUG(Service, "called. fd={} level={} optname=0x{:x} len=0x{:x}", fd, level, optname, + optval.size()); - Errno err = GetSockOptImpl(fd, level, optname, optval); + const Errno err = GetSockOptImpl(fd, level, optname, optval); ctx.WriteBuffer(optval); @@ -447,7 +447,7 @@ void BSD::DuplicateSocket(HLERequestContext& ctx) { const s32 fd = rp.Pop<s32>(); [[maybe_unused]] const u64 unused = rp.Pop<u64>(); - Common::Expected<s32, Errno> res = DuplicateSocketImpl(fd); + Expected<s32, Errno> res = DuplicateSocketImpl(fd); IPC::ResponseBuilder rb{ctx, 4}; rb.Push(ResultSuccess); rb.Push(res.value_or(0)); // ret diff --git a/src/core/hle/service/sockets/nsd.cpp b/src/core/hle/service/sockets/nsd.cpp index 22c3a31a0..0dfb0f166 100644 --- a/src/core/hle/service/sockets/nsd.cpp +++ b/src/core/hle/service/sockets/nsd.cpp @@ -49,7 +49,7 @@ static ResultVal<std::string> ResolveImpl(const std::string& fqdn_in) { // The real implementation makes various substitutions. // For now we just return the string as-is, which is good enough when not // connecting to real Nintendo servers. - LOG_WARNING(Service, "(STUBBED) called({})", fqdn_in); + LOG_WARNING(Service, "(STUBBED) called, fqdn_in={}", fqdn_in); return fqdn_in; } @@ -69,7 +69,7 @@ void NSD::Resolve(HLERequestContext& ctx) { const std::string fqdn_in = Common::StringFromBuffer(ctx.ReadBuffer(0)); std::array<char, 0x100> fqdn_out{}; - Result res = ResolveCommon(fqdn_in, fqdn_out); + const Result res = ResolveCommon(fqdn_in, fqdn_out); ctx.WriteBuffer(fqdn_out); IPC::ResponseBuilder rb{ctx, 2}; @@ -80,7 +80,7 @@ void NSD::ResolveEx(HLERequestContext& ctx) { const std::string fqdn_in = Common::StringFromBuffer(ctx.ReadBuffer(0)); std::array<char, 0x100> fqdn_out; - Result res = ResolveCommon(fqdn_in, fqdn_out); + const Result res = ResolveCommon(fqdn_in, fqdn_out); if (res.IsError()) { IPC::ResponseBuilder rb{ctx, 2}; diff --git a/src/core/hle/service/sockets/sfdnsres.cpp b/src/core/hle/service/sockets/sfdnsres.cpp index c5eaec920..45f0f526a 100644 --- a/src/core/hle/service/sockets/sfdnsres.cpp +++ b/src/core/hle/service/sockets/sfdnsres.cpp @@ -88,15 +88,15 @@ static Errno GetAddrInfoErrorToErrno(GetAddrInfoError result) { template <typename T> static void Append(std::vector<u8>& vec, T t) { - size_t off = vec.size(); - vec.resize(off + sizeof(T)); - std::memcpy(vec.data() + off, &t, sizeof(T)); + const size_t offset = vec.size(); + vec.resize(offset + sizeof(T)); + std::memcpy(vec.data() + offset, &t, sizeof(T)); } static void AppendNulTerminated(std::vector<u8>& vec, std::string_view str) { - size_t off = vec.size(); - vec.resize(off + str.size() + 1); - std::memmove(vec.data() + off, str.data(), str.size()); + const size_t offset = vec.size(); + vec.resize(offset + str.size() + 1); + std::memmove(vec.data() + offset, str.data(), str.size()); } // We implement gethostbyname using the host's getaddrinfo rather than the @@ -154,8 +154,8 @@ static std::pair<u32, GetAddrInfoError> GetHostByNameRequestImpl(HLERequestConte return {0, Translate(res.error())}; } - std::vector<u8> data = SerializeAddrInfoAsHostEnt(res.value(), host); - u32 data_size = static_cast<u32>(data.size()); + const std::vector<u8> data = SerializeAddrInfoAsHostEnt(res.value(), host); + const u32 data_size = static_cast<u32>(data.size()); ctx.WriteBuffer(data, 0); return {data_size, GetAddrInfoError::SUCCESS}; @@ -243,7 +243,7 @@ static std::pair<u32, GetAddrInfoError> GetAddrInfoRequestImpl(HLERequestContext std::optional<std::string> service = std::nullopt; if (ctx.CanReadBuffer(1)) { - std::span<const u8> service_buffer = ctx.ReadBuffer(1); + const std::span<const u8> service_buffer = ctx.ReadBuffer(1); service = Common::StringFromBuffer(service_buffer); } @@ -254,8 +254,8 @@ static std::pair<u32, GetAddrInfoError> GetAddrInfoRequestImpl(HLERequestContext return {0, Translate(res.error())}; } - std::vector<u8> data = SerializeAddrInfo(res.value(), host); - u32 data_size = static_cast<u32>(data.size()); + const std::vector<u8> data = SerializeAddrInfo(res.value(), host); + const u32 data_size = static_cast<u32>(data.size()); ctx.WriteBuffer(data, 0); return {data_size, GetAddrInfoError::SUCCESS}; diff --git a/src/core/hle/service/ssl/ssl.cpp b/src/core/hle/service/ssl/ssl.cpp index a3b54c7f0..5638dd693 100644 --- a/src/core/hle/service/ssl/ssl.cpp +++ b/src/core/hle/service/ssl/ssl.cpp @@ -114,7 +114,7 @@ public: ~ISslConnection() { shared_data_->connection_count--; if (fd_to_close_.has_value()) { - s32 fd = *fd_to_close_; + const s32 fd = *fd_to_close_; if (!do_not_close_socket_) { LOG_ERROR(Service_SSL, "do_not_close_socket was changed after setting socket; is this right?"); @@ -123,7 +123,7 @@ public: if (bsd) { auto err = bsd->CloseImpl(fd); if (err != Service::Sockets::Errno::SUCCESS) { - LOG_ERROR(Service_SSL, "failed to close duplicated socket: {}", err); + LOG_ERROR(Service_SSL, "Failed to close duplicated socket: {}", err); } } } @@ -151,7 +151,7 @@ private: if (do_not_close_socket_) { auto res = bsd->DuplicateSocketImpl(fd); if (!res.has_value()) { - LOG_ERROR(Service_SSL, "failed to duplicate socket"); + LOG_ERROR(Service_SSL, "Failed to duplicate socket with fd {}", fd); return ResultInvalidSocket; } fd = *res; @@ -171,7 +171,7 @@ private: } Result SetHostNameImpl(const std::string& hostname) { - LOG_DEBUG(Service_SSL, "SetHostNameImpl({})", hostname); + LOG_DEBUG(Service_SSL, "called. hostname={}", hostname); ASSERT(!did_handshake_); Result res = backend_->SetHostName(hostname); if (res == ResultSuccess) { @@ -191,9 +191,9 @@ private: ASSERT(mode == IoMode::Blocking || mode == IoMode::NonBlocking); ASSERT_OR_EXECUTE(socket_, { return ResultNoSocket; }); - bool non_block = mode == IoMode::NonBlocking; - Network::Errno e = socket_->SetNonBlock(non_block); - if (e != Network::Errno::SUCCESS) { + const bool non_block = mode == IoMode::NonBlocking; + const Network::Errno error = socket_->SetNonBlock(non_block); + if (error != Network::Errno::SUCCESS) { LOG_ERROR(Service_SSL, "Failed to set native socket non-block flag to {}", non_block); } return ResultSuccess; @@ -307,13 +307,13 @@ private: } void DoHandshakeGetServerCert(HLERequestContext& ctx) { - Result res = DoHandshakeImpl(); + const Result res = DoHandshakeImpl(); u32 certs_count = 0; u32 certs_size = 0; if (res == ResultSuccess) { auto certs = backend_->GetServerCerts(); if (certs.Succeeded()) { - std::vector<u8> certs_buf = SerializeServerCerts(*certs); + const std::vector<u8> certs_buf = SerializeServerCerts(*certs); ctx.WriteBuffer(certs_buf); certs_count = static_cast<u32>(certs->size()); certs_size = static_cast<u32>(certs_buf.size()); @@ -377,7 +377,7 @@ private: get_server_cert_chain_ = static_cast<bool>(parameters.value); break; default: - LOG_WARNING(Service_SSL, "unrecognized option={}, value={}", parameters.option, + LOG_WARNING(Service_SSL, "Unknown option={}, value={}", parameters.option, parameters.value); } diff --git a/src/core/hle/service/ssl/ssl_backend.h b/src/core/hle/service/ssl/ssl_backend.h index 0dd8d9118..25c16bcc1 100644 --- a/src/core/hle/service/ssl/ssl_backend.h +++ b/src/core/hle/service/ssl/ssl_backend.h @@ -23,11 +23,11 @@ constexpr Result ResultInvalidSocket{ErrorModule::SSLSrv, 106}; constexpr Result ResultTimeout{ErrorModule::SSLSrv, 205}; constexpr Result ResultInternalError{ErrorModule::SSLSrv, 999}; // made up -constexpr Result ResultWouldBlock{ErrorModule::SSLSrv, 204}; -// ^ ResultWouldBlock is returned from Read and Write, and oddly, DoHandshake, +// ResultWouldBlock is returned from Read and Write, and oddly, DoHandshake, // with no way in the latter case to distinguish whether the client should poll // for read or write. The one official client I've seen handles this by always // polling for read (with a timeout). +constexpr Result ResultWouldBlock{ErrorModule::SSLSrv, 204}; class SSLConnectionBackend { public: diff --git a/src/core/hle/service/ssl/ssl_backend_none.cpp b/src/core/hle/service/ssl/ssl_backend_none.cpp index eb01561e2..f2f0ef706 100644 --- a/src/core/hle/service/ssl/ssl_backend_none.cpp +++ b/src/core/hle/service/ssl/ssl_backend_none.cpp @@ -8,7 +8,8 @@ namespace Service::SSL { ResultVal<std::unique_ptr<SSLConnectionBackend>> CreateSSLConnectionBackend() { - LOG_ERROR(Service_SSL, "No SSL backend on this platform"); + LOG_ERROR(Service_SSL, + "Can't create SSL connection because no SSL backend is available on this platform"); return ResultInternalError; } diff --git a/src/core/hle/service/ssl/ssl_backend_openssl.cpp b/src/core/hle/service/ssl/ssl_backend_openssl.cpp index bc797b76b..e7d5801fd 100644 --- a/src/core/hle/service/ssl/ssl_backend_openssl.cpp +++ b/src/core/hle/service/ssl/ssl_backend_openssl.cpp @@ -90,15 +90,15 @@ public: Result DoHandshake() override { SSL_set_verify_result(ssl_, X509_V_OK); - int ret = SSL_do_handshake(ssl_); - long verify_result = SSL_get_verify_result(ssl_); + const int ret = SSL_do_handshake(ssl_); + const long verify_result = SSL_get_verify_result(ssl_); if (verify_result != X509_V_OK) { LOG_ERROR(Service_SSL, "SSL cert verification failed because: {}", X509_verify_cert_error_string(verify_result)); return CheckOpenSSLErrors(); } if (ret <= 0) { - int ssl_err = SSL_get_error(ssl_, ret); + const int ssl_err = SSL_get_error(ssl_, ret); if (ssl_err == SSL_ERROR_ZERO_RETURN || (ssl_err == SSL_ERROR_SYSCALL && got_read_eof_)) { LOG_ERROR(Service_SSL, "SSL handshake failed because server hung up"); @@ -110,18 +110,18 @@ public: ResultVal<size_t> Read(std::span<u8> data) override { size_t actual; - int ret = SSL_read_ex(ssl_, data.data(), data.size(), &actual); + const int ret = SSL_read_ex(ssl_, data.data(), data.size(), &actual); return HandleReturn("SSL_read_ex", actual, ret); } ResultVal<size_t> Write(std::span<const u8> data) override { size_t actual; - int ret = SSL_write_ex(ssl_, data.data(), data.size(), &actual); + const int ret = SSL_write_ex(ssl_, data.data(), data.size(), &actual); return HandleReturn("SSL_write_ex", actual, ret); } ResultVal<size_t> HandleReturn(const char* what, size_t actual, int ret) { - int ssl_err = SSL_get_error(ssl_, ret); + const int ssl_err = SSL_get_error(ssl_, ret); CheckOpenSSLErrors(); switch (ssl_err) { case SSL_ERROR_NONE: @@ -255,7 +255,7 @@ public: ResultVal<std::unique_ptr<SSLConnectionBackend>> CreateSSLConnectionBackend() { auto conn = std::make_unique<SSLConnectionBackendOpenSSL>(); - Result res = conn->Init(); + const Result res = conn->Init(); if (res.IsFailure()) { return res; } diff --git a/src/core/hle/service/ssl/ssl_backend_schannel.cpp b/src/core/hle/service/ssl/ssl_backend_schannel.cpp index d293adcf7..775d5cc07 100644 --- a/src/core/hle/service/ssl/ssl_backend_schannel.cpp +++ b/src/core/hle/service/ssl/ssl_backend_schannel.cpp @@ -38,7 +38,7 @@ static void OneTimeInit() { // certificate, and presenting one to some arbitrary server // might be a privacy concern? Who knows, though. - SECURITY_STATUS ret = + const SECURITY_STATUS ret = AcquireCredentialsHandle(nullptr, const_cast<LPTSTR>(UNISP_NAME), SECPKG_CRED_OUTBOUND, nullptr, &schannel_cred, nullptr, nullptr, &cred_handle, nullptr); if (ret != SEC_E_OK) { @@ -121,14 +121,14 @@ public: } Result FillCiphertextReadBuf() { - size_t fill_size = read_buf_fill_size_ ? read_buf_fill_size_ : 4096; + const size_t fill_size = read_buf_fill_size_ ? read_buf_fill_size_ : 4096; read_buf_fill_size_ = 0; // This unnecessarily zeroes the buffer; oh well. - size_t offset = ciphertext_read_buf_.size(); + const size_t offset = ciphertext_read_buf_.size(); ASSERT_OR_EXECUTE(offset + fill_size >= offset, { return ResultInternalError; }); ciphertext_read_buf_.resize(offset + fill_size, 0); - auto read_span = std::span(ciphertext_read_buf_).subspan(offset, fill_size); - auto [actual, err] = socket_->Recv(0, read_span); + const auto read_span = std::span(ciphertext_read_buf_).subspan(offset, fill_size); + const auto [actual, err] = socket_->Recv(0, read_span); switch (err) { case Network::Errno::SUCCESS: ASSERT(static_cast<size_t>(actual) <= fill_size); @@ -147,7 +147,7 @@ public: // Returns success if the write buffer has been completely emptied. Result FlushCiphertextWriteBuf() { while (!ciphertext_write_buf_.empty()) { - auto [actual, err] = socket_->Send(ciphertext_write_buf_, 0); + const auto [actual, err] = socket_->Send(ciphertext_write_buf_, 0); switch (err) { case Network::Errno::SUCCESS: ASSERT(static_cast<size_t>(actual) <= ciphertext_write_buf_.size()); @@ -165,9 +165,10 @@ public: } Result CallInitializeSecurityContext() { - unsigned long req = ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_CONFIDENTIALITY | ISC_REQ_INTEGRITY | - ISC_REQ_REPLAY_DETECT | ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | - ISC_REQ_USE_SUPPLIED_CREDS; + const unsigned long req = ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_CONFIDENTIALITY | + ISC_REQ_INTEGRITY | ISC_REQ_REPLAY_DETECT | + ISC_REQ_SEQUENCE_DETECT | ISC_REQ_STREAM | + ISC_REQ_USE_SUPPLIED_CREDS; unsigned long attr; // https://learn.microsoft.com/en-us/windows/win32/secauthn/initializesecuritycontext--schannel std::array<SecBuffer, 2> input_buffers{{ @@ -219,7 +220,7 @@ public: ciphertext_read_buf_.size()); } - SECURITY_STATUS ret = + const SECURITY_STATUS ret = InitializeSecurityContextA(&cred_handle, initial_call_done ? &ctxt_ : nullptr, // Caller ensured we have set a hostname: const_cast<char*>(hostname_.value().c_str()), req, @@ -231,15 +232,15 @@ public: nullptr); // ptsExpiry if (output_buffers[0].pvBuffer) { - std::span span(static_cast<u8*>(output_buffers[0].pvBuffer), - output_buffers[0].cbBuffer); + const std::span span(static_cast<u8*>(output_buffers[0].pvBuffer), + output_buffers[0].cbBuffer); ciphertext_write_buf_.insert(ciphertext_write_buf_.end(), span.begin(), span.end()); FreeContextBuffer(output_buffers[0].pvBuffer); } if (output_buffers[1].pvBuffer) { - std::span span(static_cast<u8*>(output_buffers[1].pvBuffer), - output_buffers[1].cbBuffer); + const std::span span(static_cast<u8*>(output_buffers[1].pvBuffer), + output_buffers[1].cbBuffer); // The documentation doesn't explain what format this data is in. LOG_DEBUG(Service_SSL, "Got a {}-byte alert buffer: {}", span.size(), Common::HexToString(span)); @@ -280,7 +281,7 @@ public: } Result GrabStreamSizes() { - SECURITY_STATUS ret = + const SECURITY_STATUS ret = QueryContextAttributes(&ctxt_, SECPKG_ATTR_STREAM_SIZES, &stream_sizes_); if (ret != SEC_E_OK) { LOG_ERROR(Service_SSL, "QueryContextAttributes(SECPKG_ATTR_STREAM_SIZES) failed: {}", @@ -301,7 +302,7 @@ public: } while (1) { if (!cleartext_read_buf_.empty()) { - size_t read_size = std::min(cleartext_read_buf_.size(), data.size()); + const size_t read_size = std::min(cleartext_read_buf_.size(), data.size()); std::memcpy(data.data(), cleartext_read_buf_.data(), read_size); cleartext_read_buf_.erase(cleartext_read_buf_.begin(), cleartext_read_buf_.begin() + read_size); @@ -366,7 +367,7 @@ public: return ResultInternalError; } } - Result r = FillCiphertextReadBuf(); + const Result r = FillCiphertextReadBuf(); if (r != ResultSuccess) { return r; } @@ -430,7 +431,7 @@ public: .pBuffers = buffers.data(), }; - SECURITY_STATUS ret = EncryptMessage(&ctxt_, /*fQOP*/ 0, &desc, /*MessageSeqNo*/ 0); + const SECURITY_STATUS ret = EncryptMessage(&ctxt_, /*fQOP*/ 0, &desc, /*MessageSeqNo*/ 0); if (ret != SEC_E_OK) { LOG_ERROR(Service_SSL, "EncryptMessage failed: {}", Common::NativeErrorToString(ret)); return ResultInternalError; @@ -445,19 +446,19 @@ public: } ResultVal<size_t> WriteAlreadyEncryptedData() { - Result r = FlushCiphertextWriteBuf(); + const Result r = FlushCiphertextWriteBuf(); if (r != ResultSuccess) { return r; } // write buf is empty - size_t cleartext_bytes_written = cleartext_write_buf_.size(); + const size_t cleartext_bytes_written = cleartext_write_buf_.size(); cleartext_write_buf_.clear(); return cleartext_bytes_written; } ResultVal<std::vector<std::vector<u8>>> GetServerCerts() override { PCCERT_CONTEXT returned_cert = nullptr; - SECURITY_STATUS ret = + const SECURITY_STATUS ret = QueryContextAttributes(&ctxt_, SECPKG_ATTR_REMOTE_CERT_CONTEXT, &returned_cert); if (ret != SEC_E_OK) { LOG_ERROR(Service_SSL, @@ -527,7 +528,7 @@ public: ResultVal<std::unique_ptr<SSLConnectionBackend>> CreateSSLConnectionBackend() { auto conn = std::make_unique<SSLConnectionBackendSchannel>(); - Result res = conn->Init(); + const Result res = conn->Init(); if (res.IsFailure()) { return res; } |