From: Stephen D. <sd...@us...> - 2005-11-07 03:18:04
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23250/nsd Modified Files: Makefile fastpath.c info.c init.c nsd.h proc.c server.c tclcmds.c tclfile.c Log Message: * include/ns.h: * nsd/nsd.h: * nsd/Makefile: * nsd/url2file.c: * nsd/fastpath.c: * nsd/info.c: * nsd/init.c: * nsd/proc.c: * nsd/server.c: * nsd/tclcmds.c: * nsd/tclfile.c: * tests/ns_info.test: * tests/url2file.test: Add new, flexible urlspace-based Url2File C API and matching Tcl commands. (RFE: 1333811) Index: fastpath.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/fastpath.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** fastpath.c 10 Oct 2005 13:33:23 -0000 1.24 --- fastpath.c 7 Nov 2005 03:17:55 -0000 1.25 *************** *** 192,244 **** /* *---------------------------------------------------------------------- - * Ns_SetUrlToFileProc -- - * - * Set pointer to custom routine that acts like Ns_UrlToFile(); - * - * Results: - * None. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - - void - Ns_SetUrlToFileProc(CONST char *server, Ns_UrlToFileProc *procPtr) - { - NsServer *servPtr = NsGetServer(server); - - servPtr->fastpath.url2file = procPtr; - } - - - /* - *---------------------------------------------------------------------- - * Ns_UrlToFile -- - * - * Construct the filename that corresponds to a URL. - * - * Results: - * Return NS_OK on success or NS_ERROR on failure. - * - * Side effects: - * None. - * - *---------------------------------------------------------------------- - */ - - - int - Ns_UrlToFile(Ns_DString *dsPtr, CONST char *server, CONST char *url) - { - NsServer *servPtr = NsGetServer(server); - - return NsUrlToFile(dsPtr, servPtr, url); - } - - - /* - *---------------------------------------------------------------------- * Ns_UrlIsFile, Ns_UrlIsDir -- * --- 192,195 ---- *************** *** 697,722 **** } - - int - NsUrlToFile(Ns_DString *dsPtr, NsServer *servPtr, CONST char *url) - { - int status; - - if (servPtr->fastpath.url2file != NULL) { - status = (*servPtr->fastpath.url2file)(dsPtr, servPtr->server, url); - } else { - NsPageRoot(dsPtr, servPtr, NULL); - Ns_MakePath(dsPtr, url, NULL); - status = NS_OK; - } - if (status == NS_OK) { - while (dsPtr->length > 0 && dsPtr->string[dsPtr->length-1] == '/') { - Ns_DStringTrunc(dsPtr, dsPtr->length-1); - } - } - - return status; - } - /* --- 648,651 ---- Index: Makefile =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** Makefile 12 Jul 2005 08:26:04 -0000 1.6 --- Makefile 7 Nov 2005 03:17:55 -0000 1.7 *************** *** 49,53 **** 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 --- 49,53 ---- 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 url2file.o urlencode.o urlopen.o urlspace.o \ uuencode.o Index: tclcmds.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclcmds.c,v retrieving revision 1.24 retrieving revision 1.25 diff -C2 -d -r1.24 -r1.25 *** tclcmds.c 22 Oct 2005 12:50:39 -0000 1.24 --- tclcmds.c 7 Nov 2005 03:17:55 -0000 1.25 *************** *** 126,132 **** --- 126,134 ---- NsTclRandObjCmd, NsTclRegisterAdpObjCmd, + NsTclRegisterFastUrl2FileObjCmd, NsTclRegisterFilterObjCmd, NsTclRegisterProcObjCmd, NsTclRegisterTraceObjCmd, + NsTclRegisterUrl2FileObjCmd, NsTclRequestAuthorizeObjCmd, NsTclRespondObjCmd, *************** *** 175,178 **** --- 177,181 ---- NsTclTruncateObjCmd, NsTclUnRegisterObjCmd, + NsTclUnRegisterUrl2FileObjCmd, NsTclUnscheduleObjCmd, NsTclUrl2FileObjCmd, *************** *** 385,391 **** --- 388,396 ---- {"ns_register_adp", NULL, NsTclRegisterAdpObjCmd}, {"ns_register_adptag", NsTclRegisterTagCmd, NULL}, + {"ns_register_fasturl2file", NULL, NsTclRegisterFastUrl2FileObjCmd}, {"ns_register_filter", NULL, NsTclRegisterFilterObjCmd}, {"ns_register_proc", NULL, NsTclRegisterProcObjCmd}, {"ns_register_trace", NULL, NsTclRegisterTraceObjCmd}, + {"ns_register_url2file", NULL, NsTclRegisterUrl2FileObjCmd}, {"ns_requestauthorize", NULL, NsTclRequestAuthorizeObjCmd}, {"ns_respond", NULL, NsTclRespondObjCmd}, *************** *** 409,412 **** --- 414,418 ---- {"ns_unregister_adp", NULL, NsTclUnRegisterObjCmd}, {"ns_unregister_proc", NULL, NsTclUnRegisterObjCmd}, + {"ns_unregister_url2file", NULL, NsTclUnRegisterUrl2FileObjCmd}, {"ns_url2file", NULL, NsTclUrl2FileObjCmd}, {"ns_var", NULL, NsTclVarObjCmd}, Index: init.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/init.c,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** init.c 8 Oct 2005 12:06:07 -0000 1.5 --- init.c 7 Nov 2005 03:17:55 -0000 1.6 *************** *** 83,86 **** --- 83,87 ---- NsInitUrlSpace(); NsInitRequests(); + NsInitUrl2File(); } } Index: server.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/server.c,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** server.c 9 Oct 2005 22:27:24 -0000 1.13 --- server.c 7 Nov 2005 03:17:55 -0000 1.14 *************** *** 420,423 **** --- 420,430 ---- /* + * Register the url2file procs. + */ + + Ns_RegisterUrl2FileProc(server, "/", Ns_FastUrl2FileProc, NULL, servPtr, 0); + Ns_SetUrlToFileProc(server, NsUrlToFileProc); + + /* * Initialize ADP. */ Index: nsd.h =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/nsd.h,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** nsd.h 16 Oct 2005 08:52:48 -0000 1.36 --- nsd.h 7 Nov 2005 03:17:55 -0000 1.37 *************** *** 840,843 **** --- 840,844 ---- extern void NsInitUrlSpace(void); extern void NsInitRequests(void); + extern void NsInitUrl2File(void); extern void NsConfigLog(void); *************** *** 885,888 **** --- 886,893 ---- extern Ns_ArgProc NsTclRequestArgProc; extern Ns_TclTraceProc NsTclTraceProc; + extern Ns_UrlToFileProc NsUrlToFileProc; + extern Ns_Url2FileProc NsTclUrl2FileProc; + extern Ns_Url2FileProc NsMountUrl2FileProc; + extern Ns_ArgProc NsMountUrl2FileArgProc; extern void NsGetCallbacks(Tcl_DString *dsPtr); *************** *** 892,895 **** --- 897,901 ---- extern void NsGetFilters(Tcl_DString *dsPtr, char *server); extern void NsGetRequestProcs(Tcl_DString *dsPtr, CONST char *server); + extern void NsGetUrl2FileProcs(Ns_DString *dsPtr, CONST char *server); #ifdef _WIN32 Index: tclfile.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclfile.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** tclfile.c 21 Oct 2005 10:07:26 -0000 1.9 --- tclfile.c 7 Nov 2005 03:17:55 -0000 1.10 *************** *** 276,316 **** *---------------------------------------------------------------------- * - * NsTclUrl2FileObjCmd -- - * - * Implements ns_url2file as obj command. - * - * Results: - * Tcl result. - * - * Side effects: - * See docs. - * - *---------------------------------------------------------------------- - */ - - int - NsTclUrl2FileObjCmd(ClientData arg, Tcl_Interp *interp, int objc, - Tcl_Obj *CONST objv[]) - { - NsInterp *itPtr = arg; - Ns_DString ds; - - if (objc != 2) { - Tcl_WrongNumArgs(interp, 1, objv, "url"); - return TCL_ERROR; - } - - Ns_DStringInit(&ds); - NsUrlToFile(&ds, itPtr->servPtr, Tcl_GetString(objv[1])); - Tcl_SetResult(interp, ds.string, TCL_VOLATILE); - Ns_DStringFree(&ds); - - return TCL_OK; - } - - - /* - *---------------------------------------------------------------------- - * * NsTclKillObjCmd -- * --- 276,279 ---- Index: info.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/info.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** info.c 12 Jun 2005 14:42:44 -0000 1.7 --- info.c 7 Nov 2005 03:17:55 -0000 1.8 *************** *** 480,484 **** int opt; NsInterp *itPtr = arg; ! char *elog; Tcl_DString ds; static CONST char *opts[] = { --- 480,484 ---- int opt; NsInterp *itPtr = arg; ! char *server, *elog; Tcl_DString ds; static CONST char *opts[] = { *************** *** 488,492 **** "pid", "platform", "pools", "scheduled", "server", "servers", "sockcallbacks", "tag", "tcllib", "threads", "uptime", ! "version", "winnt", "filters", "traces", "requestprocs", NULL }; enum { --- 488,493 ---- "pid", "platform", "pools", "scheduled", "server", "servers", "sockcallbacks", "tag", "tcllib", "threads", "uptime", ! "version", "winnt", "filters", "traces", "requestprocs", ! "url2file", NULL }; enum { *************** *** 497,500 **** --- 498,502 ---- sockICallbacksIdx, ITagIdx, ITclLibIdx, IThreadsIdx, IUptimeIdx, IVersionIdx, IWinntIdx, IFiltersIdx, ITracesIdx, IRequestProcsIdx, + IUrl2FileIdx }; *************** *** 509,512 **** --- 511,515 ---- Tcl_DStringInit(&ds); + switch (opt) { case IArgv0Idx: *************** *** 541,559 **** break; - case IFiltersIdx: - NsGetFilters(&ds, itPtr->servPtr ? itPtr->servPtr->server : 0); - Tcl_DStringResult(interp, &ds); - break; - - case ITracesIdx: - NsGetTraces(&ds, itPtr->servPtr ? itPtr->servPtr->server : 0); - Tcl_DStringResult(interp, &ds); - break; - - case IRequestProcsIdx: - NsGetRequestProcs(&ds, itPtr->servPtr ? itPtr->servPtr->server : 0); - Tcl_DStringResult(interp, &ds); - break; - case ILocksIdx: Ns_MutexList(&ds); --- 544,547 ---- *************** *** 641,661 **** Tcl_SetResult(interp, nsconf.servers.string, TCL_STATIC); break; - case ITclLibIdx: - case IPageRootIdx: - case IServerIdx: if (itPtr->servPtr == NULL) { Tcl_SetResult(interp, "no server", TCL_STATIC); return TCL_ERROR; } ! if (opt == IServerIdx) { ! Tcl_SetResult(interp, itPtr->servPtr->server, TCL_STATIC); ! } else if (opt == ITclLibIdx) { ! Tcl_SetResult(interp, itPtr->servPtr->tcl.library, TCL_STATIC); ! } else { NsPageRoot(&ds, itPtr->servPtr, NULL); Tcl_DStringResult(interp, &ds); ! } } return TCL_OK; } --- 629,679 ---- Tcl_SetResult(interp, nsconf.servers.string, TCL_STATIC); break; + } + + /* + * The following subcommands require a virtual server. + */ if (itPtr->servPtr == NULL) { Tcl_SetResult(interp, "no server", TCL_STATIC); return TCL_ERROR; } ! server = itPtr->servPtr->server; ! ! switch (opt) { ! case IPageRootIdx: NsPageRoot(&ds, itPtr->servPtr, NULL); Tcl_DStringResult(interp, &ds); ! break; ! ! case IServerIdx: ! Tcl_SetResult(interp, server, TCL_STATIC); ! break; ! ! case ITclLibIdx: ! Tcl_SetResult(interp, itPtr->servPtr->tcl.library, TCL_STATIC); ! break; ! ! case IFiltersIdx: ! NsGetFilters(&ds, server); ! Tcl_DStringResult(interp, &ds); ! break; ! ! case ITracesIdx: ! NsGetTraces(&ds, server); ! Tcl_DStringResult(interp, &ds); ! break; ! ! case IRequestProcsIdx: ! NsGetRequestProcs(&ds, server); ! Tcl_DStringResult(interp, &ds); ! break; ! ! case IUrl2FileIdx: ! NsGetUrl2FileProcs(&ds, server); ! Tcl_DStringResult(interp, &ds); ! break; } + return TCL_OK; } Index: proc.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/proc.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** proc.c 12 Jul 2005 11:19:22 -0000 1.8 --- proc.c 7 Nov 2005 03:17:55 -0000 1.9 *************** *** 82,85 **** --- 82,88 ---- {(void *) NsFastGet, "ns:fastget", ServerArgProc}, {(void *) NsTclTraceProc, "ns:tcltrace", Ns_TclCallbackArgProc}, + {(void *) NsTclUrl2FileProc, "ns:tclurl2file", Ns_TclCallbackArgProc}, + {(void *) NsMountUrl2FileProc, "ns:mounturl2file", NsMountUrl2FileArgProc}, + {(void *) Ns_FastUrl2FileProc, "ns:fasturl2file", ServerArgProc}, {NULL, NULL, NULL} }; |