A small patch to get the values of the optional SMPP params. Added: smpp_pdu_get_opt(SMPP_PDU *pdu, unsigned long opt_tag);
Nisan
--- ../cvs/gateway/gw/smsc/smpp_pdu.h Tue Mar 4 08:18:51 2003 +++ ../gateway-click/gw/smsc/smpp_pdu.h Tue Mar 4 07:49:10 2003 @@ -95,6 +95,7 @@
long smpp_pdu_read_len(Connection *conn); Octstr *smpp_pdu_read_data(Connection *conn, long len); +Octstr *smpp_pdu_get_opt(SMPP_PDU *pdu, unsigned long opt_tag);
#endif
--- ../cvs/gateway/gw/smsc/smpp_pdu.c Tue Mar 4 08:18:19 2003 +++ ../gateway-click/gw/smsc/smpp_pdu.c Tue Mar 4 07:48:22 2003 @@ -275,6 +275,50 @@ return pdu; }
+Octstr *smpp_pdu_get_opt(SMPP_PDU *pdu, unsigned long opt_tag) +{ + + Octstr *ret=NULL; + + debug("sms.smpp", 0, "SMPP PDU %p get_opt:", (void *) pdu); + debug("sms.smpp", 0, " type_name: %s", pdu->type_name); + + switch (pdu->type) { + #define OPTIONAL_BEGIN(num_expected) \ + if (p->optional_parameters != NULL) { \ + Octstr *key = NULL, *tag_val = NULL; + unsigned long id; + #define TLV(tag_id, min_len, max_len) \ + id = tag_id; \ + if (opt_tag == id) \ + { \ + key = octstr_create_from_data((char*)&id, 2); \ + tag_val = dict_get(p->optional_parameters, key); \ + if (tag_val != NULL) \ + ret = octstr_duplicate(tag_val); \ + else \ + ret = NULL; \ + octstr_destroy(key); \ + } + #define OPTIONAL_END \ + } + #define INTEGER(name, octets) + #define NULTERMINATED(name, max_octets) + #define OCTETS(name, field_giving_octets) + + #define PDU(name, id, fields) \ + case id: { struct name *p = &pdu->u.name; fields } break; + #include "smpp_pdu.def" + default: + break; + + } + + debug("sms.smpp", 0, "SMPP PDU get_opt ends."); + return ret; + +} +
void smpp_pdu_dump(SMPP_PDU *pdu) {