static int startplugin(INKCont contp, INKEvent event, void *edata) { INKMBuffer bufp; INKMLoc hdr_loc; INKMLoc field_loc; int count; INKHttpTxn txnp = (INKHttpTxn) edata; if (!INKHttpTxnClientReqGet(txnp, &bufp, &hdr_loc)) { printf("Couldn't retrieve Client Request Header\n"); INKHttpTxnReenable(txnp, INK_EVENT_HTTP_CONTINUE); return 0; } if ((field_loc = INKMimeHdrFieldFind(bufp, hdr_loc, FIELD_NAME, -1)) != 0) { count = INKMimeFieldValueGetInt(bufp, field_loc, 0); INKMimeFieldValueSetInt(bufp, field_loc, 0, value); } else { field_loc = INKMimeFieldCreate(bufp); INKMimeFieldNameSet(bufp, field_loc, FIELD_NAME, -1); INKMimeFieldValueInsertInt(bufp, field_loc, value, -1); INKMimeHdrFieldInsert(bufp, hdr_loc, field_loc, -1); } INKHttpTxnReenable(txnp, INK_EVENT_HTTP_CONTINUE); return 0; }
static void replace_header(INKHttpTxn txnp, INKCont contp) { INKMBuffer resp_bufp; INKMLoc resp_loc; INKMLoc field_loc; if (!INKHttpTxnServerRespGet(txnp, &resp_bufp, &resp_loc)) { INKError("couldn't retrieve server response header.\n"); goto done; } field_loc = INKMimeHdrFieldRetrieve(resp_bufp, resp_loc, INK_MIME_FIELD_ACCEPT_RANGES); if (field_loc == 0) { /* field was not found */ /* create a new field in the header */ field_loc = INKMimeHdrFieldCreate(resp_bufp, resp_loc); /* set its name */ INKMimeHdrFieldNameSet(resp_bufp, resp_loc, field_loc, INK_MIME_FIELD_ACCEPT_RANGES, INK_MIME_LEN_ACCEPT_RANGES); /* set its value */ INKMimeHdrFieldValueInsert(resp_bufp, resp_loc, field_loc, "none", 4, -1); /* insert it into the header */ INKMimeHdrFieldInsert(resp_bufp, resp_loc, field_loc, -1); INKHandleMLocRelease(resp_bufp, resp_loc, field_loc); INKHandleMLocRelease(resp_bufp, INK_NULL_MLOC, resp_loc); } else { /* clear the field */ INKMimeHdrFieldValuesClear(resp_bufp, resp_loc, field_loc); /* set the value to "none" */ INKMimeHdrFieldValueInsert(resp_bufp, resp_loc, field_loc, "none", 4, -1); INKHandleMLocRelease(resp_bufp, resp_loc, field_loc); INKHandleMLocRelease(resp_bufp, INK_NULL_MLOC, resp_loc); } done: INKHttpTxnReenable(txnp, INK_EVENT_HTTP_CONTINUE); }