Update of /cvsroot/naviserver/naviserver/nsd
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv18251/nsd
Modified Files:
conn.c
Log Message:
Implemented RFE #1156899.
Index: conn.c
===================================================================
RCS file: /cvsroot/naviserver/naviserver/nsd/conn.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** conn.c 17 Mar 2005 18:24:54 -0000 1.4
--- conn.c 17 Mar 2005 20:21:14 -0000 1.5
***************
*** 1180,1184 ****
* NsTclWriteContentObjCmd --
*
! * Implements ns_writecontent as obj command.
*
* Results:
--- 1180,1184 ----
* NsTclWriteContentObjCmd --
*
! * Implements ns_conncptofp as obj command.
*
* Results:
***************
*** 1194,1224 ****
NsTclWriteContentObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv)
{
! NsInterp *itPtr = arg;
! Tcl_Channel chan;
! if (objc != 2 && objc != 3) {
! Tcl_WrongNumArgs(interp, 1, objv, "?connid? channel");
return TCL_ERROR;
}
- if (objc == 3 && !NsIsIdConn(Tcl_GetString(objv[1]))) {
- Tcl_AppendStringsToObj(Tcl_GetObjResult(interp), "bad connid: \"",
- Tcl_GetString(objv[1]), "\"", NULL);
- return TCL_ERROR;
- }
if (itPtr->conn == NULL) {
! Tcl_SetResult(interp, "no connection", TCL_STATIC);
return TCL_ERROR;
}
! if (GetChan(interp, Tcl_GetString(objv[objc-1]), &chan) != TCL_OK) {
! return TCL_ERROR;
}
Tcl_Flush(chan);
! if (Ns_ConnCopyToChannel(itPtr->conn, (size_t)itPtr->conn->contentLength,
! chan) != NS_OK) {
! Tcl_SetResult(interp, "could not copy content (likely client disconnect)",
! TCL_STATIC);
return TCL_ERROR;
}
return TCL_OK;
}
--- 1194,1237 ----
NsTclWriteContentObjCmd(ClientData arg, Tcl_Interp *interp, int objc, Tcl_Obj **objv)
{
! NsInterp *itPtr = arg;
! int toCopy = 0;
! char *chanName;
! Tcl_Channel chan;
! /*
! * Syntax: ns_conncptofp ?-bytes tocopy? channel
! */
!
! Ns_ObjvSpec opts[] = {
! {"-bytes", Ns_ObjvInt, &toCopy, NULL},
! {"--", Ns_ObjvBreak, NULL, NULL},
! {NULL, NULL, NULL, NULL}
! };
! Ns_ObjvSpec args[] = {
! {"channel", Ns_ObjvString, &chanName, NULL},
! {NULL, NULL, NULL, NULL}
! };
!
! if (Ns_ParseObjv(opts, args, interp, 1, objc, objv) != NS_OK) {
return TCL_ERROR;
}
if (itPtr->conn == NULL) {
! Tcl_SetResult(interp, "no connection", TCL_STATIC);
return TCL_ERROR;
}
! if (GetChan(interp, chanName, &chan) != TCL_OK) {
! return TCL_ERROR;
}
Tcl_Flush(chan);
! if (toCopy > itPtr->conn->contentLength || toCopy <= 0) {
! toCopy = itPtr->conn->contentLength;
! }
! if (Ns_ConnCopyToChannel(itPtr->conn, (unsigned)toCopy, chan) != NS_OK) {
! Tcl_SetResult(interp, "could not copy content", TCL_STATIC);
return TCL_ERROR;
}
+ itPtr->conn->contentLength -= toCopy;
+
return TCL_OK;
}
|