Examples

March 26, 2020

require("msys.core");
require("msys.mms");

local mod = {};

function mod:mm7_request_eval(trx)
  print("***mm7_request_eval hook get called!!!");

  print ("****Transaction type: " .. trx.trx_type .. "\n");

  -- inspect the soap envelope in received request
  print ("****Soap envelope:\n" .. trx.soap_envelope .. "\n");

  -- inspect the soap attachment part in received request
  print ("****Soap attachment:\n" .. trx.soap_attachment .. "\n");

  -- inspect the ec_dict structure which contains the soap envelope parsed results,
  -- and put them into the <Details> in the response
  print ("****Tags:\n");
  msys.core.dict_stringprint (trx.status_details, trx.tags, 0, "     ");
  print ("\n" .. trx.status_details);

  -- modify the sender address
  msys.core.dict_key_delete (trx.tags, "RFC2822Address")
  msys.core.dict_add_key_value (trx.tags, "RFC2822Address", "fred@barney.com")

  -- print the recipients
  local recip = msys.cast(msys.core.ec_double_list_shift(trx.recipients),
    'msys.mms:mm7_recipient');
  print ("******Recipient: " .. recip.disposition .. ": " .. recip.address .. "
    " .. recip.type);

  -- set the <StatusCode> in response to 1100
  trx.status_code = 1100;

  -- set the <ServiceCode> in response
  msys.core.stringwrite (trx.service_code, "789-4560-321", 12);

  return MM7_CONTINUE;
end

msys.registerModule("mm7_request_eval_tests", mod);

#include "module.h"
#include "modules/mobility/mms/hooks/mm7_message_hooks.h"
#include "modules/mobility/mms/mm7.h"

static int sample_mm7s_request_eval_hook(void* gself, mm7_transaction* trx)
{
  ec_mod_debug(gself, DDEBUG, "***mm7_request_eval hook get called!!!");

  ec_mod_debug(gself, DDEBUG, "****Transaction type: %d\n", trx->trx_type);

  /* inspect the soap envelope in received request */
  ec_mod_debug(gself, DDEBUG, "****Soap envelope:\n%s\n", trx->soap_envelope.buffer);

  /* inspect the soap attachment part in received request */
  ec_mod_debug(gself, DDEBUG, "****Soap attachment:\n%s\n", trx->soap_attachment.buffer);

  /* inspect the ec_dict structure which contains the soap envelope parsed results,
    and put them into <Details> in response */
  ec_mod_debug(gself, DDEBUG, "****Tags:\n");
  dict_stringprint (&(trx->status_details), trx->tags, 0, "     ");
  ec_mod_debug(gself, DDEBUG, "\n%s\n", trx->status_details.buffer);

  /* modify the sender address */
  dict_key_delete (trx->tags, "RFC2822Address");
  dict_add_key_value (trx->tags, "RFC2822Address", "fred@barney.com");

  /* print the recipients */
  mm7_recipient* recip = (mm7_recipient*)ec_double_list_shift(&(trx->recipients));
  ec_mod_debug(gself, DDEBUG, "******Recipient: %d: %s %d\n", recip->disposition,
    recip->address.buffer, recip->type);

  /* set the <StatusCode> in response to 1100 */
  trx->status_code = 1100;

  /* set the <ServiceCode> in response */
  stringwrite(&trx->service_code, "789-4560-321", strlen("789-4560-321"));

  return MM7_CONTINUE;
}

static int init (generic_module_infrastructure *gself) {
  /* register the hook during module initialization */
  register_mm7_request_eval_hook_first (sample_mm7s_request_eval_hook, gself);
  return 0;
}

EC_MODULE_EXPORT
generic_module_infrastructure mm7_hook_test = {
  {
    EC_MODULE_INIT(EC_MODULE_TYPE_GENERIC, 0),
    "mm7_hook_test.c",
    "Sample MM7 Hook",
    NULL,
    NULL,
    NULL,
    init,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL
  }
};