async public static Task <ProxySslRequest> For(ProxyRequest wrapperRequest, IRequestInspector wrapperRequestInspector) { if (_certProvider == null) { _certProvider = new CertificateProvider(MakeCertPath); _certProvider.EnsureRootCertificate(); } var sslRequest = new ProxySslRequest { WrapperRequest = wrapperRequest, ClientPid = wrapperRequest.ClientPid, ClientSocket = wrapperRequest.ClientSocket, ClientStream = wrapperRequest.ClientStream }; if (wrapperRequestInspector != null) { wrapperRequestInspector.OnTransferredToSecureRequest(sslRequest); } var hostName = sslRequest.GetHostName(); sslRequest._hostCert = _certProvider.GetCertificateForHost(hostName); var clientSsslStream = new SslStream(wrapperRequest.ClientStream, true, RemoteCertificateValidator, sslRequest.LocalCertificateSelector); await clientSsslStream.AuthenticateAsServerAsync(sslRequest._hostCert); sslRequest.SecureClientStream = clientSsslStream; sslRequest.ReadPrologue(); return(sslRequest); }
async public static Task<ProxySslRequest> For(ProxyRequest wrapperRequest, IRequestInspector wrapperRequestInspector) { if (_certProvider == null) { _certProvider = new CertificateProvider(MakeCertPath); _certProvider.EnsureRootCertificate(); } var sslRequest = new ProxySslRequest { WrapperRequest = wrapperRequest, ClientPid = wrapperRequest.ClientPid, ClientSocket = wrapperRequest.ClientSocket, ClientStream = wrapperRequest.ClientStream }; if (wrapperRequestInspector != null) wrapperRequestInspector.OnTransferredToSecureRequest(sslRequest); var hostName = sslRequest.GetHostName(); sslRequest._hostCert = _certProvider.GetCertificateForHost(hostName); var clientSsslStream = new SslStream(wrapperRequest.ClientStream, true, RemoteCertificateValidator, sslRequest.LocalCertificateSelector); await clientSsslStream.AuthenticateAsServerAsync(sslRequest._hostCert); sslRequest.SecureClientStream = clientSsslStream; sslRequest.ReadPrologue(); return sslRequest; }
public HarRequestInspector(ProxyRequest request, Log log) { _request = request; _log = log; _entry = new Entry(); _log.Entries.Add(_entry); _entry.StartedDateTime = DateTime.Now; _entry.Request = new RequestInfo(); _start = DateTime.Now; }
public static ProxyRequest For(Socket clientSocket, IProxyInspector proxyInspector = null) { var request = new ProxyRequest { ClientSocket = clientSocket, ClientStream = new NetworkStream(clientSocket) }; if (proxyInspector != null) proxyInspector.OnRequestReceived(request); request.ResolvePid(); request.ReadPrologue(); return request; }
public static ProxyRequest For(Socket clientSocket, IProxyInspector proxyInspector = null) { var request = new ProxyRequest { ClientSocket = clientSocket, ClientStream = new NetworkStream(clientSocket) }; if (proxyInspector != null) { proxyInspector.OnRequestReceived(request); } request.ResolvePid(); request.ReadPrologue(); return(request); }
async private void HandleRequest(Socket clientSocket) { if (clientSocket == null) { throw new ArgumentNullException("clientSocket"); } try { var socketRequests = 0; while (clientSocket.Connected) { socketRequests++; var proxyRequest = ProxyRequest.For(clientSocket, _proxyInspector); if (socketRequests > 1) { Debug.WriteLine("Client Connection Reused #" + socketRequests); } await proxyRequest.Process(); if (!proxyRequest.Response.Prologue.Headers.ContainsIgnoreCase("Connection", "Keep-Alive")) { Debug.WriteLine("Client Connection Closed"); break; } } } catch (Exception e) { Debug.WriteLine("Socket Error: " + e.Message); } finally { clientSocket.Close(); } }
void IProxyInspector.OnRequestReceived(ProxyRequest request) { var requestInspector = new HarRequestInspector(request, _log); request.RegisterInspector(requestInspector); }