Branch: Tag:

1999-10-04

1999-10-04 18:53:22 by Marcus Comstedt <marcus@mc.pp.se>

URL:s now grouped per port object.

Rev: server/base_server/roxen.pike:1.328
Rev: server/protocols/http.pike:1.157

1:   /* -  * $Id: roxen.pike,v 1.327 1999/10/04 15:11:55 per Exp $ +  * $Id: roxen.pike,v 1.328 1999/10/04 18:53:21 marcus Exp $    *    * The Roxen Challenger main program.    *
7:    */      // ABS and suicide systems contributed freely by Francesco Chemolli - constant cvs_version="$Id: roxen.pike,v 1.327 1999/10/04 15:11:55 per Exp $"; + constant cvs_version="$Id: roxen.pike,v 1.328 1999/10/04 18:53:21 marcus Exp $";      object backend_thread;   object argcache;
614: Inside #if 1
   int refs;    string ip;    program requesthandler; +  array(string) sorted_urls = ({}); +  mapping(string:mapping) urls = ([]);    -  void ref() +  void ref(string name, mapping data)    { -  +  if(urls[name]) +  return;    refs++; -  +  urls[name] = data; +  sorted_urls = Array.sort_array(indices(urls), lambda(string a, string b) { +  return sizeof(a)<sizeof(b); +  });    }    -  void unref() +  void unref(string name)    { -  +  if(!urls[name]) +  return; +  m_delete(urls, name); +  sorted_urls -= ({name});    if( !--refs )    destruct( ); // Close the port.    }
632: Inside #if 1
   if( !q )    ;// .. errno stuff here ..    else -  requesthandler( q ); +  requesthandler( q, this_object() );    }    -  +  object find_configuration_for_url( string url, RequestID id ) +  { +  werror("find configuration for '"+url+"'\n"); +  foreach( sorted_urls, string in ) +  { +  if( glob( in+"*", url ) ) +  { +  if( urls[in]->path ) +  id->not_query = id->not_query[strlen(urls[in]->path)..]; +  return urls[ in ]->conf; +  } +  } +  // Ouch. +  return values( urls )[0]->conf; +  } +     void create( int pn, string i )    {    if( !requesthandler )
685: Inside #if 1
  {    if( urls[ url ] && urls[ url ]->port )    { -  urls[ url ]->port->unref(); +  urls[ url ]->port->unref(url);    m_delete( urls, url );    sort_urls();    }
729: Inside #if 1
   urls[ url ]->conf->name + "!\n" );    return 0;    } -  urls[ url ]->port->ref(); +  urls[ url ]->port->ref(url, urls[url]);    return 1;    }   
755: Inside #if 1
   sorted_urls += ({ url });    if( m[ required_host ] && m[ required_host ][ port ] )    { -  m[ required_host ][ port ]->ref(); +  m[ required_host ][ port ]->ref(url, urls[url]);    urls[ url ]->port = prot;    sort_urls();    return 1; /* No need to open a new port */
773: Inside #if 1
   return 0;    }    urls[ url ]->port = m[ required_host ][ port ]; -  m[ required_host ][ port ]->ref(); +  m[ required_host ][ port ]->ref(url, urls[url]);    sort_urls();    return 1;   }       - object find_configuration_for_url( string url, RequestID id ) - { -  werror("find configuration for '"+url+"'\n"); -  foreach( sorted_urls, string in ) -  { -  if( glob( in+"*", url ) ) -  { -  if( urls[in]->path ) -  id->not_query = id->not_query[strlen(urls[in]->path)..]; -  return urls[ in ]->conf; -  } -  } -  // Ouch. -  return values( urls )[0]->conf; - } -  +    #endif      object find_configuration( string name )