Esempio n. 1
0
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;
}
Esempio n. 2
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);
}