pike.git / lib / modules / Protocols.pmod / HTTP.pmod / Server.pmod / SSLPort.pike

version» Context lines:

pike.git/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/SSLPort.pike:1:   #pike __REAL_VERSION__      import ".";    - object port; + MySSLPort port;   int portno;   string|int(0..0) interface;   function(Request:void) callback;      program request_program=Request;    - //! module Protocols - //! submodule HTTP - //! submodule Server - //! class SSLPort - //! The simplest SSL server possible. Binds a port and calls - //! a callback with <ref to=Request>Server.Request</ref> objects. + //! The simplest SSL server possible. Binds a port and calls + //! a callback with @[Request] objects.      //! Create a HTTPS (HTTP over SSL) server.   //!   //! @param _callback - //! the function run when a request is received. - //! takes one argument of type <ref to=Request>Server.Request</ref>. + //! The function run when a request is received. + //! takes one argument of type @[Request].   //! @param _portno - //! the port number to bind to, defaults to 443 + //! The port number to bind to, defaults to 443.   //! @param _interface - //! the interface address to bind to + //! The interface address to bind to.   //! @param key - //! an optional SSL secret key, provided in binary format, such as that created by <ref - //! to=Standards.PKCS.RSA.private_key>Standards.PKCS.RSA.private_key()</ref> + //! An optional SSL secret key, provided in binary format, such + //! as that created by @[Standards.PKCS.RSA.private_key()].   //! @param certificate - //! an optional SSL certificate, provided in binary format + //! An optional SSL certificate, provided in binary format.   void create(function(Request:void) _callback,    void|int _portno,    void|string _interface, void|string key, void|string certificate)   {    portno=_portno;    if (!portno) portno=443; // default HTTPS port       callback=_callback;    interface=_interface;    -  port=my_ssl_port(); +  port=MySSLPort();    port->set_default_keycert();    if(key)    port->set_key(key);    if(certificate)    port->set_certificate(certificate);       if (!port->bind(portno,new_connection,interface))    error("HTTP.Server.SSLPort: failed to bind port %s%d: %s\n",    interface?interface+":":"",    portno,strerror(port->errno()));   }    - //! Closes the HTTP port. + //! Closes the HTTP port.   void close()   {    destruct(port);    port=0;   }      void destroy() { close(); }    - // the port accept callback -  + //! The port accept callback   static void new_connection()   {    Stdio.File fd=port->accept();    Request r=request_program();    r->attach_fd(fd,this_object(),callback);   }    - class my_ssl_port + //! + class MySSLPort   {   #pike __REAL_VERSION__      import Stdio;      inherit SSL.sslport;      string my_certificate = MIME.decode_base64(    "MIIBxDCCAW4CAQAwDQYJKoZIhvcNAQEEBQAwbTELMAkGA1UEBhMCREUxEzARBgNV\n"    "BAgTClRodWVyaW5nZW4xEDAOBgNVBAcTB0lsbWVuYXUxEzARBgNVBAoTClRVIEls\n"
pike.git/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/SSLPort.pike:110:    prime1 INTEGER, -- p    prime2 INTEGER, -- q    exponent1 INTEGER, -- d mod (p-1)    exponent2 INTEGER, -- d mod (q-1)    coefficient INTEGER -- (inverse of q) mod p }      Version ::= INTEGER      */    + //!   void set_default_keycert()   {    set_key(my_key);    set_certificate(my_certificate);   }    -  + //!   void set_key(string skey)   {   #if 0    array key = SSL.asn1.ber_decode(skey)->get_asn1()[1];    object n = key[1][1];    object e = key[2][1];    object d = key[3][1];    object p = key[4][1];    object q = key[5][1];       rsa = Crypto.rsa();    rsa->set_public_key(n, e);    rsa->set_private_key(d);   #else /* !0 */    // FIXME: Is this correct?    rsa = Standards.PKCS.RSA.parse_private_key(skey);   #endif /* 0 */       }    -  + //!   void set_certificate(string certificate)   {    certificates = ({ certificate });   }       void create()    {    sslport::create();    random = Crypto.randomness.arcfour_random(    sprintf("%s%4c", "Foo!", time()))->read;    }      }