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