in src/generic/messages.c [38:107]
int Web_Send(ClientData clientData,
Tcl_Interp * interp, int objc, Tcl_Obj * CONST objv[])
{
int flags = 0;
int mode = 0;
int cmdcode = 0;
int len = 0;
Tcl_Channel tc;
char *tmpStr = NULL;
/* ------------------------------------------------------------------------
* arg check
* --------------------------------------------------------------------- */
WebAssertObjc((objc < 4)
|| (objc > 5), 1, "channel cmdnr string ??#?flags?");
/* ------------------------------------------------------------------------
* flags there ?
* --------------------------------------------------------------------- */
flags = 0;
if (objc == 5) {
tmpStr = Tcl_GetString(objv[4]);
if (tmpStr[0] == '#') {
if (Tcl_GetInt(interp, &tmpStr[1], &flags) == TCL_ERROR)
return TCL_ERROR;
}
else {
if (parseFlags(interp, tmpStr, &flags) == TCL_ERROR)
return TCL_ERROR;
}
}
/* ------------------------------------------------------------------------
* see if we can get this channel
* --------------------------------------------------------------------- */
tc = Tcl_GetChannel(interp, Tcl_GetString(objv[1]), &mode);
if (tc == NULL) {
LOG_MSG(interp, WRITE_LOG | SET_RESULT,
__FILE__, __LINE__, "web::send", WEBLOG_ERROR,
"unknown channel \"", Tcl_GetString(objv[1]), "\"", NULL);
return TCL_ERROR;
}
if ((mode & TCL_WRITABLE) == 0) {
LOG_MSG(interp, WRITE_LOG | SET_RESULT, __FILE__, __LINE__,
"web::send", WEBLOG_ERROR,
"channel \"", Tcl_GetString(objv[1]),
"\" not open for writing", NULL);
return TCL_ERROR;
}
/* ------------------------------------------------------------------------
* get commandcode
* --------------------------------------------------------------------- */
if (Tcl_GetIntFromObj(interp, objv[2], &cmdcode) == TCL_ERROR)
return TCL_ERROR;
tmpStr = Tcl_GetStringFromObj(objv[3],&len);
if ( send_msg(tc, cmdcode, flags, len, (void *)tmpStr) == -1 ) {
Tcl_PosixError(interp);
return TCL_ERROR;
}
return TCL_OK;
}