int objectHeaderHandler()

in src/generic/weboutint.c [545:603]


int objectHeaderHandler(Tcl_Interp * interp, ResponseObj * responseObj,
			Tcl_Obj * out)
{

    /* --------------------------------------------------------------------------
     * sanity
     * ----------------------------------------------------------------------- */
    if ((out == NULL) || (responseObj == NULL))
	return TCL_ERROR;

    if (responseObj->sendHeader == 1) {

	HashTableIterator iterator;
	char *key;
	Tcl_Obj *headerList;

	if (responseObj->httpresponse != NULL) {
	    Tcl_AppendObjToObj(out, responseObj->httpresponse);
	    Tcl_AppendToObj(out, "\r\n", 2);
	}

	assignIteratorToHashTable(responseObj->headers, &iterator);

	while (nextFromHashIterator(&iterator) != TCL_ERROR) {

	    key = keyOfCurrent(&iterator);

	    if (key != NULL) {

		headerList = (Tcl_Obj *) valueOfCurrent(&iterator);
		if (headerList != NULL) {

		    int lobjc = -1;
		    Tcl_Obj **lobjv = NULL;
		    int i;
		    if (Tcl_ListObjGetElements(interp, headerList,
					       &lobjc, &lobjv) == TCL_ERROR) {
			LOG_MSG(interp, WRITE_LOG,
				__FILE__, __LINE__,
				"web::put", WEBLOG_ERROR,
				(char *) Tcl_GetStringResult(interp), NULL);
			return TCL_ERROR;
		    }
		    /* add all occurrences of this header */
		    for (i = 0; i < lobjc; i++) {

			Tcl_AppendToObj(out, key, -1);
			Tcl_AppendToObj(out, ": ", 2);
			Tcl_AppendObjToObj(out, lobjv[i]);
			Tcl_AppendToObj(out, "\r\n", 2);
		    }
		}
	    }
	}
	Tcl_AppendToObj(out, "\r\n", 2);
	responseObj->sendHeader = 0;
    }
    return TCL_OK;
}