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:9:      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.    - //! method void create(function(Request:void) callback) - //! method void create(function(Request:void) callback,int portno,void|string interface, void|string key, void|string certificate) + //! 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>. + //! @param _portno + //! the port number to bind to, defaults to 443 + //! @param _interface + //! 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> + //! @param certificate + //! 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=80; // default HTTP port +  if (!portno) portno=443; // default HTTPS port       callback=_callback;    interface=_interface;       port=my_ssl_port();    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()));   }    - //! method void close() +    //! Closes the HTTP port. -  +    void close()   {    destruct(port);    port=0;   }      void destroy() { close(); }      // the port accept callback   
pike.git/lib/modules/Protocols.pmod/HTTP.pmod/Server.pmod/SSLPort.pike:106:   Version ::= INTEGER      */      void set_default_keycert()   {    set_key(my_key);    set_certificate(my_certificate);   }    - void set_key(string key) + void set_key(string skey)   {   #if 0 -  array key = SSL.asn1.ber_decode(key)->get_asn1()[1]; +  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(key); +  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;    }      }