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));
}