//响应添加报文头 TSReturnCode StaSerRespMimeHdrFieldAppend(TSHttpTxn txnp,char *name,int name_length,char *value,int value_len) { TSMBuffer bufp; TSMLoc hdr_loc; TSMLoc field_loc; if (TSHttpTxnServerRespGet(txnp, &bufp, &hdr_loc) != TS_SUCCESS) { return TS_ERROR; } field_loc = TSMimeHdrFieldFind(bufp, hdr_loc, name, name_length); if(field_loc != TS_NULL_MLOC){ TSMimeHdrFieldValuesClear(bufp, hdr_loc, field_loc); TSMimeHdrFieldValueStringInsert(bufp, hdr_loc, field_loc, -1, value, value_len); TSHandleMLocRelease(bufp, hdr_loc, field_loc); }else{ if (TSMimeHdrFieldCreate(bufp, hdr_loc, &field_loc) != TS_SUCCESS) { return TS_ERROR; } TSMimeHdrFieldAppend(bufp, hdr_loc, field_loc); TSMimeHdrFieldValuesClear(bufp, hdr_loc, field_loc); TSMimeHdrFieldNameSet(bufp, hdr_loc, field_loc, name, name_length); TSMimeHdrFieldValueStringInsert(bufp, hdr_loc, field_loc, -1, value, value_len); TSHandleMLocRelease(bufp, hdr_loc, field_loc); } TSHandleMLocRelease(bufp, TS_NULL_MLOC, hdr_loc); return TS_SUCCESS; }
static void replace_header(TSHttpTxn txnp) { TSMBuffer resp_bufp; TSMLoc resp_loc; TSMLoc field_loc; if (TSHttpTxnServerRespGet(txnp, &resp_bufp, &resp_loc) != TS_SUCCESS) { TSError("couldn't retrieve server response header.\n"); goto done; } field_loc = TSMimeHdrFieldFind(resp_bufp, resp_loc, TS_MIME_FIELD_ACCEPT_RANGES, TS_MIME_LEN_ACCEPT_RANGES); if (field_loc == TS_NULL_MLOC) { /* field was not found */ /* create a new field in the header */ TSMimeHdrFieldCreate(resp_bufp, resp_loc, &field_loc); /* Probably should check for errors. */ /* set its name */ TSMimeHdrFieldNameSet(resp_bufp, resp_loc, field_loc, TS_MIME_FIELD_ACCEPT_RANGES, TS_MIME_LEN_ACCEPT_RANGES); /* set its value */ TSMimeHdrFieldValueAppend(resp_bufp, resp_loc, field_loc, -1, "none", 4); /* insert it into the header */ TSMimeHdrFieldAppend(resp_bufp, resp_loc, field_loc); TSHandleMLocRelease(resp_bufp, resp_loc, field_loc); TSHandleMLocRelease(resp_bufp, TS_NULL_MLOC, resp_loc); } else { /* clear the field */ TSMimeHdrFieldValuesClear(resp_bufp, resp_loc, field_loc); /* set the value to "none" */ TSMimeHdrFieldValueStringInsert(resp_bufp, resp_loc, field_loc, -1, "none", 4); TSHandleMLocRelease(resp_bufp, resp_loc, field_loc); TSHandleMLocRelease(resp_bufp, TS_NULL_MLOC, resp_loc); } done: TSHttpTxnReenable(txnp, TS_EVENT_HTTP_CONTINUE); }