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;