Hi list,
here is a simple patch that adds the capability to define an "default"
DLR URL and bit mask for the 'group = sms-service', when we use the HTTP
response (or a defined fixed reply string) directly as MT back to the user.
At the moment we can parse the X-Kannel HTTP headers for a
[get|post]-url'ed sms-service, but, i.e. have no mechanism to do this
for exec'ed or fixed replies. This config directive allows it to define
a default DLR URL with the corresponding escape codes defined, that are
called on the DLR event getting back to the smsbox scope.
The patch is considerable easy and adds just a couple of checks. We'll
still use the X-Kannel HTTP header values in favor, before falling back
to the default config values from these directives.
Please review and comment.
Stipe
--
-------------------------------------------------------------------
Kölner Landstrasse 419
40589 Düsseldorf, NRW, Germany
tolj.org system architecture Kannel Software Foundation (KSF)
http://www.tolj.org/ http://www.kannel.org/
mailto:st_{at}_tolj.org mailto:stolj_{at}_kannel.org
-------------------------------------------------------------------
Index: doc/userguide/userguide.xml
===================================================================
--- doc/userguide/userguide.xml (revision 5021)
+++ doc/userguide/userguide.xml (working copy)
@@ -6834,6 +6834,24 @@
</entry>
</row>
+ <row><entry><literal>dlr-url</literal></entry>
+ <entry>string (URL)</entry>
+ <entry valign="bottom">
+ Optional Defines a default URL which is fetched for DLR event, if no
+ specific X-Kannel HTTP header parameter is returned by the HTTP
response.
+ </entry>
+ </row>
+
+ <row><entry><literal>dlr-mask</literal></entry>
+ <entry>number (bit mask)</entry>
+ <entry valign="bottom">
+ Optional. Defines a default DLR event bit mask which is used in
+ combination with the <literal>dlr-url</literal> config directive,
+ if no specific X-Kannel HTTP header parameter is returned by the
+ HTTP response.
+ </entry>
+ </row>
+
</tbody>
</tgroup>
</table>
Index: gw/smsbox.c
===================================================================
--- gw/smsbox.c (revision 5040)
+++ gw/smsbox.c (working copy)
@@ -316,13 +316,13 @@
gw_assert(msg_type(msg) == sms);
if (trans != NULL)
- max_msgs = urltrans_max_messages(trans);
+ max_msgs = urltrans_max_messages(trans);
else
- max_msgs = 1;
+ max_msgs = 1;
if (max_msgs == 0) {
- info(0, "No reply sent, denied.");
- return 0;
+ info(0, "No reply sent, denied.");
+ return 0;
}
/*
@@ -348,26 +348,36 @@
}
if (trans == NULL) {
- header = NULL;
- footer = NULL;
- suffix = NULL;
- split_chars = NULL;
- catenate = 0;
+ header = NULL;
+ footer = NULL;
+ suffix = NULL;
+ split_chars = NULL;
+ catenate = 0;
} else {
- header = urltrans_header(trans);
- footer = urltrans_footer(trans);
- suffix = urltrans_split_suffix(trans);
- split_chars = urltrans_split_chars(trans);
- catenate = urltrans_concatenation(trans);
+ header = urltrans_header(trans);
+ footer = urltrans_footer(trans);
+ suffix = urltrans_split_suffix(trans);
+ split_chars = urltrans_split_chars(trans);
+ catenate = urltrans_concatenation(trans);
+
+ /*
+ * If there hasn't been yet any DLR-URL set in the message
+ * and we have configured values from the URLTranslation,
+ * hence the 'group = sms-service' context group, then use
+ * them in the message.
+ */
+ if (msg->sms.dlr_url == NULL &&
+ (msg->sms.dlr_url = octstr_duplicate(urltrans_dlr_url(trans)))
!= NULL)
+ msg->sms.dlr_mask = urltrans_dlr_mask(trans);
}
if (catenate)
- msg_sequence = counter_increase(catenated_sms_counter) & 0xFF;
+ msg_sequence = counter_increase(catenated_sms_counter) & 0xFF;
else
- msg_sequence = 0;
+ msg_sequence = 0;
list = sms_split(msg, header, footer, suffix, split_chars, catenate,
- msg_sequence, max_msgs, sms_max_length);
+ msg_sequence, max_msgs, sms_max_length);
msg_count = gwlist_len(list);
debug("sms", 0, "message length %ld, sending %ld messages",
@@ -388,7 +398,7 @@
}
write_to_bearerbox(new_msg);
} else {
- /* msgs are the independed parts so sent those as is */
+ /* msgs are the independent parts so sent those as is */
while ((part = gwlist_extract_first(list)) != NULL)
write_to_bearerbox(part);
}
Index: gw/urltrans.c
===================================================================
--- gw/urltrans.c (revision 5032)
+++ gw/urltrans.c (working copy)
@@ -71,6 +71,7 @@
#include "urltrans.h"
#include "gwlib/gwlib.h"
#include "gw/sms.h"
+#include "gw/dlr.h"
/***********************************************************************
@@ -126,7 +127,8 @@
int args;
int has_catchall_arg;
int catch_all;
- Octstr *dlr_url; /* Url to call for delivery reports */
+ Octstr *dlr_url; /* URL to call for delivery reports */
+ long dlr_mask; /* DLR event mask */
regex_t *keyword_regex; /* the compiled regular expression for the
keyword*/
regex_t *accepted_smsc_regex;
@@ -879,8 +881,17 @@
return t->send_sender;
}
+Octstr *urltrans_dlr_url(URLTranslation *t)
+{
+ return t->dlr_url;
+}
+int urltrans_dlr_mask(URLTranslation *t)
+{
+ return t->dlr_mask;
+}
+
/***********************************************************************
* Internal functions.
*/
@@ -928,6 +939,8 @@
cfg_get_bool(&ot->catch_all, grp, octstr_imm("catch-all"));
ot->dlr_url = cfg_get(grp, octstr_imm("dlr-url"));
+ if (cfg_get_integer(&ot->dlr_mask, grp, octstr_imm("dlr-mask")) == -1)
+ ot->dlr_mask = DLR_UNDEFINED;
ot->alt_charset = cfg_get(grp, octstr_imm("alt-charset"));
url = cfg_get(grp, octstr_imm("get-url"));
Index: gw/urltrans.h
===================================================================
--- gw/urltrans.h (revision 5032)
+++ gw/urltrans.h (working copy)
@@ -332,4 +332,8 @@
int urltrans_strip_keyword(URLTranslation *t);
int urltrans_send_sender(URLTranslation *t);
+/* Return DLR related values */
+Octstr *urltrans_dlr_url(URLTranslation *t);
+int urltrans_dlr_mask(URLTranslation *t);
+
#endif