public HttpConnection(ILogger logger, Socket sock, EndPointListener epl, bool secure, X509Certificate cert) { _logger = logger; this.sock = sock; this.epl = epl; this.secure = secure; this.cert = cert; this.SetSocketTimeout(sock); if (secure == false) { stream = new NetworkStream(sock, false); } else { //ssl_stream = epl.Listener.CreateSslStream(new NetworkStream(sock, false), false, (t, c, ch, e) => //{ // if (c == null) // return true; // var c2 = c as X509Certificate2; // if (c2 == null) // c2 = new X509Certificate2(c.GetRawCertData()); // client_cert = c2; // client_cert_errors = new int[] { (int)e }; // return true; //}); //stream = ssl_stream.AuthenticatedStream; ssl_stream = new SslStream(new NetworkStream(sock, false), false); ssl_stream.AuthenticateAsServer(cert); stream = ssl_stream; } timer = new ResumableTimer(OnTimeout); Init(); }
static EndPointListener GetEPListener(ILogger logger, string host, int port, HttpListener listener, bool secure) { IPAddress addr; if (host == "*" || host == "+") { addr = GetIpAnyAddress(); } else if (IPAddress.TryParse(host, out addr) == false) { try { IPHostEntry iphost = Dns.GetHostByName(host); if (iphost != null) { addr = iphost.AddressList[0]; } else { addr = GetIpAnyAddress(); } } catch { addr = GetIpAnyAddress(); } } Hashtable p = null; // Dictionary<int, EndPointListener> if (ip_to_endpoints.ContainsKey(addr)) { p = (Hashtable)ip_to_endpoints[addr]; } else { p = new Hashtable(); ip_to_endpoints[addr] = p; } EndPointListener epl = null; if (p.ContainsKey(port)) { epl = (EndPointListener)p[port]; } else { epl = new EndPointListener(listener, addr, port, secure, listener.Certificate, logger); p[port] = epl; } return(epl); }
private HttpConnection(ILogger logger, ISocket sock, EndPointListener epl, bool secure, ICertificate cert, ICryptoProvider cryptoProvider, IStreamFactory streamFactory, IMemoryStreamFactory memoryStreamFactory, ITextEncoding textEncoding) { _logger = logger; this.sock = sock; this.epl = epl; this.secure = secure; this.cert = cert; _cryptoProvider = cryptoProvider; _memoryStreamFactory = memoryStreamFactory; _textEncoding = textEncoding; _streamFactory = streamFactory; }
private HttpConnection(ILogger logger, Socket socket, EndPointListener epl, bool secure, X509Certificate cert, ICryptoProvider cryptoProvider, IMemoryStreamFactory memoryStreamFactory, ITextEncoding textEncoding, IFileSystem fileSystem, IEnvironmentInfo environment) { _logger = logger; this._socket = socket; this._epl = epl; this.secure = secure; this.cert = cert; _cryptoProvider = cryptoProvider; _memoryStreamFactory = memoryStreamFactory; _textEncoding = textEncoding; _fileSystem = fileSystem; _environment = environment; }
public static void RemoveEndPoint(EndPointListener epl, IPEndPoint ep) { lock (ip_to_endpoints) { // Dictionary<int, EndPointListener> p Hashtable p = null; p = (Hashtable)ip_to_endpoints[ep.Address]; p.Remove(ep.Port); if (p.Count == 0) { ip_to_endpoints.Remove(ep.Address); } epl.Close(); } }
static async Task <EndPointListener> GetEPListener(ILogger logger, string host, int port, HttpListener listener, bool secure) { var networkManager = listener.NetworkManager; IpAddressInfo addr; if (host == "*" || host == "+") { addr = GetIpAnyAddress(listener); } else if (networkManager.TryParseIpAddress(host, out addr) == false) { try { var all = (await networkManager.GetHostAddressesAsync(host).ConfigureAwait(false)); addr = (all.Length == 0 ? null : all[0]) ?? GetIpAnyAddress(listener); } catch { addr = GetIpAnyAddress(listener); } } Dictionary <int, EndPointListener> p = null; // Dictionary<int, EndPointListener> if (!ip_to_endpoints.TryGetValue(addr.Address, out p)) { p = new Dictionary <int, EndPointListener>(); ip_to_endpoints[addr.Address] = p; } EndPointListener epl = null; if (p.ContainsKey(port)) { epl = (EndPointListener)p[port]; } else { epl = new EndPointListener(listener, addr, port, secure, listener.Certificate, logger, listener.CryptoProvider, listener.StreamFactory, listener.SocketFactory, listener.MemoryStreamFactory, listener.TextEncoding, listener.FileSystem, listener.EnvironmentInfo); p[port] = epl; } return(epl); }
public static void RemoveEndPoint(EndPointListener epl, IpEndPointInfo ep) { lock (ip_to_endpoints) { // Dictionary<int, EndPointListener> p Dictionary <int, EndPointListener> p; if (ip_to_endpoints.TryGetValue(ep.IpAddress.Address, out p)) { p.Remove(ep.Port); if (p.Count == 0) { ip_to_endpoints.Remove(ep.IpAddress.Address); } } epl.Close(); } }
static void RemovePrefixInternal(ILogger logger, string prefix, HttpListener listener) { ListenerPrefix lp = new ListenerPrefix(prefix); if (lp.Path.IndexOf('%') != -1) { return; } if (lp.Path.IndexOf("//", StringComparison.Ordinal) != -1) { return; } EndPointListener epl = GetEPListener(logger, lp.Host, lp.Port, listener, lp.Secure).Result; epl.RemovePrefix(lp, listener); }
static void AddPrefixInternal(ILogger logger, string p, HttpListener listener) { ListenerPrefix lp = new ListenerPrefix(p); if (lp.Path.IndexOf('%') != -1) { throw new HttpListenerException(400, "Invalid path."); } if (lp.Path.IndexOf("//", StringComparison.Ordinal) != -1) // TODO: Code? { throw new HttpListenerException(400, "Invalid path."); } // listens on all the interfaces if host name cannot be parsed by IPAddress. EndPointListener epl = GetEPListener(logger, lp.Host, lp.Port, listener, lp.Secure).Result; epl.AddPrefix(lp, listener); }
public HttpConnection(ILogger logger, Socket socket, EndPointListener epl, bool secure, X509Certificate cert, ICryptoProvider cryptoProvider, IMemoryStreamFactory memoryStreamFactory, ITextEncoding textEncoding, IFileSystem fileSystem, IEnvironmentInfo environment) { _logger = logger; this._socket = socket; this._epl = epl; this.secure = secure; this.cert = cert; _cryptoProvider = cryptoProvider; _memoryStreamFactory = memoryStreamFactory; _textEncoding = textEncoding; _fileSystem = fileSystem; _environment = environment; if (secure == false) { _stream = new SocketStream(_socket, false); } else { ssl_stream = new SslStream(new NetworkStream(_socket, false), false, (t, c, ch, e) => { if (c == null) { return(true); } //var c2 = c as X509Certificate2; //if (c2 == null) //{ // c2 = new X509Certificate2(c.GetRawCertData()); //} //_clientCert = c2; //_clientCertErrors = new int[] { (int)e }; return(true); }); _stream = ssl_stream; ssl_stream.AuthenticateAsServer(cert, false, (SslProtocols)ServicePointManager.SecurityProtocol, false); } Init(); }
public static async Task <HttpConnection> Create(ILogger logger, IAcceptSocket sock, EndPointListener epl, bool secure, ICertificate cert, ICryptoProvider cryptoProvider, IStreamFactory streamFactory, IMemoryStreamFactory memoryStreamFactory, ITextEncoding textEncoding, IFileSystem fileSystem, IEnvironmentInfo environment) { var connection = new HttpConnection(logger, sock, epl, secure, cert, cryptoProvider, streamFactory, memoryStreamFactory, textEncoding, fileSystem, environment); await connection.InitStream().ConfigureAwait(false); return(connection); }