|
11 | 11 | #include "hcwebsocket.h"
|
12 | 12 | #endif
|
13 | 13 |
|
| 14 | +#if HC_PLATFORM == HC_PLATFORM_GSDK |
| 15 | +#include "XGameRuntimeFeature.h" |
| 16 | +#include <winsock2.h> |
| 17 | +#include <iphlpapi.h> |
| 18 | +#endif |
| 19 | + |
14 | 20 | #define CRLF L"\r\n"
|
15 | 21 |
|
16 | 22 | using namespace xbox::httpclient;
|
@@ -1030,11 +1036,45 @@ HRESULT winhttp_http_task::connect_and_send_async()
|
1030 | 1036 |
|
1031 | 1037 | NAMESPACE_XBOX_HTTP_CLIENT_END
|
1032 | 1038 |
|
| 1039 | +#if HC_PLATFORM == HC_PLATFORM_GSDK |
| 1040 | +typedef DWORD(WINAPI *GetNetworkConnectivityHintProc)(NL_NETWORK_CONNECTIVITY_HINT*); |
| 1041 | +#endif |
| 1042 | + |
1033 | 1043 | HRESULT Internal_InitializeHttpPlatform(HCInitArgs* args, PerformEnv& performEnv) noexcept
|
1034 | 1044 | {
|
1035 | 1045 | assert(args == nullptr);
|
1036 | 1046 | UNREFERENCED_PARAMETER(args);
|
1037 | 1047 |
|
| 1048 | +#if HC_PLATFORM == HC_PLATFORM_GSDK |
| 1049 | + if (XGameRuntimeIsFeatureAvailable(XGameRuntimeFeature::XNetworking)) |
| 1050 | + { |
| 1051 | + HMODULE hModule = LoadLibrary(TEXT("iphlpapi.dll")); |
| 1052 | + |
| 1053 | + if (hModule != nullptr) |
| 1054 | + { |
| 1055 | + GetNetworkConnectivityHintProc getNetworkConnectivityHint = |
| 1056 | + (GetNetworkConnectivityHintProc)GetProcAddress(hModule, "GetNetworkConnectivityHint"); |
| 1057 | + |
| 1058 | + HRESULT hr = S_OK; |
| 1059 | + bool networkNotReady = false; |
| 1060 | + |
| 1061 | + if (getNetworkConnectivityHint != nullptr) |
| 1062 | + { |
| 1063 | + NL_NETWORK_CONNECTIVITY_HINT connectivityHint{}; |
| 1064 | + hr = HRESULT_FROM_WIN32(getNetworkConnectivityHint(&connectivityHint)); |
| 1065 | + networkNotReady = connectivityHint.ConnectivityLevel == NetworkConnectivityLevelHintUnknown; |
| 1066 | + } |
| 1067 | + |
| 1068 | + FreeLibrary(hModule); |
| 1069 | + |
| 1070 | + if (SUCCEEDED(hr) && networkNotReady) |
| 1071 | + { |
| 1072 | + return E_HC_NETWORK_NOT_READY; |
| 1073 | + } |
| 1074 | + } |
| 1075 | + } |
| 1076 | +#endif |
| 1077 | + |
1038 | 1078 | performEnv.reset(new (std::nothrow) HC_PERFORM_ENV());
|
1039 | 1079 | if (!performEnv) { return E_OUTOFMEMORY; }
|
1040 | 1080 |
|
|
0 commit comments