Hi list,

at the moment there is no configurable way to have the SMPP client side module rather use the submit_sm.message_payload field for SMPP v3.4+ sessions and large MTs.

We'll always chop to the GSM 140 octet segment size and always use submit_sm.short_message.

Since SMPP is in general independent from the underlying network layer (i.e. GSM), we want to allow for PDUs that can transport larger messages in one PDU.

Please find attached a patchset that allows this, by using the existing config directive 'max-sms-octets' in the 'group = smsc' scope. We can use it for SMPP configuration to indicate what the maximum size of the message for ONE PDU should be.

I.e. a config:

  group = smsc
  smsc = smpp
  ...
  max-sms-octets = 32000

would use submit_sm.short_message for any content size <= 254, and submit_sm.message_payload for any content size > 254. The message is segmented to multiple PDUs of size 'max-sms-octets'.

Comments and votes for committing to SVN trunk are as always welcome.

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 5090)
+++ doc/userguide/userguide.xml (working copy)
@@ -3639,6 +3639,15 @@
        Defaults to 3.
      </entry></row>
 
+   <row><entry><literal>max-sms-octets</literal></entry>
+     <entry><literal>number</literal></entry>
+     <entry valign="bottom"> 
+       If interface version is SMPP v3.4 or higher, and a value larger then
+       254 is set for this config directive, then large messages will be 
transported in
+       one PDU via the <literal>submit_sm.message_payload</literal> field 
instead of
+       several PDUs using the <literal>submit_sm.short_message</literal> 
field. 
+     </entry></row>
+
    </tbody></tgroup></informaltable>
 
 </sect2>
Index: gw/smsc/smsc_smpp.c
===================================================================
--- gw/smsc/smsc_smpp.c (revision 5090)
+++ gw/smsc/smsc_smpp.c (working copy)
@@ -117,6 +117,7 @@
 #define SMPP_DEFAULT_WAITACK        60
 #define SMPP_DEFAULT_SHUTDOWN_TIMEOUT 30
 #define SMPP_DEFAULT_PORT           2775
+#define SMPP_MAX_SHORT_MESSAGE      254
 
 
 /*
@@ -996,6 +997,16 @@
     pdu->u.submit_sm.sm_length = octstr_len(pdu->u.submit_sm.short_message);
 
     /*
+     * Sanity check of .short_message, in case 'max-sms-octets' was set to a
+     * larger value, then we may need to move the payload to .message_payload.
+     */
+    if (pdu->u.submit_sm.sm_length > SMPP_MAX_SHORT_MESSAGE && smpp->version > 
0x33) {
+        pdu->u.submit_sm.message_payload = pdu->u.submit_sm.short_message;
+        pdu->u.submit_sm.short_message = NULL;
+        pdu->u.submit_sm.sm_length = 0;
+    }
+
+    /*
      * check for validity and deferred settings
      * were message value has higher priority then smsc config group value
      * Note: we always send in UTC and just define "Time Difference" as 00 and
@@ -2478,6 +2489,10 @@
         /* convert decimal to BCD */
         version = ((version / 10) << 4) + (version % 10);
 
+    /* check if 'max-sms-octets' is allowed based on SMPP version used. */
+    if (conn->max_sms_octets > MAX_SMS_OCTETS && version < 
SMPP_DEFAULT_VERSION)
+        panic(0, "SMPP: Configuration can't set 'max-sms-octets' if interface 
version is v3.3.");
+
     /* check for any specified priority value in range [0-5] */
     if (cfg_get_integer(&priority, grp, octstr_imm("priority")) == -1)
         priority = SMPP_DEFAULT_PRIORITY;

Reply via email to