You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by pi...@apache.org on 2001/05/10 08:24:26 UTC

cvs commit: jakarta-tomcat-4.0/connectors/lib wa_main.c

pier        01/05/09 23:24:26

  Modified:    connectors/lib wa_main.c
  Log:
  Moved configuration functions to wa_config
  
  Revision  Changes    Path
  1.2       +86 -72    jakarta-tomcat-4.0/connectors/lib/wa_main.c
  
  Index: wa_main.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-4.0/connectors/lib/wa_main.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- wa_main.c	2001/04/25 17:05:52	1.1
  +++ wa_main.c	2001/05/10 06:24:24	1.2
  @@ -55,102 +55,116 @@
    *                                                                           *
    * ========================================================================= */
   
  -/* @version $Id: wa_main.c,v 1.1 2001/04/25 17:05:52 pier Exp $ */
  +/* @version $Id: wa_main.c,v 1.2 2001/05/10 06:24:24 pier Exp $ */
   #include <wa.h>
   
  -/* The webserver specified in init. */
  -wa_webserver *WA_WebServer=NULL;
  -
   /* The current APR memory pool. */
  -static apr_pool_t *WA_Pool=NULL;
  +apr_pool_t *wa_pool=NULL;
  +/* The list of all deployed applications. */
  +wa_chain *wa_configuration=NULL;
   
   /* Initialize the WebApp Library. */
  -const char *WA_Init(wa_webserver *w) {
  -	/* Check the main APR pool. */
  -    if (WA_Pool==NULL) {
  +const char *wa_init(void) {
  +    /* Check the main APR pool. */
  +    if (wa_pool==NULL) {
           if (apr_initialize()!=APR_SUCCESS)
               return("Cannot initialize APR");
  -        if (apr_pool_create(&WA_Pool,NULL)!=APR_SUCCESS)
  +        if (apr_pool_create(&wa_pool,NULL)!=APR_SUCCESS)
               return("Cannot create WebApp Library memory pool");
  -        if (WA_Pool==NULL)
  +        if (wa_pool==NULL)
               return("Invalid WebApp Library memory pool created");
       }
  -
  -	/* Assign the current webserver */
  -	if (WA_WebServer==NULL) {
  -	    WA_WebServer=w;
  -	    if (WA_WebServer==NULL) return("Invalid WebServer member specified");
  -	}
   
  +    wa_debug(WA_MARK,"WebApp Library initialized (PID=%d)",getpid());
       return(NULL);
   }
   
   /* Clean up the WebApp Library. */
  -const char *WA_Destroy(void) {
  -    if (WA_Pool==NULL) return("WebApp Library not initialized");
  -    apr_pool_destroy(WA_Pool);
  -    WA_Pool=NULL;
  -    WA_WebServer=NULL;
  +const char *wa_destroy(void) {
  +    if (wa_pool==NULL) return("WebApp Library not initialized");
  +
  +    /* Clean up this library and APR */
  +    apr_pool_destroy(wa_pool);
  +    wa_pool=NULL;
  +    wa_configuration=NULL;
       apr_terminate();
  +
  +    wa_debug(WA_MARK,"WebApp Library destroyed (PID=%d)",getpid());
       return(NULL);
   }
   
  -/* Allocate and setup a connection */
  -const char *WA_Connect(wa_connection **c, const char *p, const char *a) {
  -    wa_connection *conn=NULL;
  +/* Deploy a web-application. */
  +const char *wa_deploy(wa_application *a, wa_virtualhost *h, wa_connection *c) {
  +    wa_chain *elem=NULL;
  +    //const char *ret=NULL;
   
       /* Check parameters */
  -    if (c==NULL) return("Invalid storage location specified");
  +    if (a==NULL) return("Invalid application for deployment");
  +    if (h==NULL) return("Invalid virtual host for deployment");
  +    if (c==NULL) return("Invalid connection for deployment");
  +
  +    /* Check if another application was deployed under the same URI path in
  +       the same virtual host */
  +    elem=h->apps;
  +    while (elem!=NULL) {
  +        wa_application *curr=(wa_application *)elem->curr;
  +        if (strcasecmp(curr->rpth,a->rpth)==0)
  +            return("Duplicate application specified for the same URL path");
  +        elem=elem->next;
  +    }
   
  -    /* Allocate some memory */
  -    conn=(wa_connection *)apr_palloc(WA_Pool,sizeof(wa_connection));
  -    if (conn==NULL) return("Cannot allocate memory");
  -    conn->pool=WA_Pool;
  -
  -    /* Retrieve the provider and set up the conection */
  -    conn->conf=NULL;
  -    // if ((conn->prov=wa_provider_get(p))==NULL)
  -    //  return("Invalid provider name specified");
  -    // if ((msg=conn->prov->configure(conn,a))!=NULL) return(msg);
  +    /* Deploy */
  +    a->host=h;
  +    a->conn=c;
  +
  +    /* Give the opportunity to the provider to be notified of the deployment of
  +       this application */
  +    //ret=c->prov->deploy(a);
  +    //if (ret!=NULL) return(ret);
  +
  +    /* Append this application to the list of deployed applications in the
  +       virtual host */
  +    elem=(wa_chain *)apr_palloc(wa_pool,sizeof(wa_chain));
  +    elem->curr=a;
  +    elem->next=h->apps;
  +    h->apps=elem;
  +
  +    /* Check if this virtual host is already present in the configuration */
  +    if (wa_configuration!=NULL) {
  +        elem=wa_configuration;
  +        while (elem!=NULL) {
  +            /* Compare the pointers to structures, we *MIGHT* allow two
  +               virtual hosts to have the same name and port. The selection
  +               of the host is done at the web server level */
  +            if (elem->curr==h) return(NULL);
  +            elem=elem->next;
  +        }
  +    }
   
  -    /* Done! :) */
  -    *c=conn;
  +    /* We didn't find this host in our list, we need to add it to the conf. */
  +    elem=(wa_chain *)apr_palloc(wa_pool,sizeof(wa_chain));
  +    elem->curr=h;
  +    elem->next=wa_configuration;
  +    wa_configuration=elem;
  +
  +    /* Done */
  +    wa_debug(WA_MARK,"Application %s deployed for http://%s:%d%s (Conn: %s)",
  +             a->name,h->name,h->port,a->rpth,c->name);
       return(NULL);
   }
  -
  -/* Allocate, set up and deploy an application. */
  -const char *WA_Deploy(wa_application **a, wa_connection *c, const char *n,
  -                      const char *p) {
  -    wa_application *appl=NULL;
  -    char *buf=NULL;
  -    int l=0;
   
  -    /* Check parameters */
  -    if (a==NULL) return("Invalid storage location specified");
  -    if (c==NULL) return("Invalid connection specified");
  -    if (n==NULL) return("Invalid application name");
  -    if (p==NULL) return("Invalid application path");
  -
  -    /* Allocate some memory */
  -    appl=(wa_application *)apr_palloc(WA_Pool,sizeof(wa_application));
  -    if (appl==NULL) return("Cannot allocate memory");
  -    appl->pool=WA_Pool;
  -
  -    /* Set up application structure */
  -    appl->conn=c;
  -    appl->name=apr_pstrdup(WA_Pool,n);
  -    buf=apr_pstrdup(appl->pool,p);
  -    l=strlen(buf)-1;
  -    if (buf[l]=='/') buf[l]='\0';
  -    if (buf[0]=='/') appl->rpth=apr_pstrcat(WA_Pool,buf,"/");
  -    else appl->rpth=apr_pstrcat(WA_Pool,"/",buf,"/");
  -    appl->lpth=NULL;
  -
  -    /* Tell the connector provider we're deploying an application */
  -    appl->conf=NULL;
  -    // if ((msg=appl->conn->prov->deploy(a))!=NULL) return(msg);
  -
  -    /* Done! :) */
  -    *a=appl;
  -    return(NULL);
  +/* Dump some debugging information. */
  +void wa_debug(const char *f, const int l, const char *fmt, ...) {
  +    apr_time_t at;
  +    char st[128];
  +    va_list ap;
  +
  +    at=apr_time_now();
  +    apr_ctime(st, at);
  +    fprintf(stderr,"[%s] (%s:%d) ",st,f,l);
  +    va_start(ap,fmt);
  +    vfprintf(stderr,fmt,ap);
  +    va_end(ap);
  +    fprintf(stderr,"\n");
  +    fflush(stderr);
   }