Commit 9f261e83 authored by titanium007's avatar titanium007

Support pipelining

Wait of client request right after delegating server response to async
thread
parent 15afd36f
...@@ -340,6 +340,18 @@ namespace Titanium.Web.Proxy ...@@ -340,6 +340,18 @@ namespace Titanium.Web.Proxy
else else
{ {
args.ProxyRequest.BeginGetResponse(new AsyncCallback(HandleHttpSessionResponse), args); args.ProxyRequest.BeginGetResponse(new AsyncCallback(HandleHttpSessionResponse), args);
if (args.ProxyRequest.KeepAlive)
{
requestLines = new List<string>();
requestLines.Clear();
while (!String.IsNullOrEmpty(tmpLine = args.ClientStreamReader.ReadLine()))
{
requestLines.Add(tmpLine);
}
httpCmd = requestLines.Count() > 0 ? requestLines[0] : null;
HandleHttpSessionRequest(Client, httpCmd, args.ProxyRequest.ConnectionGroupName, args.ClientStream, args.tunnelHostName, requestLines, args.ClientStreamReader, args.securehost);
}
} }
...@@ -347,16 +359,19 @@ namespace Titanium.Web.Proxy ...@@ -347,16 +359,19 @@ namespace Titanium.Web.Proxy
} }
catch (IOException ex) catch (IOException)
{ {
return; return;
} }
catch (UriFormatException ex) catch (UriFormatException)
{ {
return; return;
} }
catch (WebException ex) catch (WebException)
{ {
return; return;
} }
...@@ -583,22 +598,20 @@ namespace Titanium.Web.Proxy ...@@ -583,22 +598,20 @@ namespace Titanium.Web.Proxy
} }
postStream.Close(); postStream.Close();
} }
catch (IOException ex) catch (IOException)
{ {
if (postStream != null) if (postStream != null)
postStream.Close(); postStream.Close();
args.ProxyRequest.KeepAlive = false; args.ProxyRequest.KeepAlive = false;
Debug.WriteLine(ex.Message);
return; return;
} }
catch (WebException ex) catch (WebException)
{ {
if (postStream != null) if (postStream != null)
postStream.Close(); postStream.Close();
args.ProxyRequest.KeepAlive = false; args.ProxyRequest.KeepAlive = false;
Debug.WriteLine(ex.Message);
return; return;
} }
...@@ -606,6 +619,19 @@ namespace Titanium.Web.Proxy ...@@ -606,6 +619,19 @@ namespace Titanium.Web.Proxy
args.ProxyRequest.BeginGetResponse(new AsyncCallback(HandleHttpSessionResponse), args); args.ProxyRequest.BeginGetResponse(new AsyncCallback(HandleHttpSessionResponse), args);
if (args.ProxyRequest.KeepAlive)
{
string httpCmd, tmpLine;
List<string> requestLines = new List<string>();
requestLines.Clear();
while (!String.IsNullOrEmpty(tmpLine = args.ClientStreamReader.ReadLine()))
{
requestLines.Add(tmpLine);
}
httpCmd = requestLines.Count() > 0 ? requestLines[0] : null;
TcpClient Client = args.Client;
HandleHttpSessionRequest(Client, httpCmd, args.ProxyRequest.ConnectionGroupName, args.ClientStream, args.tunnelHostName, requestLines, args.ClientStreamReader, args.securehost);
}
} }
......
...@@ -156,19 +156,7 @@ namespace Titanium.Web.Proxy ...@@ -156,19 +156,7 @@ namespace Titanium.Web.Proxy
args.Client.Close(); args.Client.Close();
} }
else
{
string httpCmd, tmpLine;
List<string> requestLines = new List<string>();
requestLines.Clear();
while (!String.IsNullOrEmpty(tmpLine = args.ClientStreamReader.ReadLine()))
{
requestLines.Add(tmpLine);
}
httpCmd = requestLines.Count() > 0 ? requestLines[0] : null;
TcpClient Client = args.Client;
HandleHttpSessionRequest(Client, httpCmd, args.ProxyRequest.ConnectionGroupName, args.ClientStream, args.tunnelHostName, requestLines, args.ClientStreamReader, args.securehost);
}
} }
private static List<Tuple<String, String>> ProcessResponse(HttpWebResponse Response) private static List<Tuple<String, String>> ProcessResponse(HttpWebResponse Response)
......
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