Hi Wayne,

I had a similar problem (also CDMA). It stemmed from the SMSC replying
with a message id in decimal not in hex (deliver_sm_resp format) hence
dlr report couldn't be found. 

Check the patch below which I'm using (applied to cvs), it contains a
couple of other things that I needed to add/modify but the relevant bit
should be obvious ;-). I've yet to clean up for general use but would be
interested to know if this helps.
Cheers,
Alan

On Tue, 2002-07-30 at 19:36, Wayne Smithers wrote:
> We have a situation where someone using a CDMA handset ( which does not
> support delivery receipt ) sends in an sms and it does not get to smsbox.
> 
> Bearer box outputs 'got DLR but could not find message or was not interested
> in it' and that's as far as it gets.
> 
> Does anybody know what the code below is trying to do ?  And what would need
> to occur to get in an error state ??
> 
> smsc_smpp.c
> 
>                 if (msgid != NULL) {
>                     Octstr *tmp;
>                     tmp = octstr_format("%ld",
> strtol(octstr_get_cstr(msgid), NULL, 10));
>                     dlrmsg = dlr_find(octstr_get_cstr(smpp->conn->id),
>                                       octstr_get_cstr(tmp), /* smsc message
> id */
> 
> octstr_get_cstr(pdu->u.deliver_sm.destination_addr), /* destination */
>                                       dlrstat);
>                     octstr_destroy(tmp);
>                 }
>                 if (dlrmsg != NULL) {
>                     reply = octstr_duplicate(respstr);
>                     /* having a / in the text breaks it so lets replace it
> with a space */
>                     len = octstr_len(reply);
>                     for (idx = 0; idx < len; idx++)
>                         if (octstr_get_char(reply, idx) == '/')
>                             octstr_set_char(reply, idx, '.');
>                     octstr_append_char(reply, '/');
>                     octstr_insert(dlrmsg->sms.msgdata, reply, 0);
>                     octstr_destroy(reply);
>                     bb_smscconn_receive(smpp->conn, dlrmsg);
>                 } else {
>                     error(0,"SMPP[%s]: got DLR but could not find message or
> was not interested in it",
>                           octstr_get_cstr(smpp->conn->id));
>                 }
> 
> 
> regards
> 
> Wayne Smithers
> 5th Finger
> [EMAIL PROTECTED]
> 91 Reservoir St
> Surry Hills 2010
> Sydney, Australia
> Ph:  +61-2-9280-0300
> Mob: +61-409-603511
> Fax: +612-9475-0367
> 
> 
-- 
Alan McNatty -- Catalyst IT Ltd -- http://www.catalyst.net.nz
  Level 2, 150-154 Willis St, PO Box 11-053, Wellington, NZ
Mob: +64 21-312136, DDI: +64 4 9167203, Office: +64 4 4992267

... error accessing whit
Segmentation fault (core dumped) 
Index: gw/smsc_smpp.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc_smpp.c,v
retrieving revision 1.76
diff -r1.76 smsc_smpp.c
22c22
<  
---
> 
54a55,56
> #define SMPP_SUBMIT_SM_RESP_FORMAT  16
> #define SMPP_DELIVER_SM_RESP_FORMAT 10
351d352
<         
354c355
<         } else {
---
> 	} else {
600,601c601,614
<             /* got a deliver ack? */ 
<             if ((pdu->u.deliver_sm.esm_class == 0x02 || 
---
> 
> 	    /* Based on SMPPv3.4 spec esm_class for deliver_sm is defined as ...
> 	     *
> 	     *   Message Type (bits (5-2)
> 	     *
> 	     *   xx0000xx (0x00) - Default Message Type
> 	     *   xx0001xx (0x01) - SM contains SMSC Delivery Receipt
> 	     *   xx0010xx (0x02) - SM contains SME Delivery Ack
> 	     *   xx0011xx (0x04) - reserverd
> 	     *
> 	     */
> 
>             if ((pdu->u.deliver_sm.esm_class == 0x01 ||
>                  pdu->u.deliver_sm.esm_class == 0x02 || 
644,645c657,667
<                     Octstr *tmp; 
<                     tmp = octstr_format("%ld", strtol(octstr_get_cstr(msgid), NULL, 10)); 
---
>                     Octstr *tmp_id, *tmp_addr; 
>                     tmp_id = octstr_format("%ld", strtol(octstr_get_cstr(msgid), NULL, 
> 					    SMPP_DELIVER_SM_RESP_FORMAT)); 
> 
> 		    /* XXX - check for broken SMSC that use source instead of destination */
> 
>                     if ( octstr_compare(pdu->u.deliver_sm.destination_addr, octstr_imm("")) != 0 )
> 		        tmp_addr = octstr_duplicate(pdu->u.deliver_sm.destination_addr);
> 		    else
>                         tmp_addr = octstr_duplicate(pdu->u.deliver_sm.source_addr);
> 		    
647,648c669,670
<                                       octstr_get_cstr(tmp), /* smsc message id */ 
<                                       octstr_get_cstr(pdu->u.deliver_sm.destination_addr), /* destination */ 
---
>                                       octstr_get_cstr(tmp_id),   /* smsc message id  */ 
>                                       octstr_get_cstr(tmp_addr), /* destination addr */ 
650c672,674
<                     octstr_destroy(tmp); 
---
> 
>                     octstr_destroy(tmp_id); 
>                     octstr_destroy(tmp_addr); 
761a786
> 
763c788,790
<                         octstr_get_cstr(pdu->u.submit_sm_resp.message_id), NULL, 16)); 
---
>                         octstr_get_cstr(pdu->u.submit_sm_resp.message_id), NULL, 
> 				SMPP_SUBMIT_SM_RESP_FORMAT)); 
> 

Reply via email to