Commit db55466b authored by justcoding121's avatar justcoding121 Committed by justcoding121

Support pipelining

Wait of client request right after delegating server response to async
thread
parent 86f41d20
...@@ -38,7 +38,7 @@ namespace Titanium.Web.Proxy ...@@ -38,7 +38,7 @@ namespace Titanium.Web.Proxy
clientStream = Client.GetStream(); clientStream = Client.GetStream();
clientStreamReader = new CustomBinaryReader(clientStream, Encoding.ASCII); clientStreamReader = new CustomBinaryReader(clientStream, Encoding.ASCII);
string securehost = null; string securehost = null;
...@@ -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;
} }
...@@ -423,7 +438,7 @@ namespace Titanium.Web.Proxy ...@@ -423,7 +438,7 @@ namespace Titanium.Web.Proxy
WebRequest.IfModifiedSince = d; WebRequest.IfModifiedSince = d;
break; break;
case "proxy-connection": case "proxy-connection":
if (header[1].ToLower() == "keep-alive") if (header[1].ToLower() == "keep-alive")
WebRequest.KeepAlive = true; WebRequest.KeepAlive = true;
break; break;
case "range": case "range":
...@@ -452,7 +467,7 @@ namespace Titanium.Web.Proxy ...@@ -452,7 +467,7 @@ namespace Titanium.Web.Proxy
default: default:
if (header.Length >= 2) if (header.Length >= 2)
WebRequest.Headers.Add(header[0], header[1]); WebRequest.Headers.Add(header[0], header[1]);
break; break;
} }
...@@ -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