Fixes:
- Add missing virtual destructor on `SSLBackend`. - On Windows, filter out `POLLWRBAND` (one of the new flags added) when calling `WSAPoll`, because despite the constant being defined on Windows, passing it calls `WSAPoll` to yield `EINVAL`. - Reduce OpenSSL version requirement to satisfy CI; I haven't tested whether it actually builds (or runs) against 1.1.1, but if not, I'll figure it out. - Change an instance of memcpy to memmove, even though the arguments cannot overlap, to avoid a [strange GCC error](https://github.com/yuzu-emu/yuzu/pull/10912#issuecomment-1606283351).
This commit is contained in:
parent
8905142f43
commit
4a35569921
|
@ -325,7 +325,7 @@ if (MINGW)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(ENABLE_OPENSSL)
|
if(ENABLE_OPENSSL)
|
||||||
find_package(OpenSSL 3.0.0 REQUIRED)
|
find_package(OpenSSL 1.1.1 REQUIRED)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Please consider this as a stub
|
# Please consider this as a stub
|
||||||
|
|
|
@ -96,7 +96,7 @@ static void Append(std::vector<u8>& vec, T t) {
|
||||||
static void AppendNulTerminated(std::vector<u8>& vec, std::string_view str) {
|
static void AppendNulTerminated(std::vector<u8>& vec, std::string_view str) {
|
||||||
size_t off = vec.size();
|
size_t off = vec.size();
|
||||||
vec.resize(off + str.size() + 1);
|
vec.resize(off + str.size() + 1);
|
||||||
std::memcpy(vec.data() + off, str.data(), str.size());
|
std::memmove(vec.data() + off, str.data(), str.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
// We implement gethostbyname using the host's getaddrinfo rather than the
|
// We implement gethostbyname using the host's getaddrinfo rather than the
|
||||||
|
|
|
@ -31,6 +31,7 @@ constexpr Result ResultWouldBlock{ErrorModule::SSLSrv, 204};
|
||||||
|
|
||||||
class SSLConnectionBackend {
|
class SSLConnectionBackend {
|
||||||
public:
|
public:
|
||||||
|
virtual ~SSLConnectionBackend() {}
|
||||||
virtual void SetSocket(std::shared_ptr<Network::SocketBase> socket) = 0;
|
virtual void SetSocket(std::shared_ptr<Network::SocketBase> socket) = 0;
|
||||||
virtual Result SetHostName(const std::string& hostname) = 0;
|
virtual Result SetHostName(const std::string& hostname) = 0;
|
||||||
virtual Result DoHandshake() = 0;
|
virtual Result DoHandshake() = 0;
|
||||||
|
|
|
@ -97,6 +97,8 @@ bool EnableNonBlock(SOCKET fd, bool enable) {
|
||||||
|
|
||||||
Errno TranslateNativeError(int e) {
|
Errno TranslateNativeError(int e) {
|
||||||
switch (e) {
|
switch (e) {
|
||||||
|
case 0:
|
||||||
|
return Errno::SUCCESS;
|
||||||
case WSAEBADF:
|
case WSAEBADF:
|
||||||
return Errno::BADF;
|
return Errno::BADF;
|
||||||
case WSAEINVAL:
|
case WSAEINVAL:
|
||||||
|
@ -421,9 +423,14 @@ short TranslatePollEvents(PollEvents events) {
|
||||||
translate(PollEvents::WrBand, POLLWRBAND);
|
translate(PollEvents::WrBand, POLLWRBAND);
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
if (True(events & PollEvents::Pri)) {
|
short allowed_events = POLLRDBAND | POLLRDNORM | POLLWRNORM;
|
||||||
LOG_WARNING(Service, "Winsock doesn't support POLLPRI");
|
// Unlike poll on other OSes, WSAPoll will complain if any other flags are set on input.
|
||||||
|
if (result & ~allowed_events) {
|
||||||
|
LOG_DEBUG(Network,
|
||||||
|
"Removing WSAPoll input events 0x{:x} because Windows doesn't support them",
|
||||||
|
result & ~allowed_events);
|
||||||
}
|
}
|
||||||
|
result &= allowed_events;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
UNIMPLEMENTED_IF_MSG((u16)events != 0, "Unhandled guest events=0x{:x}", (u16)events);
|
UNIMPLEMENTED_IF_MSG((u16)events != 0, "Unhandled guest events=0x{:x}", (u16)events);
|
||||||
|
|
Reference in New Issue