You are viewing a plain text version of this content. The canonical link for it is here.
Posted to websh-dev@tcl.apache.org by "David N. Welton" <da...@dedasys.com> on 2001/11/20 12:08:59 UTC
new committers, big patch
Brian has taken the time to add Simon Hefti and Ronnie Brunner as
committers to the Apache Tcl project. Good news:-)
I have a large patch, which I will post here, with commentary.
Index: src/generic/cfg.c
These changes regard making the cmdurltimestamp a 'global' option.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4725
===================================================================
RCS file: /home/cvs/tcl-websh/src/generic/cfg.c,v
retrieving revision 1.3
diff -u -r1.3 cfg.c
--- src/generic/cfg.c 2001/10/25 17:50:13 1.3
+++ src/generic/cfg.c 2001/11/20 10:07:59
@@ -124,20 +124,22 @@
NULL
};
- static char *subCmd1[] = { "uploadfilesize",
- "encryptchain",
- "decryptchain",
- "cmdparam",
- "timeparam",
- "putxmarkup",
- "logsubst",
- "version",
- "copyright",
- NULL
+ static char *subCmd1[] = { "uploadfilesize",
+ "encryptchain",
+ "decryptchain",
+ "cmdparam",
+ "timeparam",
+ "putxmarkup",
+ "logsubst",
+ "version",
+ "copyright",
+ "cmdurltimestamp",
+ NULL
};
enum subCmd1
- { UPLOADFILESIZE,
+ {
+ UPLOADFILESIZE,
ENCRYPTCHAIN,
DECRYPTCHAIN,
CMDTAG,
@@ -145,7 +147,8 @@
PUTXMARKUP,
LOGSUBST,
WEBSHVERSION,
- WEBSHCOPYRIGHT
+ WEBSHCOPYRIGHT,
+ CMDURLTIMESTAMP
};
@@ -403,6 +406,42 @@
NULL);
return TCL_OK;
}
+ case CMDURLTIMESTAMP: {
+ int tmpbool = 1;
+ WebAssertData(interp, cfgData->requestData,
+ "web::config cmdurltimestamp", TCL_ERROR);
+
+ WebAssertData(interp, cfgData->requestData->cmdUrlTimestamp,
+ "web::config cmdurltimestamp", TCL_ERROR);
+ Tcl_SetObjResult(interp,
+ Tcl_DuplicateObj(cfgData->requestData->cmdUrlTimestamp));
+ switch (objc) {
+ case 2:
+ return TCL_OK;
+ break;
+ case 3:
+ if (Tcl_GetBooleanFromObj(interp, objv[2], &tmpbool) ==
+ TCL_ERROR) {
+ LOG_MSG(interp, WRITE_LOG | SET_RESULT, __FILE__,
+ __LINE__, "web::config cmdurltimestamp",
+ WEBLOG_ERROR,
+ "web::config cmdurltimestamp only accepts boolean but ",
+ "got \"", Tcl_GetString(objv[2]), "\"", NULL);
+ return TCL_ERROR;
+ }
+ WebDecrOldIncrNew(cfgData->requestData->cmdUrlTimestamp,
+ Tcl_DuplicateObj(objv[2]));
+ return TCL_OK;
+ break;
+ default:
+ LOG_MSG(interp, WRITE_LOG | SET_RESULT,
+ __FILE__, __LINE__,
+ "web::config cmdurltimestamp", WEBLOG_INFO,
+ "usage: web::config cmdurltimestamp ?boolean?", NULL);
+ return TCL_ERROR;
+ }
+ return TCL_OK;
+ }
default:
break;
}
Index: src/generic/dispatch.c
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=4719
This propogates the error generated in parsePostData. This causes
websh to behave differently, making it fail some tests it otherwise
passes.
===================================================================
RCS file: /home/cvs/tcl-websh/src/generic/dispatch.c,v
retrieving revision 1.3
diff -u -r1.3 dispatch.c
--- src/generic/dispatch.c 2001/10/25 17:50:13 1.3
+++ src/generic/dispatch.c 2001/11/20 10:08:00
@@ -138,24 +138,31 @@
/* ------------------------------------------------------------------
* -postdata channel
* --------------------------------------------------------------- */
- parsePostData(interp, objv[idx1 + 1], NULL, NULL,
- requestData);
+ if (parsePostData(interp, objv[idx1 + 1], NULL, NULL,
+ requestData) == TCL_ERROR) {
+ return TCL_ERROR;
+ }
+
break;
case 3:
/* ------------------------------------------------------------------
* -postdata channel length
* --------------------------------------------------------------- */
/* log is handled by parsePostData */
- parsePostData(interp, objv[idx1 + 1], objv[idx1 + 2],
- NULL, requestData);
+ if (parsePostData(interp, objv[idx1 + 1], objv[idx1 + 2],
+ NULL, requestData) == TCL_ERROR) {
+ return TCL_ERROR;
+ }
break;
case 4:
/* ------------------------------------------------------------------
* -postdata channel length type
* --------------------------------------------------------------- */
/* log is handled by parsePostData */
- parsePostData(interp, objv[idx1 + 1], objv[idx1 + 2],
- objv[idx1 + 3], requestData);
+ if (parsePostData(interp, objv[idx1 + 1], objv[idx1 + 2],
+ objv[idx1 + 3], requestData) == TCL_ERROR) {
+ return TCL_ERROR;
+ }
break;
default:
Tcl_WrongNumArgs(interp, 1, objv,
Index: src/generic/request.c
More changes necessary to make cmdurltimestamp global.
===================================================================
RCS file: /home/cvs/tcl-websh/src/generic/request.c,v
retrieving revision 1.3
diff -u -r1.3 request.c
--- src/generic/request.c 2001/10/25 17:50:13 1.3
+++ src/generic/request.c 2001/11/20 10:08:03
@@ -116,6 +116,8 @@
WebNewStringObjFromStringIncr(requestData->cmdTag, "cmd");
WebNewStringObjFromStringIncr(requestData->timeTag, "t");
+ requestData->cmdUrlTimestamp = Tcl_NewBooleanObj(1);
+ Tcl_IncrRefCount(requestData->cmdUrlTimestamp);
HashUtlAllocInit(requestData->request, TCL_STRING_KEYS);
@@ -175,6 +177,10 @@
WebDecrRefCountIfNotNullAndSetNull(requestData->cmdTag);
WebNewStringObjFromStringIncr(requestData->cmdTag, "cmd");
+ WebDecrRefCountIfNotNullAndSetNull(requestData->cmdUrlTimestamp);
+ requestData->cmdUrlTimestamp = Tcl_NewBooleanObj(1);
+ Tcl_IncrRefCount(requestData->cmdUrlTimestamp);
+
requestData->requestIsInitialized = 0;
return TCL_OK;
}
@@ -232,7 +238,7 @@
WebDecrRefCountIfNotNull(requestData->cmdTag);
WebDecrRefCountIfNotNull(requestData->timeTag);
-
+ WebDecrRefCountIfNotNull(requestData->cmdUrlTimestamp);
destroyParamList(requestData->request);
WebDecrRefCountIfNotNull(requestData->upLoadFileSize);
Index: src/generic/request.h
More changes necessary to make cmdurltimestamp global.
===================================================================
RCS file: /home/cvs/tcl-websh/src/generic/request.h,v
retrieving revision 1.3
diff -u -r1.3 request.h
--- src/generic/request.h 2001/10/25 17:50:13 1.3
+++ src/generic/request.h 2001/11/20 10:08:03
@@ -81,6 +81,8 @@
/* default: cmd */
Tcl_Obj *timeTag; /* key to be used for param in URL (web::cmdurl) */
/* default: t */
+ Tcl_Obj *cmdUrlTimestamp; /* send timestamp with url's */
+ /* default: true */
/* ............ */
Tcl_HashTable *request; /* everything from the request obj */
/* e.g. server_port, server_name and so on */
Index: src/generic/url.c
More timestamp changes.
===================================================================
RCS file: /home/cvs/tcl-websh/src/generic/url.c,v
retrieving revision 1.3
diff -u -r1.3 url.c
--- src/generic/url.c 2001/10/25 17:50:13 1.3
+++ src/generic/url.c 2001/11/20 10:08:05
@@ -489,6 +489,7 @@
int plistLen = 0;
int i = 0;
int flag = 0;
+ int bool = 1;
int urlformat = 0;
Tcl_Obj *urlFmt = NULL;
Tcl_Obj *res = NULL;
@@ -535,6 +536,10 @@
}
if (argIndexOfKey(objc, objv, params[NOTIMESTAMP]) > 0)
+ flag = (flag | WEB_URL_NOTIMESTAMP);
+
+ Tcl_GetBooleanFromObj(interp, urlData->requestData->cmdUrlTimestamp, &bool);
+ if (bool == 0)
flag = (flag | WEB_URL_NOTIMESTAMP);
/* --------------------------------------------------------------------------
Index: src/tests/cfg.test
Fix wrong subcommand test to include cmdurltimestamp.
===================================================================
RCS file: /home/cvs/tcl-websh/src/tests/cfg.test,v
retrieving revision 1.2
diff -u -r1.2 cfg.test
--- src/tests/cfg.test 2001/10/25 11:04:29 1.2
+++ src/tests/cfg.test 2001/11/20 10:08:05
@@ -26,7 +26,7 @@
test cfg-1.1 {wrong subcommand} {
catch {web::config foo bar} msg
set msg
-} {bad subcommand "foo": must be uploadfilesize, encryptchain, decryptchain, cmdparam, timeparam, putxmarkup, logsubst, version, or copyright}
+} {bad subcommand "foo": must be uploadfilesize, encryptchain, decryptchain, cmdparam, timeparam, putxmarkup, logsubst, version, copyright, or cmdurltimestamp}
test cfg-1.2 {invalid value} {
Index: src/tests/cmdurl.test
===================================================================
RCS file: /home/cvs/tcl-websh/src/tests/cmdurl.test,v
retrieving revision 1.2
diff -u -r1.2 cmdurl.test
--- src/tests/cmdurl.test 2001/10/25 11:04:29 1.2
+++ src/tests/cmdurl.test 2001/11/20 10:08:06
@@ -378,6 +378,25 @@
set res
} "v319 {} {}"
+test cmdurl-3.191 {no time and no cmd tag} {
+
+ cleanParam
+
+ web::config cmdurltimestamp 0
+ web::config timeparam "t"
+ web::config cmdparam "cmd"
+
+ set url [web::cmdurl "" k3191 v3191]
+ set tmp [web::querystring::getfromurl $url]
+ web::dispatch -cmd "" -postdata "" -querystring $tmp
+ set res [web::param k3191]
+ lappend res [web::param t]
+ lappend res [web::param cmd]
+ unset url
+ unset tmp
+ set res
+} "v3191 {} {}"
+
test cmdurl-3.20 {full web::param syntax for web::cmdurlcfg, all-in-one} {
Index: src/tests/dispatch.test
It's now necessary to catch errors, because the error is propogated.
===================================================================
RCS file: /home/cvs/tcl-websh/src/tests/dispatch.test,v
retrieving revision 1.2
diff -a -u -r1.2 dispatch.test
--- src/tests/dispatch.test 2001/10/25 11:04:29 1.2
+++ src/tests/dispatch.test 2001/11/20 10:51:30
@@ -134,7 +134,6 @@
close $fileId
}
-
proc setAndParsePostDataFormData9 {} {
cleanParam
@@ -401,7 +400,7 @@
file delete "./formvar-multipart-formdata8.tst"
file delete "./formvar-multipart-formdata9.tst"
- puts "gonna delete $dispatchTestLogFilter, $dispatchTestLogDest"
+ puts "will delete $dispatchTestLogFilter, $dispatchTestLogDest"
puts "filters are: [web::logfilter names]"
puts "dests are: [web::logdest names]"
@@ -580,9 +579,11 @@
cleanParam
+ catch {
web::dispatch -cmd "" -querystring "" \
-postdata stdout 10 "multipart/form-data; boundary=xxx"
- getLastCatchedLogMsg
+ } err
+ set err
} {web::dispatch -postdata: channel "stdout" not open for reading}
test dispatch-5.0b {parse multipart/form-data from stdout} {
Index: src/tests/request.test
Reset request, or else funny things happen...
===================================================================
RCS file: /home/cvs/tcl-websh/src/tests/request.test,v
retrieving revision 1.2
diff -u -r1.2 request.test
--- src/tests/request.test 2001/10/25 11:04:29 1.2
+++ src/tests/request.test 2001/11/20 10:08:17
@@ -27,6 +27,7 @@
web::cmdurlcfg -unset
web::formvar -unset
web::param -unset
+ web::request -reset
}
# -----------------------------------------------------------------------------
Any comments or questions before I commit these?
--
David N. Welton
Consulting: http://www.dedasys.com/
Free Software: http://people.debian.org/~davidw/
Apache Tcl: http://tcl.apache.org/
Personal: http://www.efn.org/~davidw/
Re: new committers, big patch
Posted by "David N. Welton" <da...@dedasys.com>.
I have committed this patch... I am working on the changelog and
closing bugs now.
--
David N. Welton
Consulting: http://www.dedasys.com/
Free Software: http://people.debian.org/~davidw/
Apache Tcl: http://tcl.apache.org/
Personal: http://www.efn.org/~davidw/