davidw      02/01/22 13:37:43

  Modified:    .        ChangeLog
               src      TclWeb.h TclWebapache.c channel.c mod_rivet.c
                        mod_rivet.h rivetCore.c
  Log:
  * src/mod_rivet.c, src/channel.c, src/rivetCore.c: Switched to TclWeb
    functions for error, headers.
  
  * src/mod_rivet.h: Moved headers_set and headers_printed out of the
    rivet_server_conf struct and into the TclWebRequest struct.
  
  * src/TclWebapache.c: Moved PrintHeaders, PrintError and SetHeaderType
    from mod_rivet.c.
  
  * src/TclWeb.h: Added ER1, ER2 and DEFAULT_HEADER_TYPE here.
  
  Revision  Changes    Path
  1.25      +11 -0     tcl-rivet/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/ChangeLog,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- ChangeLog 22 Jan 2002 20:58:48 -0000      1.24
  +++ ChangeLog 22 Jan 2002 21:37:42 -0000      1.25
  @@ -1,5 +1,16 @@
   2002-01-22  David N. Welton  <[EMAIL PROTECTED]>
   
  +     * src/mod_rivet.c, src/channel.c, src/rivetCore.c: Switched to
  +     TclWeb functions for error, headers.
  +
  +     * src/mod_rivet.h: Moved headers_set and headers_printed out of
  +     the rivet_server_conf struct and into the TclWebRequest struct.
  +
  +     * src/TclWebapache.c: Moved PrintHeaders, PrintError and
  +     SetHeaderType from mod_rivet.c.
  +
  +     * src/TclWeb.h: Added ER1, ER2 and DEFAULT_HEADER_TYPE here.
  +
        * tests/get.test: Added some tests related to [var *].
   
        * tests/post.test: Added some tests related to [var *].
  
  
  
  1.6       +13 -2     tcl-rivet/src/TclWeb.h
  
  Index: TclWeb.h
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/TclWeb.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TclWeb.h  22 Jan 2002 20:58:48 -0000      1.5
  +++ TclWeb.h  22 Jan 2002 21:37:42 -0000      1.6
  @@ -5,15 +5,21 @@
    *   Common API layer.
    */
   
  -/* $Id: TclWeb.h,v 1.5 2002/01/22 20:58:48 davidw Exp $ */
  +/* $Id: TclWeb.h,v 1.6 2002/01/22 21:37:42 davidw Exp $ */
   
  +/* Error wrappers  */
  +#define ER1 "<hr><p><code><pre>\n"
  +#define ER2 "</pre></code><hr>\n"
  +
  +#define DEFAULT_HEADER_TYPE "text/html"
   #define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
   
   typedef struct TclWebRequest {
       Tcl_Interp *interp;
       request_rec *req;
       ApacheRequest *apachereq;
  -    int headers_printed;
  +    int headers_printed;     /* has the header been printed yet? */
  +    int headers_set;       /* has the header been set yet? */
   } TclWebRequest;
   
   /*
  @@ -42,6 +48,11 @@
   
   int TclWeb_SendHeaders(TclWebRequest *req);
   
  +int TclWeb_SetHeaderType(char *header, TclWebRequest *req);
  +
  +int TclWeb_PrintHeaders(TclWebRequest *req);
  +
  +int TclWeb_PrintError(char *errstr, int htmlflag, TclWebRequest *req);
   
   /*
    
*-----------------------------------------------------------------------------
  
  
  
  1.6       +55 -1     tcl-rivet/src/TclWebapache.c
  
  Index: TclWebapache.c
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/TclWebapache.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TclWebapache.c    22 Jan 2002 20:58:48 -0000      1.5
  +++ TclWebapache.c    22 Jan 2002 21:37:42 -0000      1.6
  @@ -7,7 +7,7 @@
    * operations.
    */
   
  -/* $Id: TclWebapache.c,v 1.5 2002/01/22 20:58:48 davidw Exp $ */
  +/* $Id: TclWebapache.c,v 1.6 2002/01/22 21:37:42 davidw Exp $ */
   
   #include <tcl.h>
   
  @@ -27,6 +27,7 @@
       req->req = r;
       req->apachereq = ApacheRequest_new(r);
       req->headers_printed = 0;
  +    req->headers_set = 0;
       return TCL_OK;
   }
   
  @@ -34,6 +35,59 @@
   TclWeb_SendHeaders(TclWebRequest *req)
   {
       ap_send_http_header(req->req);
  +    return TCL_OK;
  +}
  +
  +/* Set up the content type header */
  +
  +int
  +TclWeb_SetHeaderType(char *header, TclWebRequest *req)
  +{
  +    if(req->headers_set)
  +     return 0;
  +
  +    req->req->content_type = header;
  +    req->headers_set = 1;
  +    return TCL_OK;
  +}
  +
  +/* Printer headers if they haven't been printed yet */
  +int
  +TclWeb_PrintHeaders(TclWebRequest *req)
  +{
  +    if (req->headers_printed)
  +     return TCL_ERROR;
  +
  +    if (req->headers_set == 0)
  +     TclWeb_SetHeaderType(DEFAULT_HEADER_TYPE, req);
  +
  +    ap_send_http_header(req->req);
  +    req->headers_printed = 1;
  +    return TCL_OK;
  +}
  +
  +/* Print nice HTML formatted errors */
  +int
  +TclWeb_PrintError(char *errstr, int htmlflag, TclWebRequest *req)
  +{
  +    TclWeb_SetHeaderType(DEFAULT_HEADER_TYPE, req);
  +    TclWeb_PrintHeaders(req);
  +
  +    if (htmlflag != 1)
  +     ap_rputs(ER1, req->req);
  +
  +    if (errstr != NULL)
  +    {
  +     if (htmlflag != 1)
  +     {
  +         ap_rputs(ap_escape_html(TCLWEBPOOL, errstr), req->req);
  +     } else {
  +         ap_rputs(errstr, req->req);
  +     }
  +    }
  +    if (htmlflag != 1)
  +     ap_rputs(ER2, req->req);
  +
       return TCL_OK;
   }
   
  
  
  
  1.8       +2 -1      tcl-rivet/src/channel.c
  
  Index: channel.c
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/channel.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- channel.c 8 Jan 2002 09:56:00 -0000       1.7
  +++ channel.c 22 Jan 2002 21:37:42 -0000      1.8
  @@ -7,6 +7,7 @@
   
   #include "apache_request.h"
   #include "mod_rivet.h"
  +#include "TclWeb.h"
   
   /* This file describes the mod_rivet Tcl output channel. */
   
  @@ -26,7 +27,7 @@
       rivet_interp_globals *globals =
        Tcl_GetAssocData(rsc->server_interp, "rivet", NULL);
   
  -    Rivet_PrintHeaders(globals->r);
  +    TclWeb_PrintHeaders(globals->req);
       if (*(rsc->content_sent) == 0)
       {
        ap_rwrite(buf, toWrite, globals->r);
  
  
  
  1.25      +10 -72    tcl-rivet/src/mod_rivet.c
  
  Index: mod_rivet.c
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/mod_rivet.c,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- mod_rivet.c       22 Jan 2002 01:27:56 -0000      1.24
  +++ mod_rivet.c       22 Jan 2002 21:37:42 -0000      1.25
  @@ -55,7 +55,7 @@
    * originally written at the National Center for Supercomputing Applications,
    * University of Illinois, Urbana-Champaign.  */
   
  -/* $Id: mod_rivet.c,v 1.24 2002/01/22 01:27:56 davidw Exp $  */
  +/* $Id: mod_rivet.c,v 1.25 2002/01/22 21:37:42 davidw Exp $  */
   
   /* mod_rivet.c by David Welton <[EMAIL PROTECTED]>
    *            and Damon Courtney <[EMAIL PROTECTED]>
  @@ -101,61 +101,6 @@
   static int Rivet_ExecuteAndCheck(Tcl_Interp *interp, Tcl_Obj *outbuf,
                                request_rec *r);
   
  -/* Set up the content type header */
  -
  -int
  -Rivet_SetHeaderType(request_rec *r, char *header)
  -{
  -    rivet_server_conf *rsc = Rivet_GetConf(r);
  -
  -    if( *(rsc->headers_set) ) return 0;
  -
  -    r->content_type = header;
  -    *(rsc->headers_set) = 1;
  -    return 1;
  -}
  -
  -/* Printer headers if they haven't been printed yet */
  -int
  -Rivet_PrintHeaders(request_rec *r)
  -{
  -    rivet_server_conf *rsc = Rivet_GetConf(r);
  -
  -    if( *(rsc->headers_printed) ) return 0;
  -
  -    if (*(rsc->headers_set) == 0)
  -     Rivet_SetHeaderType(r, DEFAULT_HEADER_TYPE);
  -
  -    ap_send_http_header(r);
  -    *(rsc->headers_printed) = 1;
  -    return 1;
  -}
  -
  -/* Print nice HTML formatted errors */
  -int
  -Rivet_PrintError(request_rec *r, int htmlflag, char *errstr)
  -{
  -    Rivet_SetHeaderType(r, DEFAULT_HEADER_TYPE);
  -    Rivet_PrintHeaders(r);
  -
  -    if (htmlflag != 1)
  -     ap_rputs(ER1, r);
  -
  -    if (errstr != NULL)
  -    {
  -     if (htmlflag != 1)
  -     {
  -         ap_rputs(ap_escape_html(r->pool, errstr), r);
  -     } else {
  -         ap_rputs(errstr, r);
  -     }
  -    }
  -    if (htmlflag != 1)
  -     ap_rputs(ER2, r);
  -
  -    return 0;
  -}
  -
   /* Function to be used should we desire to upload files to a variable */
   
   #if 0
  @@ -289,6 +234,7 @@
   {
       char *errorinfo;
       rivet_server_conf *conf = NULL;
  +    rivet_interp_globals *globals = Tcl_GetAssocData(interp, "rivet", NULL);
   
       conf = Rivet_GetConf(r);
       if (Tcl_EvalObj(interp, outbuf) == TCL_ERROR)
  @@ -296,22 +242,22 @@
        Tcl_Obj *errscript =
            conf->rivet_error_script ? conf->rivet_error_script : NULL;
   
  -        Rivet_PrintHeaders(r);
  +        TclWeb_PrintHeaders(globals->req);
        Tcl_Flush(*(conf->outchannel));
           if (errscript)
           {
            if (Tcl_EvalObj(interp, errscript) == TCL_ERROR)
  -                Rivet_PrintError(r, 1, "<b>Tcl_ErrorScript failed!</b>");
  +                TclWeb_PrintError("<b>Tcl_ErrorScript failed!</b>", 1, 
globals->req);
           } else {
               /* default action  */
               errorinfo = Tcl_GetVar(interp, "errorInfo", 0);
  -            Rivet_PrintError(r, 0, errorinfo);
  -            Rivet_PrintError(r, 1, "<p><b>OUTPUT BUFFER:</b></p>");
  -            Rivet_PrintError(r, 0, Tcl_GetStringFromObj(outbuf, (int 
*)NULL));
  +         TclWeb_PrintError(errorinfo, 0, globals->req);
  +            TclWeb_PrintError("<p><b>OUTPUT BUFFER:</b></p>", 1, 
globals->req);
  +            TclWeb_PrintError(Tcl_GetStringFromObj(outbuf, (int *)NULL), 1, 
globals->req);
           }
       } else {
           /* Make sure to flush the output if buffer_add was the only output */
  -        Rivet_PrintHeaders(r);
  +        TclWeb_PrintHeaders(globals->req);
        Tcl_Flush(*(conf->outchannel));
       }
       return OK;
  @@ -495,8 +441,8 @@
   
       if (r->header_only)
       {
  -     Rivet_SetHeaderType(r, DEFAULT_HEADER_TYPE);
  -     Rivet_PrintHeaders(r);
  +     TclWeb_SetHeaderType(DEFAULT_HEADER_TYPE, globals->req);
  +     TclWeb_PrintHeaders(globals->req);
        return OK;
       }
   
  @@ -538,8 +484,6 @@
       }
   
       /* Reset globals */
  -    *(rsc->headers_printed) = 0;
  -    *(rsc->headers_set) = 0;
       *(rsc->content_sent) = 0;
   
       return OK;
  @@ -976,8 +920,6 @@
       newrsc->request_init = oldrsc->request_init;
       newrsc->request_cleanup = oldrsc->request_cleanup;
   
  -    newrsc->headers_printed = oldrsc->headers_printed;
  -    newrsc->headers_set = oldrsc->headers_set;
       newrsc->content_sent = oldrsc->content_sent;
       newrsc->outchannel = oldrsc->outchannel;
   }
  @@ -1010,11 +952,7 @@
       rsc->request_init = NULL;
       rsc->request_cleanup = NULL;
   
  -    rsc->headers_printed = ap_pcalloc(p, sizeof(int));
  -    rsc->headers_set = ap_pcalloc(p, sizeof(int));
       rsc->content_sent = ap_pcalloc(p, sizeof(int));
  -    *(rsc->headers_printed) = 0;
  -    *(rsc->headers_set) = 0;
       *(rsc->content_sent) = 0;
       rsc->outchannel = ap_pcalloc(p, sizeof(Tcl_Channel));
   
  
  
  
  1.14      +0 -10     tcl-rivet/src/mod_rivet.h
  
  Index: mod_rivet.h
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/mod_rivet.h,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- mod_rivet.h       22 Jan 2002 01:27:56 -0000      1.13
  +++ mod_rivet.h       22 Jan 2002 21:37:42 -0000      1.14
  @@ -9,10 +9,6 @@
   #define RIVET_DIR "rivet"
   #define RIVET_INIT RIVET_DIR"/init.tcl"
   
  -/* Error wrappers  */
  -#define ER1 "<hr><p><code><pre>\n"
  -#define ER2 "</pre></code><hr>\n"
  -
   /* Configuration options  */
   
   /* If you do not have a threaded Tcl, you can define this to 0.  This
  @@ -36,7 +32,6 @@
   
   #define DEFAULT_ERROR_MSG "[an error occurred while processing this 
directive]"
   #define DEFAULT_TIME_FORMAT "%A, %d-%b-%Y %H:%M:%S %Z"
  -#define DEFAULT_HEADER_TYPE "text/html"
   #define MULTIPART_FORM_DATA 1
   /* #define RIVET_VERSION "X.X.X" */
   
  @@ -66,8 +61,6 @@
       Tcl_Obj *request_cleanup; /* bit of Tcl for cleaning up after a request 
*/
   
       /* stuff for buffering output */
  -    int *headers_printed;    /* has the header been printed yet? */
  -    int *headers_set;       /* has the header been set yet? */
       int *content_sent;      /* make sure something gets sent */
       Tcl_Channel *outchannel;
   } rivet_server_conf;
  @@ -81,9 +74,6 @@
   } rivet_interp_globals;
   
   int Rivet_ParseExecFile(request_rec *r, rivet_server_conf *rsc, char 
*filename, int toplevel);
  -int Rivet_SetHeaderType(request_rec *, char *);
  -int Rivet_PrintHeaders(request_rec *);
  -int Rivet_PrintError(request_rec *, int, char *);
   rivet_server_conf *Rivet_GetConf(request_rec *r);
   
   #define RIVET_SERVER_CONF(module) (rivet_server_conf 
*)ap_get_module_config(module, &rivet_module)
  
  
  
  1.8       +4 -7      tcl-rivet/src/rivetCore.c
  
  Index: rivetCore.c
  ===================================================================
  RCS file: /home/cvs/tcl-rivet/src/rivetCore.c,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- rivetCore.c       22 Jan 2002 01:27:56 -0000      1.7
  +++ rivetCore.c       22 Jan 2002 21:37:42 -0000      1.8
  @@ -2,7 +2,7 @@
    * rivetCore.c - Core commands which are compiled into mod_rivet itself.
    */
   
  -/* $Id: rivetCore.c,v 1.7 2002/01/22 01:27:56 davidw Exp $ */
  +/* $Id: rivetCore.c,v 1.8 2002/01/22 21:37:42 davidw Exp $ */
   
   #include "httpd.h"
   #include "http_config.h"
  @@ -161,15 +161,13 @@
   {
       char *opt;
       rivet_interp_globals *globals = Tcl_GetAssocData(interp, "rivet", NULL);
  -    rivet_server_conf *rsc =
  -     RIVET_SERVER_CONF( globals->r->server->module_config );
   
       if (objc < 2)
       {
        Tcl_WrongNumArgs(interp, 1, objv, "option arg ?arg ...?");
        return TCL_ERROR;
       }
  -    if (*(rsc->headers_printed) != 0)
  +    if (globals->req->headers_printed != 0)
       {
        Tcl_AddObjErrorInfo(interp,
                "Cannot manipulate headers - already sent", -1);
  @@ -241,8 +239,7 @@
            Tcl_WrongNumArgs(interp, 2, objv, "mime/type");
            return TCL_ERROR;
        }
  -     Rivet_SetHeaderType(globals->r,
  -                             Tcl_GetStringFromObj(objv[2],(int *)NULL));
  +     TclWeb_SetHeaderType(Tcl_GetStringFromObj(objv[2],(int *)NULL), 
globals->req);
       } else if (!strcmp("numeric", opt)) /* ### numeric ### */
       {
        int st = 200;
  @@ -689,7 +686,7 @@
        return TCL_ERROR;
       }
   
  -    Rivet_PrintHeaders(globals->r);
  +    TclWeb_PrintHeaders(globals->req);
       Tcl_Flush(*(rsc->outchannel));
   
       globals->r->connection->aborted = 1;
  
  
  

Reply via email to