Hi All,

attached patch should solve the bug , make small cleanup and add additional sanity 
check...
please look in it and vote ...

Am Montag, 3. Februar 2003 19:08 schrieb Michael Mulcahy:
> > Michael you are right...
> > should we replace: dlrmsg->sms.msgdata =
> >  octstr_duplicate(emimsg->fields[E50_AMSG]); with:
> > dlrmsg->sms.msgdata =
> >  octstr_create("");
> > ?
>
> I think so, unless other people working with EMI have a better idea!
>
> ANAM Wireless Internet Solutions
> http://www.anam.com mailto:[EMAIL PROTECTED]
> +353 1 284 7555
> Castle Yard, Saint Patrick's Road, Dalkey, County Dublin, Ireland
>
> > -----Original Message-----
> > From: [EMAIL PROTECTED]
> > [mailto:[EMAIL PROTECTED]]On Behalf Of Alexander Malysh (by
> > way of Alexander Malysh <[EMAIL PROTECTED]>)
> > Sent: 03 February 2003 15:57
> > To: [EMAIL PROTECTED]
> > Subject: Re: EMI Driver Bug
> >
> >
> > Hi All,
> >
> > Michael you are right...
> > should we replace: dlrmsg->sms.msgdata =
> >  octstr_duplicate(emimsg->fields[E50_AMSG]); with:
> > dlrmsg->sms.msgdata =
> >  octstr_create("");
> > ?
> >
> > Am Montag, 3. Februar 2003 16:38 schrieb Michael Mulcahy:
> > > Hi All,
> > >
> > > more information for your understanding:
> > >
> > > When I submit a message with a dlr mask of 24, the
> >
> > bearerbox crashes,
> >
> > > Used following sendsms request:
> >
> > http://127.0.0.1:22022/cgi-bin/sendsms?username=testuser&passw
> > ord=password&
> >
> > >t o=12345676&from=987654321&text=Test Message (A) is being
> >
> > sent!&smsc=test&dlrmask=24&dlrurl=http://synge/test.asp?mask=%
> > 25d%26smsc_re
> >
> > >p ly=%25A%26receiver=%25p%26sender=%25P
> > >
> > > Here is a stack trace of the problem:
> > >
> > > seems_valid_real(Octstr * 0xdddddddd, const char *
> >
> > 0x10066ffc, long 289,
> >
> > > const char * 0x10066ff4)
> > > octstr_duplicate_real(Octstr * 0xdddddddd)
> > > emi2_handle_smscreq(smscconn * 0x00d706f0, Connection * 0x00d73420)
> > > emi2_send_loop(smscconn * 0x00d706f0, Connection * * 0x0188ff1c)
> > > emi2_sender(void * 0x00d706f0)
> > > new_thread(void * 0x00d727d0)
> > >
> > > dlrmsg->sms.msgdata = octstr_duplicate(emimsg->fields[E50_AMSG]);
> > > is the line in question within the emi2_handle_smscreq function.
> > >
> > > corresponding bearerbox trace:
> > >
> > > 2003-02-03 15:11:28 [22] DEBUG: boxc_receiver: sms received
> > > 2003-02-03 15:11:28 [8] DEBUG: EMI2[emi_smsc]: emi2 sending packet:
> >
> > <00/00138/O/51/12345676/20860000/////////////////3//5465737420
> > 4D65737361676
> >
> > > 5202841292030206973206265696E672073656E7421//////////020111///0F>
> > > 2003-02-03 15:11:28 [8] DEBUG: Adding DLR smsc=emi_smsc,
> > > ts=emi_smsc-0:45676, src=20860000, dst=12345676, mask=24,
> > > boxc=192.168.0.97:62982
> > > 2003-02-03 15:11:28 [8] DEBUG: EMI2[emi_smsc]: Got packet
> >
> > from the main
> >
> > > socket
> > > 2003-02-03 15:11:28 [8] DEBUG: EMI2[emi_smsc]: emi2 parsing packet:
> > > <00/00041/R/51/A//12345676:030203150828/D3>
> > > 2003-02-03 15:11:28 [8] DEBUG: Looking for DLR smsc=emi_smsc,
> > > ts=emi_smsc-0:45676, dst=12345676, type=8
> > > 2003-02-03 15:11:28 [8] DEBUG: created DLR message for URL
> >
> > <http://synge/test.asp?mask=%d&smsc_reply=%A&receiver=%p&sende
> > r=%P&message-
> >
> > >n umber=0>
> > >
> > > This occurs as the EMI driver is accessing a field
> >
> > (E50_AMSG) that is not
> >
> > > available in an EMI acknowledgement. It is surprising that
> >
> > no one has
> >
> > > experienced
> > > this problem in Kannel already with dlr_masks set to 24.
> > >
> > >
> > > ANAM Wireless Internet Solutions
> > > http://www.anam.com mailto:[EMAIL PROTECTED]
> > > +353 1 284 7555
> > > Castle Yard, Saint Patrick's Road, Dalkey, County Dublin, Ireland
> > >
> > >
> > > -----Original Message-----
> > > From: Andreas Fink [mailto:[EMAIL PROTECTED]]
> > > Sent: 03 February 2003 14:30
> > > To: [EMAIL PROTECTED]
> > > Subject: Re: EMI Driver Bug
> > >
> > >
> > >
> > > On Montag, Februar 3, 2003, at 03:22 Uhr, Michael Mulcahy wrote:
> > >
> > >
> > > Hi All,
> > >
> > > Comments Below:
> > >
> > >
> > > You're mixing up the SMSC response with the delivery report.
> > > When you send a message, you send a type 51 message. you will
> > > get a 50ACK back saying the SMSC has accepted the SMS.
> > >
> > >
> > > Is this a typo on your part? According to the EMI spec 4.0
> >
> > the response to
> >
> > > the submit short message operation 51 should contain an
> >
> > operation type of
> >
> > > 51 not 50.
> > >
> > >
> > > the ACK of all type 50 messages are the same. So this is of
> >
> > course a ACK
> >
> > > for 51.
> > >
> > >
> > >
> > >
> > > This is NOT the delivery report. The SMSC response is
> >
> > acknowledging that
> >
> > > the SMSC has accepted the message but it doesnt say that the message
> > > has been delivered to the handset.
> > >
> > >
> > > I think there is a misunderstanding of terminology here. I
> >
> > use the term
> >
> > > submission notification to mean that the message was
> >
> > submitted to the SMSC
> >
> > > not delivered to the handset.
> > >
> > >
> > > well this is not a delivery report then and I think the
> >
> > code snipped you
> >
> > > are showing is not executed in this case.
> > > note: in terms of DLR storage there are two things happening:
> > >
> > > when submission report is asked, it is adding a
> >
> > "temporarely" DLR record
> >
> > > with the sequence ID to the storage.
> > > when the submission is OK, then it adds a "final" DLR
> >
> > record with the full
> >
> > > data to the storage. This one is the one being searched
> >
> > when the message
> >
> > > finally gets delivered.
> > >
> > >
> > >
> > > The EMI2 driver does the following when a response to a
> >
> > submit operation is
> >
> > > received:
> > > Some code removed for brevity
> > >
> > > if (emimsg->ot == 51) {
> > > if (PRIVDATA(conn)->slots[emimsg->trn].dlr) {
> > > ...
> > > dlrmsg = dlr_find(octstr_get_cstr((conn->id ? conn->id :
> > > privdata->name)),
> > > octstr_get_cstr(ts), /* timestamp */
> > > octstr_get_cstr(origmsg->sms.receiver), /* destination */
> > > (octstr_get_char(emimsg->fields[0], 0) == 'A' ?
> > > DLR_SMSC_SUCCESS : DLR_SMSC_FAIL));
> > >
> > > octstr_destroy(ts);
> > > if (dlrmsg != NULL) {
> > > ...
> > >
> > > /*
> > > * Recode the msg structure with the given msgdata.
> > > * Note: the DLR URL is delivered in msg->sms.dlr_url
> > > already.
> > > */
> > > dlrmsg->sms.msgdata =
> > > octstr_duplicate(emimsg->fields[E50_AMSG]);
> > > octstr_hex_to_binary(dlrmsg->sms.msgdata);
> > > dlrmsg->sms.sms_type = report;
> > >
> > > This is the code for handling a response to a submit short message
> > > operation and checking if the user requested notification
> >
> > that the message
> >
> > > was submitted
> > > to the SMSC.
> > >
> > >
> > >
> > > I have to look into the code but it might be simply a
> >
> > non-fatal bug here.
> >
> > > So as per my original mail why does the driver try to reference the
> > > E50_AMSG field from the response of submitted message?
> > >
> > > I have checked CVS and it appears our emi2 module is up to
> >
> > date. I can
> >
> > > understand the driver doing this for a delivery report as
> >
> > the field exists
> >
> > > in a delivery
> > > report message but not for an acknowledgement to a
> >
> > submitted message. Does
> >
> > > your SMSC send
> > > acknowledgements that include the E50_AMSG field?
> > >
> > > We have being testing with an EMI emulator that claims to
> >
> > implement the EMI
> >
> > > standard, version 4.
> > >
> > >
> > > Well, while you are talking to an EMI emulator, does kannel
> >
> > fail in any
> >
> > > way? In other words, do you get a panic or such?
> > >
> > >
> > > Andreas Fink
> > > Global Networks Switzerland AG
> > >
> > > ------------------------------------------------------------------
> > > Tel: +41-61-6666333 Fax: +41-61-6666334 Mobile: +41-79-2457333
> > > Global Networks, Inc. Clarastrasse 3, 4058 Basel, Switzerland
> > > Web: http://www.global-networks.ch/  [EMAIL PROTECTED]
> > > ------------------------------------------------------------------
> > > Member of the GSM Association
> >
> > --
> > Best regards / Mit besten Grüßen aus Köln
> >
> > Dipl.-Ing.
> > Alexander Malysh
> > ___________________________________________
> >
> > Centrium GmbH
> > Ehrenstraße 2
> > 50672 Köln
> >
> > Fon: +49 (0221) 277 49 240
> > Fax: +49 (0221) 277 49 109
> >
> > email: [EMAIL PROTECTED]
> > web: www.centrium.de
> > msn: [EMAIL PROTECTED]

-- 
Best regards / Mit besten Grüßen aus Köln

Dipl.-Ing.
Alexander Malysh
___________________________________________

Centrium GmbH
Ehrenstraße 2
50672 Köln

Fon: +49 (0221) 277 49 240
Fax: +49 (0221) 277 49 109

email: [EMAIL PROTECTED]
web: www.centrium.de
msn: [EMAIL PROTECTED]

Index: gw/smsc/smsc_emi2.c
===================================================================
RCS file: /opt/cvsroot/kannel/gateway/gw/smsc/smsc_emi2.c,v
retrieving revision 1.1.1.1.2.23
diff -a -u -r1.1.1.1.2.23 smsc_emi2.c
--- gw/smsc/smsc_emi2.c	12 Dec 2002 18:02:40 -0000	1.1.1.1.2.23
+++ gw/smsc/smsc_emi2.c	3 Feb 2003 18:12:00 -0000
@@ -1109,25 +1109,23 @@
 
 			octstr_destroy(ts);
 			if (dlrmsg != NULL) {
-			    Octstr *moretext;
+			    /*
+			     * Note: the DLR URL is delivered in msg->sms.dlr_url already.
+			    */
+			    dlrmsg->sms.sms_type = report;
 
-				/*
-				* Recode the msg structure with the given msgdata.
-				* Note: the DLR URL is delivered in msg->sms.dlr_url already.
-				*/
-				dlrmsg->sms.msgdata = octstr_duplicate(emimsg->fields[E50_AMSG]);
-				octstr_hex_to_binary(dlrmsg->sms.msgdata);
-				dlrmsg->sms.sms_type = report;
-
-			    moretext = octstr_create("");
+			    dlrmsg->sms.msgdata = octstr_create("");
 			    if (octstr_get_char(emimsg->fields[0], 0) == 'N') {
-				octstr_append(moretext, emimsg->fields[1]);
-				octstr_append_char(moretext, '-');
-				octstr_append(moretext, emimsg->fields[2]);
+				octstr_append(dlrmsg->sms.msgdata, emimsg->fields[1]);
+				octstr_append_char(dlrmsg->sms.msgdata, '-');
+				/* system message is optional */
+				if (emimsg->fields[2] != NULL)
+				    octstr_append(dlrmsg->sms.msgdata, emimsg->fields[2]);
+				octstr_append_cstr(dlrmsg->sms.msgdata, "/NACK");
+			    }
+			    else {
+			        octstr_append_cstr(dlrmsg->sms.msgdata, "/ACK");
 			    }
-			    octstr_append_char(moretext, '/');
-			    octstr_insert(dlrmsg->sms.msgdata, moretext, 0);
-			    octstr_destroy(moretext);
 
 			    bb_smscconn_receive(conn, dlrmsg);
 			}
@@ -1152,13 +1150,13 @@
 				if(m == NULL) {
 				    info(0,"EMI2[%s]: uhhh m is NULL, very bad",
 					 octstr_get_cstr(privdata->name));
-				} else if ((m->sms.dlr_mask & 0x7)) {
+				} else if ((m->sms.dlr_mask & (DLR_SUCCESS|DLR_FAIL|DLR_BUFFERED))) {
 				    dlr_add(octstr_get_cstr((conn->id ? conn->id : privdata->name)),
 					    octstr_get_cstr(ts),
 					    octstr_get_cstr(m->sms.sender),
 					    octstr_get_cstr(adc),
-					    octstr_get_cstr(m->sms.service),
-					    octstr_get_cstr(m->sms.dlr_url),
+					    m->sms.service ? octstr_get_cstr(m->sms.service):NULL,
+					    m->sms.dlr_url ? octstr_get_cstr(m->sms.dlr_url):NULL,
 					    m->sms.dlr_mask,
 					    (m->sms.boxc_id ? octstr_get_cstr(m->sms.boxc_id) : NULL));
 				}

Reply via email to