Re: [PATCH] Get all available TLV's as Meta-Data

Alejandro Guerrieri <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Alex,

Done. Please check the attached patch.

There's still the issue regarding the "message_id" param on  
submit_sm_resp / data_sm_resp.

The new match by tag method voids the option of using the same  
filtering mechanism mentioned on my previous, mail since it would  
require a match by name (or inventing a tag
address for message_id, which is not an option IMHO).

Since it's not a TLV, does it make sense to add it to meta-data, or  
maybe exploring other ways to be able to retrieve it? Maybe a special  
% param or a conf directive like "smsc-message-id-into-meta-data" on  
the smpp group. Do you have any other ideas about how to achieve this?

Regards,
--
Alejandro Guerrieri
[email protected]



El 26/11/2008, a las 06:43 a.m., Alexander Malysh escribió:

> Hi Alex,
>
> great!!! :)
>
> Could you please change this patch to use dictionary tlv_by_tag  
> because the name of configured TLV may be different of the one in  
> SMPP spec. but the tag will be equal. I think it's up to user which  
> name configured TLV should use.
>
> And minor issue: please always make patches from gateway root  
> directory with cvs diff -Nau.
>
> Thanks,
> Alex
>
> Alejandro Guerrieri schrieb:
>> Hi,
>> This patch allows meta-data to carry all available TLV's not only  
>> the User-Defined.
>> All TLV's defined on smpp_pdu.def were "hijacked" by the main pdu  
>> structure, so they never reached the tlv dictionary. What this  
>> patch does is to check for defined TLV's on the smpp-tlv group and  
>> copy them to the tlv dictionary. Those TLV's are then available on  
>> the meta-data parameter.
>> It only copies the TLV's explicitly defined, otherwise the meta- 
>> data parameter would be unnecessary cluttered with all available  
>> TLV's.
>> This solves the "receipted_message_id" issue with deliver_sm (to  
>> name one), but does _not_ solve the "message_id" param on submit/ 
>> deliver/data_sm_response, since message_id is not a TLV.
>> For that parameter I could add a call for meta_data_set_value to  
>> inject it into the meta data (already tried and works), but then it  
>> would be always available.
>> To avoid this, I could use the same filtering mechanism as with the  
>> TLV's, but that would mean defining a dummy tag address, since this  
>> is not a TLV so it doesn't have a documented address. I could  
>> filter using tag_by_name, so the address wouldn't matter anyways,  
>> but it's somewhat ugly imho.
>> Ideas? Opinions?
>> Regards,
>> -- 
>> Alejandro Guerrieri
>> [email protected]
>
>
meta_data_extra_tlvs_v2.diff (application/octet-stream, 2.6 KB)
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 \
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.