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
