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


Reply via email to