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 {
/*