Commit 9e02fc77 authored by Honfika's avatar Honfika

Another websocket fix

parent fdfaf871
...@@ -140,8 +140,8 @@ namespace Titanium.Web.Proxy ...@@ -140,8 +140,8 @@ namespace Titanium.Web.Proxy
{ {
// todo: this is a hack, because Titanium does not support HTTP protocol changing currently // todo: this is a hack, because Titanium does not support HTTP protocol changing currently
var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs, var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs,
isConnect: true, applicationProtocols: SslExtensions.Http2ProtocolAsList, true, SslExtensions.Http2ProtocolAsList,
noCache: true, cancellationToken: cancellationToken); true, cancellationToken);
http2Supported = connection.NegotiatedApplicationProtocol == http2Supported = connection.NegotiatedApplicationProtocol ==
SslApplicationProtocol.Http2; SslApplicationProtocol.Http2;
...@@ -170,8 +170,8 @@ namespace Titanium.Web.Proxy ...@@ -170,8 +170,8 @@ namespace Titanium.Web.Proxy
// don't pass cancellation token here // don't pass cancellation token here
// it could cause floating server connections when client exits // it could cause floating server connections when client exits
prefetchConnectionTask = tcpConnectionFactory.GetServerConnection(this, connectArgs, prefetchConnectionTask = tcpConnectionFactory.GetServerConnection(this, connectArgs,
isConnect: true, applicationProtocols: null, noCache: false, true, null, false,
cancellationToken: CancellationToken.None); CancellationToken.None);
} }
} }
...@@ -253,8 +253,8 @@ namespace Titanium.Web.Proxy ...@@ -253,8 +253,8 @@ namespace Titanium.Web.Proxy
// If we detected that client tunnel CONNECTs without SSL by checking for empty client hello then // If we detected that client tunnel CONNECTs without SSL by checking for empty client hello then
// this connection should not be HTTPS. // this connection should not be HTTPS.
var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs, var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs,
isConnect: true, applicationProtocols: SslExtensions.Http2ProtocolAsList, true, SslExtensions.Http2ProtocolAsList,
noCache: true, cancellationToken: cancellationToken); true, cancellationToken);
try try
{ {
...@@ -325,8 +325,8 @@ namespace Titanium.Web.Proxy ...@@ -325,8 +325,8 @@ namespace Titanium.Web.Proxy
} }
var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs, var connection = await tcpConnectionFactory.GetServerConnection(this, connectArgs,
isConnect: true, applicationProtocols: SslExtensions.Http2ProtocolAsList, true, SslExtensions.Http2ProtocolAsList,
noCache: true, cancellationToken: cancellationToken); true, cancellationToken);
try try
{ {
#if NETSTANDARD2_1 #if NETSTANDARD2_1
......
...@@ -190,6 +190,7 @@ namespace Titanium.Web.Proxy.Network.Tcp ...@@ -190,6 +190,7 @@ namespace Titanium.Web.Proxy.Network.Tcp
customUpStreamProxy ?? (isHttps ? server.UpStreamHttpsProxy : server.UpStreamHttpProxy), customUpStreamProxy ?? (isHttps ? server.UpStreamHttpsProxy : server.UpStreamHttpProxy),
noCache, cancellationToken); noCache, cancellationToken);
} }
/// <summary> /// <summary>
/// Gets a TCP connection to server from connection pool. /// Gets a TCP connection to server from connection pool.
/// </summary> /// </summary>
...@@ -441,7 +442,7 @@ retry: ...@@ -441,7 +442,7 @@ retry:
connectRequest.Headers.AddHeader(HttpHeader.GetProxyAuthorizationHeader(externalProxy.UserName, externalProxy.Password)); connectRequest.Headers.AddHeader(HttpHeader.GetProxyAuthorizationHeader(externalProxy.UserName, externalProxy.Password));
} }
await stream.WriteRequestAsync(connectRequest, cancellationToken: cancellationToken); await stream.WriteRequestAsync(connectRequest, cancellationToken);
var httpStatus = await stream.ReadResponseStatus(cancellationToken); var httpStatus = await stream.ReadResponseStatus(cancellationToken);
......
...@@ -261,11 +261,19 @@ namespace Titanium.Web.Proxy ...@@ -261,11 +261,19 @@ namespace Titanium.Web.Proxy
// do not cache server connections for WebSockets // do not cache server connections for WebSockets
bool noCache = args.HttpClient.Request.UpgradeToWebSocket; bool noCache = args.HttpClient.Request.UpgradeToWebSocket;
if (noCache)
{
serverConnection = null;
}
// a connection generator task with captured parameters via closure. // a connection generator task with captured parameters via closure.
Func<Task<TcpServerConnection>> generator = () => Func<Task<TcpServerConnection>> generator = () =>
tcpConnectionFactory.GetServerConnection(this, args, isConnect: false, tcpConnectionFactory.GetServerConnection(this,
applicationProtocol: sslApplicationProtocol, args,
noCache: noCache, cancellationToken: cancellationToken); false,
sslApplicationProtocol,
noCache,
cancellationToken);
// for connection pool, retry fails until cache is exhausted. // for connection pool, retry fails until cache is exhausted.
return await retryPolicy<ServerConnectionException>().ExecuteAsync(async (connection) => return await retryPolicy<ServerConnectionException>().ExecuteAsync(async (connection) =>
......
...@@ -89,9 +89,9 @@ namespace Titanium.Web.Proxy ...@@ -89,9 +89,9 @@ namespace Titanium.Web.Proxy
else else
{ {
var connection = await tcpConnectionFactory.GetServerConnection(httpsHostName, endPoint.Port, var connection = await tcpConnectionFactory.GetServerConnection(httpsHostName, endPoint.Port,
httpVersion: HttpHeader.VersionUnknown, isHttps: false, applicationProtocols: null, HttpHeader.VersionUnknown, false, null,
isConnect: true, proxyServer: this, session:null, upStreamEndPoint: UpStreamEndPoint, true, this, null, UpStreamEndPoint,
externalProxy: UpStreamHttpsProxy, noCache: true, cancellationToken: cancellationToken); UpStreamHttpsProxy, true, cancellationToken);
try try
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment