Roxen.git / server / plugins / protocols / prot_https.pike

version» Context lines:

Roxen.git/server/plugins/protocols/prot_https.pike:1:   // This is a ChiliMoon protocol module.   // Copyright © 2001, Roxen IS.    - // $Id: prot_https.pike,v 2.8 2003/01/23 16:21:02 mani Exp $ + // $Id: prot_https.pike,v 2.9 2004/04/03 21:55:18 mani Exp $      // --- Debug defines ---      #ifdef SSL3_DEBUG   # define SSL3_WERR(X) werror("SSL3: "+X+"\n")   #else   # define SSL3_WERR(X)   #endif      inherit SSLProtocol;
Roxen.git/server/plugins/protocols/prot_https.pike:24:   {    string in = "";    string out;    string default_prefix;    int port;    Stdio.File f;       void die()    {    SSL3_WERR(sprintf("fallback_redirect_request::die()")); +  f->set_blocking();    f->close(); -  destruct(f); -  destruct(this_object()); +     }    -  void write_callback(object id) +  void write_callback()    {    SSL3_WERR(sprintf("fallback_redirect_request::write_callback()")); -  int written = id->write(out); +  int written = f->write(out);    if (written <= 0)    die(); -  +  else {    out = out[written..];    if (!strlen(out))    die();    } -  +  }    -  void read_callback(object id, string s) +  void read_callback(mixed ignored, string s)    { -  SSL3_WERR(sprintf("fallback_redirect_request::read_callback(X, \"%s\")\n", s)); +  SSL3_WERR(sprintf("fallback_redirect_request::read_callback(X, %O)\n", s));    in += s;    string name;    string prefix;       if (has_value(in, "\r\n\r\n"))    {    // werror("request = '%s'\n", in);    array(string) lines = in / "\r\n";    array(string) req = replace(lines[0], "\t", " ") / " ";    if (sizeof(req) < 2)
Roxen.git/server/plugins/protocols/prot_https.pike:99:    }    }    out = sprintf("HTTP/1.0 301 Redirect to secure server\r\n"    "Location: %s%s\r\n\r\n", prefix, name);    }    f->set_read_callback(0);    f->set_write_callback(write_callback);    }    }    -  void create(object socket, string s, string l, int p) +  void create(Stdio.File socket, string s, string l, int p)    { -  SSL3_WERR(sprintf("fallback_redirect_request(X, \"%s\", \"%s\", %d)", s, l||"CONFIG PORT", p)); +  SSL3_WERR(sprintf("fallback_redirect_request(X, %O, %O, %O)", s, l||"CONFIG PORT", p));    f = socket;    default_prefix = l;    port = p;    f->set_nonblocking(read_callback, 0, die); -  f->set_id(f); +     read_callback(f, s);    } -  +  +  string _sprintf(int t) { +  return t=='O' && sprintf("fallback_redirect_request(%O)", f);    } -  + }      class http_fallback   { -  object my_fd; +  SSL.sslfile my_fd;       void ssl_alert_callback(object alert, object|int n, string data)    { -  SSL3_WERR(sprintf("http_fallback(X, %O, \"%s\")", n, data)); +  SSL3_WERR(sprintf("http_fallback(X, %O, %O)", n, data));    // trace(1); -  if ( (my_fd->current_write_state->seq_num == 0) +  if ( (my_fd->query_connection()->current_write_state->seq_num == 0)    && has_value(lower_case(data), "http"))    { -  object raw_fd = my_fd->socket; -  my_fd->socket = 0; +  Stdio.File raw_fd = my_fd->shutdown();       /* Redirect to a https-url */ -  // my_fd->set_close_callback(0); -  // my_fd->leave_me_alone = 1; +     fallback_redirect_request(raw_fd, data,    my_fd->config &&    my_fd->config->query("MyWorldLocation"),    port); -  destruct(my_fd); -  destruct(this_object()); +     }    }    -  void ssl_accept_callback(object id) +  void ssl_accept_callback(mixed ignored)    {    SSL3_WERR(sprintf("ssl_accept_callback(X)")); -  id->set_alert_callback(0); /* Forget about http_fallback */ +  my_fd->set_alert_callback(0); /* Forget about http_fallback */ +  my_fd->set_accept_callback(0);    my_fd = 0; /* Not needed any more */    }    -  void create(object fd) +  void create(SSL.sslfile fd)    {    my_fd = fd;    fd->set_alert_callback(ssl_alert_callback);    fd->set_accept_callback(ssl_accept_callback);    } -  +  +  string _sprintf(int t) { +  return t=='O' && sprintf("http_fallback(%O)", my_fd);    } -  + }    - object accept() + SSL.sslfile accept()   { -  object q = ::accept(); +  SSL.sslfile q = ::accept();       if (q) {    http_fallback(q);    }    return q;   }      int set_cookie, set_cookie_only_once;   void fix_cvars( Variable.Variable a )   {