From: Zoran V. <vas...@us...> - 2005-03-17 20:21:40
|
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; } |