public static HttpResponseObject ReadResponse(Stream stream) { byte[] buffer = Read(stream); if (buffer == null) { return(null); } HttpResponseHeader header = new HttpResponseHeader(Encoding.UTF8.GetString(buffer)); HttpContent content = new HttpContent(); if (0 < header._contentSize) { content.Set(ReadContent(stream, header._contentSize)); } else if (header._isChunked) { content.Set(ReadChunked(stream)); } HttpResponseObject response = new HttpResponseObject(header, content); return(response); }
public static void Write(HttpObject http, Stream stream) { byte[] bytes = null; stream.WriteTimeout = SslTcpServer._write_timeout; if (http.GetType() == typeof(HttpRequestObject)) { HttpRequestObject request = (HttpRequestObject)http; bytes = Encoding.UTF8.GetBytes(request._header._source); } else if (http.GetType() == typeof(HttpResponseObject)) { HttpResponseObject response = (HttpResponseObject)http; bytes = Encoding.UTF8.GetBytes(response._header._source); } Write(stream, bytes); if (0 < http._content._length) { Write(stream, http._content.Get()); } }
static public void Proxy(TcpClient serverSocket, IHttpEventListener listner) { Stream server = serverSocket.GetStream(); Stream client = null; TcpClient clinetSocket = null; bool bConnect = false; string host = string.Empty; bool bSSL = false; while (true) { //----------------------------------------- // Request. // Clinet -> Proxy //----------------------------------------- HttpRequestObject request = null; try { request = HttpStream.ReadRequest(server); if (request == null) { break; } //----------------------------------------- // SSL Handshake. //----------------------------------------- if (SslHandshake.IsSslConnection(request)) { SslStreamSet sslset = SslHandshake.Handshake(clinetSocket, request, server); server = sslset._serverStream; client = sslset._clientStream; bConnect = true; bSSL = true; continue; } //----------------------------------------- // HTTP Conection. //----------------------------------------- else if (bSSL == false && (bConnect == false || host != request._header._host)) { if (clinetSocket != null) { client.Close(); clinetSocket.Close(); } clinetSocket = new TcpClient(); clinetSocket.Connect(request._header._host, request._header._port); client = clinetSocket.GetStream(); bConnect = true; } //----------------------------------------- // save host. //----------------------------------------- host = request._header._host; //----------------------------------------- // Observer. //----------------------------------------- if (listner != null) { request = listner.OnHttpRequestClient(request, server, client); } }catch (Exception ex) { Close(serverSocket, clinetSocket, server, client); throw ex; } //----------------------------------------- // Modify Request. // Proxy -> Server //----------------------------------------- try { HttpHeader.ModifyProxyRequest(request._header); }catch (Exception ex) { Close(serverSocket, clinetSocket, server, client); throw ex; } //----------------------------------------- // Request. // Proxy -> Server //----------------------------------------- try { HttpStream.Write(request, client); //----------------------------------------- // Observer. //----------------------------------------- if (listner != null) { request = listner.OnHttpRequestServer(request, server, client); } } catch (Exception ex) { Close(serverSocket, clinetSocket, server, client); throw ex; } //----------------------------------------- // Response. // Proxy <- Server //----------------------------------------- HttpResponseObject response = null; try { response = HttpStream.ReadResponse(client); if (response == null) { break; } //----------------------------------------- // Observer. //----------------------------------------- if (listner != null) { response = listner.OnHttpResponseClient(response, server, client); } } catch (Exception ex) { Close(serverSocket, clinetSocket, server, client); throw ex; } //----------------------------------------- // Response. // Client <- Proxy //----------------------------------------- try { HttpStream.Write(response, server); //----------------------------------------- // Observer. //----------------------------------------- if (listner != null) { response = listner.OnHttpResponseServer(response, server, client); } } catch (Exception ex) { Close(serverSocket, clinetSocket, server, client); throw ex; } if (request._header._isKeepAllive == false || response._header._isKeepAllive == false) { break; } } Close(serverSocket, clinetSocket, server, client); }
public HttpResponseObject OnHttpResponseServer(HttpResponseObject response, Stream serverStream, Stream clientStream) { _logger.OutputLog("Response Clinet <- Proxy"); _logger.OutputLog(response.ToString()); return(response); }