You can subscribe to this list here.
2005 |
Jan
|
Feb
(32) |
Mar
(56) |
Apr
(92) |
May
(39) |
Jun
(226) |
Jul
(98) |
Aug
(66) |
Sep
|
Oct
(153) |
Nov
(43) |
Dec
(42) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(97) |
Feb
(141) |
Mar
(147) |
Apr
(80) |
May
(51) |
Jun
(93) |
Jul
(88) |
Aug
(50) |
Sep
(179) |
Oct
(48) |
Nov
(82) |
Dec
(71) |
2007 |
Jan
(42) |
Feb
(46) |
Mar
(123) |
Apr
(21) |
May
(139) |
Jun
(59) |
Jul
(34) |
Aug
(57) |
Sep
(47) |
Oct
(137) |
Nov
(49) |
Dec
(12) |
2008 |
Jan
(10) |
Feb
(8) |
Mar
(63) |
Apr
(17) |
May
(34) |
Jun
(38) |
Jul
(16) |
Aug
(62) |
Sep
(9) |
Oct
(121) |
Nov
(38) |
Dec
(4) |
2009 |
Jan
|
Feb
(11) |
Mar
(9) |
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
(4) |
Apr
(10) |
May
(1) |
Jun
(1) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
(1) |
Feb
(1) |
Mar
(3) |
Apr
(2) |
May
|
Jun
|
Jul
|
Aug
(3) |
Sep
(2) |
Oct
(1) |
Nov
|
Dec
(12) |
2012 |
Jan
(26) |
Feb
(1) |
Mar
(15) |
Apr
(1) |
May
(1) |
Jun
(7) |
Jul
(2) |
Aug
|
Sep
(1) |
Oct
(52) |
Nov
(8) |
Dec
(25) |
2013 |
Jan
(35) |
Feb
(14) |
Mar
(10) |
Apr
(10) |
May
(29) |
Jun
(16) |
Jul
(5) |
Aug
(8) |
Sep
(8) |
Oct
(6) |
Nov
(1) |
Dec
(3) |
2014 |
Jan
(16) |
Feb
(13) |
Mar
(5) |
Apr
(9) |
May
(21) |
Jun
(6) |
Jul
(5) |
Aug
(2) |
Sep
(59) |
Oct
(115) |
Nov
(122) |
Dec
(45) |
2015 |
Jan
(31) |
Feb
(32) |
Mar
(19) |
Apr
(25) |
May
(3) |
Jun
(4) |
Jul
(18) |
Aug
(3) |
Sep
(23) |
Oct
(11) |
Nov
(17) |
Dec
(12) |
2016 |
Jan
(20) |
Feb
(27) |
Mar
(20) |
Apr
(40) |
May
(35) |
Jun
(48) |
Jul
(44) |
Aug
(51) |
Sep
(18) |
Oct
(42) |
Nov
(39) |
Dec
(29) |
2017 |
Jan
(37) |
Feb
(34) |
Mar
(20) |
Apr
(37) |
May
(10) |
Jun
(2) |
Jul
(14) |
Aug
(15) |
Sep
(25) |
Oct
(29) |
Nov
(15) |
Dec
(29) |
2018 |
Jan
(5) |
Feb
(15) |
Mar
(6) |
Apr
(20) |
May
(39) |
Jun
(39) |
Jul
(17) |
Aug
(20) |
Sep
(10) |
Oct
(17) |
Nov
(20) |
Dec
(8) |
2019 |
Jan
(28) |
Feb
(21) |
Mar
(13) |
Apr
(44) |
May
(44) |
Jun
(28) |
Jul
(51) |
Aug
(30) |
Sep
(7) |
Oct
(20) |
Nov
(8) |
Dec
(21) |
2020 |
Jan
(27) |
Feb
(5) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: Stephen D. <sd...@us...> - 2005-07-21 10:43:49
|
Update of /cvsroot/naviserver/naviserver/tests/testserver/pages In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14639/tests/testserver/pages Added Files: http_chunked.adp Removed Files: ns_adp_chunked.adp ns_tcl_chunked.tcl Log Message: * tests/ns_adp_chunked.test: * tests/http_chunked.test: Rename tests which handle both Tcl and ADP. Add some more tests which highlight a few bugs. * tests/testserver/pages/ns_adp_chunked.tcl: * tests/testserver/pages/http_chunked.adp: Rename file. Handle streaming and non-streaming situations, and actually write out the data in two goes. Add a workaround for a bug in the ns_conn chunked switch: detect whether client is HTTP/1.1 and therefore handles chunked encoding. This needs to disappear altogether. * tests/testserver/pages/ns_tcl_chunked.tcl: Incorporate code directly into test file using ns_register_proc. --- ns_tcl_chunked.tcl DELETED --- --- NEW FILE: http_chunked.adp --- <% # This is redundant/broken -- should chunk if browser supports # chunked encoding and streaming is enabled. # if {[ns_conn version] == 1.1} { ns_conn chunked 1 } # If streaming is enabled but the browser does not support # chunked encoding, revert to Connection: close to mark # end of content. if {[ns_queryget stream 0]} { ns_adp_stream } # When streaming the buffer is flushed after each call to append. # Otherwise, everything is buffered and chunking is not required # as the content length is known. ns_adp_append 0123456789 ns_adp_append 01234 %> --- ns_adp_chunked.adp DELETED --- |
From: Stephen D. <sd...@us...> - 2005-07-21 10:43:25
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv14639 Modified Files: ChangeLog Log Message: * tests/ns_adp_chunked.test: * tests/http_chunked.test: Rename tests which handle both Tcl and ADP. Add some more tests which highlight a few bugs. * tests/testserver/pages/ns_adp_chunked.tcl: * tests/testserver/pages/http_chunked.adp: Rename file. Handle streaming and non-streaming situations, and actually write out the data in two goes. Add a workaround for a bug in the ns_conn chunked switch: detect whether client is HTTP/1.1 and therefore handles chunked encoding. This needs to disappear altogether. * tests/testserver/pages/ns_tcl_chunked.tcl: Incorporate code directly into test file using ns_register_proc. Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.168 retrieving revision 1.169 diff -C2 -d -r1.168 -r1.169 *** ChangeLog 20 Jul 2005 05:31:21 -0000 1.168 --- ChangeLog 21 Jul 2005 10:43:09 -0000 1.169 *************** *** 1,2 **** --- 1,18 ---- + 2005-07-21 Stephen Deasey <sd...@us...> + + * tests/ns_adp_chunked.test: + * tests/http_chunked.test: Rename tests which handle both Tcl and + ADP. Add some more tests which highlight a few bugs. + + * tests/testserver/pages/ns_adp_chunked.tcl: + * tests/testserver/pages/http_chunked.adp: Rename file. Handle + streaming and non-streaming situations, and actually write out the + data in two goes. Add a workaround for a bug in the ns_conn + chunked switch: detect whether client is HTTP/1.1 and therefore + handles chunked encoding. This needs to disappear altogether. + + * tests/testserver/pages/ns_tcl_chunked.tcl: Incorporate code + directly into test file using ns_register_proc. + 2005-07-19 Stephen Deasey <sd...@us...> |
From: Stephen D. <sd...@us...> - 2005-07-20 05:31:32
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25354 Modified Files: Makefile ChangeLog Log Message: Add gdbruntest target to run a naviserver command shell under gdb. Index: Makefile =================================================================== RCS file: /cvsroot/naviserver/naviserver/Makefile,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** Makefile 5 Jul 2005 23:49:46 -0000 1.12 --- Makefile 20 Jul 2005 05:31:20 -0000 1.13 *************** *** 74,82 **** LD_LIBRARY_PATH="./nsd:./nsthread" ./nsd/nsd -c -d -t tests/test.nscfg ! gdb: all @echo "set args -c -d -t tests/test.nscfg all.tcl $(TESTFLAGS) $(TCLTESTARGS)" > gdb.run LD_LIBRARY_PATH="./nsd:./nsthread" gdb -x gdb.run ./nsd/nsd rm gdb.run checkexports: all @for i in $(dirs); do \ --- 74,87 ---- LD_LIBRARY_PATH="./nsd:./nsthread" ./nsd/nsd -c -d -t tests/test.nscfg ! gdbtest: all @echo "set args -c -d -t tests/test.nscfg all.tcl $(TESTFLAGS) $(TCLTESTARGS)" > gdb.run LD_LIBRARY_PATH="./nsd:./nsthread" gdb -x gdb.run ./nsd/nsd rm gdb.run + gdbruntest: all + @echo "set args -c -d -t tests/test.nscfg" > gdb.run + LD_LIBRARY_PATH="./nsd:./nsthread" gdb -x gdb.run ./nsd/nsd + rm gdb.run + checkexports: all @for i in $(dirs); do \ Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.167 retrieving revision 1.168 diff -C2 -d -r1.167 -r1.168 *** ChangeLog 13 Jul 2005 01:04:35 -0000 1.167 --- ChangeLog 20 Jul 2005 05:31:21 -0000 1.168 *************** *** 1,2 **** --- 1,7 ---- + 2005-07-19 Stephen Deasey <sd...@us...> + + * Makefile: Add gdbruntest target to run a naviserver command + shell under gdb. + 2005-07-11 Vlad Seryakov <ser...@us...> |
From: Vlad S. <ser...@us...> - 2005-07-13 01:04:47
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32540 Modified Files: ChangeLog NEWS Log Message: Updated features and changes Index: NEWS =================================================================== RCS file: /cvsroot/naviserver/naviserver/NEWS,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** NEWS 6 Jul 2005 00:47:36 -0000 1.8 --- NEWS 13 Jul 2005 01:04:35 -0000 1.9 *************** *** 6,11 **** --- 6,17 ---- * HTTP Range requests for streaming media and resuming downloads + * Full Chunked encoding support for Fastpath, Adp and Tcl scripts + * Using temporary files for large uploads when content exceeds + pre-configured maxsize parameter + Code Changes: + * New function Ns_ConnPrintfHeaders() for adding NTTP headers in + printf style *************** *** 23,27 **** * Add -bytes option to ns_conncptofp command * New command ns_conn channel #1156141 ! * Add new wtchdog feature to restart the server if it crashes * Add ns_sha1 cryptographic hash command * C and Tcl API for setting response code of current connection --- 29,33 ---- * Add -bytes option to ns_conncptofp command * New command ns_conn channel #1156141 ! * Add new watchdog feature to restart the server if it crashes * Add ns_sha1 cryptographic hash command * C and Tcl API for setting response code of current connection Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.166 retrieving revision 1.167 diff -C2 -d -r1.166 -r1.167 *** ChangeLog 12 Jul 2005 16:00:50 -0000 1.166 --- ChangeLog 13 Jul 2005 01:04:35 -0000 1.167 *************** *** 1,4 **** --- 1,6 ---- 2005-07-11 Vlad Seryakov <ser...@us...> + * NEWS: Updated latest features and changes + * nsd/driver.c: * nsd/nsd.h: Added support for spooling large uploaded |
From: Stephen D. <sd...@us...> - 2005-07-12 11:19:36
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6793/nsd Modified Files: adprequest.c nsd.h proc.c server.c tclrequest.c Log Message: * nsd/nsd.h: * nsd/proc.c: * nsd/server.c: * nsd/adprequest.c: * nsd/tclrequest.c: Fix the confusion around the default adp request handler and ns_register_adp and add the missing proc callback info. ns_info requestprocs now gets things right. ns_register_adp will also now register the default adp request handler if you don't specify an optional file to map. Index: nsd.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/nsd.h,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** nsd.h 12 Jul 2005 07:31:39 -0000 1.22 --- nsd.h 12 Jul 2005 11:19:21 -0000 1.23 *************** *** 867,873 **** NS_GNUC_NONNULL(1); - extern Ns_OpProc NsFastGet; - extern Ns_OpProc NsAdpProc; - extern Ns_Cache *NsFastpathCache(char *server, int size); --- 867,870 ---- *************** *** 894,900 **** extern Ns_ThreadProc NsConnThread; extern Ns_ArgProc NsConnArgProc; ! extern Ns_FilterProc NsTclFilter; ! extern Ns_OpProc NsTclRequest; ! extern Ns_OpProc NsAdpRequest; extern Ns_ArgProc NsTclRequestArgProc; extern Ns_TclTraceProc NsTclTraceProc; --- 891,899 ---- extern Ns_ThreadProc NsConnThread; extern Ns_ArgProc NsConnArgProc; ! extern Ns_FilterProc NsTclFilterProc; ! extern Ns_OpProc NsFastGet; ! extern Ns_OpProc NsTclRequestProc; ! extern Ns_OpProc NsAdpRequestProc; ! extern Ns_OpProc NsAdpMapProc; extern Ns_ArgProc NsTclRequestArgProc; extern Ns_TclTraceProc NsTclTraceProc; Index: tclrequest.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclrequest.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tclrequest.c 10 Jun 2005 17:58:40 -0000 1.4 --- tclrequest.c 12 Jul 2005 11:19:22 -0000 1.5 *************** *** 57,61 **** * Ns_TclRequest -- * ! * Dummy up a direct call to NsTclRequest for a connection. * * Results: --- 57,61 ---- * Ns_TclRequest -- * ! * Dummy up a direct call to NsTclRequestProc for a connection. * * Results: *************** *** 73,82 **** Ns_TclCallback cb; ! cb.cbProc = &NsTclRequest; cb.server = Ns_ConnServer(conn); cb.script = name; cb.scriptarg = NULL; ! return NsTclRequest(&cb, conn); } --- 73,82 ---- Ns_TclCallback cb; ! cb.cbProc = &NsTclRequestProc; cb.server = Ns_ConnServer(conn); cb.script = name; cb.scriptarg = NULL; ! return NsTclRequestProc(&cb, conn); } *************** *** 123,129 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclRequest, script, scriptarg); Ns_RegisterRequest(itPtr->servPtr->server, method, url, ! NsTclRequest, Ns_TclFreeCallback, cbPtr, flags); return TCL_OK; --- 123,129 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclRequestProc, script, scriptarg); Ns_RegisterRequest(itPtr->servPtr->server, method, url, ! NsTclRequestProc, Ns_TclFreeCallback, cbPtr, flags); return TCL_OK; *************** *** 151,155 **** { NsInterp *itPtr = arg; ! char *method, *url, *file; int flags = 0; --- 151,155 ---- { NsInterp *itPtr = arg; ! char *method, *url, *file = NULL; int flags = 0; *************** *** 162,166 **** {"method", Ns_ObjvString, &method, NULL}, {"url", Ns_ObjvString, &url, NULL}, ! {"file", Ns_ObjvString, &file, NULL}, {NULL, NULL, NULL, NULL} }; --- 162,166 ---- {"method", Ns_ObjvString, &method, NULL}, {"url", Ns_ObjvString, &url, NULL}, ! {"?file", Ns_ObjvString, &file, NULL}, {NULL, NULL, NULL, NULL} }; *************** *** 169,174 **** } ! Ns_RegisterRequest(itPtr->servPtr->server, method, url, ! NsAdpRequest, ns_free, ns_strdup(file), flags); return TCL_OK; --- 169,179 ---- } ! if (file != NULL) { ! Ns_RegisterRequest(itPtr->servPtr->server, method, url, ! NsAdpMapProc, ns_free, ns_strdup(file), flags); ! } else { ! Ns_RegisterRequest(itPtr->servPtr->server, method, url, ! NsAdpRequestProc, NULL, itPtr->servPtr, flags); ! } return TCL_OK; *************** *** 255,261 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilter, script, scriptarg); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, ! NsTclFilter, when, cbPtr); return TCL_OK; --- 260,266 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilterProc, script, scriptarg); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, ! NsTclFilterProc, when, cbPtr); return TCL_OK; *************** *** 297,303 **** } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilter, script, scriptarg); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, ! NsTclFilter, NS_FILTER_VOID_TRACE, cbPtr); return TCL_OK; --- 302,308 ---- } ! cbPtr = Ns_TclNewCallback(interp, NsTclFilterProc, script, scriptarg); Ns_RegisterFilter(itPtr->servPtr->server, method, urlPattern, ! NsTclFilterProc, NS_FILTER_VOID_TRACE, cbPtr); return TCL_OK; *************** *** 308,314 **** *---------------------------------------------------------------------- * ! * NsAdpRequest -- * ! * Ns_OpProc for registered ADP's. * * Results: --- 313,319 ---- *---------------------------------------------------------------------- * ! * NsAdpMapProc -- * ! * Ns_OpProc which evaluates a specifically registered adp file. * * Results: *************** *** 322,328 **** int ! NsAdpRequest(void *arg, Ns_Conn *conn) { ! return Ns_AdpRequest(conn, (char *) arg); } --- 327,335 ---- int ! NsAdpMapProc(void *arg, Ns_Conn *conn) { ! char *adpFile = arg; ! ! return Ns_AdpRequest(conn, adpFile); } *************** *** 331,335 **** *---------------------------------------------------------------------- * ! * NsTclRequst -- * * Ns_OpProc for Tcl operations. --- 338,342 ---- *---------------------------------------------------------------------- * ! * NsTclRequstProc -- * * Ns_OpProc for Tcl operations. *************** *** 345,349 **** int ! NsTclRequest(void *arg, Ns_Conn *conn) { Ns_TclCallback *cbPtr = arg; --- 352,356 ---- int ! NsTclRequestProc(void *arg, Ns_Conn *conn) { Ns_TclCallback *cbPtr = arg; *************** *** 363,367 **** *---------------------------------------------------------------------- * ! * NsTclFilter -- * * The callback for Tcl filters. Run the script. --- 370,374 ---- *---------------------------------------------------------------------- * ! * NsTclFilterProc -- * * The callback for Tcl filters. Run the script. *************** *** 377,381 **** int ! NsTclFilter(void *arg, Ns_Conn *conn, int why) { Ns_TclCallback *cbPtr = arg; --- 384,388 ---- int ! NsTclFilterProc(void *arg, Ns_Conn *conn, int why) { Ns_TclCallback *cbPtr = arg; Index: server.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/server.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** server.c 6 Jul 2005 07:12:18 -0000 1.9 --- server.c 12 Jul 2005 11:19:22 -0000 1.10 *************** *** 525,531 **** if (!strcasecmp(key, "map")) { map = Ns_SetValue(set, i); ! Ns_RegisterRequest(server, "GET", map,NsAdpProc, NULL, servPtr, 0); ! Ns_RegisterRequest(server, "HEAD", map,NsAdpProc, NULL, servPtr, 0); ! Ns_RegisterRequest(server, "POST", map,NsAdpProc, NULL, servPtr, 0); Ns_Log(Notice, "adp[%s]: mapped %s", server, map); } --- 525,531 ---- if (!strcasecmp(key, "map")) { map = Ns_SetValue(set, i); ! Ns_RegisterRequest(server, "GET", map, NsAdpRequestProc, NULL, servPtr, 0); ! Ns_RegisterRequest(server, "HEAD", map, NsAdpRequestProc, NULL, servPtr, 0); ! Ns_RegisterRequest(server, "POST", map, NsAdpRequestProc, NULL, servPtr, 0); Ns_Log(Notice, "adp[%s]: mapped %s", server, map); } Index: adprequest.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/adprequest.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** adprequest.c 12 Jul 2005 07:31:39 -0000 1.3 --- adprequest.c 12 Jul 2005 11:19:21 -0000 1.4 *************** *** 44,56 **** *---------------------------------------------------------------------- * ! * NsAdpProc -- * ! * Check for a normal file and call Ns_AdpRequest. * * Results: ! * A standard AOLserver request result. * * Side effects: ! * Depends on code embedded within page. * *---------------------------------------------------------------------- --- 44,56 ---- *---------------------------------------------------------------------- * ! * NsAdpRequestProc -- * ! * Map the URL to an ADP file and run it. * * Results: ! * A standard request result. * * Side effects: ! * Depends on code embedded within page. * *---------------------------------------------------------------------- *************** *** 58,62 **** int ! NsAdpProc(void *arg, Ns_Conn *conn) { Ns_DString file; --- 58,62 ---- int ! NsAdpRequestProc(void *arg, Ns_Conn *conn) { Ns_DString file; *************** *** 67,70 **** --- 67,71 ---- status = Ns_AdpRequest(conn, file.string); Ns_DStringFree(&file); + return status; } Index: proc.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/proc.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** proc.c 12 Jul 2005 07:31:39 -0000 1.7 --- proc.c 12 Jul 2005 11:19:22 -0000 1.8 *************** *** 76,82 **** {(void *) NsCachePurge, "ns:cachepurge", NsCacheArgProc}, {(void *) NsConnThread, "ns:connthread", NsConnArgProc}, ! {(void *) NsTclFilter, "ns:tclfilter", Ns_TclCallbackArgProc}, ! {(void *) NsTclRequest, "ns:tclrequest", Ns_TclCallbackArgProc}, ! {(void *) NsAdpRequest, "ns:adprequest", Ns_StringArgProc}, {(void *) NsFastGet, "ns:fastget", ServerArgProc}, {(void *) NsTclTraceProc, "ns:tcltrace", Ns_TclCallbackArgProc}, --- 76,83 ---- {(void *) NsCachePurge, "ns:cachepurge", NsCacheArgProc}, {(void *) NsConnThread, "ns:connthread", NsConnArgProc}, ! {(void *) NsTclFilterProc, "ns:tclfilter", Ns_TclCallbackArgProc}, ! {(void *) NsTclRequestProc, "ns:tclrequest", Ns_TclCallbackArgProc}, ! {(void *) NsAdpRequestProc, "ns:adprequest", ServerArgProc}, ! {(void *) NsAdpMapProc, "ns:adpmap", Ns_StringArgProc}, {(void *) NsFastGet, "ns:fastget", ServerArgProc}, {(void *) NsTclTraceProc, "ns:tcltrace", Ns_TclCallbackArgProc}, |
From: Stephen D. <sd...@us...> - 2005-07-12 11:19:35
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv6793 Modified Files: ChangeLog Log Message: * nsd/nsd.h: * nsd/proc.c: * nsd/server.c: * nsd/adprequest.c: * nsd/tclrequest.c: Fix the confusion around the default adp request handler and ns_register_adp and add the missing proc callback info. ns_info requestprocs now gets things right. ns_register_adp will also now register the default adp request handler if you don't specify an optional file to map. Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.164 retrieving revision 1.165 diff -C2 -d -r1.164 -r1.165 *** ChangeLog 12 Jul 2005 08:26:04 -0000 1.164 --- ChangeLog 12 Jul 2005 11:19:19 -0000 1.165 *************** *** 1,4 **** --- 1,14 ---- 2005-07-12 Stephen Deasey <sd...@us...> + * nsd/nsd.h: + * nsd/proc.c: + * nsd/server.c: + * nsd/adprequest.c: + * nsd/tclrequest.c: Fix the confusion around the default adp + request handler and ns_register_adp and add the missing proc + callback info. ns_info requestprocs now gets things + right. ns_register_adp will also now register the default adp + request handler if you don't specify an optional file to map. + * include/ns.h: * nsd/Makefile: |
From: Stephen D. <sd...@us...> - 2005-07-12 08:26:16
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15129/nsd Modified Files: Makefile tclmisc.c tclobj.c Added Files: tcltime.c Log Message: * include/ns.h: * nsd/Makefile: * nsd/tclmisc.c: * nsd/tclobj.c: * nsd/tcltime.c: Consolidate Tcl time functions and object type into one place. Index: tclobj.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclobj.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tclobj.c 10 Jun 2005 17:58:40 -0000 1.4 --- tclobj.c 12 Jul 2005 08:26:05 -0000 1.5 *************** *** 30,36 **** /* ! * tcltime.c -- * ! * Implement Tcl_Obj type for Ns_Time. */ --- 30,36 ---- /* ! * tclobj.c -- * ! * Helper routines for managing Tcl object types. */ *************** *** 39,99 **** NS_RCSID("@(#) $Header$"); - /* - * Prototypes for procedures defined later in this file: - */ - - static void SetTimeInternalRep(Tcl_Obj *objPtr, Ns_Time *timePtr); - static int SetTimeFromAny (Tcl_Interp *interp, Tcl_Obj *objPtr); - static void UpdateStringOfTime(Tcl_Obj *objPtr); - - /* - * The following type defines the Ns_Time type. - */ - - static Tcl_ObjType timeType = { - "ns:time", - (Tcl_FreeInternalRepProc *) NULL, - (Tcl_DupInternalRepProc *) NULL, - UpdateStringOfTime, - SetTimeFromAny - }; - - static Tcl_ObjType *intTypePtr; - - - - /* - *---------------------------------------------------------------------- - * - * NsTclInitTimeType -- - * - * Initialize Ns_Time Tcl_Obj type. - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - - void - NsTclInitTimeType() - { - Tcl_Obj obj; - - if (sizeof(obj.internalRep) < sizeof(Ns_Time)) { - Tcl_Panic("NsTclInitObjs: sizeof(obj.internalRep) < sizeof(Ns_Time)"); - } - if (sizeof(int) < sizeof(long)) { - Tcl_Panic("NsTclInitObjs: sizeof(int) < sizeof(long)"); - } - intTypePtr = Tcl_GetObjType("int"); - if (intTypePtr == NULL) { - Tcl_Panic("NsTclInitObjs: no int type"); - } - Tcl_RegisterObjType(&timeType); - } --- 39,42 ---- *************** *** 207,379 **** } - - /* - *---------------------------------------------------------------------- - * - * Ns_TclSetTimeObj -- - * - * Set a Tcl_Obj to an Ns_Time object. - * - * Results: - * None. - * - * Side effects: - * String rep is invalidated and internal rep is set. - * - *---------------------------------------------------------------------- - */ - - void - Ns_TclSetTimeObj(Tcl_Obj *objPtr, Ns_Time *timePtr) - { - Tcl_InvalidateStringRep(objPtr); - SetTimeInternalRep(objPtr, timePtr); - } - - - /* - *---------------------------------------------------------------------- - * - * Ns_TclGetTimeFromObj -- - * - * Return the internal value of an Ns_Time Tcl_Obj. - * - * Results: - * TCL_OK or TCL_ERROR if not a valid Ns_Time. - * - * Side effects: - * Object is set to Ns_Time type if necessary. - * - *---------------------------------------------------------------------- - */ - - int - Ns_TclGetTimeFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, Ns_Time *timePtr) - { - if (objPtr->typePtr == intTypePtr) { - if (Tcl_GetLongFromObj(interp, objPtr, &timePtr->sec) != TCL_OK) { - return TCL_ERROR; - } - timePtr->usec = 0; - } else { - if (Tcl_ConvertToType(interp, objPtr, &timeType) != TCL_OK) { - return TCL_ERROR; - } - *timePtr = *((Ns_Time *) &objPtr->internalRep); - } - return TCL_OK; - } - - - /* - *---------------------------------------------------------------------- - * - * UpdateStringOfTime -- - * - * Update the string representation for an Ns_Time object. - * Note: This procedure does not free an existing old string rep - * so storage will be lost if this has not already been done. - * - * Results: - * None. - * - * Side effects: - * The object's string is set to a valid string that results from - * the Ns_Time-to-string conversion. - * - *---------------------------------------------------------------------- - */ - - static void - UpdateStringOfTime(objPtr) - register Tcl_Obj *objPtr; /* Int object whose string rep to update. */ - { - Ns_Time *timePtr = (Ns_Time *) &objPtr->internalRep; - int len; - char buf[100]; - - Ns_AdjTime(timePtr); - if (timePtr->usec == 0) { - len = sprintf(buf, "%ld", timePtr->sec); - } else { - len = sprintf(buf, "%ld:%ld", timePtr->sec, timePtr->usec); - } - Ns_TclSetStringRep(objPtr, buf, len); - } - - - /* - *---------------------------------------------------------------------- - * - * SetTimeFromAny -- - * - * Attempt to generate an Ns_Time internal form for the Tcl object. - * - * Results: - * The return value is a standard object Tcl result. If an error occurs - * during conversion, an error message is left in the interpreter's - * result unless "interp" is NULL. - * - * Side effects: - * If no error occurs, an int is stored as "objPtr"s internal - * representation. - * - *---------------------------------------------------------------------- - */ - - static int - SetTimeFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr) - { - char *str, *sep; - Ns_Time time; - int result; - - str = Tcl_GetString(objPtr); - sep = strchr(str, ':'); - if (objPtr->typePtr == intTypePtr || sep == NULL) { - if (Tcl_GetLongFromObj(interp, objPtr, &time.sec) != TCL_OK) { - return TCL_ERROR; - } - time.usec = 0; - } else { - *sep = '\0'; - result = Tcl_GetInt(interp, str, (int *) &time.sec); - *sep = ':'; - if (result != TCL_OK) { - return TCL_ERROR; - } - if (Tcl_GetInt(interp, sep+1, (int *) &time.usec) != TCL_OK) { - return TCL_ERROR; - } - } - Ns_AdjTime(&time); - SetTimeInternalRep(objPtr, &time); - return TCL_OK; - } - - - /* - *---------------------------------------------------------------------- - * - * SetTimeInternalRep -- - * - * Set the internal Ns_Time, freeing a previous internal rep if - * necessary. - * - * Results: - * None. - * - * Side effects: - * Object will be an Ns_Time type. - * - *---------------------------------------------------------------------- - */ - - static void - SetTimeInternalRep(Tcl_Obj *objPtr, Ns_Time *timePtr) - { - Ns_TclResetObjType(objPtr, &timeType); - *((Ns_Time *) &objPtr->internalRep) = *timePtr; - Tcl_InvalidateStringRep(objPtr); - objPtr->length = 0; /* ensure there's no stumbling */ - } --- 150,151 ---- Index: Makefile =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/Makefile,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Makefile 12 Jul 2005 07:31:39 -0000 1.5 --- Makefile 12 Jul 2005 08:26:04 -0000 1.6 *************** *** 48,52 **** tclcallbacks.o tclcmds.o tclconf.o tclenv.o tclfile.o tclhttp.o tclimg.o \ tclinit.o tcljob.o tclmisc.o tclobj.o tclobjv.o tclrequest.o tclresp.o \ ! tclsched.o tclset.o tclshare.o tclsock.o tclthread.o tclvar.o \ tclxkeylist.o unix.o url.o urlencode.o urlopen.o urlspace.o \ uuencode.o --- 48,52 ---- tclcallbacks.o tclcmds.o tclconf.o tclenv.o tclfile.o tclhttp.o tclimg.o \ tclinit.o tcljob.o tclmisc.o tclobj.o tclobjv.o tclrequest.o tclresp.o \ ! tclsched.o tclset.o tclshare.o tclsock.o tclthread.o tcltime.o tclvar.o \ tclxkeylist.o unix.o url.o urlencode.o urlopen.o urlspace.o \ uuencode.o --- NEW FILE: tcltime.c --- /* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://mozilla.org/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is AOLserver Code and related documentation * distributed by AOL. * * The Initial Developer of the Original Code is America Online, * Inc. Portions created by AOL are Copyright (C) 1999 America Online, * Inc. All Rights Reserved. * * Alternatively, the contents of this file may be used under the terms * of the GNU General Public License (the "GPL"), in which case the * provisions of GPL are applicable instead of those above. If you wish * to allow use of your version of this file only under the terms of the * GPL and not to allow others to use your version of this file under the * License, indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by the GPL. * If you do not delete the provisions above, a recipient may use your * version of this file under either the License or the GPL. */ /* * tcltime.c -- * * A Tcl interface to the Ns_Time microsecond resolution time * routines and some time formatting commands. */ #include "nsd.h" NS_RCSID("@(#) $Header: /cvsroot/naviserver/naviserver/nsd/tcltime.c,v 1.1 2005/07/12 08:26:05 sdeasey Exp $"); /* * Local functions defined in this file */ static void SetTimeInternalRep(Tcl_Obj *objPtr, Ns_Time *timePtr); static int SetTimeFromAny (Tcl_Interp *interp, Tcl_Obj *objPtr); static void UpdateStringOfTime(Tcl_Obj *objPtr); /* * Local variables defined in this file. */ static Tcl_ObjType timeType = { "ns:time", (Tcl_FreeInternalRepProc *) NULL, (Tcl_DupInternalRepProc *) NULL, UpdateStringOfTime, SetTimeFromAny }; static Tcl_ObjType *intTypePtr; /* *---------------------------------------------------------------------- * * NsTclInitTimeType -- * * Initialize Ns_Time Tcl_Obj type. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void NsTclInitTimeType() { Tcl_Obj obj; if (sizeof(obj.internalRep) < sizeof(Ns_Time)) { Tcl_Panic("NsTclInitObjs: sizeof(obj.internalRep) < sizeof(Ns_Time)"); } if (sizeof(int) < sizeof(long)) { Tcl_Panic("NsTclInitObjs: sizeof(int) < sizeof(long)"); } intTypePtr = Tcl_GetObjType("int"); if (intTypePtr == NULL) { Tcl_Panic("NsTclInitObjs: no int type"); } Tcl_RegisterObjType(&timeType); } /* *---------------------------------------------------------------------- * * Ns_TclSetTimeObj -- * * Set a Tcl_Obj to an Ns_Time object. * * Results: * None. * * Side effects: * String rep is invalidated and internal rep is set. * *---------------------------------------------------------------------- */ void Ns_TclSetTimeObj(Tcl_Obj *objPtr, Ns_Time *timePtr) { Tcl_InvalidateStringRep(objPtr); SetTimeInternalRep(objPtr, timePtr); } /* *---------------------------------------------------------------------- * * Ns_TclGetTimeFromObj -- * * Return the internal value of an Ns_Time Tcl_Obj. * * Results: * TCL_OK or TCL_ERROR if not a valid Ns_Time. * * Side effects: * Object is converted to Ns_Time type if necessary. * *---------------------------------------------------------------------- */ int Ns_TclGetTimeFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, Ns_Time *timePtr) { if (objPtr->typePtr == intTypePtr) { if (Tcl_GetLongFromObj(interp, objPtr, &timePtr->sec) != TCL_OK) { return TCL_ERROR; } timePtr->usec = 0; } else { if (Tcl_ConvertToType(interp, objPtr, &timeType) != TCL_OK) { return TCL_ERROR; } *timePtr = *((Ns_Time *) &objPtr->internalRep); } return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclTimeObjCmd -- * * Implements ns_time. * * Results: * Tcl result. * * Side effects: * See docs. * *---------------------------------------------------------------------- */ int NsTclTimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { Ns_Time result, t1, t2; int opt; static CONST char *opts[] = { "adjust", "diff", "get", "incr", "make", "seconds", "microseconds", NULL }; enum { TAdjustIdx, TDiffIdx, TGetIdx, TIncrIdx, TMakeIdx, TSecondsIdx, TMicroSecondsIdx }; if (objc < 2) { Tcl_SetLongObj(Tcl_GetObjResult(interp), time(NULL)); return TCL_OK; } if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0, &opt) != TCL_OK) { return TCL_ERROR; } switch (opt) { case TGetIdx: Ns_GetTime(&result); break; case TMakeIdx: if (objc != 3 && objc != 4) { Tcl_WrongNumArgs(interp, 2, objv, "sec ?usec?"); return TCL_ERROR; } if (Tcl_GetLongFromObj(interp, objv[2], &result.sec) != TCL_OK) { return TCL_ERROR; } if (objc == 3) { result.usec = 0; } else if (Tcl_GetLongFromObj(interp, objv[3], &result.usec) != TCL_OK) { return TCL_ERROR; } break; case TIncrIdx: if (objc != 4 && objc != 5) { Tcl_WrongNumArgs(interp, 2, objv, "time sec ?usec?"); return TCL_ERROR; } if (Ns_TclGetTimeFromObj(interp, objv[2], &result) != TCL_OK || Tcl_GetLongFromObj(interp, objv[3], &t2.sec) != TCL_OK) { return TCL_ERROR; } if (objc == 4) { t2.usec = 0; } else if (Tcl_GetLongFromObj(interp, objv[4], &t2.usec) != TCL_OK) { return TCL_ERROR; } Ns_IncrTime(&result, t2.sec, t2.usec); break; case TDiffIdx: if (objc != 4) { Tcl_WrongNumArgs(interp, 2, objv, "time1 time2"); return TCL_ERROR; } if (Ns_TclGetTimeFromObj(interp, objv[2], &t1) != TCL_OK || Ns_TclGetTimeFromObj(interp, objv[3], &t2) != TCL_OK) { return TCL_ERROR; } Ns_DiffTime(&t1, &t2, &result); break; case TAdjustIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "time"); return TCL_ERROR; } if (Ns_TclGetTimeFromObj(interp, objv[2], &result) != TCL_OK) { return TCL_ERROR; } Ns_AdjTime(&result); break; case TSecondsIdx: case TMicroSecondsIdx: if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "time"); return TCL_ERROR; } if (Ns_TclGetTimeFromObj(interp, objv[2], &result) != TCL_OK) { return TCL_ERROR; } Tcl_SetLongObj(Tcl_GetObjResult(interp), opt == TSecondsIdx ? result.sec : result.usec); return TCL_OK; break; } Ns_TclSetTimeObj(Tcl_GetObjResult(interp), &result); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclLocalTimeObjCmd, NsTclGmTimeObjCmd -- * * Implements ns_gmtime and ns_localtime. * * Results: * Tcl result. * * Side effects: * ns_localtime depends on the time zone of the server process. * *---------------------------------------------------------------------- */ static int TmObjCmd(ClientData isgmt, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { time_t now; struct tm *ptm; Tcl_Obj *objPtr[9]; if (objc != 1) { Tcl_WrongNumArgs(interp, 1, objv, ""); return TCL_ERROR; } now = time(NULL); if (isgmt) { ptm = ns_gmtime(&now); } else { ptm = ns_localtime(&now); } objPtr[0] = Tcl_NewIntObj(ptm->tm_sec); objPtr[1] = Tcl_NewIntObj(ptm->tm_min); objPtr[2] = Tcl_NewIntObj(ptm->tm_hour); objPtr[3] = Tcl_NewIntObj(ptm->tm_mday); objPtr[4] = Tcl_NewIntObj(ptm->tm_mon); objPtr[5] = Tcl_NewIntObj(ptm->tm_year); objPtr[6] = Tcl_NewIntObj(ptm->tm_wday); objPtr[7] = Tcl_NewIntObj(ptm->tm_yday); objPtr[8] = Tcl_NewIntObj(ptm->tm_isdst); Tcl_SetListObj(Tcl_GetObjResult(interp), 9, objPtr); return TCL_OK; } int NsTclGmTimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { return TmObjCmd((ClientData) 1, interp, objc, objv); } int NsTclLocalTimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { return TmObjCmd(NULL, interp, objc, objv); } /* *---------------------------------------------------------------------- * * NsTclSleepObjCmd -- * * Sleep with milisecond resolition. * * Results: * Tcl Result. * * Side effects: * None. * *---------------------------------------------------------------------- */ int NsTclSleepObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { Ns_Time time; int ms; if (objc != 2) { Tcl_WrongNumArgs(interp, 1, objv, "timespec"); return TCL_ERROR; } if (Ns_TclGetTimeFromObj(interp, objv[1], &time) != TCL_OK) { return TCL_ERROR; } Ns_AdjTime(&time); if (time.sec < 0 || (time.sec == 0 && time.usec < 0)) { Tcl_AppendResult(interp, "invalid timespec: ", Tcl_GetString(objv[1]), NULL); return TCL_ERROR; } ms = time.sec * 1000 + time.usec / 1000; Tcl_Sleep(ms); return TCL_OK; } /* *---------------------------------------------------------------------- * * NsTclStrftimeObjCmd -- * * Implements ns_fmttime. * * Results: * Tcl result. * * Side effects: * Depends on the time zone of the server process. * *---------------------------------------------------------------------- */ int NsTclStrftimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) { char *fmt, buf[200]; time_t time; if (objc != 2 && objc != 3) { Tcl_WrongNumArgs(interp, 1, objv, "time ?fmt?"); return TCL_ERROR; } if (Tcl_GetLongFromObj(interp, objv[1], &time) != TCL_OK) { return TCL_ERROR; } if (objc > 2) { fmt = Tcl_GetString(objv[2]); } else { fmt = "%c"; } if (strftime(buf, sizeof(buf), fmt, ns_localtime(&time)) == 0) { Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "invalid time: ", Tcl_GetString(objv[1]), NULL); return TCL_ERROR; } Tcl_SetResult(interp, buf, TCL_VOLATILE); return TCL_OK; } /* *---------------------------------------------------------------------- * * UpdateStringOfTime -- * * Update the string representation for an Ns_Time object. * Note: This procedure does not free an existing old string rep * so storage will be lost if this has not already been done. * * Results: * None. * * Side effects: * The object's string is set to a valid string that results from * the Ns_Time-to-string conversion. * *---------------------------------------------------------------------- */ static void UpdateStringOfTime(Tcl_Obj *objPtr) { Ns_Time *timePtr = (Ns_Time *) &objPtr->internalRep; int len; char buf[100]; Ns_AdjTime(timePtr); if (timePtr->usec == 0) { len = sprintf(buf, "%ld", timePtr->sec); } else { len = sprintf(buf, "%ld:%ld", timePtr->sec, timePtr->usec); } Ns_TclSetStringRep(objPtr, buf, len); } /* *---------------------------------------------------------------------- * * SetTimeFromAny -- * * Attempt to generate an Ns_Time internal form for the Tcl object. * * Results: * The return value is a standard object Tcl result. If an error occurs * during conversion, an error message is left in the interpreter's * result unless "interp" is NULL. * * Side effects: * If no error occurs, an int is stored as "objPtr"s internal * representation. * *---------------------------------------------------------------------- */ static int SetTimeFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr) { char *str, *sep; Ns_Time time; int result; str = Tcl_GetString(objPtr); sep = strchr(str, ':'); if (objPtr->typePtr == intTypePtr || sep == NULL) { if (Tcl_GetLongFromObj(interp, objPtr, &time.sec) != TCL_OK) { return TCL_ERROR; } time.usec = 0; } else { *sep = '\0'; result = Tcl_GetInt(interp, str, (int *) &time.sec); *sep = ':'; if (result != TCL_OK) { return TCL_ERROR; } if (Tcl_GetInt(interp, sep+1, (int *) &time.usec) != TCL_OK) { return TCL_ERROR; } } Ns_AdjTime(&time); SetTimeInternalRep(objPtr, &time); return TCL_OK; } /* *---------------------------------------------------------------------- * * SetTimeInternalRep -- * * Set the internal Ns_Time, freeing a previous internal rep if * necessary. * * Results: * None. * * Side effects: * Object will be an Ns_Time type. * *---------------------------------------------------------------------- */ static void SetTimeInternalRep(Tcl_Obj *objPtr, Ns_Time *timePtr) { Ns_TclResetObjType(objPtr, &timeType); *((Ns_Time *) &objPtr->internalRep) = *timePtr; Tcl_InvalidateStringRep(objPtr); objPtr->length = 0; /* ensure there's no stumbling */ } Index: tclmisc.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclmisc.c,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** tclmisc.c 12 Jul 2005 07:31:39 -0000 1.10 --- tclmisc.c 12 Jul 2005 08:26:04 -0000 1.11 *************** *** 272,375 **** *---------------------------------------------------------------------- * - * NsTclLocalTimeObjCmd, NsTclGmTimeObjCmd -- - * - * Implements the ns_gmtime and ns_localtime commands. - * - * Results: - * Tcl result. - * - * Side effects: - * See docs. - * - *---------------------------------------------------------------------- - */ - - static int - TmObjCmd(ClientData isgmt, Tcl_Interp *interp, int objc, Tcl_Obj **objv) - { - time_t now; - struct tm *ptm; - Tcl_Obj *objPtr[9]; - - if (objc != 1) { - Tcl_WrongNumArgs(interp, 1, objv, ""); - return TCL_ERROR; - } - now = time(NULL); - if (isgmt) { - ptm = ns_gmtime(&now); - } else { - ptm = ns_localtime(&now); - } - objPtr[0] = Tcl_NewIntObj(ptm->tm_sec); - objPtr[1] = Tcl_NewIntObj(ptm->tm_min); - objPtr[2] = Tcl_NewIntObj(ptm->tm_hour); - objPtr[3] = Tcl_NewIntObj(ptm->tm_mday); - objPtr[4] = Tcl_NewIntObj(ptm->tm_mon); - objPtr[5] = Tcl_NewIntObj(ptm->tm_year); - objPtr[6] = Tcl_NewIntObj(ptm->tm_wday); - objPtr[7] = Tcl_NewIntObj(ptm->tm_yday); - objPtr[8] = Tcl_NewIntObj(ptm->tm_isdst); - Tcl_SetListObj(Tcl_GetObjResult(interp), 9, objPtr); - return TCL_OK; - } - - int - NsTclGmTimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) - { - return TmObjCmd((ClientData) 1, interp, objc, objv); - } - - int - NsTclLocalTimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) - { - return TmObjCmd(NULL, interp, objc, objv); - } - - - /* - *---------------------------------------------------------------------- - * - * NsTclSleepObjCmd -- - * - * Tcl result. - * - * Results: - * See docs. - * - * Side effects: - * See docs. - * - *---------------------------------------------------------------------- - */ - - int - NsTclSleepObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) - { - Ns_Time time; - int ms; - - if (objc != 2) { - Tcl_WrongNumArgs(interp, 1, objv, "timespec"); - return TCL_ERROR; - } - if (Ns_TclGetTimeFromObj(interp, objv[1], &time) != TCL_OK) { - return TCL_ERROR; - } - Ns_AdjTime(&time); - if (time.sec < 0 || (time.sec == 0 && time.usec < 0)) { - Tcl_AppendResult(interp, "invalid timespec: ", - Tcl_GetString(objv[1]), NULL); - return TCL_ERROR; - } - ms = time.sec * 1000 + time.usec / 1000; - Tcl_Sleep(ms); - return TCL_OK; - } - - - /* - *---------------------------------------------------------------------- - * * NsTclHTUUEncodeObjCmd -- * --- 272,275 ---- *************** *** 445,609 **** *---------------------------------------------------------------------- * - * NsTclTimeObjCmd -- - * - * Implements ns_time. - * - * Results: - * Tcl result. - * - * Side effects: - * See docs. - * - *---------------------------------------------------------------------- - */ - - int - NsTclTimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) - { - int opt; - Ns_Time result, t1, t2; - static CONST char *opts[] = { - "adjust", "diff", "get", "incr", "make", "seconds", - "microseconds", NULL - }; - enum { - TAdjustIdx, TDiffIdx, TGetIdx, TIncrIdx, TMakeIdx, - TSecondsIdx, TMicroSecondsIdx - }; - - if (objc < 2) { - Tcl_SetLongObj(Tcl_GetObjResult(interp), time(NULL)); - } else { - if (Tcl_GetIndexFromObj(interp, objv[1], opts, "option", 0, - &opt) != TCL_OK) { - return TCL_ERROR; - } - switch (opt) { - case TGetIdx: - Ns_GetTime(&result); - break; - - case TMakeIdx: - if (objc != 3 && objc != 4) { - Tcl_WrongNumArgs(interp, 2, objv, "sec ?usec?"); - return TCL_ERROR; - } - if (Tcl_GetLongFromObj(interp, objv[2], &result.sec) != TCL_OK) { - return TCL_ERROR; - } - if (objc == 3) { - result.usec = 0; - } else if (Tcl_GetLongFromObj(interp, objv[3], &result.usec) != TCL_OK) { - return TCL_ERROR; - } - break; - - case TIncrIdx: - if (objc != 4 && objc != 5) { - Tcl_WrongNumArgs(interp, 2, objv, "time sec ?usec?"); - return TCL_ERROR; - } - if (Ns_TclGetTimeFromObj(interp, objv[2], &result) != TCL_OK || - Tcl_GetLongFromObj(interp, objv[3], &t2.sec) != TCL_OK) { - return TCL_ERROR; - } - if (objc == 4) { - t2.usec = 0; - } else if (Tcl_GetLongFromObj(interp, objv[4], &t2.usec) != TCL_OK) { - return TCL_ERROR; - } - Ns_IncrTime(&result, t2.sec, t2.usec); - break; - - case TDiffIdx: - if (objc != 4) { - Tcl_WrongNumArgs(interp, 2, objv, "time1 time2"); - return TCL_ERROR; - } - if (Ns_TclGetTimeFromObj(interp, objv[2], &t1) != TCL_OK || - Ns_TclGetTimeFromObj(interp, objv[3], &t2) != TCL_OK) { - return TCL_ERROR; - } - Ns_DiffTime(&t1, &t2, &result); - break; - - case TAdjustIdx: - if (objc != 3) { - Tcl_WrongNumArgs(interp, 2, objv, "time"); - return TCL_ERROR; - } - if (Ns_TclGetTimeFromObj(interp, objv[2], &result) != TCL_OK) { - return TCL_ERROR; - } - Ns_AdjTime(&result); - break; - - case TSecondsIdx: - case TMicroSecondsIdx: - if (objc != 3) { - Tcl_WrongNumArgs(interp, 2, objv, "time"); - return TCL_ERROR; - } - if (Ns_TclGetTimeFromObj(interp, objv[2], &result) != TCL_OK) { - return TCL_ERROR; - } - Tcl_SetLongObj(Tcl_GetObjResult(interp), - opt == TSecondsIdx ? result.sec : result.usec); - return TCL_OK; - break; - } - Ns_TclSetTimeObj(Tcl_GetObjResult(interp), &result); - } - return TCL_OK; - } - - - /* - *---------------------------------------------------------------------- - * - * NsTclStrftimeObjCmd -- - * - * Implements ns_fmttime. - * - * Results: - * Tcl result. - * - * Side effects: - * See docs. - * - *---------------------------------------------------------------------- - */ - - int - NsTclStrftimeObjCmd(ClientData dummy, Tcl_Interp *interp, int objc, Tcl_Obj **objv) - { - char *fmt, buf[200]; - time_t time; - - if (objc != 2 && objc != 3) { - Tcl_WrongNumArgs(interp, 1, objv, "time ?fmt?"); - return TCL_ERROR; - } - if (Tcl_GetLongFromObj(interp, objv[1], &time) != TCL_OK) { - return TCL_ERROR; - } - if (objc > 2) { - fmt = Tcl_GetString(objv[2]); - } else { - fmt = "%c"; - } - if (strftime(buf, sizeof(buf), fmt, ns_localtime(&time)) == 0) { - Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "invalid time: ", - Tcl_GetString(objv[1]), NULL); - return TCL_ERROR; - } - Tcl_SetResult(interp, buf, TCL_VOLATILE); - return TCL_OK; - } - - - /* - *---------------------------------------------------------------------- - * * NsTclCrashCmd -- * --- 345,348 ---- |
From: Stephen D. <sd...@us...> - 2005-07-12 08:26:14
|
Update of /cvsroot/naviserver/naviserver/include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15129/include Modified Files: ns.h Log Message: * include/ns.h: * nsd/Makefile: * nsd/tclmisc.c: * nsd/tclobj.c: * nsd/tcltime.c: Consolidate Tcl time functions and object type into one place. Index: ns.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/include/ns.h,v retrieving revision 1.34 retrieving revision 1.35 diff -C2 -d -r1.34 -r1.35 *** ns.h 12 Jul 2005 07:31:38 -0000 1.34 --- ns.h 12 Jul 2005 08:26:04 -0000 1.35 *************** *** 830,835 **** void *value); NS_EXTERN void Ns_TclSetStringRep(Tcl_Obj *objPtr, char *bytes, int length); - NS_EXTERN void Ns_TclSetTimeObj(Tcl_Obj *objPtr, Ns_Time *timePtr); - NS_EXTERN int Ns_TclGetTimeFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, Ns_Time *timePtr); /* --- 830,833 ---- *************** *** 861,864 **** --- 859,869 ---- /* + * tcltime.c + */ + + NS_EXTERN void Ns_TclSetTimeObj(Tcl_Obj *objPtr, Ns_Time *timePtr); + NS_EXTERN int Ns_TclGetTimeFromObj(Tcl_Interp *interp, Tcl_Obj *objPtr, Ns_Time *timePtr); + + /* * tclxkeylist.c: */ |
From: Stephen D. <sd...@us...> - 2005-07-12 08:26:13
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15129 Modified Files: ChangeLog Log Message: * include/ns.h: * nsd/Makefile: * nsd/tclmisc.c: * nsd/tclobj.c: * nsd/tcltime.c: Consolidate Tcl time functions and object type into one place. Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.163 retrieving revision 1.164 diff -C2 -d -r1.163 -r1.164 *** ChangeLog 12 Jul 2005 07:31:38 -0000 1.163 --- ChangeLog 12 Jul 2005 08:26:04 -0000 1.164 *************** *** 1,2 **** --- 1,11 ---- + 2005-07-12 Stephen Deasey <sd...@us...> + + * include/ns.h: + * nsd/Makefile: + * nsd/tclmisc.c: + * nsd/tclobj.c: + * nsd/tcltime.c: Consolidate Tcl time functions and object type + into one place. + 2005-07-11 Stephen Deasey <sd...@us...> |
From: Stephen D. <sd...@us...> - 2005-07-12 07:32:39
|
Update of /cvsroot/naviserver/naviserver/nsperm In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20670/nsperm Modified Files: nsperm.c Log Message: 2005-07-11 Stephen Deasey <sd...@us...> * include/ns.h: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/proc.c: * nsd/tclinit.c: Add generalised interp tracing mechanism which replaces Ns_TclInitInterps, Ns_TclRegisterDeferred etc. Restructured code for clarity. * nsd/tclset.c: * nsd/tclshare.c: * nsd/tclthread.c: * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g * nsd/Makefile: * nsd/connio.c: * nsd/tclatclose.c: Moved at-close traces into tclinit.c. * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. * nsdb/db.h: * nsdb/nsdb.h: * nslog/nslog.c: * nsperm/nsperm.c: Remove usage of deprecated functions. Index: nsperm.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsperm/nsperm.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** nsperm.c 10 Jun 2005 17:58:57 -0000 1.2 --- nsperm.c 12 Jul 2005 07:31:40 -0000 1.3 *************** *** 98,102 **** static Tcl_CmdProc PermCmd; ! static int AddCmds(Tcl_Interp *interp, void *arg); static int AddUserCmd(Server *servPtr, Tcl_Interp *interp, int argc, char **argv); --- 98,102 ---- static Tcl_CmdProc PermCmd; ! static Ns_TclTraceProc AddCmds; static int AddUserCmd(Server *servPtr, Tcl_Interp *interp, int argc, char **argv); *************** *** 153,157 **** Ns_RWLockInit(&servPtr->lock); Ns_SetRequestAuthorizeProc(server, AuthProc); ! Ns_TclInitInterps(server, AddCmds, servPtr); hPtr = Tcl_CreateHashEntry(&serversTable, server, &new); Tcl_SetHashValue(hPtr, servPtr); --- 153,157 ---- Ns_RWLockInit(&servPtr->lock); Ns_SetRequestAuthorizeProc(server, AuthProc); ! Ns_TclRegisterTrace(server, AddCmds, servPtr, NS_TCL_TRACE_CREATE); hPtr = Tcl_CreateHashEntry(&serversTable, server, &new); Tcl_SetHashValue(hPtr, servPtr); |
From: Stephen D. <sd...@us...> - 2005-07-12 07:32:39
|
Update of /cvsroot/naviserver/naviserver/nslog In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20670/nslog Modified Files: nslog.c Log Message: 2005-07-11 Stephen Deasey <sd...@us...> * include/ns.h: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/proc.c: * nsd/tclinit.c: Add generalised interp tracing mechanism which replaces Ns_TclInitInterps, Ns_TclRegisterDeferred etc. Restructured code for clarity. * nsd/tclset.c: * nsd/tclshare.c: * nsd/tclthread.c: * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g * nsd/Makefile: * nsd/connio.c: * nsd/tclatclose.c: Moved at-close traces into tclinit.c. * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. * nsdb/db.h: * nsdb/nsdb.h: * nslog/nslog.c: * nsperm/nsperm.c: Remove usage of deprecated functions. Index: nslog.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nslog/nslog.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** nslog.c 11 Jun 2005 20:00:48 -0000 1.8 --- nslog.c 12 Jul 2005 07:31:40 -0000 1.9 *************** *** 136,140 **** static Ns_ArgProc LogArg; static Tcl_CmdProc LogCmd; ! static Ns_TclInterpInitProc AddCmds; /* --- 136,140 ---- static Ns_ArgProc LogArg; static Tcl_CmdProc LogCmd; ! static Ns_TclTraceProc AddCmds; /* *************** *** 265,269 **** Ns_RegisterServerTrace(server,LogTrace,logPtr); Ns_RegisterAtShutdown(LogCloseCallback,logPtr); ! Ns_TclInitInterps(server,AddCmds,logPtr); return NS_OK; } --- 265,270 ---- Ns_RegisterServerTrace(server,LogTrace,logPtr); Ns_RegisterAtShutdown(LogCloseCallback,logPtr); ! Ns_TclRegisterTrace(server, AddCmds, logPtr, NS_TCL_TRACE_CREATE); ! return NS_OK; } |
From: Stephen D. <sd...@us...> - 2005-07-12 07:32:39
|
Update of /cvsroot/naviserver/naviserver/include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20670/include Modified Files: ns.h Log Message: 2005-07-11 Stephen Deasey <sd...@us...> * include/ns.h: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/proc.c: * nsd/tclinit.c: Add generalised interp tracing mechanism which replaces Ns_TclInitInterps, Ns_TclRegisterDeferred etc. Restructured code for clarity. * nsd/tclset.c: * nsd/tclshare.c: * nsd/tclthread.c: * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g * nsd/Makefile: * nsd/connio.c: * nsd/tclatclose.c: Moved at-close traces into tclinit.c. * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. * nsdb/db.h: * nsdb/nsdb.h: * nslog/nslog.c: * nsperm/nsperm.c: Remove usage of deprecated functions. Index: ns.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/include/ns.h,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** ns.h 12 Jul 2005 03:16:05 -0000 1.33 --- ns.h 12 Jul 2005 07:31:38 -0000 1.34 *************** *** 111,114 **** --- 111,125 ---- #define NS_DRIVER_VERSION_1 1 + /* + * The following are valid Tcl interp traces. + */ + + #define NS_TCL_TRACE_CREATE 0x01 + #define NS_TCL_TRACE_DELETE 0x02 + #define NS_TCL_TRACE_ALLOCATE 0x04 + #define NS_TCL_TRACE_DEALLOCATE 0x08 + #define NS_TCL_TRACE_GETCONN 0x10 + #define NS_TCL_TRACE_FREECONN 0x20 + #if defined(__alpha) typedef long ns_int64; *************** *** 845,849 **** */ ! NS_EXTERN int Ns_TclThread(Tcl_Interp *interp, char *script, Ns_Thread *thrPtr); NS_EXTERN int Ns_TclDetachedThread(Tcl_Interp *interp, char *script); --- 856,861 ---- */ ! NS_EXTERN int Ns_TclThread(Tcl_Interp *interp, char *script, Ns_Thread *thrPtr) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2); NS_EXTERN int Ns_TclDetachedThread(Tcl_Interp *interp, char *script); *************** *** 1223,1254 **** */ ! NS_EXTERN int Ns_TclInit(Tcl_Interp *interp); ! NS_EXTERN void Ns_TclPrintfResult(Tcl_Interp *interp, char *fmt, ...) NS_GNUC_PRINTF(2, 3); ! NS_EXTERN int Nsd_Init(Tcl_Interp *interp); ! NS_EXTERN int Ns_TclInitInterps(char *server, Ns_TclInterpInitProc *proc, void *arg); ! NS_EXTERN int Ns_TclInitModule(char *server, char *module); ! NS_EXTERN void Ns_TclRegisterDeferred(Tcl_Interp *interp, Ns_TclDeferProc *proc, void *arg); ! NS_EXTERN void Ns_TclMarkForDelete(Tcl_Interp *interp); ! NS_EXTERN Tcl_Interp *Ns_TclCreateInterp(void); ! NS_EXTERN void Ns_TclDestroyInterp(Tcl_Interp *interp); ! NS_EXTERN Tcl_Interp *Ns_TclAllocateInterp(CONST char *server); ! NS_EXTERN void Ns_TclDeAllocateInterp(Tcl_Interp *interp); ! NS_EXTERN char *Ns_TclLibrary(char *server); ! NS_EXTERN char *Ns_TclInterpServer(Tcl_Interp *interp); ! NS_EXTERN Ns_Conn *Ns_TclGetConn(Tcl_Interp *interp); ! NS_EXTERN int Ns_TclRegisterAtCreate(Ns_TclTraceProc *proc, void *arg); ! NS_EXTERN int Ns_TclRegisterAtCleanup(Ns_TclTraceProc *proc, void *arg); ! NS_EXTERN int Ns_TclRegisterAtDelete(Ns_TclTraceProc *proc, void *arg); /* ! * tclop.c: */ NS_EXTERN int Ns_TclRequest(Ns_Conn *conn, char *proc); - NS_EXTERN int Ns_TclEval(Ns_DString *pds, char *server, char *script); - NS_EXTERN char *Ns_TclLogError(Tcl_Interp *interp); - NS_EXTERN char *Ns_TclLogErrorRequest(Tcl_Interp *interp, Ns_Conn *conn); - NS_EXTERN Tcl_Interp *Ns_GetConnInterp(Ns_Conn *conn); - NS_EXTERN void Ns_FreeConnInterp(Ns_Conn *conn); /* --- 1235,1334 ---- */ ! NS_EXTERN int ! Nsd_Init(Tcl_Interp *interp); ! ! NS_EXTERN Tcl_Interp * ! Ns_TclCreateInterp(void); ! ! NS_EXTERN int ! Ns_TclInit(Tcl_Interp *interp) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN int ! Ns_TclEval(Ns_DString *dsPtr, CONST char *server, CONST char *script) ! NS_GNUC_NONNULL(3); ! ! NS_EXTERN Tcl_Interp * ! Ns_TclAllocateInterp(CONST char *server); ! ! NS_EXTERN void ! Ns_TclDeAllocateInterp(Tcl_Interp *interp) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN Tcl_Interp * ! Ns_GetConnInterp(Ns_Conn *conn) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN Ns_Conn * ! Ns_TclGetConn(Tcl_Interp *interp) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN void ! Ns_TclDestroyInterp(Tcl_Interp *interp) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN void ! Ns_TclMarkForDelete(Tcl_Interp *interp) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN int ! Ns_TclRegisterTrace(CONST char *server, Ns_TclTraceProc *proc, void *arg, int when) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2); ! ! NS_EXTERN char * ! Ns_TclLibrary(CONST char *server); ! ! NS_EXTERN char * ! Ns_TclInterpServer(Tcl_Interp *interp) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN char * ! Ns_TclLogError(Tcl_Interp *interp) ! NS_GNUC_NONNULL(1); ! ! NS_EXTERN char * ! Ns_TclLogErrorRequest(Tcl_Interp *interp, Ns_Conn *conn) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2); ! ! NS_EXTERN int ! Ns_TclInitModule(CONST char *server, CONST char *module) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2); ! ! NS_EXTERN void ! Ns_FreeConnInterp(Ns_Conn *conn) ! NS_GNUC_DEPRECATED; ! ! NS_EXTERN int ! Ns_TclRegisterAtCreate(Ns_TclTraceProc *proc, void *arg) ! NS_GNUC_NONNULL(1) NS_GNUC_DEPRECATED; ! ! NS_EXTERN int ! Ns_TclRegisterAtCleanup(Ns_TclTraceProc *proc, void *arg) ! NS_GNUC_NONNULL(1) NS_GNUC_DEPRECATED; ! ! NS_EXTERN int ! Ns_TclRegisterAtDelete(Ns_TclTraceProc *proc, void *arg) ! NS_GNUC_NONNULL(1) NS_GNUC_DEPRECATED; ! ! NS_EXTERN int ! Ns_TclInitInterps(CONST char *server, Ns_TclInterpInitProc *proc, void *arg) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2) NS_GNUC_DEPRECATED; ! ! NS_EXTERN void ! Ns_TclRegisterDeferred(Tcl_Interp *interp, Ns_TclDeferProc *proc, void *arg) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2) NS_GNUC_DEPRECATED; /* ! * tclmisc.c ! */ ! ! NS_EXTERN void Ns_TclPrintfResult(Tcl_Interp *interp, char *fmt, ...) ! NS_GNUC_PRINTF(2, 3); ! ! /* ! * tclrequest.c: */ NS_EXTERN int Ns_TclRequest(Ns_Conn *conn, char *proc); /* *************** *** 1256,1263 **** */ ! NS_EXTERN int Ns_TclEnterSet(Tcl_Interp *interp, Ns_Set *set, int flags); ! NS_EXTERN Ns_Set *Ns_TclGetSet(Tcl_Interp *interp, char *setId); ! NS_EXTERN int Ns_TclGetSet2(Tcl_Interp *interp, char *setId, Ns_Set **setPtrPtr); ! NS_EXTERN int Ns_TclFreeSet(Tcl_Interp *interp, char *setId); /* --- 1336,1347 ---- */ ! NS_EXTERN int Ns_TclEnterSet(Tcl_Interp *interp, Ns_Set *set, int flags) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2); ! NS_EXTERN Ns_Set *Ns_TclGetSet(Tcl_Interp *interp, char *setId) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2); ! NS_EXTERN int Ns_TclGetSet2(Tcl_Interp *interp, char *setId, Ns_Set **setPtrPtr) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2) NS_GNUC_NONNULL(3); ! NS_EXTERN int Ns_TclFreeSet(Tcl_Interp *interp, char *setId) ! NS_GNUC_NONNULL(1) NS_GNUC_NONNULL(2); /* |
From: Stephen D. <sd...@us...> - 2005-07-12 07:32:37
|
Update of /cvsroot/naviserver/naviserver/nsdb In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20670/nsdb Modified Files: db.h dbtcl.c nsdb.c Log Message: 2005-07-11 Stephen Deasey <sd...@us...> * include/ns.h: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/proc.c: * nsd/tclinit.c: Add generalised interp tracing mechanism which replaces Ns_TclInitInterps, Ns_TclRegisterDeferred etc. Restructured code for clarity. * nsd/tclset.c: * nsd/tclshare.c: * nsd/tclthread.c: * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g * nsd/Makefile: * nsd/connio.c: * nsd/tclatclose.c: Moved at-close traces into tclinit.c. * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. * nsdb/db.h: * nsdb/nsdb.h: * nslog/nslog.c: * nsperm/nsperm.c: Remove usage of deprecated functions. Index: db.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsdb/db.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** db.h 16 Feb 2005 08:40:44 -0000 1.1.1.1 --- db.h 12 Jul 2005 07:31:40 -0000 1.2 *************** *** 35,39 **** extern void NsDbInitPools(void); extern void NsDbInitServer(char *server); ! extern Ns_TclInterpInitProc NsDbAddCmds; extern void NsDbClose(Ns_DbHandle *); extern void NsDbDisconnect(Ns_DbHandle *); --- 35,39 ---- extern void NsDbInitPools(void); extern void NsDbInitServer(char *server); ! extern Ns_TclTraceProc NsDbAddCmds; extern void NsDbClose(Ns_DbHandle *); extern void NsDbDisconnect(Ns_DbHandle *); Index: nsdb.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsdb/nsdb.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** nsdb.c 10 Jun 2005 17:58:42 -0000 1.2 --- nsdb.c 12 Jul 2005 07:31:40 -0000 1.3 *************** *** 67,70 **** } NsDbInitServer(server); ! return Ns_TclInitInterps(server, NsDbAddCmds, server); } --- 67,71 ---- } NsDbInitServer(server); ! return Ns_TclRegisterTrace(server, NsDbAddCmds, server, ! NS_TCL_TRACE_CREATE); } Index: dbtcl.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsdb/dbtcl.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** dbtcl.c 10 Jun 2005 17:58:42 -0000 1.2 --- dbtcl.c 12 Jul 2005 07:31:40 -0000 1.3 *************** *** 45,49 **** typedef struct InterpData { char *server; - int cleanup; Tcl_HashTable dbs; } InterpData; --- 45,48 ---- *************** *** 61,65 **** static Tcl_CmdProc DbCmd, QuoteListToListCmd, GetCsvCmd, DbErrorCodeCmd, DbErrorMsgCmd, GetCsvCmd, DbConfigPathCmd, PoolDescriptionCmd; ! static Ns_TclDeferProc ReleaseDbs; static char *datakey = "nsdb:data"; --- 60,64 ---- static Tcl_CmdProc DbCmd, QuoteListToListCmd, GetCsvCmd, DbErrorCodeCmd, DbErrorMsgCmd, GetCsvCmd, DbConfigPathCmd, PoolDescriptionCmd; ! static Ns_TclTraceProc ReleaseDbs; static char *datakey = "nsdb:data"; *************** *** 112,115 **** --- 111,115 ---- NsDbAddCmds(Tcl_Interp *interp, void *arg) { + char *server = arg; InterpData *idataPtr; *************** *** 119,126 **** idataPtr = ns_malloc(sizeof(InterpData)); ! idataPtr->server = arg; ! idataPtr->cleanup = 0; Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); Tcl_SetAssocData(interp, datakey, FreeData, idataPtr); Tcl_CreateCommand(interp, "ns_db", DbCmd, idataPtr, NULL); --- 119,126 ---- idataPtr = ns_malloc(sizeof(InterpData)); ! idataPtr->server = server; Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); Tcl_SetAssocData(interp, datakey, FreeData, idataPtr); + Ns_TclRegisterTrace(server, ReleaseDbs, NULL, NS_TCL_TRACE_DEALLOCATE); Tcl_CreateCommand(interp, "ns_db", DbCmd, idataPtr, NULL); *************** *** 132,135 **** --- 132,136 ---- Tcl_CreateCommand(interp, "ns_dbconfigpath", DbConfigPathCmd, idataPtr, NULL); Tcl_CreateCommand(interp, "ns_pooldescription", PoolDescriptionCmd, idataPtr, NULL); + return TCL_OK; } *************** *** 949,956 **** char buf[100]; - if (!idataPtr->cleanup) { - Ns_TclRegisterDeferred(interp, ReleaseDbs, idataPtr); - idataPtr->cleanup = 1; - } next = idataPtr->dbs.numEntries; do { --- 950,953 ---- *************** *** 1064,1083 **** */ ! static void ReleaseDbs(Tcl_Interp *interp, void *arg) { ! Ns_DbHandle *handlePtr; Tcl_HashEntry *hPtr; Tcl_HashSearch search; ! InterpData *idataPtr = arg; ! hPtr = Tcl_FirstHashEntry(&idataPtr->dbs, &search); ! while (hPtr != NULL) { ! handlePtr = Tcl_GetHashValue(hPtr); ! Ns_DbPoolPutHandle(handlePtr); ! hPtr = Tcl_NextHashEntry(&search); } ! Tcl_DeleteHashTable(&idataPtr->dbs); ! Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); ! idataPtr->cleanup = 0; } --- 1061,1084 ---- */ ! static int ReleaseDbs(Tcl_Interp *interp, void *arg) { ! Ns_DbHandle *handlePtr; Tcl_HashEntry *hPtr; Tcl_HashSearch search; ! InterpData *idataPtr; ! idataPtr = Tcl_GetAssocData(interp, datakey, NULL); ! if (idataPtr != NULL) { ! hPtr = Tcl_FirstHashEntry(&idataPtr->dbs, &search); ! while (hPtr != NULL) { ! handlePtr = Tcl_GetHashValue(hPtr); ! Ns_DbPoolPutHandle(handlePtr); ! hPtr = Tcl_NextHashEntry(&search); ! } ! Tcl_DeleteHashTable(&idataPtr->dbs); ! Tcl_InitHashTable(&idataPtr->dbs, TCL_STRING_KEYS); } ! ! return TCL_OK; } |
From: Stephen D. <sd...@us...> - 2005-07-12 07:32:17
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20670 Modified Files: ChangeLog Log Message: 2005-07-11 Stephen Deasey <sd...@us...> * include/ns.h: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/proc.c: * nsd/tclinit.c: Add generalised interp tracing mechanism which replaces Ns_TclInitInterps, Ns_TclRegisterDeferred etc. Restructured code for clarity. * nsd/tclset.c: * nsd/tclshare.c: * nsd/tclthread.c: * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g * nsd/Makefile: * nsd/connio.c: * nsd/tclatclose.c: Moved at-close traces into tclinit.c. * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. * nsdb/db.h: * nsdb/nsdb.h: * nslog/nslog.c: * nsperm/nsperm.c: Remove usage of deprecated functions. Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.162 retrieving revision 1.163 diff -C2 -d -r1.162 -r1.163 *** ChangeLog 12 Jul 2005 03:37:23 -0000 1.162 --- ChangeLog 12 Jul 2005 07:31:38 -0000 1.163 *************** *** 1,2 **** --- 1,30 ---- + 2005-07-11 Stephen Deasey <sd...@us...> + + * include/ns.h: + * nsd/nsd.h: + * nsd/nsmain.c: + * nsd/queue.c: + * nsd/tclcmds.c: + * nsd/proc.c: + * nsd/tclinit.c: Add generalised interp tracing mechanism which + replaces Ns_TclInitInterps, Ns_TclRegisterDeferred + etc. Restructured code for clarity. + + * nsd/tclset.c: + * nsd/tclshare.c: + * nsd/tclthread.c: + * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g + + * nsd/Makefile: + * nsd/connio.c: + * nsd/tclatclose.c: Moved at-close traces into tclinit.c. + + * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. + + * nsdb/db.h: + * nsdb/nsdb.h: + * nslog/nslog.c: + * nsperm/nsperm.c: Remove usage of deprecated functions. + 2005-07-11 Vlad Seryakov <ser...@us...> |
From: Stephen D. <sd...@us...> - 2005-07-12 07:31:50
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20670/nsd Modified Files: Makefile adprequest.c connio.c nsd.h nsmain.c proc.c queue.c tclcmds.c tclinit.c tclmisc.c tclset.c tclshare.c tclthread.c Removed Files: tclatclose.c Log Message: 2005-07-11 Stephen Deasey <sd...@us...> * include/ns.h: * nsd/nsd.h: * nsd/nsmain.c: * nsd/queue.c: * nsd/tclcmds.c: * nsd/proc.c: * nsd/tclinit.c: Add generalised interp tracing mechanism which replaces Ns_TclInitInterps, Ns_TclRegisterDeferred etc. Restructured code for clarity. * nsd/tclset.c: * nsd/tclshare.c: * nsd/tclthread.c: * nsd/adprequest.c: s/NsGetInterp/NsGetInterpData/g * nsd/Makefile: * nsd/connio.c: * nsd/tclatclose.c: Moved at-close traces into tclinit.c. * nsd/tclmisc.c: Move Ns_TclPrintfResult into misc. * nsdb/db.h: * nsdb/nsdb.h: * nslog/nslog.c: * nsperm/nsperm.c: Remove usage of deprecated functions. Index: tclmisc.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclmisc.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** tclmisc.c 13 Jun 2005 06:14:26 -0000 1.9 --- tclmisc.c 12 Jul 2005 07:31:39 -0000 1.10 *************** *** 49,52 **** --- 49,82 ---- *---------------------------------------------------------------------- * + * Ns_TclPrintfResult -- + * + * Leave a formatted message in the given Tcl interps result. + * + * Results: + * None. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + + void + Ns_TclPrintfResult(Tcl_Interp *interp, char *fmt, ...) + { + va_list ap; + Tcl_DString ds; + + Tcl_DStringInit(&ds); + va_start(ap, fmt); + Ns_DStringVPrintf(&ds, fmt, ap); + va_end(ap); + Tcl_DStringResult(interp, &ds); + } + + + /* + *---------------------------------------------------------------------- + * * NsTclStripHtmlCmd -- * Index: tclinit.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclinit.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** tclinit.c 7 Jul 2005 03:31:02 -0000 1.8 --- tclinit.c 12 Jul 2005 07:31:39 -0000 1.9 *************** *** 31,35 **** * tclinit.c -- * ! * Initialization routines for Tcl. */ --- 31,35 ---- * tclinit.c -- * ! * Initialization and resource management routines for Tcl. */ [...2911 lines suppressed...] } --- 1661,1678 ---- static void ! RunTraces(NsInterp *itPtr, int why) { Trace *tracePtr; if (itPtr->servPtr != NULL) { ! tracePtr = itPtr->servPtr->tcl.firstTracePtr; ! while (tracePtr != NULL) { ! if ((tracePtr->when & why)) { ! if ((*tracePtr->proc)(itPtr->interp, tracePtr->arg) != TCL_OK) { ! Ns_TclLogError(itPtr->interp); ! } ! } ! tracePtr = tracePtr->nextPtr; ! } } } Index: nsd.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/nsd.h,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** nsd.h 8 Jul 2005 15:38:27 -0000 1.21 --- nsd.h 12 Jul 2005 07:31:39 -0000 1.22 *************** *** 469,473 **** Ns_Time startTime; ! Tcl_Interp *interp; Tcl_Encoding encoding; --- 469,473 ---- Ns_Time startTime; ! struct NsInterp *itPtr; Tcl_Encoding encoding; *************** *** 641,645 **** struct { char *library; ! struct Trace *traces[4]; char *initfile; Ns_RWLock lock; --- 641,645 ---- struct { char *library; ! struct Trace *firstTracePtr; char *initfile; Ns_RWLock lock; *************** *** 860,866 **** extern NsServer *NsGetServer(CONST char *server); extern NsServer *NsGetInitServer(void); ! extern NsInterp *NsGetInterp(Tcl_Interp *interp); extern int NsInitInterp(Tcl_Interp *interp, NsServer *servPtr, ! NsInterp **itPtrPtr); extern Ns_OpProc NsFastGet; --- 860,869 ---- extern NsServer *NsGetServer(CONST char *server); extern NsServer *NsGetInitServer(void); ! extern NsInterp *NsGetInterpData(Tcl_Interp *interp) NS_GNUC_NONNULL(1); extern int NsInitInterp(Tcl_Interp *interp, NsServer *servPtr, ! NsInterp **itPtrPtr) ! NS_GNUC_NONNULL(1); ! extern void NsFreeConnInterp(Conn *connPtr) ! NS_GNUC_NONNULL(1); extern Ns_OpProc NsFastGet; *************** *** 870,875 **** extern void NsFreeAdp(NsInterp *itPtr); ! extern void NsFreeAtClose(NsInterp *itPtr); ! extern void NsRunAtClose(Tcl_Interp *interp); extern int NsUrlToFile(Ns_DString *dsPtr, NsServer *servPtr, char *url); --- 873,878 ---- extern void NsFreeAdp(NsInterp *itPtr); ! extern void NsTclRunAtClose(NsInterp *itPtr) ! NS_GNUC_NONNULL(1); extern int NsUrlToFile(Ns_DString *dsPtr, NsServer *servPtr, char *url); *************** *** 895,898 **** --- 898,902 ---- extern Ns_OpProc NsAdpRequest; extern Ns_ArgProc NsTclRequestArgProc; + extern Ns_TclTraceProc NsTclTraceProc; extern void NsGetCallbacks(Tcl_DString *dsPtr); *************** *** 945,955 **** extern void NsWaitJobsShutdown(Ns_Time *toPtr); ! extern void NsTclInitServer(char *server); extern void NsLoadModules(char *server); extern struct Bucket *NsTclCreateBuckets(char *server, int nbuckets); extern void NsClsCleanup(Conn *connPtr); ! extern void NsTclAddCmds(Tcl_Interp *interp, NsInterp *itPtr); ! extern void NsTclAddServerCmds(Tcl_Interp *interp, NsInterp *itPtr); extern void NsRestoreSignals(void); --- 949,960 ---- extern void NsWaitJobsShutdown(Ns_Time *toPtr); ! extern void NsTclInitServer(CONST char *server) ! NS_GNUC_NONNULL(1); extern void NsLoadModules(char *server); extern struct Bucket *NsTclCreateBuckets(char *server, int nbuckets); extern void NsClsCleanup(Conn *connPtr); ! extern void NsTclAddBasicCmds(NsInterp *itPtr); ! extern void NsTclAddServerCmds(NsInterp *itPtr); extern void NsRestoreSignals(void); *************** *** 980,987 **** */ - extern Ns_TclInterpInitProc NsTclCreateCmds; extern void NsTclInitQueueType(void); extern void NsTclInitAddrType(void); extern void NsTclInitTimeType(void); extern void NsTclInitSpecType(void); --- 985,992 ---- */ extern void NsTclInitQueueType(void); extern void NsTclInitAddrType(void); extern void NsTclInitTimeType(void); + extern void NsTclInitKeylistType(void); extern void NsTclInitSpecType(void); *************** *** 1007,1011 **** extern int NsMemMap(char *path, int size, int mode, FileMap *mapPtr); extern void NsMemUmap(FileMap *mapPtr); - extern int Ns_ConnSend(Ns_Conn *conn, struct iovec *bufs, int nbufs); #ifndef _WIN32 --- 1012,1015 ---- Index: tclshare.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclshare.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** tclshare.c 10 Jun 2005 17:58:41 -0000 1.2 --- tclshare.c 12 Jul 2005 07:31:39 -0000 1.3 *************** *** 453,457 **** char *name; Tcl_DString ds; /* Buffer for globalized name */ ! NsInterp *itPtr = NsGetInterp(interp); NsServer *servPtr = itPtr->servPtr; --- 453,457 ---- char *name; Tcl_DString ds; /* Buffer for globalized name */ ! NsInterp *itPtr = NsGetInterpData(interp); NsServer *servPtr = itPtr->servPtr; Index: tclthread.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclthread.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tclthread.c 12 Jun 2005 14:42:44 -0000 1.3 --- tclthread.c 12 Jul 2005 07:31:39 -0000 1.4 *************** *** 597,601 **** Ns_TclThread(Tcl_Interp *interp, char *script, Ns_Thread *thrPtr) { ! NsInterp *itPtr = NsGetInterp(interp); CreateTclThread(itPtr, script, (thrPtr == NULL), thrPtr); --- 597,601 ---- Ns_TclThread(Tcl_Interp *interp, char *script, Ns_Thread *thrPtr) { ! NsInterp *itPtr = NsGetInterpData(interp); CreateTclThread(itPtr, script, (thrPtr == NULL), thrPtr); Index: Makefile =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/Makefile,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Makefile 26 Mar 2005 16:40:40 -0000 1.4 --- Makefile 12 Jul 2005 07:31:39 -0000 1.5 *************** *** 45,49 **** nsmain.o nsthread.o op.o pathname.o pidfile.o proc.o queue.o \ quotehtml.o random.o request.o return.o rollfile.o sched.o \ ! server.o set.o sock.o sockcallback.o str.o tclatclose.o \ tclcallbacks.o tclcmds.o tclconf.o tclenv.o tclfile.o tclhttp.o tclimg.o \ tclinit.o tcljob.o tclmisc.o tclobj.o tclobjv.o tclrequest.o tclresp.o \ --- 45,49 ---- nsmain.o nsthread.o op.o pathname.o pidfile.o proc.o queue.o \ quotehtml.o random.o request.o return.o rollfile.o sched.o \ ! server.o set.o sock.o sockcallback.o str.o \ tclcallbacks.o tclcmds.o tclconf.o tclenv.o tclfile.o tclhttp.o tclimg.o \ tclinit.o tcljob.o tclmisc.o tclobj.o tclobjv.o tclrequest.o tclresp.o \ Index: queue.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/queue.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** queue.c 6 Jul 2005 07:12:18 -0000 1.4 --- queue.c 12 Jul 2005 07:31:39 -0000 1.5 *************** *** 803,807 **** NsRunCleanups(conn); NsClsCleanup(connPtr); ! Ns_FreeConnInterp(conn); if (connPtr->authUser != NULL) { ns_free(connPtr->authUser); --- 803,807 ---- NsRunCleanups(conn); NsClsCleanup(connPtr); ! NsFreeConnInterp(connPtr); if (connPtr->authUser != NULL) { ns_free(connPtr->authUser); Index: connio.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/connio.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** connio.c 12 Jul 2005 03:16:05 -0000 1.7 --- connio.c 12 Jul 2005 07:31:39 -0000 1.8 *************** *** 113,118 **** connPtr->sockPtr = NULL; connPtr->flags |= NS_CONN_CLOSED; ! if (connPtr->interp != NULL) { ! NsRunAtClose(connPtr->interp); } } --- 113,118 ---- connPtr->sockPtr = NULL; connPtr->flags |= NS_CONN_CLOSED; ! if (connPtr->itPtr != NULL) { ! NsTclRunAtClose(connPtr->itPtr); } } Index: tclset.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclset.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tclset.c 24 Jun 2005 08:07:25 -0000 1.4 --- tclset.c 12 Jul 2005 07:31:39 -0000 1.5 *************** *** 86,90 **** Ns_TclEnterSet(Tcl_Interp *interp, Ns_Set *set, int flags) { ! NsInterp *itPtr = NsGetInterp(interp); if (itPtr == NULL) { --- 86,90 ---- Ns_TclEnterSet(Tcl_Interp *interp, Ns_Set *set, int flags) { ! NsInterp *itPtr = NsGetInterpData(interp); if (itPtr == NULL) { *************** *** 731,735 **** NsInterp *itPtr; ! itPtr = NsGetInterp(interp); if (itPtr == NULL) { Tcl_SetResult(interp, "ns_set not supported", TCL_STATIC); --- 731,735 ---- NsInterp *itPtr; ! itPtr = NsGetInterpData(interp); if (itPtr == NULL) { Tcl_SetResult(interp, "ns_set not supported", TCL_STATIC); Index: proc.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/proc.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** proc.c 10 Jun 2005 17:58:39 -0000 1.6 --- proc.c 12 Jul 2005 07:31:39 -0000 1.7 *************** *** 80,83 **** --- 80,84 ---- {(void *) NsAdpRequest, "ns:adprequest", Ns_StringArgProc}, {(void *) NsFastGet, "ns:fastget", ServerArgProc}, + {(void *) NsTclTraceProc, "ns:tcltrace", Ns_TclCallbackArgProc}, {NULL, NULL, NULL} }; Index: tclcmds.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclcmds.c,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** tclcmds.c 7 Jul 2005 01:29:02 -0000 1.17 --- tclcmds.c 12 Jul 2005 07:31:39 -0000 1.18 *************** *** 31,35 **** * tclcmds.c -- * ! * Connect Tcl command names to the functions that implement them */ --- 31,35 ---- * tclcmds.c -- * ! * Connect Tcl command names to the functions that implement them. */ *************** *** 64,67 **** --- 64,68 ---- NsTclAdpTruncObjCmd, NsTclAfterObjCmd, + NsTclAtCloseObjCmd, NsTclAtExitObjCmd, NsTclAtShutdownObjCmd, *************** *** 192,196 **** NsTclAdpRegisterProcCmd, NsTclAdpStatsCmd, - NsTclAtCloseCmd, NsTclCacheFlushCmd, NsTclCacheKeysCmd, --- 193,196 ---- *************** *** 234,238 **** */ ! static Cmd cmds[] = { {"env", NsTclEnvCmd, NULL}, {"keyldel", TclX_KeyldelObjCmd, NULL}, --- 234,238 ---- */ ! static Cmd basicCmds[] = { {"env", NsTclEnvCmd, NULL}, {"keyldel", TclX_KeyldelObjCmd, NULL}, *************** *** 382,386 **** {"ns_adp_tell", NULL, NsTclAdpTellObjCmd}, {"ns_adp_trunc", NULL, NsTclAdpTruncObjCmd}, ! {"ns_atclose", NsTclAtCloseCmd, NULL}, {"ns_chan", NULL, NsTclChanObjCmd}, {"ns_checkurl", NULL, NsTclRequestAuthorizeObjCmd}, --- 382,386 ---- {"ns_adp_tell", NULL, NsTclAdpTellObjCmd}, {"ns_adp_trunc", NULL, NsTclAdpTruncObjCmd}, ! {"ns_atclose", NULL, NsTclAtCloseObjCmd}, {"ns_chan", NULL, NsTclChanObjCmd}, {"ns_checkurl", NULL, NsTclRequestAuthorizeObjCmd}, *************** *** 445,457 **** *---------------------------------------------------------------------- * ! * NsTclAddCmds -- * ! * Create basic and server Tcl commands. * * Results: ! * TCL_OK. * * Side effects: ! * None. * *---------------------------------------------------------------------- --- 445,457 ---- *---------------------------------------------------------------------- * ! * NsTclAddBasicCmds, NsTclAddServerCmds -- * ! * Add basic and server Tcl commands to an interp. * * Results: ! * None. * * Side effects: ! * None. * *---------------------------------------------------------------------- *************** *** 459,483 **** static void ! AddCmds(Cmd *cmdPtr, ClientData arg, Tcl_Interp *interp) { while (cmdPtr->name != NULL) { ! if (cmdPtr->objProc != NULL) { ! Tcl_CreateObjCommand(interp, cmdPtr->name, cmdPtr->objProc, arg, NULL); ! } else { ! Tcl_CreateCommand(interp, cmdPtr->name, cmdPtr->proc, arg, NULL); ! } ! ++cmdPtr; } } void ! NsTclAddCmds(Tcl_Interp *interp, NsInterp *itPtr) { ! AddCmds(cmds, itPtr, interp); } void ! NsTclAddServerCmds(Tcl_Interp *interp, NsInterp *itPtr) { ! AddCmds(servCmds, itPtr, interp); } --- 459,485 ---- static void ! AddCmds(Cmd *cmdPtr, NsInterp *itPtr) { + Tcl_Interp *interp = itPtr->interp; + while (cmdPtr->name != NULL) { ! if (cmdPtr->objProc != NULL) { ! Tcl_CreateObjCommand(interp, cmdPtr->name, cmdPtr->objProc, itPtr, NULL); ! } else { ! Tcl_CreateCommand(interp, cmdPtr->name, cmdPtr->proc, itPtr, NULL); ! } ! ++cmdPtr; } } void ! NsTclAddBasicCmds(NsInterp *itPtr) { ! AddCmds(basicCmds, itPtr); } void ! NsTclAddServerCmds(NsInterp *itPtr) { ! AddCmds(servCmds, itPtr); } --- tclatclose.c DELETED --- Index: nsmain.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/nsmain.c,v retrieving revision 1.15 retrieving revision 1.16 diff -C2 -d -r1.15 -r1.16 *** nsmain.c 27 Jun 2005 17:47:57 -0000 1.15 --- nsmain.c 12 Jul 2005 07:31:39 -0000 1.16 *************** *** 942,952 **** * CommandInit -- * ! * Initialize the interp with server commands. * * Results: ! * TCL_OK or TCL_ERROR. * * Side effects: ! * None. * *---------------------------------------------------------------------- --- 942,952 ---- * CommandInit -- * ! * Initialize the command interp with basic and server commands. * * Results: ! * Tcl result. * * Side effects: ! * Depends on init scripts. * *---------------------------------------------------------------------- *************** *** 958,961 **** --- 958,965 ---- NsServer *servPtr = NsGetServer(cmdServer); + Tcl_InitMemory(interp); + if (Tcl_Init(interp) != TCL_OK) { + Ns_TclLogError(interp); + } return NsInitInterp(interp, servPtr, NULL); } Index: adprequest.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/adprequest.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** adprequest.c 10 Jun 2005 17:58:38 -0000 1.2 --- adprequest.c 12 Jul 2005 07:31:39 -0000 1.3 *************** *** 113,117 **** interp = Ns_GetConnInterp(conn); ! itPtr = NsGetInterp(interp); servPtr = itPtr->servPtr; --- 113,117 ---- interp = Ns_GetConnInterp(conn); ! itPtr = NsGetInterpData(interp); servPtr = itPtr->servPtr; |
From: Vlad S. <ser...@us...> - 2005-07-12 03:37:51
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32408 Modified Files: ChangeLog Log Message: Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.161 retrieving revision 1.162 diff -C2 -d -r1.161 -r1.162 *** ChangeLog 12 Jul 2005 03:16:53 -0000 1.161 --- ChangeLog 12 Jul 2005 03:37:23 -0000 1.162 *************** *** 2,5 **** --- 2,6 ---- * tests/ns_adp_chunked.test: + * tests/servers/server1/pages/ns_tcl_chunked.tcl: * tests/servers/server1/pages/ns_adp_chunked.adp: * tests/testserver/pages/ns_adp_chunked.adp: Added tests for chunked |
From: Vlad S. <ser...@us...> - 2005-07-12 03:37:34
|
Update of /cvsroot/naviserver/naviserver/tests/testserver/pages In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32408/tests/testserver/pages Added Files: ns_tcl_chunked.tcl Log Message: --- NEW FILE: ns_tcl_chunked.tcl --- ns_conn chunked 1 ns_return 200 text/plain "<BODY>this is a test</BODY>" |
From: Vlad S. <ser...@us...> - 2005-07-12 03:37:34
|
Update of /cvsroot/naviserver/naviserver/tests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32408/tests Modified Files: ns_adp_chunked.test Log Message: Index: ns_adp_chunked.test =================================================================== RCS file: /cvsroot/naviserver/naviserver/tests/ns_adp_chunked.test,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ns_adp_chunked.test 12 Jul 2005 03:16:06 -0000 1.1 --- ns_adp_chunked.test 12 Jul 2005 03:37:23 -0000 1.2 *************** *** 41,47 **** } ! test ns_adp_chunked-1.1 {Chunked streaming} -constraints serverListen -body { nstest_http -getbody 1 GET /ns_adp_chunked.adp } -result "200 {1b\r\n<BODY>this is a test</BODY>\r\n0\r\n\r\n}" cleanupTests --- 41,51 ---- } ! test ns_adp_chunked-1.1 {Chunked streaming adp} -constraints serverListen -body { nstest_http -getbody 1 GET /ns_adp_chunked.adp } -result "200 {1b\r\n<BODY>this is a test</BODY>\r\n0\r\n\r\n}" + test ns_adp_chunked-1.2 {Chunked tcl return} -constraints serverListen -body { + nstest_http -getbody 1 GET /ns_chunked.tcl + } -result "200 {1b\r\n<BODY>this is a test</BODY>\r\n0\r\n\r\n}" + cleanupTests |
From: Vlad S. <ser...@us...> - 2005-07-12 03:17:02
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19481 Modified Files: ChangeLog Log Message: Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.160 retrieving revision 1.161 diff -C2 -d -r1.160 -r1.161 *** ChangeLog 12 Jul 2005 03:16:04 -0000 1.160 --- ChangeLog 12 Jul 2005 03:16:53 -0000 1.161 *************** *** 1,4 **** --- 1,9 ---- 2005-07-11 Vlad Seryakov <ser...@us...> + * tests/ns_adp_chunked.test: + * tests/servers/server1/pages/ns_adp_chunked.adp: + * tests/testserver/pages/ns_adp_chunked.adp: Added tests for chunked + encoding from adp files + * include/ns.h: * nsd/fastpath.c: |
From: Vlad S. <ser...@us...> - 2005-07-12 03:16:16
|
Update of /cvsroot/naviserver/naviserver/tests In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18700/tests Added Files: ns_adp_chunked.test Log Message: see ChangeLog --- NEW FILE: ns_adp_chunked.test --- # # The contents of this file are subject to the AOLserver Public License # Version 1.1 (the "License"); you may not use this file except in # compliance with the License. You may obtain a copy of the License at # http://aolserver.com/. # # Software distributed under the License is distributed on an "AS IS" # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See # the License for the specific language governing rights and limitations # under the License. # # The Original Code is AOLserver Code and related documentation # distributed by AOL. # # The Initial Developer of the Original Code is America Online, # Inc. Portions created by AOL are Copyright (C) 1999 America Online, # Inc. All Rights Reserved. # # Alternatively, the contents of this file may be used under the terms # of the GNU General Public License (the "GPL"), in which case the # provisions of GPL are applicable instead of those above. If you wish # to allow use of your version of this file only under the terms of the # GPL and not to allow others to use your version of this file under the # License, indicate your decision by deleting the provisions above and # replace them with the notice and other provisions required by the GPL. # If you do not delete the provisions above, a recipient may use your # version of this file under either the License or the GPL. # # # $Header: /cvsroot/naviserver/naviserver/tests/ns_adp_chunked.test,v 1.1 2005/07/12 03:16:06 seryakov Exp $ # package require tcltest 2.2 namespace import -force ::tcltest::* eval ::tcltest::configure $argv if {[ns_config test listenport]} { testConstraint serverListen true } test ns_adp_chunked-1.1 {Chunked streaming} -constraints serverListen -body { nstest_http -getbody 1 GET /ns_adp_chunked.adp } -result "200 {1b\r\n<BODY>this is a test</BODY>\r\n0\r\n\r\n}" cleanupTests |
From: Vlad S. <ser...@us...> - 2005-07-12 03:16:16
|
Update of /cvsroot/naviserver/naviserver/include In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18700/include Modified Files: ns.h Log Message: see ChangeLog Index: ns.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/include/ns.h,v retrieving revision 1.32 retrieving revision 1.33 diff -C2 -d -r1.32 -r1.33 *** ns.h 10 Jul 2005 07:27:12 -0000 1.32 --- ns.h 12 Jul 2005 03:16:05 -0000 1.33 *************** *** 69,73 **** #define NS_CONN_KEEPALIVE 32 #define NS_CONN_WRITE_ENCODED 64 ! #define NS_CONN_CHUNKED 128 #define NS_CONN_MAXCLS 16 --- 69,74 ---- #define NS_CONN_KEEPALIVE 32 #define NS_CONN_WRITE_ENCODED 64 ! #define NS_CONN_WRITE_CHUNKED 128 ! #define NS_CONN_SENT_LAST_CHUNK 256 #define NS_CONN_MAXCLS 16 |
From: Vlad S. <ser...@us...> - 2005-07-12 03:16:15
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18700/nsd Modified Files: conn.c connio.c return.c Log Message: see ChangeLog Index: return.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/return.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** return.c 10 Jul 2005 07:27:13 -0000 1.12 --- return.c 12 Jul 2005 03:16:05 -0000 1.13 *************** *** 207,211 **** connPtr->responseStatus == 206 || connPtr->responseStatus == 304)) { ! conn->flags &= ~NS_CONN_CHUNKED; Ns_SetIDeleteKey(conn->outputheaders, "Transfer-encoding"); } --- 207,211 ---- connPtr->responseStatus == 206 || connPtr->responseStatus == 304)) { ! conn->flags &= ~NS_CONN_WRITE_CHUNKED; Ns_SetIDeleteKey(conn->outputheaders, "Transfer-encoding"); } *************** *** 215,219 **** */ ! if (conn->flags & NS_CONN_CHUNKED) { Ns_ConnCondSetHeaders(conn, "Transfer-encoding", "chunked"); Ns_SetIDeleteKey(conn->outputheaders, "Content-length"); --- 215,219 ---- */ ! if (conn->flags & NS_CONN_WRITE_CHUNKED) { Ns_ConnCondSetHeaders(conn, "Transfer-encoding", "chunked"); Ns_SetIDeleteKey(conn->outputheaders, "Content-length"); *************** *** 222,226 **** Ns_DStringPrintf(dsPtr, "HTTP/%s %d %s\r\n", ! (conn->flags & NS_CONN_CHUNKED) ? "1.1" : "1.0", connPtr->responseStatus, reason); --- 222,226 ---- Ns_DStringPrintf(dsPtr, "HTTP/%s %d %s\r\n", ! (conn->flags & NS_CONN_WRITE_CHUNKED) ? "1.1" : "1.0", connPtr->responseStatus, reason); *************** *** 254,258 **** (((connPtr->responseStatus >= 200 && connPtr->responseStatus < 300) && ((lengthHdr != NULL && connPtr->responseLength == length) || ! (conn->flags & NS_CONN_CHUNKED)) ) || (connPtr->responseStatus == 304 || connPtr->responseStatus == 201 || --- 254,258 ---- (((connPtr->responseStatus >= 200 && connPtr->responseStatus < 300) && ((lengthHdr != NULL && connPtr->responseLength == length) || ! (conn->flags & NS_CONN_WRITE_CHUNKED)) ) || (connPtr->responseStatus == 304 || connPtr->responseStatus == 201 || *************** *** 824,838 **** result = Ns_WriteConn(conn, data, len); if (result == NS_OK) { - - /* - * In chunked mode we must send the last chunk with zero size - */ - - if (len > 0 && (conn->flags & NS_CONN_CHUNKED)) { - result = Ns_WriteConn(conn, 0, 0); - } - } - - if (result == NS_OK) { result = Ns_ConnClose(conn); } --- 824,827 ---- Index: connio.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/connio.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** connio.c 10 Jul 2005 07:27:13 -0000 1.6 --- connio.c 12 Jul 2005 03:16:05 -0000 1.7 *************** *** 96,100 **** --- 96,113 ---- if (connPtr->sockPtr != NULL) { + keep = (conn->flags & NS_CONN_KEEPALIVE) ? 1 : 0; + + /* + * In chunked mode we must send the last chunk with zero size + */ + + if ((conn->flags & NS_CONN_WRITE_CHUNKED) && + !(conn->flags & NS_CONN_SENT_LAST_CHUNK)) { + if (Ns_WriteConn(conn, 0, 0) != NS_OK) { + keep = 0; + } + } + NsSockClose(connPtr->sockPtr, keep); connPtr->sockPtr = NULL; *************** *** 232,236 **** struct iovec buf[3]; ! if (!(conn->flags & NS_CONN_CHUNKED)) { buf[0].iov_base = vbuf; --- 245,249 ---- struct iovec buf[3]; ! if (!(conn->flags & NS_CONN_WRITE_CHUNKED)) { buf[0].iov_base = vbuf; *************** *** 260,263 **** --- 273,285 ---- nsend = towrite; } + + /* + * We should mark when zero length buffer was sent because it will be + * considered as last chunk + */ + + if (towrite == 0 && (conn->flags & NS_CONN_WRITE_CHUNKED)) { + conn->flags |= NS_CONN_SENT_LAST_CHUNK; + } return nsend; } *************** *** 798,807 **** static int ! ConnSend(Ns_Conn *conn, int tosend, Tcl_Channel chan, FILE *fp, int fd) { ! int nsend, toread, nread, status; char buf[IOBUFSZ]; ! ! nsend = tosend; status = NS_OK; while (status == NS_OK && nsend > 0) { --- 820,836 ---- static int ! ConnSend(Ns_Conn *conn, int nsend, Tcl_Channel chan, FILE *fp, int fd) { ! int toread, nread, status; char buf[IOBUFSZ]; ! ! /* ! * Even if nsend is 0, ensure all queued data (like HTTP response ! * headers) get flushed. ! */ ! if (nsend == 0) { ! Ns_WriteConn(conn, NULL, 0); ! } ! status = NS_OK; while (status == NS_OK && nsend > 0) { *************** *** 810,841 **** toread = sizeof(buf); } ! if (chan != NULL) { ! nread = Tcl_Read(chan, buf, toread); ! } else if (fp != NULL) { nread = fread(buf, 1, (size_t)toread, fp); if (ferror(fp)) { ! nread = -1; ! } ! } else { ! nread = read(fd, buf, (size_t)toread); ! } ! if (nread == -1) { ! status = NS_ERROR; ! } else if (nread == 0) { ! nsend = 0; /* NB: Silently ignore a truncated file. */ ! } else if ((status = Ns_WriteConn(conn, buf, nread)) == NS_OK) { nsend -= nread; ! } } - /* - * Even if nsend is 0, ensure all queued data (like HTTP response - * headers) get flushed. - * In chunked mode we must send the last chunk with zero size - */ - - if (tosend == 0 || (conn->flags & NS_CONN_CHUNKED)) { - Ns_WriteConn(conn, 0, 0); - } return status; } --- 839,861 ---- toread = sizeof(buf); } ! if (chan != NULL) { ! nread = Tcl_Read(chan, buf, toread); ! } else if (fp != NULL) { nread = fread(buf, 1, (size_t)toread, fp); if (ferror(fp)) { ! nread = -1; ! } ! } else { ! nread = read(fd, buf, (size_t)toread); ! } ! if (nread == -1) { ! status = NS_ERROR; ! } else if (nread == 0) { ! nsend = 0; /* NB: Silently ignore a truncated file. */ ! } else if ((status = Ns_WriteConn(conn, buf, nread)) == NS_OK) { nsend -= nread; ! } } return status; } Index: conn.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/conn.c,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** conn.c 10 Jul 2005 07:27:13 -0000 1.19 --- conn.c 12 Jul 2005 03:16:05 -0000 1.20 *************** *** 887,891 **** Ns_ConnGetChunkedFlag(Ns_Conn *conn) { ! return (conn->flags & NS_CONN_CHUNKED) ? NS_TRUE : NS_FALSE; } --- 887,891 ---- Ns_ConnGetChunkedFlag(Ns_Conn *conn) { ! return (conn->flags & NS_CONN_WRITE_CHUNKED) ? NS_TRUE : NS_FALSE; } *************** *** 911,917 **** { if (flag) { ! conn->flags |= NS_CONN_CHUNKED; } else { ! conn->flags &= ~NS_CONN_CHUNKED; } } --- 911,917 ---- { if (flag) { ! conn->flags |= NS_CONN_WRITE_CHUNKED; } else { ! conn->flags &= ~NS_CONN_WRITE_CHUNKED; } } |
From: Vlad S. <ser...@us...> - 2005-07-12 03:16:15
|
Update of /cvsroot/naviserver/naviserver/tests/testserver/pages In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18700/tests/testserver/pages Added Files: ns_adp_chunked.adp Log Message: see ChangeLog --- NEW FILE: ns_adp_chunked.adp --- <% ns_adp_stream ns_conn chunked 1 %><BODY>this is a test</BODY> |
From: Vlad S. <ser...@us...> - 2005-07-12 03:16:14
|
Update of /cvsroot/naviserver/naviserver/tests/servers/server1/pages In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18700/tests/servers/server1/pages Added Files: ns_adp_chunked.adp Log Message: see ChangeLog --- NEW FILE: ns_adp_chunked.adp --- <% ns_adp_stream ns_conn chunked 1 %><BODY>this is a test</BODY> |
From: Vlad S. <ser...@us...> - 2005-07-12 03:16:13
|
Update of /cvsroot/naviserver/naviserver In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18700 Modified Files: ChangeLog Log Message: see ChangeLog Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/naviserver/ChangeLog,v retrieving revision 1.159 retrieving revision 1.160 diff -C2 -d -r1.159 -r1.160 *** ChangeLog 10 Jul 2005 07:27:12 -0000 1.159 --- ChangeLog 12 Jul 2005 03:16:04 -0000 1.160 *************** *** 1,2 **** --- 1,11 ---- + 2005-07-11 Vlad Seryakov <ser...@us...> + + * include/ns.h: + * nsd/fastpath.c: + * nsd/return.c: + * nsd/connio.c: Refactored chunked support to use Ns_connClose + to send the last zero chunk. This makes chunked support universal and + can be used in adp as well. + 2005-07-08 Vlad Seryakov <ser...@us...> |