[PATCH] SMPP Optional params
Nisan Bloch <[email protected]>
| Newsgroups | gmane.comp.mobile.kannel.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi All
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)
{