int Web_Send()

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;
}