Index: gw/smsc/smpp_pdu.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smpp_pdu.c,v
retrieving revision 1.28.2.2
diff -a -u -r1.28.2.2 smpp_pdu.c
--- gw/smsc/smpp_pdu.c	24 Jan 2008 16:47:04 -0000	1.28.2.2
+++ gw/smsc/smpp_pdu.c	27 Nov 2008 02:44:39 -0000
@@ -467,6 +467,15 @@
                         continue; \
                     } \
                     INTEGER(name, opt_len); \
+                    Octstr *tmptag = octstr_format("%d", opt_tag); \
+                    struct smpp_tlv *tlv = dict_get(tlv_by_tag, tmptag); \
+                    if (tlv != NULL) {\
+                        Octstr *tmpname = octstr_create(#name); \
+                        Octstr *val = octstr_format("%ld", p->name); \
+                        dict_put(p->tlv, tmpname, val); \
+                        octstr_destroy(tmpname); \
+                    } \
+                    octstr_destroy(tmptag); \
                 } else
     #define TLV_NULTERMINATED(name, max_len) \
                 if (SMPP_##name == opt_tag) { \
@@ -477,6 +486,15 @@
                         continue; \
                     } \
                     copy_until_nul(#name, data_without_len, &pos, opt_len, &p->name); \
+                    Octstr *tmptag = octstr_format("%d", opt_tag); \
+                    struct smpp_tlv *tlv = dict_get(tlv_by_tag, tmptag); \
+                    if (tlv != NULL) {\
+                        Octstr *tmpname = octstr_create(#name); \
+                        Octstr *val = octstr_duplicate(p->name); \
+                        dict_put(p->tlv, tmpname, val); \
+                        octstr_destroy(tmpname); \
+                    } \
+                    octstr_destroy(tmptag); \
                 } else
     #define TLV_OCTETS(name, min_len, max_len) \
                 if (SMPP_##name == opt_tag) { \
@@ -488,6 +506,15 @@
                         continue; \
                     } \
                     p->name = octstr_copy(data_without_len, pos, opt_len); \
+                    Octstr *tmptag = octstr_format("%d", opt_tag); \
+                    struct smpp_tlv *tlv = dict_get(tlv_by_tag, tmptag); \
+                    if (tlv != NULL) {\
+                        Octstr *tmpname = octstr_create(#name); \
+                        Octstr *val = octstr_duplicate(p->name); \
+                        dict_put(p->tlv, tmpname, val); \
+                        octstr_destroy(tmpname); \
+                    } \
+                    octstr_destroy(tmptag); \
                     pos += opt_len; \
                 } else
     #define OPTIONAL_END \
