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