From: Vlad S. <ser...@us...> - 2005-06-08 20:27:27
|
Update of /cvsroot/naviserver/naviserver/nsd In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15813/nsd Modified Files: tclobjv.c tclresp.c Log Message: Added -binary flag to ns_respond to return binary data without encoding conversion Index: tclobjv.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclobjv.c,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** tclobjv.c 15 May 2005 07:47:21 -0000 1.7 --- tclobjv.c 8 Jun 2005 20:27:12 -0000 1.8 *************** *** 310,313 **** --- 310,352 ---- *---------------------------------------------------------------------- * + * Ns_ObjvByteArray -- + * + * Consume exactly one argument, returning a pointer to it's + * cstring into *spec->dest. + * + * If spec->arg is != NULL it is assumed to be a pointer to an + * int and the returned string length will be left in it. + * + * Results: + * TCL_OK or TCL_ERROR. + * + * Side effects: + * None. + * + *---------------------------------------------------------------------- + */ + + int + Ns_ObjvByteArray(Ns_ObjvSpec *spec, Tcl_Interp *interp, int *objcPtr, + Tcl_Obj *CONST objv[]) + { + unsigned char **dest = spec->dest; + + if (*objcPtr > 0) { + if (spec->arg == NULL) { + *dest = Tcl_GetByteArrayFromObj(objv[0],0); + } else { + *dest = Tcl_GetByteArrayFromObj(objv[0], (int *) spec->arg); + } + *objcPtr -= 1; + return TCL_OK; + } + return TCL_ERROR; + } + + + /* + *---------------------------------------------------------------------- + * * Ns_ObjvObj -- * Index: tclresp.c =================================================================== RCS file: /cvsroot/naviserver/naviserver/nsd/tclresp.c,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** tclresp.c 8 Jun 2005 20:13:12 -0000 1.4 --- tclresp.c 8 Jun 2005 20:27:12 -0000 1.5 *************** *** 252,256 **** Ns_Conn *conn; int status = 200, length = -1; ! char *type = "*/*", *setid = NULL; char *string = NULL, *filename = NULL, *chanid = NULL; Ns_Set *set = NULL; --- 252,256 ---- Ns_Conn *conn; int status = 200, length = -1; ! char *type = "*/*", *setid = NULL, *binary = NULL; char *string = NULL, *filename = NULL, *chanid = NULL; Ns_Set *set = NULL; *************** *** 259,269 **** Ns_ObjvSpec opts[] = { ! {"-status", Ns_ObjvInt, &status, NULL}, ! {"-type", Ns_ObjvString, &type, NULL}, ! {"-length", Ns_ObjvInt, &length, NULL}, ! {"-headers", Ns_ObjvString, &setid, NULL}, ! {"-string", Ns_ObjvString, &string, NULL}, ! {"-file", Ns_ObjvString, &filename, NULL}, ! {"-fileid", Ns_ObjvString, &chanid, NULL}, {NULL, NULL, NULL, NULL} }; --- 259,270 ---- Ns_ObjvSpec opts[] = { ! {"-status", Ns_ObjvInt, &status, NULL}, ! {"-type", Ns_ObjvString, &type, NULL}, ! {"-length", Ns_ObjvInt, &length, NULL}, ! {"-headers", Ns_ObjvString, &setid, NULL}, ! {"-string", Ns_ObjvString, &string, NULL}, ! {"-file", Ns_ObjvString, &filename, NULL}, ! {"-fileid", Ns_ObjvString, &chanid, NULL}, ! {"-binary", Ns_ObjvByteArray, &binary, &length}, {NULL, NULL, NULL, NULL} }; *************** *** 277,282 **** return TCL_ERROR; } ! if ((string != NULL) + (filename != NULL) + (chanid != NULL) != 1) { ! Tcl_SetResult(interp, "must specify only one of -string, -file " "or -fileid", TCL_STATIC); return TCL_ERROR; --- 278,283 ---- return TCL_ERROR; } ! if ((binary != NULL) + (string != NULL) + (filename != NULL) + (chanid != NULL) != 1) { ! Tcl_SetResult(interp, "must specify only one of -string, -file, -binary " "or -fileid", TCL_STATIC); return TCL_ERROR; *************** *** 313,316 **** --- 314,324 ---- retval = Ns_ConnReturnFile(conn, status, type, filename); + } else if (binary != NULL) { + /* + * We'll be returning a binary data + */ + + retval = Ns_ConnReturnData(conn, status, binary, length, type); + } else { /* |