[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)
  {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.