Re: New Features Question

Alexander Malysh <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <[email protected]>
Hi,

Jonathan Houser wrote:

> 
> Benjamin,
> 
>> Well it's really up to you... but if you do decide to post the diff or
>> a URL to the diff... other developers can eye the code and give you
>> feedback (if they feel like it, of course).
> 
>       Good idea.  :)  Here's the current location of said diff file.
> 
>     http://66.255.55.23/interop.diff
> 
>       If anyone knows of a better way to do the structure handling (ie.
> submit_sm vs. data_sm and their items, ie. data_coding) in a better way,
> it'd be much appreciated.  I tried to do some dynamic casting with the
> same code for both cases (only consolidated into one instance of said
> code), just re-casting a void pointer to the individual structure with
> no success.  Most of the code is identical (ie. handling the "+",
> checking the length, etc.).  The big two-tier switch statement was the
> best I could figure out with the deadline I had to get it working in.
> 
>       An example of what I meant above is something like:

how about somathing like this?

#define smpp_pdu(name) \
static int smpp_##name_to_msg(SMPP_PDU pdu, ...)
{
    struct name cmd = pdu->u.name;
    cmd->source_addr = octstr_create(XXX);
    ...
}
smpp_pdu(submit_sm);
smpp_pdu(data_sm);


now to patch: please split your patch in changesets (e.g. add data_sm
handling, add new struct members to msg struct, etc...)

Thanks in advance!


> 
> void* ptr;
> 
> ...
> 
> switch (command_id)
> {
>     case COMMAND_ID_SUBMIT_SM:
>        pdu = smpp_pdu_create(submit_sm,
> counter_increase(smpp->message_id_counter));
>        ptr = &pdu->u.submit_sm;
>        #undef DYN_CAST
>        #define DYN_CAST struct submit_sm*
>     break;
> 
>     case COMMAND_ID_DATA_SM:
>        pdu = smpp_pdu_create(data_sm,
> counter_increase(smpp->message_id_counter));
>        ptr = &pdu->u.data_sm;
>        #undef DYN_CAST
>        #define DYN_CAST struct data_sm*
>     break;
> 
> ...
> 
> ((DYN_CAST)ptr)->source_addr = octstr_duplicate(msg->sms.sender);
> ((DYN_CAST)ptr)->destination_addr = octstr_duplicate(msg->sms.receiver);
> 
>       I thought I was really smooth until I remembered that #define's
> are pre-processor and essentially just lump the code into the place of
> the token, thus the above only worked for data_sm as it's #define came
> last.  <sigh>  I'd rather not duplicate 2-300 lines of code just because
> of the structure's oddities.  So like I said, if there are any tricks to
> handling this struct of structs, please let me know.
> 
> 
>> It's a free world. ;-) And yay for it!
> 
>       Agreed.  :P
> 
> Jon

-- 
Thanks,
Alex
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.