Am 26.05.2014 18:59, schrieb Alexander Malysh:
Hi Stipe,

why this limit of 254? It's hard to explain for users what this mean, IMHO. I 
think, the beast would be to have config switch to use
either short_message or message_payload. Another argument for simple switch 
that some SMSCs expect message_payload even
for short message body.

adressing the concerns of Alex, please find here another variant of the patchset which uses a simple boolean switch in the config group, i.e.:

  group = smsc
  smsc = smpp
  ...
  message-payload = yes
  ...

to switch over to the use of submit_sm.mesage_payload instread of .short_message. Messages up to 64K in size are then not segmented and send as one PDU.

Comments, votes please.
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,17 @@
        Defaults to 3.
      </entry></row>
 
+   <row><entry><literal>message-payload</literal></entry>
+     <entry><literal>boolean</literal></entry>
+     <entry valign="bottom"> 
+       Optional, defines if we are using the 
+       <literal>submit_sm.message_payload</literal> field
+       for SMPP v3.4 or higher connections instead of the
+       <literal>submit_sm.short_message</literal> field.
+       Which also means that no segmentation of SMS messages
+       is performed up to a size of 64K.
+     </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)
@@ -173,6 +173,7 @@
     long wait_ack;
     int wait_ack_action;
     int esm_class;
+    int message_payload;
     Load *load;
     SMSCConn *conn;
 } SMPP;
@@ -995,6 +996,13 @@
 
     pdu->u.submit_sm.sm_length = octstr_len(pdu->u.submit_sm.short_message);
 
+    /* Use .message_payload if configured to do so. */
+    if (smpp->version > 0x33 && smpp->message_payload) {
+        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
@@ -2478,6 +2486,10 @@
         /* convert decimal to BCD */
         version = ((version / 10) << 4) + (version % 10);
 
+    /* check if 'message-payload' is allowed based on SMPP version used. */
+    if (cfg_get_bool(&ok, grp, octstr_imm("message-payload")) == 1 && version 
< SMPP_DEFAULT_VERSION)
+        panic(0, "SMPP: Configuration can't set 'message-payload' 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;
@@ -2546,6 +2558,10 @@
         smpp->ssl_client_certkey_file = cfg_get(grp, 
octstr_imm("ssl-client-certkey-file"));
 #endif
 
+    /* PDU allowed payload size is 64K, so change max SMS octet value */
+    if (cfg_get_bool(&smpp->message_payload, grp, 
octstr_imm("message-payload")) == 1)
+        conn->max_sms_octets = 65536;
+
     conn->data = smpp;
     conn->name = octstr_format("SMPP:%S:%d/%d:%S:%S",
                                host, port,
Index: gwlib/cfg.def
===================================================================
--- gwlib/cfg.def       (revision 5077)
+++ gwlib/cfg.def       (working copy)
@@ -373,6 +373,7 @@
     OCTSTR(bind-addr-npi)
     OCTSTR(service-type)
     OCTSTR(esm-class)
+    OCTSTR(message-payload)
     OCTSTR(source-addr-autodetect)
     OCTSTR(enquire-link-interval)
     OCTSTR(max-pending-submits)

Reply via email to