Skip to content

Commit 2868d32

Browse files
authored
Fixing proxy port bug when using Win32 path (#903)
* Fixing proxy port bug when using Win32 path * PR feedback * Improving log * PR feedback * PR feedback
1 parent de97a35 commit 2868d32

11 files changed

Lines changed: 119 additions & 27 deletions

Build/libHttpClient.GDK.Shared/libHttpClient.GDK.Shared.vcxitems

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\Curl\CurlProvider.cpp" />
2222
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_connection.cpp" />
2323
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_provider.cpp" />
24+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_proxy_helper.cpp" />
2425
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Platform\GDK\PlatformComponents_GDK.cpp" />
2526
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Platform\Windows\PlatformTrace_Windows.cpp" />
2627
</ItemGroup>

Build/libHttpClient.GDK.Shared/libHttpClient.GDK.Shared.vcxitems.filters

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\Curl\CurlDynamicLoader.cpp">
6161
<Filter>Source\HTTP\Curl</Filter>
6262
</ClCompile>
63+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_proxy_helper.cpp" />
6364
</ItemGroup>
6465
<ItemGroup>
6566
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\Source\Common\Win\utils_win.h">

Build/libHttpClient.UnitTest/libHttpClient.UnitTest.vcxitems

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,7 @@
3636
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Tests\UnitTests\Tests\MockTests.cpp" />
3737
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Tests\UnitTests\Tests\TaskQueueTests.cpp" />
3838
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Tests\UnitTests\Tests\WebsocketTests.cpp" />
39+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Tests\UnitTests\Tests\ProxyTests.cpp" />
40+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_proxy_helper.cpp" />
3941
</ItemGroup>
4042
</Project>

Build/libHttpClient.UnitTest/libHttpClient.UnitTest.vcxitems.filters

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,5 +92,7 @@
9292
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Platform\Windows\PlatformTrace_Windows.cpp">
9393
<Filter>Source\Platform\Windows</Filter>
9494
</ClCompile>
95+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Tests\UnitTests\Tests\ProxyTests.cpp" />
96+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_proxy_helper.cpp" />
9597
</ItemGroup>
9698
</Project>

Build/libHttpClient.Win32.Shared/libHttpClient.Win32.Shared.vcxitems

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Common\Win\utils_win.cpp" />
1414
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_connection.cpp" />
1515
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_provider.cpp" />
16+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_proxy_helper.cpp" />
1617
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Platform\Win32\PlatformComponents_Win32.cpp" />
1718
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Platform\Windows\PlatformTrace_Windows.cpp" />
1819
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Task\ThreadPool_win32.cpp" />

Build/libHttpClient.Win32.Shared/libHttpClient.Win32.Shared.vcxitems.filters

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\Platform\Windows\PlatformTrace_Windows.cpp">
5252
<Filter>Source\Platform\Windows</Filter>
5353
</ClCompile>
54+
<ClCompile Include="$(MSBuildThisFileDirectory)..\..\Source\HTTP\WinHttp\winhttp_proxy_helper.cpp" />
5455
</ItemGroup>
5556
<ItemGroup>
5657
<ClInclude Include="$(MSBuildThisFileDirectory)..\..\Source\Common\Win\utils_win.h">

Source/HTTP/WinHttp/winhttp_provider.cpp

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -473,28 +473,7 @@ HRESULT WinHttpProvider::GetProxyName(
473473
case proxy_type::named_proxy:
474474
{
475475
pAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
476-
477-
http_internal_wstring wProxyHost = utf16_from_utf8(proxyUri.Host());
478-
479-
// WinHttpOpen cannot handle trailing slash in the name, so here is some string gymnastics to keep WinHttpOpen happy
480-
if (proxyUri.IsPortDefault())
481-
{
482-
pwProxyName = wProxyHost;
483-
}
484-
else
485-
{
486-
if (proxyUri.Port() > 0)
487-
{
488-
http_internal_basic_stringstream<wchar_t> ss;
489-
ss.imbue(std::locale::classic());
490-
ss << wProxyHost << L":" << proxyUri.Port();
491-
pwProxyName = ss.str().c_str();
492-
}
493-
else
494-
{
495-
pwProxyName = wProxyHost;
496-
}
497-
}
476+
pwProxyName = WinHttpProvider::BuildNamedProxyString(proxyUri);
498477
break;
499478
}
500479

@@ -518,6 +497,7 @@ HRESULT WinHttpProvider::GetProxyName(
518497
return S_OK;
519498
}
520499

500+
521501
#if HC_PLATFORM == HC_PLATFORM_GDK
522502

523503
void WinHttpProvider::Suspend()

Source/HTTP/WinHttp/winhttp_provider.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ class WinHttpProvider
7474
_In_ String const& proxyUri
7575
) noexcept;
7676

77+
// Public helper for building a proxy name (host[:port]) used by tests and implementation.
78+
static http_internal_wstring BuildNamedProxyString(_In_ const xbox::httpclient::Uri& proxyUri);
79+
7780
#ifndef HC_NOWEBSOCKETS
7881
public: // IWebSocketProvider
7982
HRESULT ConnectAsync(
@@ -187,7 +190,4 @@ class WinHttp_WebSocketProvider : public IWebSocketProvider
187190
SharedPtr<WinHttpProvider> const WinHttpProvider;
188191
};
189192
#endif
190-
191-
192-
193193
NAMESPACE_XBOX_HTTP_CLIENT_END
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "pch.h"
2+
#include "winhttp_provider.h"
3+
4+
NAMESPACE_XBOX_HTTP_CLIENT_BEGIN
5+
6+
http_internal_wstring WinHttpProvider::BuildNamedProxyString(_In_ const xbox::httpclient::Uri &proxyUri)
7+
{
8+
http_internal_wstring wProxyHost = utf16_from_utf8(proxyUri.Host());
9+
if (proxyUri.IsPortDefault())
10+
{
11+
return wProxyHost;
12+
}
13+
if (proxyUri.Port() > 0)
14+
{
15+
auto portStr = std::to_wstring(proxyUri.Port());
16+
http_internal_wstring result = wProxyHost;
17+
result.push_back(L':');
18+
result.append(portStr.c_str());
19+
return result;
20+
}
21+
return wProxyHost;
22+
}
23+
24+
NAMESPACE_XBOX_HTTP_CLIENT_END

Source/Platform/GDK/PlatformComponents_GDK.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,9 @@ HRESULT PlatformInitialize(PlatformComponents& components, HCInitArgs* initArgs)
5555
}
5656
else
5757
{
58-
HC_TRACE_INFORMATION(HTTPCLIENT, "PlatformInitialize: Detected non-console platform (e.g., Steam Deck), using WinHTTP for HTTP");
58+
HC_TRACE_INFORMATION(HTTPCLIENT, "PlatformInitialize: Detected non-console platform. Using WinHTTP for HTTP");
5959

60-
// Use WinHTTP for Steam Deck and other non-console platforms
60+
// Use WinHTTP for non-console platforms
6161
auto initWinHttpResult = WinHttpProvider::Initialize();
6262
RETURN_IF_FAILED(initWinHttpResult.hr);
6363

0 commit comments

Comments
 (0)