<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-5228203547789870316</id><updated>2008-12-09T17:37:36.532Z</updated><title type='text'>The NowSMS Tech Support Files</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/'/><link rel='next' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default?start-index=26&amp;max-results=25'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>38</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-8069331945524354923</id><published>2008-11-13T10:00:00.001Z</published><updated>2008-11-13T10:00:00.490Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-11-13T10:00:00.490Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='sendmms.php'/><title type='text'>NowSMS PHP Example: Send MMS Message</title><content type='html'>Continuing our series of PHP examples, today we'll revisit sendmms.php, which we originally published on our discussion board 5 years ago at &lt;a href="http://www.nowsms.com/discus/messages/1/1113.html"&gt;http://www.nowsms.com/discus/messages/1/1113.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The sendmms.php script is considerably more complex than the sendsms.php script.  The reason for this increased complexity is because an MMS message is more complex than an SMS message.&lt;br /&gt;&lt;br /&gt;However, I have to admit that our 5 year old example can be a little difficult to follow.  Over the years, I've answered quite a few questions about the script, as the way that you specify the files to include in the MMS message is a little confusing.&lt;br /&gt;&lt;br /&gt;So in this posting, we'll update sendmms.php, and make it a little easier to follow.&lt;br /&gt;&lt;br /&gt;The updated &lt;strong&gt;sendmms.php&lt;/strong&gt; can be downloaded at &lt;a href="http://www.nowsms.com/download/sendmms-php.txt"&gt;http://www.nowsms.com/download/sendmms-php.txt&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The first part of sendmms.php consists of PHP functions that you will call in your PHP script ... namely MmsInit, MmsAddField, MmsAddFile and MmsSend.  Include these functions in your script without editing them.&lt;br /&gt;&lt;br /&gt;After these functions are defined, sendmms.php contains a simple example showing how to use these functions to send an MMS message through a NowSMS server.&lt;br /&gt;&lt;br /&gt;1.) First, you need to initialise the parameters to point to your NowSMS server:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;/* Set parameters for connecting to the NowSMS server */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$nowsmsHostName = "127.0.0.1";    /* IP Address or host name of NowSMS Server */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$nowsmsHostPort = "8800";         /* NowSMS Port number for the web interface */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$nowsmsUsername = "test";         /* "SMS Users" account name */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$nowsmsPassword = "test";         /* "SMS Users" account password */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2.) Second, you need to call &lt;strong&gt;&lt;em&gt;MmsInit&lt;/em&gt;&lt;/strong&gt; to initialise the MMS message structure.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$mmsMessage = MmsInit();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3.) Third, you need to add the necessary MMS header fields and attributes desired for your MMS message, calling the &lt;strong&gt;&lt;em&gt;MmsAddField&lt;/em&gt;&lt;/strong&gt; fuction.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$mmsMessage = MmsAddField ($mmsMessage, "PhoneNumber", "+447777777777");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$mmsMessage = MmsAddField ($mmsMessage, "MMSFrom", "sender@domain.com");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$mmsMessage = MmsAddField ($mmsMessage, "MMSSubject", "Subject of Message");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;"PhoneNumber"&lt;/strong&gt; field specifies the recipient(s) for the MMS message.  This can be a comma delimited list of phone numbers, or it can be the name of a NowSMS distribution list.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;"MMSFrom"&lt;/strong&gt; field specfies the sender of the MMS message.  Normally, this would be a phone number, short code or e-mail address.  (And your MMS service provider may either require a specific value here, or they may overwrite the value you supply with the address associated with your service.)&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;"MMSSubject"&lt;/strong&gt; field specifies the subject of the MMS message.&lt;br /&gt;&lt;br /&gt;Those are the most common MMS header fields.  Optionally, you might also want to include an &lt;strong&gt;"MMSText"&lt;/strong&gt; field to specify some text to be included in the MMS message.  Text can also be included in an MMS message as a text file reference.&lt;br /&gt;&lt;br /&gt;4.) Fourth, you specify the files to include in the MMS message using the &lt;strong&gt;&lt;em&gt;MmsAddFile&lt;/em&gt;&lt;/strong&gt; function.  These files might be images, video, text, or other file types supported by the receiving device.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;$mmsMessage = MmsAddFile ($mmsMessage, "f:\\temp\\filename.gif", "image/gif");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;An MMS message can contain one or more of these included files.  If you do not include a SMIL file component, NowSMS will build one automatically, so for full control of the MMS message presentation, you will want to include your own SMIL file, where you reference your file components by their short filename (without the full path, e.g., filename.gif ... NOT f:\temp\filename.gif).&lt;br /&gt;&lt;br /&gt;The files referenced in the PHP script must be local files, residing on the same server as the PHP script.  Remember to escape backslashes in the path so as not to confuse the PHP interpreter(c:\temp\file becomes c:\\temp\\file).&lt;br /&gt;&lt;br /&gt;The last parameter of MmsAddFile is the MIME content type, e.g., "image/gif", "image/jpeg", "image/png", "text/plain" or "application/smil" ...   however, note that current versions of NowSMS ignore the MIME content type when messages are submitted via the interface   used by this PHP script. Instead, NowSMS uses the file extension to determine the content type (e.g., ".gif", ".jpg", ".png", ".txt", ".smil").&lt;br /&gt;&lt;br /&gt;5.) Fifth and finally, you call &lt;strong&gt;&lt;em&gt;MmsSend&lt;/em&gt;&lt;/strong&gt; to submit the MMS message.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;MmsSend ($nowsmsHostName, $nowsmsHostPort, $nowsmsUsername, $nowsmsPassword, $mmsMessage);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Those are the basics.&lt;br /&gt;&lt;br /&gt;For the curious, the MmsAddField function can be used to specify any NowSMS URL parameter that is valid for sending an MMS message.&lt;br /&gt;&lt;br /&gt;For example ... here is an incomplete list of additional parameter fields that can be specfied using the MmsAddField function.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"MMSFile"&lt;/strong&gt; - As I've noted above, this script attaches local files to the MMS message.  However, what if you want to include files that reside on a separate web server instead?  In that case, do not use the MmsAddFile function.  Instead, use $mmsMessage = MmsAddField ($mmsMessage, "MMSFile", "&lt;a href="http://www.nowsms.com/media/logo.png"&gt;http://www.nowsms.com/media/logo.png&lt;/a&gt;" ); and specify the file components as URL references via the "MMSFile" parameter field.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"MMSDeliveryReport"&lt;/strong&gt; - "Delivery Report" specifies whether or not a delivery report is requested for the message. Set to "Yes" to request a delivery report. Note that any delivery report would be directed back to the phone number or e-mail address specified in the "MMSFrom" address.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"MMSReadReport"&lt;/strong&gt; -  "Read Report" specifies whether or not a read receipt is requested for the message. Note that the receiving client may choose not to send a read receipt. Any read receipt report would be directed back to the phone number or e-mail address specified in the "MMSFrom" address.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"MMSPriority"&lt;/strong&gt; - "Priority" is a user defined priority to be associated with the message. Generally, any priority definition associated with the message is ignored by the underlying transport, but the receiving client may decide to display messages differently based upon this priority setting.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"MMSMessageClass"&lt;/strong&gt; - "Message Class" is an attribute defined in the MMS specifications. "Personal" is the message type that is used for standard user-to-user communications. Other defined message classes that are supported by this parameter include:  "Informational" and "Advertisement".&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"MMSWAPPush"&lt;/strong&gt; - Set to "Yes" to indicate that the message being sent should be sent as an "Multimedia WAP Push" message instead of as an MMS message.&lt;br /&gt;&lt;br /&gt;It is also possible to specify forward locking and DRM constraints to be applied against the content of the MMS message.  Forward locking and DRM constraints apply to non-text parts of the MMS message (i.e., in a forward locked message, text could still be forwarded, but images or video could not).  Please note that not all devices support forward locking and DRM constraints, therefore use these parameter settings only after testing thoroughly with mobile phones used by your message recipients.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"MMSForwardLock"&lt;/strong&gt; - Forward locking is the most basic level of DRM (Digital Rights Management). When "Forward Lock" is set to "Yes", this indicates that the receiving device should not allow any non-text objects in the message to be forwarded off of the device. The device may allow the user to extract pictures, videos or sounds from the message and save them on the phone. However, any such objects remain forward locked, such that they cannot be forwarded to another user or transferred to another device.  (IMPORTANT NOTE:  NOT ALL DEVICES SUPPORT FORWARD LOCK, WHEN NOT SUPPORTED THE CONTENT WILL APPEAR AS GARBAGE OR MAY BE REJECTED BY THE OPERATOR MMSC.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMRestrict"&lt;/strong&gt; - Beyond forward locking, More advanced DRM (Digital Rights Management) restrictions can be applied to limit the number of times that the user can access an object, or start and end dates can be specified to limit how long the user can access an object.&lt;br /&gt;These advanced DRM restrictions can be applied by setting "DRMRestrict" to "Yes". When this setting is enabled, forward lock is also implied, and the value of the "MMSForwardLock" setting is ignored.  (IMPORTANT NOTE:  NOT ALL DEVICES SUPPORT DRM RESTRICTIONS, WHEN NOT SUPPORTED THE CONTENT WILL APPEAR AS GARBAGE OR MAY BE REJECTED BY THE OPERATOR MMSC.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMRestrictTextXML"&lt;/strong&gt; - "Yes" specifies that the rights object should be encoded in text XML format. "No" specfies that the rights object should be encoded in binary XML format. The default is "No".&lt;br /&gt;&lt;br /&gt;When DRM Restrictions are specfied, it is generally necessary to specify one or more DRM Permissions and one or more DRM Constraints regarding the MMS message content.&lt;br /&gt;&lt;br /&gt;DRM Permissions specify what types of access are allowed against the objects in a message that is protected with DRM.&lt;br /&gt;&lt;br /&gt;For example, an audio or video object requires "Play" permission before the user can access it. An image requires "Display" permission before the user can access it, and it requires "Print" permission if the user is to be allowed to print the image to a printer , perhaps over Bluetooth. An application requires "Execute" permission before the user can make use of the application. In all cases, the forward locking is assumed, so that the user is not allowed to forward or transfer the object from the device.&lt;br /&gt;&lt;br /&gt;If you are sending multiple types of objects in the MMS message, specify all permissions that are required for the different types of objects that are being sent.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMPermissionPlay"&lt;/strong&gt; - Set to "Yes" to enable DRM "Play" Permission.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMPermissionDisplay"&lt;/strong&gt; - Set to "Yes" to enable DRM "Display" Permission.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMPermissionExecute"&lt;/strong&gt; - Set to "Yes" to enable DRM "Execute" Permission.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMPermissionPrint"&lt;/strong&gt; - Set to "Yes" to enable DRM "Print" Permission.&lt;br /&gt;&lt;br /&gt;DRM Constraints specify constraints with regard to how long a DRM protected object object should remain accessible to the user.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMConstraintCount"&lt;/strong&gt; -  "# of Accesses (count)" specifies the the user can only access the DRM protected object this number of times before access is no longer allowed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMConstraintStart"&lt;/strong&gt; - "Start Date (yyyy-mm-dd)" specifies that the user will not be allowed to access the DRM protected object until on or after the specified date. (Note that you must specify the date in yyyy-mm-dd format, e.g., 2008-12-24.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMConstraintEnd"&lt;/strong&gt; - "End Date (yyyy-mm-dd)" specifies that the user will not be allowed to access the DRM protected object after the specified date. (Note that you must specify the date in yyyy-mm-dd format, e.g., 2008-02-24.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"DRMConstraintInterval"&lt;/strong&gt; - "# of Days (interval)" specifies that the user will be allowed to access the DRM protected object for this number of days after initial receipt of the object. The user can either enter a number of days here, or they can enter any valid value defined for the "&lt;interval&gt;" element in the OMA DRM Rights Expression Language specification. For example, P2Y10M15DT10H30M20S represents a duration of 2 years, 10 months, 15 days, 10 hours, 30 minutes and 20 seconds.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/8069331945524354923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=8069331945524354923' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/8069331945524354923?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/8069331945524354923'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/11/nowsms-php-example-send-mms-message.html' title='NowSMS PHP Example: Send MMS Message'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-6239586780388778147</id><published>2008-11-05T18:51:00.002Z</published><updated>2008-11-05T19:14:15.375Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-11-05T19:14:15.375Z</app:edited><title type='text'>NowSMS Update Available for Test Release</title><content type='html'>Over the past several months, we have been working on some optimisations and performance enhancements to the core SMS message routing logic of the NowSMS product.&lt;br /&gt;&lt;br /&gt;These enhancements have been geared primarily toward supporting higher volume messaging environments with speed requirements of 400 messages per second and higher.&lt;br /&gt;&lt;br /&gt;These core performance enhancements are also of interest to other high speed, but not-quite-as-high-speed environments for a variety of reasons.&lt;br /&gt;&lt;br /&gt;1.) Requesting delivery receipts for all (or most) messages can put an increased strain on the system, with previous versions of NowSMS peaking at speeds of 150 to 200 messages per second when delivery receipts are requested, and sometimes with a queued backlog of receipt processing. Performance is easily doubled in this update, and the queue backlog has been eliminated.&lt;br /&gt;&lt;br /&gt;2.) 2-way SMS command performance has been optimised, particularly for HTTP based commands, allowing an HTTP based command to easily keep up with burst rates of hundreds of messages per second.   (For more preliminary information, see &lt;a href="http://www.nowsms.com/discus/messages/1/24486.html"&gt;http://www.nowsms.com/discus/messages/1/24486.html&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;3.) CPU load with large numbers of outbound messaging routes. Historically, the more outbound routes defined to NowSMS, the higher the CPU load, especially if there is a large volume of queued messages waiting for a small number of routes. The routing logic has been dramatically improved to reduce CPU load.&lt;br /&gt;&lt;br /&gt;4.) If you use HTTP-based accounting callbacks for billing or accounting, they may be significantly limiting your overall message throughput. The new release uses HTTP keep-alive sockets and optimised logic to improve throughput when accounting callbacks are enabled.&lt;br /&gt;&lt;br /&gt;There are also a number of new features in this release. A list of features and enhancements from the readme file can be found at the end of this message. However, the primary focus of this NowSMS update is performance.&lt;br /&gt;&lt;br /&gt;We've completed our internal testing of this update. However, because there were a large number of internal changes, optimisations and fixes, we are going to make this version available as a test release before general release.&lt;br /&gt;&lt;br /&gt;We're quite confident that this release is actually more stable and robust than previous versions. We know the performance and CPU overhead is much improved. We know that overall disk I/O has been reduced. And we know several rather significant bugs that have been fixed in this release. But, the problem with bugs is they are very much configuration dependent, and with such a large number of configuration options, we may have missed something that affects articular configurations, so we want to get some more feedback.&lt;br /&gt;&lt;br /&gt;For this reason, we're going to go ahead and make this update available in a testing release prior to a more general release.&lt;br /&gt;&lt;br /&gt;This update can be downloaded at &lt;a href="http://www.nowsms.com/download/nowsms200811.zip"&gt;http://www.nowsms.com/download/nowsms200811.zip&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A full list of changes can be found in the readme file included with this release, or is also avaialble at the following link:  &lt;a href="http://www.nowsms.com/discus/messages/53/24488.html"&gt;http://www.nowsms.com/discus/messages/53/24488.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We will be detailing some of the other enhancements in future postings here, but here is a brief overview of some of the more significant features:&lt;br /&gt;&lt;br /&gt;1.) &lt;strong&gt;Enhanced SMS Message Routing Logic&lt;/strong&gt; - Recipient address masks can now specify addresses to exclude from the selected route, in addition to the existing inclusive logic.  Additionally, the SMPP service_type value can be used as a basis for SMS message routing.  Some additional preliminary information can be found in the following message thread:  &lt;a href="http://www.nowsms.com/discus/messages/1/24460.html"&gt;http://www.nowsms.com/discus/messages/1/24460.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2.) &lt;strong&gt;Dynamic SMS Message Routing Callbacks&lt;/strong&gt; - This capability is long overdue!  It has been availalble for MMS message routing for some time.  Essentially, the existing HTTP accounting callbacks have been extended to allow the callbacks to dynamically specify which outbound route should be used for SMS message routing.  Some additional preliminary information can be found in the following mesasge thread:  &lt;a href="http://www.nowsms.com/discus/messages/1/23919.html"&gt;http://www.nowsms.com/discus/messages/1/23919.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.) &lt;strong&gt;Explicit SMSC Routing available to SMPP Clients&lt;/strong&gt; - Perhaps not as signicant as the other enhancements, but it is now possible to give SMPP clients connecting to NowSMS as their SMPP server more control over outbound SMSC routing if desired.  Some additional preliminary information can be found in the following message thread:  &lt;a href="http://www.nowsms.com/discus/messages/1/24485.html"&gt;http://www.nowsms.com/discus/messages/1/24485.html&lt;/a&gt;&lt;a href="http://www.nowsms.com/discus/messages/1/23919.html"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4.) &lt;strong&gt;Bug fix that could cause an SMPP client connection to "hang"&lt;/strong&gt; - See &lt;a href="http://www.nowsms.com/discus/messages/1/24483.html"&gt;http://www.nowsms.com/discus/messages/1/24483.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5.) &lt;strong&gt;Throttling support for outbound MMS routing speed&lt;/strong&gt; for external MM7, MM4 or EAIF connections.&lt;br /&gt;&lt;br /&gt;6.) Enhanced support for the "mailto:" command as used in 2-way commands for routing received SMS messages to e-mail.  Additional preliminary information can be found in the following message thread:  &lt;a href="http://www.nowsms.com/discus/messages/1/24428.html"&gt;http://www.nowsms.com/discus/messages/1/24428.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;7.) More flexibility in controlling &lt;strong&gt;message retry behaviour in UCP/EMI and CIMD environments&lt;/strong&gt;, as described in the following post:  &lt;a href="http://blog.nowsms.com/2008/10/sms-retry-error-handling-with-ucpemi.html"&gt;http://blog.nowsms.com/2008/10/sms-retry-error-handling-with-ucpemi.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;8.) &lt;strong&gt;Delivery receipts are now supported for UCP/EMI and CIMD environments&lt;/strong&gt;, with NowSMS automatically translating message receipts for those environments into SMPP format to simplify processing.&lt;br /&gt;&lt;br /&gt;9.) &lt;strong&gt;MMSC/MM4 Enhancements&lt;/strong&gt; for improved real-world compatibility with more MMS interconnect services.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/6239586780388778147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=6239586780388778147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/6239586780388778147?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/6239586780388778147'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/11/nowsms-update-available-for-test.html' title='NowSMS Update Available for Test Release'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-5845543451517003639</id><published>2008-10-23T09:00:00.000Z</published><updated>2008-10-23T09:00:01.338Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-23T09:00:01.338Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='operator MMSC'/><title type='text'>MMS Conversion to SMS With Web Link</title><content type='html'>When using the NowSMS MMSC, one of the MMS routing options is to convert an MMS message to an SMS message with a web link.&lt;br /&gt;&lt;br /&gt;This setting is most often used in operator MMSC configurations for one or more of the following configurations:&lt;br /&gt;&lt;br /&gt;1.) Delivering an MMS message to a mobile phone that does not support MMS. (This is most frequently used in conjunction with auto-provisioning, where MMS compatible phones are automatically provisioned on the NowSMS MMSC. For more information on auto-provisioning, please see &lt;a href="http://www.nowsms.com/support/bulletins/tb-nowsms-002.htm"&gt;http://www.nowsms.com/support/bulletins/tb-nowsms-002.htm&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;2.) Delivering an MMS message to an international recipient for which there is no available MMS interconnection.&lt;br /&gt;&lt;br /&gt;3.) It is also possible to configure a delay period where any pending MMS messages are converted to SMS messages with a web link if it is not retrieved within a configurable timeout.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This article will describe configuration settings relevant to one or more of these scenarios.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sending MMS Message – Convert to SMS with Web Link&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;The &lt;strong&gt;&lt;em&gt;"MMSC Routing"&lt;/em&gt;&lt;/strong&gt; page of the NowSMS configuration defines all external routes for MMS message delivery.&lt;br /&gt;&lt;br /&gt;The NowSMS MMSC will always perform direct MMS delivery as an MMSC for any subscribers that are registered with the MMSC. These subscribers could be manually or automatically provisioned, and they will be listed on the &lt;strong&gt;&lt;em&gt;"MMSC Users"&lt;/em&gt;&lt;/strong&gt; page of the NowSMS configuration.&lt;br /&gt;&lt;br /&gt;Routing for MMS message recipients that are not subscribers of the MMSC is defined on the &lt;strong&gt;&lt;em&gt;"MMSC Routing"&lt;/em&gt;&lt;/strong&gt; page of the NowSMS configuration.&lt;br /&gt;&lt;br /&gt;The routing type &lt;strong&gt;&lt;em&gt;"Convert to SMS with Web Link"&lt;/em&gt;&lt;/strong&gt; defines that any MMS messages sent via this route should be converted to an SMS message that includes a link to a web page where the recipient can go to retrieve the content of the MMS message.&lt;br /&gt;&lt;br /&gt;For example, when sending an MMS message to a recipient that does not have an MMS compatible phone, or to an international recipient to which there is no available MMS interconnection, the recipient can instead receive an SMS message similar to the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Multimedia message from +4477777777. To view, go to http://mms.operator.com, and enter code number 1234.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The recipient can then navigate to the web link using a WAP browser on a mobile phone, or a web browser on a PC. They will be prompted for their phone number and the code number that was supplied in the SMS message. After entering that information, the message content will be displayed in the browser.&lt;br /&gt;&lt;br /&gt;Frequently, this type of route is configured as a default route, which means that this route is used if a recipient was not in the &lt;strong&gt;&lt;em&gt;"MMSC Users"&lt;/em&gt;&lt;/strong&gt; list, and not covered by a recipient address mask in another &lt;strong&gt;&lt;em&gt;"MMSC Routing"&lt;/em&gt;&lt;/strong&gt; definition.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img id="BLOGGER_PHOTO_ID_5255643338552625250" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_YurG55Yaya0/SO_LxVSTyGI/AAAAAAAAAx0/oCsAG4K3UdI/s400/mmscoutboundrouting.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following configuration settings are required for this type of routing:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;"Local Server Port"&lt;/em&gt;&lt;/strong&gt; specifies an available port number on the PC running NowSMS which will be used to accept connections from recipients who are attempting to connect in to retrieve MMS messages over the web interface. This port number must be different from other port numbers configured for use by NowSMS. This port must be unique, because the only functionality provided through this interface is MMS message retrieval over the web interface. Other NowSMS ports will likely have restricted access via a firewall, however this port needs to be open to the outside world to allow these types of messages to be retrieved.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;"Local Server URL"&lt;/em&gt;&lt;/strong&gt; specifies the externally accessible URL that recipients will access to connect to the "Local Server Port" on the MMSC. This setting will default to the "Local Host Name or IP Address" configured for the MMSC, and the "Local Server Port". However, if you are remapping the address and port via a firewall, you should specify the external host name (and port if required) in this field. Keep in mind that some users may be restricted from retrieving content from non-standard web server ports.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;"SMS Message Text"&lt;/em&gt;&lt;/strong&gt; is a template for the SMS text message that will be sent out to recipients. This text should consist only of characters that are part of the default GSM character set. And it should include the following replaceable text parameters:&lt;br /&gt;&lt;br /&gt;@@PhoneNumber@@ will be replaced with the phone number of the message sender.&lt;br /&gt;@@Server@@ will be replaced with the value configured for "Local Server URL".&lt;br /&gt;@@Code@@ will be replaced with a code number that the recipient must enter in order to retrieve the MMS message content.&lt;br /&gt;&lt;br /&gt;The default text for this message is:&lt;br /&gt;&lt;br /&gt;"Multimedia message from @@PhoneNumber@@. To view, go to @@Server@@ and enter code number @@Code@@."&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;"Use MMS Sender as SMS Sender"&lt;/em&gt;&lt;/strong&gt; - This option specifies that the SMS message that is sent out should use the sender address from the original MMS sender, if the original MMS sender was a phone number.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Web Link Template Files&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;HTML (XHTML Basic) and WML template files are used to construct the login page and message files generated by this facility.&lt;br /&gt;&lt;br /&gt;These template files must be located in a subdirectory of NowSMS named "MMSSMS".&lt;br /&gt;&lt;br /&gt;The templates for the login page are LOGIN.WML and LOGIN.HTM.&lt;br /&gt;&lt;br /&gt;The templates for message file creation are MSGTEMPLATE.WML and MSGTEMPLATE.HTM.&lt;br /&gt;&lt;br /&gt;These templates can also reference GIF or JPEG files that are located in the same "MMSSMS" directory. The default templates make use of two GIF files, CLOSE.GIF and OK.GIF.&lt;br /&gt;NowSMS will automatically load either the WML or HTML (XHTML Basic) template, based upon the capabilities of the device.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Converting to SMS with Web Link After a Delay&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;It is also possible to configure the MMSC such that it if an MMS message is not retrieved from the MMSC within a configurable timeout period, the MMSC will then convert the message to SMS, sending a text SMS message to the recipient, with a URL like that can be used from either a phone or PC browser, to retrieve the content of the message.&lt;br /&gt;&lt;br /&gt;To enable this SMS conversion, it is necessary to define an &lt;strong&gt;&lt;em&gt;"MMSC Routing"&lt;/em&gt;&lt;/strong&gt; of the type &lt;strong&gt;&lt;em&gt;"Convert to SMS web Web Link"&lt;/em&gt;&lt;/strong&gt;, as described above.&lt;br /&gt;&lt;br /&gt;Once that routing is defined, edit MMSC.INI, and add the following settings under the [MMSC] header:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UndeliverableRouteToSMS=VASPOutboundRouteName&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;Specifies the name of an MMSC Outbound Route that is defined in the "MMSC Routing" list, which must be of the type "Convert to SMS with Web Link". By default, if an MMS message has not been retrieved within 120 minutes, the message will be rerouted to be sent as an SMS with a web link for accessing the MMS content.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;UndeliverableRouteToSMSTimeout=####&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;#### is a value in minutes that changes the time period after which the UnderliverableRouteToSMS setting is applied.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/5845543451517003639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=5845543451517003639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/5845543451517003639?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/5845543451517003639'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/mms-conversion-to-sms-with-web-link.html' title='MMS Conversion to SMS With Web Link'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_YurG55Yaya0/SO_LxVSTyGI/AAAAAAAAAx0/oCsAG4K3UdI/s72-c/mmscoutboundrouting.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-4453045445391613355</id><published>2008-10-21T09:00:00.002Z</published><updated>2008-10-21T09:00:00.149Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-21T09:00:00.149Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='operator MMSC'/><category scheme='http://www.blogger.com/atom/ns#' term='NowWAP'/><category scheme='http://www.blogger.com/atom/ns#' term='WAP Gateway'/><category scheme='http://www.blogger.com/atom/ns#' term='RADIUS'/><title type='text'>NowWAP, Radius Accounting and MSISDN headers</title><content type='html'>NowWAP was recently updated over the summer months to address an issue on heavily loaded systems where Radius packets could be lost. NowWAP uses these Radius accounting packets in order to determine the identity (phone number or MSISDN) associated with the device that is making a request. NowWAP includes the phone number in an X-MSISDN header when forwarding the request to a downstream content server, which enables content server, such as an MMSC to identify the subscriber.&lt;br /&gt;&lt;br /&gt;On extremely busy systems, NowWAP was not processing Radius requests quickly enough, which could cause some packets to be lost, resulting in rejected connections.&lt;br /&gt;&lt;br /&gt;This problem was corrected in the 2008.06.03 release of NowWAP, which is currently available for download at &lt;a href="http://www.nowwap.com/"&gt;http://www.nowwap.com/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;More information about how to configure NowWAP and the NowSMS MMSC to use a Radius accounting feed can be found at &lt;a href="http://www.nowsms.com/support/bulletins/tb-nowsms-002.htm"&gt;http://www.nowsms.com/support/bulletins/tb-nowsms-002.htm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Additional information about configuring a Radius accounting feed in a fault tolerant and/or load balanced installation of multiple NowWAP servers can be found at &lt;a href="http://blog.nowsms.com/2008/06/nowwap-in-fault-tolerant-or-redundant.html"&gt;http://blog.nowsms.com/2008/06/nowwap-in-fault-tolerant-or-redundant.html&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/4453045445391613355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=4453045445391613355' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/4453045445391613355?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/4453045445391613355'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/nowwap-radius-accounting-and-msisdn.html' title='NowWAP, Radius Accounting and MSISDN headers'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-7150623122186227959</id><published>2008-10-17T09:00:00.002Z</published><updated>2008-11-10T16:56:09.986Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-11-10T16:56:09.986Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='sendsms.php'/><category scheme='http://www.blogger.com/atom/ns#' term='command line interface'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP'/><title type='text'>NowSMS PHP Example:  Send SMS Text Message</title><content type='html'>Over the coming weeks, I'm planning to collect various PHP, ASP and other script examples to provide some examples of how to interface with NowSMS from those environments.&lt;br /&gt;&lt;br /&gt;The following links should provide all of the relevant postings, assuming that I follow-up with this task as planned.&lt;br /&gt;&lt;br /&gt;PHP Examples -- &lt;a href="http://blog.nowsms.com/search/label/PHP"&gt;http://blog.nowsms.com/search/label/PHP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ASP Examples -- &lt;a href="http://blog.nowsms.com/search/label/ASP"&gt;http://blog.nowsms.com/search/label/ASP&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Command Line Script Examples -- &lt;a href="http://blog.nowsms.com/search/label/command%20line%20interface"&gt;http://blog.nowsms.com/search/label/command%20line%20interface&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We'll start with the simplest of examples, sending an SMS text message from a PHP script.&lt;br /&gt;It was almost five years ago that we posted an example PHP script for this task on our discussion board at &lt;a href="http://www.nowsms.com/discus/messages/1/867.html"&gt;http://www.nowsms.com/discus/messages/1/867.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Below I've included basically the same five year old script, but I've added some minor comments for further clarification.&lt;br /&gt;&lt;br /&gt;The SendSMS function is the important part of the example. This is the function that needs to be included in your PHP script. You call this function, specifying the host name or IP address and port number of the NowSMS server, along with a username and password for an "SMS Users" account on the NowSMS server, plus the recipient phone number and text of the SMS message.&lt;br /&gt;&lt;br /&gt;The SendSMS function uses these parameters to build a URL for connecting to the NowSMS server. This function could be easily modified to support sending other types of messages by modifying the URL that the function creates. For additional information on NowSMS URL parameters, see &lt;a href="http://www.nowsms.com/documentation/ProductDocumentation/sending_messages/url_parameters_for_sending_messages.htm"&gt;http://www.nowsms.com/documentation/ProductDocumentation/sending_messages/url_parameters_for_sending_messages.htm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Following the SendSMS function, we show two examples of how this function might be called from within a PHP script.&lt;br /&gt;&lt;br /&gt;The first example shows hard coded parameters being passed to the SendSMS function.&lt;br /&gt;&lt;br /&gt;The second example shows how a web form could post to the PHP script. The PHP script parses the variables received from the web form, and passes those variables to the SendSMS function to trigger NowSMS to send a message.&lt;br /&gt;&lt;br /&gt;&lt;textarea rows="60" cols="100"&gt;&amp;lt;?&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;function SendSMS ($host, $port, $username, $password, $phoneNoRecip, $msgText) { &amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;/* Parameters:&amp;#x0D;&amp;#x0A;    $host - IP address or host name of the NowSMS server&amp;#x0D;&amp;#x0A;    $port - "Port number for the web interface" of the NowSMS Server&amp;#x0D;&amp;#x0A;    $username - "SMS Users" account on the NowSMS server&amp;#x0D;&amp;#x0A;    $password - Password defined for the "SMS Users" account on the NowSMS Server&amp;#x0D;&amp;#x0A;    $phoneNoRecip - One or more phone numbers (comma delimited) to receive the text message&amp;#x0D;&amp;#x0A;    $msgText - Text of the message&amp;#x0D;&amp;#x0A;*/&amp;#x0D;&amp;#x0A; &amp;#x0D;&amp;#x0A;    $fp = fsockopen($host, $port, $errno, $errstr);&amp;#x0D;&amp;#x0A;    if (!$fp) {&amp;#x0D;&amp;#x0A;        echo "errno: $errno \n";&amp;#x0D;&amp;#x0A;        echo "errstr: $errstr\n";&amp;#x0D;&amp;#x0A;        return $result;&amp;#x0D;&amp;#x0A;    }&amp;#x0D;&amp;#x0A;    &amp;#x0D;&amp;#x0A;    fwrite($fp, "GET /?Phone=" . rawurlencode($phoneNoRecip) . "&amp;Text=" . rawurlencode($msgText) . " HTTP/1.0\n");&amp;#x0D;&amp;#x0A;    if ($username != "") {&amp;#x0D;&amp;#x0A;       $auth = $username . ":" . $password;&amp;#x0D;&amp;#x0A;       $auth = base64_encode($auth);&amp;#x0D;&amp;#x0A;       fwrite($fp, "Authorization: Basic " . $auth . "\n");&amp;#x0D;&amp;#x0A;    }&amp;#x0D;&amp;#x0A;    fwrite($fp, "\n");&amp;#x0D;&amp;#x0A;  &amp;#x0D;&amp;#x0A;    $res = "";&amp;#x0D;&amp;#x0A; &amp;#x0D;&amp;#x0A;    while(!feof($fp)) {&amp;#x0D;&amp;#x0A;        $res .= fread($fp,1);&amp;#x0D;&amp;#x0A;    }&amp;#x0D;&amp;#x0A;    fclose($fp);&amp;#x0D;&amp;#x0A;    &amp;#x0D;&amp;#x0A; &amp;#x0D;&amp;#x0A;    return $res;&amp;#x0D;&amp;#x0A;}&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;/* This code provides an example of how you would call the SendSMS function from within&amp;#x0D;&amp;#x0A;   a PHP script to send a message.  The response from the NowSMS server is echoed back from the script.&amp;#x0D;&amp;#x0A; &amp;#x0D;&amp;#x0A;$x   = SendSMS("127.0.0.1", 8800, "username", "password", "+44999999999", "Test Message");&amp;#x0D;&amp;#x0A;echo $x;&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;*/&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;/* This code provides an example of sending a message via NowSMS as the result of a web form posting.&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;   First, here's a very simple HTML web form that provides an example of what you need in your&amp;#x0D;&amp;#x0A;   web form.&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;&amp;lt;HTML&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;HEAD&amp;gt;&amp;lt;TITLE&amp;gt;Send SMS&amp;lt;/TITLE&amp;gt;&amp;lt;/HEAD&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;BODY&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;form method="post" action="sendsmsscript.php"&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;table border="1"&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;tr&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;td&amp;gt;Mobile Number:&amp;lt;/td&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;td&amp;gt;&amp;lt;input type="text" name="phone" size="40"&amp;gt;&amp;lt;/td&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/tr&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;tr&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;td valign="top"&amp;gt;Text Message:&amp;lt;/td&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;td&amp;gt;&amp;lt;textarea name="text" cols="80" rows="10"&amp;gt;&amp;lt;/textarea&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/tr&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;tr&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;td colspan="2" align="center"&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;input type="submit" value="Send"&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/td&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/tr&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/table&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/form&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/BODY&amp;gt; &amp;#x0D;&amp;#x0A;&amp;lt;/HTML&amp;gt; &amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;   Second, here's the PHP script that would parse the parameters from the form posting, and then call&amp;#x0D;&amp;#x0A;   the SendSMS function to submit the message.&amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;if (isset($_REQUEST['phone'])) { &amp;#x0D;&amp;#x0A;   if (isset($_REQUEST['text'])) { &amp;#x0D;&amp;#x0A;      $x = SendSMS("127.0.0.1", 8800, "username", "password", $_REQUEST['phone'], $_REQUEST['text']); &amp;#x0D;&amp;#x0A;      echo $x; &amp;#x0D;&amp;#x0A;   } &amp;#x0D;&amp;#x0A;   else { &amp;#x0D;&amp;#x0A;      echo "ERROR : Message not sent -- Text parameter is missing!\r\n"; &amp;#x0D;&amp;#x0A;   } &amp;#x0D;&amp;#x0A;} &amp;#x0D;&amp;#x0A;else { &amp;#x0D;&amp;#x0A;   echo "ERROR : Message not sent -- Phone parameter is missing!\r\n"; &amp;#x0D;&amp;#x0A;} &amp;#x0D;&amp;#x0A;&amp;#x0D;&amp;#x0A;*/&amp;#x0D;&amp;#x0A; &amp;#x0D;&amp;#x0A;?&amp;gt;&lt;/textarea&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/7150623122186227959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=7150623122186227959' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/7150623122186227959?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/7150623122186227959'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/nowsms-php-example-send-sms-text.html' title='NowSMS PHP Example:  Send SMS Text Message'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-3653701821981648229</id><published>2008-10-15T09:00:00.000Z</published><updated>2008-10-15T09:00:00.752Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-15T09:00:00.752Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='GSM modem'/><category scheme='http://www.blogger.com/atom/ns#' term='CDMA modem'/><title type='text'>NowSMS and Multitech CDMA Modem</title><content type='html'>NowSMS is primarily used for sending and receiving SMS and MMS messages in GSM environments.&lt;br /&gt;&lt;br /&gt;In GSM environments, there have been long established standards for special "AT commands" used for sending and receiving SMS messages using a GSM modem interface.&lt;br /&gt;&lt;br /&gt;We sometimes get questions about using NowSMS with operators that use CDMA technology. This question comes up most frequently in North America, where Verizon and Sprint are major mobile operators using CDMA technology, while AT&amp;amp;T and T-Mobile use GSM technology.&lt;br /&gt;&lt;br /&gt;When we talk about GSM modems, we use the terminology GSM modem as a generic term to refer to any modem that supports one or more of the protocols in the GSM evolutionary family, including the 2.5G technologies GPRS and EDGE, as well as the 3G technologies WCDMA, UMTS, HSDPA and HSUPA.&lt;br /&gt;&lt;br /&gt;The GSM modem standards were originally defined in ETSI GSM 07.05 and ETSI GSM 07.07. They have evolved and been further enhanced for 3G environments that are an evolution of GSM, and are published in 3GPP TS 23.005 and 3GPP TS 23.007.&lt;br /&gt;&lt;br /&gt;Unfortunately, similar standards were never devoloped for CDMA environments, including CDMA2000 and EVDO which are the 3G evoluationary paths for CDMA.&lt;br /&gt;&lt;br /&gt;However, there are some CDMA devices that provide some support for the AT commands defined for GSM modems. One such family of devices that we encounter somewhat frequently is the Multitech MultiModem CDMA (&lt;a href="http://multitech.com/PRODUCTS/Families/MultiModemCDMA/"&gt;http://multitech.com/PRODUCTS/Families/MultiModemCDMA/&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;NowSMS automatically detects that these modems can be used for sending and receiving text messages (they cannot be used for sending any binary SMS message types). However, a bug in recent firmware versions of these modems causes problems for NowSMS. The problem typically manifests itself with NowSMS reporting "ERROR - Error waiting for response from modem (1)". This problem is caused by a bug in the modem's implementation of one of the important AT commands for sending/receiving SMS.&lt;br /&gt;&lt;br /&gt;Until this modem bug is fixed, we have added a configuration setting in NowSMS v2008.09.09 and later.&lt;br /&gt;&lt;br /&gt;If you experience the error "Error waiting for response from modem (1)" with a Multitech CDMA modem, try editing SMSGW.INI, and under the [Modem - driver name] section header, add ModemSendWorkaround=Yes.&lt;br /&gt;&lt;br /&gt;An update for NowSMS that includes this work-around can currently be downloaded at &lt;a href="http://www.nowsms.com/download/nowsmsupdate.zip"&gt;http://www.nowsms.com/download/nowsmsupdate.zip&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Note that NowSMS can only be used to send and receive text SMS messages with this CDMA modem. It might be possible to also send MMS messages ... if anyone with a Multiech Multimodem CDMA device is interested in exploring this, please visit us on the NowSMS Discussion Board at &lt;a href="http://www.nowsms.com/messages"&gt;http://www.nowsms.com/messages&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/3653701821981648229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=3653701821981648229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/3653701821981648229?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/3653701821981648229'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/nowsms-and-multitech-cdma-modem.html' title='NowSMS and Multitech CDMA Modem'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-2447803996173471257</id><published>2008-10-14T09:00:00.000Z</published><updated>2008-10-14T09:00:01.012Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-14T09:00:01.012Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='operator MMSC'/><title type='text'>OMA MMS Postcard conformance</title><content type='html'>An odd question came in via e-mail, and I thought it was worth noting here...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Please confirm the below feature is supported in Latest version of&lt;br /&gt;NowSMS:&lt;br /&gt;&lt;br /&gt;MMS postcard services Under "OMA MMS specs 1.3" is supported in "Jun 2008 Now SMS version".&lt;br /&gt;&lt;/blockquote&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;What is an MMS postcard?&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;MMS Postcard is a name for a collection of person-to-service/application services where multimedia content of an MM is printed and physically delivered to recipient via postal services.&lt;br /&gt;&lt;br /&gt;Basically the idea behind MMS Postcard support is that you snap a picture with your camera phone and send it to your grandmother as a conventional postcard that she receives in the post.&lt;br /&gt;&lt;br /&gt;Behind the scenes what happens is that the MMS message is actually sent to a phone number or short code. One or more images is included in the MMS message, along with one or more VCARD objects. The VCARD object contains a physical address to which the post card should be mailed.&lt;br /&gt;&lt;br /&gt;From a NowSMS MMSC perspective, there is no requirement for any additional functionality to support OMA MMS Postcard conformance.&lt;br /&gt;&lt;br /&gt;All of the conformance requirements defined in the relevant OMA MMS Conformance specification for postcards are client based, not server based.&lt;br /&gt;&lt;br /&gt;From a server perspective, the server only needs to be able to support VCARD objects in the MMS message. NowSMS does support VCARD objects in an MMS message.&lt;br /&gt;&lt;br /&gt;There is an optional client element, the X-MMS-GREETINGTEXT header, defined as optional for postcard conformance, which NowSMS does NOT support.&lt;br /&gt;&lt;br /&gt;The primary reason that NowSMS does not support this is because this header is defined only for MM1 in the OMA specifications. It is not defined in the 3GPP specifications for MM4, MM7 or any other MMS interfaces. The typical usage case for an MMS postcard would be that the MMS client would attach the physical addresses to the MMS message as VCARD objects, and send the message over MMS to a short code. The short code would be routed to a postcard service via MM7. MM7 does not define any mapping for the X-MMS-GREETINGTEXT header, therefore it is not possible to deliver this header to a postcard service. This is why NowSMS cannot support this optional header.&lt;br /&gt;&lt;br /&gt;I don't expect MMS postcards to be a major business, but if they are, I guess the NowSMS MMSC is ready for them.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/2447803996173471257/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=2447803996173471257' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/2447803996173471257?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/2447803996173471257'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/oma-mms-postcard-conformance.html' title='OMA MMS Postcard conformance'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-3961270693019389203</id><published>2008-10-08T09:00:00.002Z</published><updated>2008-10-14T20:34:33.352Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-14T20:34:33.352Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='mBlox'/><category scheme='http://www.blogger.com/atom/ns#' term='SMPPOptions'/><title type='text'>mBlox and NowSMS</title><content type='html'>Here at NowSMS, we make it a point not to endorse any particular SMS service provider. The fact of that matter is that bulk SMS services are a volatile business, and we like our customers to have flexibility to choose and change SMS service providers that best fit their needs.&lt;br /&gt;&lt;br /&gt;That said, some SMS service providers have unique configuration attributes, and you need to apply special configuration parameters in NowSMS in order to take advantage of features and flexibility offered by the SMS service provider. This is especially the case with premium rate SMS services.&lt;br /&gt;&lt;br /&gt;mBlox uses a number of special parameters, some of which are specific to their service only. So for customers who are looking to use NowSMS with mBlox, I want to highlight some of these settings and parameters.&lt;br /&gt;&lt;br /&gt;This should not be construed as an endorsement of mBlox by NowSMS, or vice versa. This is just information that is provided to help simplify the process of integrating NowSMS with the mBlox service.&lt;br /&gt;&lt;br /&gt;There are a series of special SMPP parameters that mBlox defines for their service. SMPP is flexible in that it allows service providers to define additional parameters in the optional TLV &lt;em&gt;(tag, length, value)&lt;/em&gt; section of the SMPP message packet.&lt;br /&gt;&lt;br /&gt;To enable the additional mBlox parameters in NowSMS, it is necessary to manually edit the SMSGW.INI file and and add the following section:&lt;br /&gt;&lt;br /&gt;[SMPPOptions]&lt;br /&gt;mblox_operator=1402,String,5&lt;br /&gt;mblox_tariff=1403,String,5&lt;br /&gt;mblox_sessionid=1404,String,45&lt;br /&gt;user_message_reference=204,Integer,2&lt;br /&gt;&lt;br /&gt;The above text should be added to the SMSGW.INI file "as is". "String" and "Integer" are not place holders for you to replace when adding this information to the SMSGW.INI file, so please avoid that common mistake.&lt;br /&gt;&lt;br /&gt;These parameters are provider specific, and you are telling NowSMS that there are additional parameters supported by your provider, and these settings tell NowSMS the parameter type &lt;em&gt;(e.g., "String")&lt;/em&gt;, length restrictions, and the SMPP parameter value.&lt;br /&gt;&lt;br /&gt;When these settings are present, additional parameters are supported when submitting a message to NowSMS via an HTTP URL request.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"&amp;amp;SMPPOption_mblox_operator="&lt;/strong&gt; can specify a value for the destination operator.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"&amp;amp;SMPPOption_mblox_tariff="&lt;/strong&gt; can specify a value for the premium rate tariff associated with the message.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"&amp;amp;SMPPOption_mblox_sessionid="&lt;/strong&gt; may be required for some premium rate SMS operator implemtnations.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"&amp;amp;SMPPOption_user_message_reference="&lt;/strong&gt; is a generic option that allows you to set/retrieve the value of the SMPP "user_message_reference" variable. An mBlox FAQ suggests that it is possible to use this option to specify a billing reference.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;For additional information on any of these parameters, please refer to the mBlox SMPP Gateway Manual. &lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Please note that mBlox support will often suggest that you use a value of "0" for the mblox_tariff initially. However, customers have reported to us that mBlox appears to require a 5 digit code for this field, and that "00000" should be used instead of "0".&lt;br /&gt;&lt;br /&gt;When these SMSGW.INI file settings are present, NowSMS will also route these parameters to HTTP-based 2-way commands. If a message is received which contains values for either of these settings, NowSMS will automatically append "&amp;amp;SMPPOption_mblox_operator=value" and/or "&amp;amp;SMPPOption_mblox_tariff=" to the 2-way URL. It is not necessary to add any variables to the 2-way command template, as these values will be appended automatically if present in a received message.&lt;br /&gt;&lt;br /&gt;In addition to supporting these options via HTTP URL request, it is possible to configure default settings for any of these options for each outbound SMPP connection.&lt;br /&gt;&lt;br /&gt;In many cases, it may be desirable to define default values for these parameters, instead of having to specify them in each HTTP URL submission. To define default values for these parameters, manually edit the SMSGW.INI, and in the section header for an SMPP connection &lt;em&gt;(e.g., [SMPP - ip.address:port]),&lt;/em&gt; add a &lt;strong&gt;"DefaultSMPPOptions=" &lt;/strong&gt;setting, where the value of this setting can contain any of the "SMPPOptions" settings. For example, "DefaultSMPPOptions=mblox_tariff=00000". To include multiple options, separate the entries with a ";", for example, "DefaultSMPPOptions=mblox_tariff=00000;user_message_reference=1".&lt;br /&gt;&lt;br /&gt;In addition to the above parameters, mBlox uses some additional parameters and terminology which differs slightly from NowSMS terminology.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;"originator"&lt;/strong&gt; is the "Sender Address", or "short code" associated with your serivce. You will want to configure this value as the "Default Sender Address" for the mBlox SMPP SMSC connection that you define to NowSMS.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"ProfileID"&lt;/strong&gt; equates to the "Serivce Type" parameter in SMPP. Do not confuse "Service Type" with "System Type". "System Type" is an SMPP parameter that is sent at initial login (bind). "Service Type" is a parameter that is set for each message that is sent. While "System Type" can be easily defined via the NowSMS user interface, in order to define a default "Serivce Type" value, it is necessary to edit the SMSGW.INI file, and under the [SMPP - server:port] header &lt;em&gt;(server:port will be replaced with the address of your SMSC)&lt;/em&gt;, specify: ServiceType=value &lt;em&gt;(value is the value that you want to be specified as the service type)&lt;/em&gt;. It is also possible to override the default Service type value when submitting a message to NowSMS via SMPP by including "&amp;amp;ServiceType=value" in the HTTP URL string.&lt;br /&gt;&lt;br /&gt;When we work with customers who are interfacing NowSMS with mBlox, the issues that we typically see are this:&lt;br /&gt;&lt;br /&gt;1. ) Make sure that you have the [SMPPOptions] section defined in SMSGW.INI exactly "as is" ... do not replace "String" with some other value.&lt;br /&gt;&lt;br /&gt;2.) Define your short code as the "Sender Address" for the SMPP SMSC connection.&lt;br /&gt;&lt;br /&gt;3.) Make sure that you have your DefaultSMPPOptions= settings under the [SMPP - server:port] section of SMSGW.INI for the SMSC connection that you have defined &lt;em&gt;(e.g., under [SMPP - smpp.psms.us.mblox.com:3209])&lt;/em&gt;. mBlox documentation will tell you what settings you need to specify, but generally you will need to specify an mblox_tariff value &lt;em&gt;(e.g., "DefaultSMPPOptions=mblox_tariff=00000")&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;4.) If you require a specific profile id, include ServiceType=value under the [SMPP - server:port] section of SMSGW.INI.&lt;br /&gt;&lt;br /&gt;5.) If you need to use parameters other than the defaults for specific messages, then when you submit the message to NowSMS include URL parameters to override the defaults &lt;em&gt;(e.g., "&amp;amp;SMPPOption_mblox_tariff=00000&amp;amp;ServiceType=123")&lt;/em&gt;.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/3961270693019389203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=3961270693019389203' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/3961270693019389203?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/3961270693019389203'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/mblox-and-nowsms.html' title='mBlox and NowSMS'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-9003944484475693374</id><published>2008-10-07T09:00:00.004Z</published><updated>2008-10-10T16:08:55.476Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-10T16:08:55.476Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='2-way SMS'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile originated'/><title type='text'>2-way SMS Command Speed and Performance (updated)</title><content type='html'>Before I get to the speed/performance issue that I want to highlight, I'll review some of the basics of 2-way SMS in NowSMS and provide a few starter links for beginners who might have stumbled upon this post.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;&lt;em&gt;2-way SMS&lt;/em&gt;&lt;/strong&gt; facility of NowSMS is designed to facilitate the processing of inbound, or &lt;strong&gt;&lt;em&gt;mobile originated&lt;/em&gt;&lt;/strong&gt;, SMS messages.&lt;br /&gt;&lt;br /&gt;When NowSMS receives an SMS message, it will evaluate the content of the message, and can either execute a program, or connect to an HTTP URL (such as a PHP, Perl or ASP script), passing the content of the received message to program or script.&lt;br /&gt;&lt;br /&gt;The basics of 2-way SMS are described in the NowSMS manual and at the following link:&lt;br /&gt;&lt;a href="http://www.nowsms.com/documentation/ProductDocumentation/2_way_sms_support.htm"&gt;http://www.nowsms.com/documentation/ProductDocumentation/2_way_sms_support.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A good basic troubleshooting guide for initially setting up 2-way SMS can be found at the following link: &lt;a href="http://www.nowsms.com/discus/messages/1/4520.html"&gt;http://www.nowsms.com/discus/messages/1/4520.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The above link also has some simple PHP and ASP examples for processing received SMS messages.&lt;br /&gt;&lt;br /&gt;If you are processing more than 10 inbound SMS messages per second, it may be necessary to configure NowSMS to allocate more threads for the 2-way command processing, depending on the speed of your 2-way command script.&lt;br /&gt;&lt;br /&gt;NowSMS will receive messages from the SMSC connection as quickly as it can, so that messages do not backup at the service provider.&lt;br /&gt;&lt;br /&gt;After receiving the SMS messages from the service provider, NowSMS queues the received messages, and a separate thread within NowSMS evaluates the received messages and processes the 2-way commands, so other gateway activity of sending and receiving messages can continue while the 2-way commands are being processed.&lt;br /&gt;&lt;br /&gt;The program thread that processes the 2-way commands processes only one message callback at a time, waiting for current 2-way command to complete before processing the next message.&lt;br /&gt;&lt;br /&gt;If your 2-way command script is running on a web server on the same local network, and is reasonably quick in its processing, NowSMS can process approximately 100 messages per second for HTTP-based 2-way commands in ideal situations. However, not all configurations are ideal, and in typical configurations, NowSMS spends more time waiting for the 2-way command to complete than in the actual processing of the message.   This waiting for the 2-way command has a significant impact on 2-way command message throughput.&lt;br /&gt;&lt;br /&gt;It is possible to configure NowSMS to allocate more 2-way command processing threads to provide higher throughput by editing SMSGW.INI, and under the [SMSGW] section header, adding 2WaySMSThreadCount=## ... where ## is the number of threads to allocate.&lt;br /&gt;&lt;br /&gt;In future versions of NowSMS, we will be enabling the use of HTTP keep-alive sockets, which our tests have shown can increase single threaded "ideal" throughput to a range of 175 to 200 messages per second processed by a single 2-way command.  While that will offer some performance boost, typical configurations are not limited by the speed at which NowSMS processes 2-way commands, but rather by the speed at which actual 2-way command scripts perform their processing logic.  For those typical configurations, allocating multiple 2-way command processing threads can offer a performance boost.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/9003944484475693374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=9003944484475693374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/9003944484475693374?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/9003944484475693374'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/2-way-sms-command-speed-and-performance.html' title='2-way SMS Command Speed and Performance (updated)'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-4161115313195739018</id><published>2008-10-03T17:52:00.003Z</published><updated>2008-10-03T18:00:00.465Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-03T18:00:00.465Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='MM7'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='operator MMSC'/><category scheme='http://www.blogger.com/atom/ns#' term='Vodafone'/><title type='text'>MMS MM7 SOAP Problems with Vodafone UK</title><content type='html'>If you're trying to use NowSMS to interface with the Vodafone UK MMSC over MM7, you may be experiencing a problem where the Vodafone MMSC is reporting SOAP errors, indicating that the SOAP headers cannot be accessed.&lt;br /&gt;&lt;br /&gt;This appears to be a bug  in their MMSC.  The Vodafone UK MMSC does not like the MIME boundary text that NowSMS generates.  While the MIME boundary used by NowSMS correctly conforms to the specification, the choice of characters in the boundary appear to be causing a program error in this operator MMSC.&lt;br /&gt;&lt;br /&gt;At this point, we're not sure which vendor MMSC Vodafone is using, or if perhaps it is a problematic piece of middleware, so this may affect other mobile operators that are using the same MMSC product.&lt;br /&gt;&lt;br /&gt;An updated version of NowSMS contains a work-around for this problem, generating alternate text for the MIME boundary, which is acceptable to this MMSC.  This update is applied for NowSMS v2008.10.01 and later versions.  Currently this update is available for download at the following link: &lt;a href="http://www.nowsms.com/download/nowsmsupdate.zip"&gt;http://www.nowsms.com/download/nowsmsupdate.zip&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/4161115313195739018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=4161115313195739018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/4161115313195739018?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/4161115313195739018'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/mms-mm7-soap-problems-with-vodafone-uk.html' title='MMS MM7 SOAP Problems with Vodafone UK'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-4336657267532515942</id><published>2008-10-02T10:00:00.001Z</published><updated>2008-10-02T10:00:00.511Z</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-10-02T10:00:00.511Z</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='CIMD'/><category scheme='http://www.blogger.com/atom/ns#' term='retry attempts'/><category scheme='http://www.blogger.com/atom/ns#' term='UCP/EMI'/><title type='text'>SMS Retry Error Handling with UCP/EMI and CIMD</title><content type='html'>There's a great post that discusses how NowSMS handles message retries in SMPP environments at the following link:  &lt;a href="http://blog.nowsms.com/2007/06/smpp-error-code-handling-in-nowsms.html"&gt;http://blog.nowsms.com/2007/06/smpp-error-code-handling-in-nowsms.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;However, to date, there hasn't been anything written that goes into as much detail regarding how NowSMS handles message retries in UCP/EMI or CIMD2 environments.&lt;br /&gt;&lt;br /&gt;The short answer is that, by default, if NowSMS receives an error response from the SMSC when submitting a message in a UCP/EMI or CIMD2 environment, NowSMS will retry sending the message up to RetryMaxAttempts times (default=20).&lt;br /&gt;&lt;br /&gt;The default behaviour for the delayed retry schedule works like this:&lt;br /&gt;&lt;br /&gt;After the first error, a retry can be attempted immediately (but first NowSMS will try other pending messages in the outbound queue).&lt;br /&gt;&lt;br /&gt;After the second error, NowSMS will wait 30 seconds before allowing the message to be retried.&lt;br /&gt;&lt;br /&gt;After the third error, NowSMS will wait 60 seconds before allowing the message to be retried.&lt;br /&gt;&lt;br /&gt;For each successive error, NowSMS waits an additional 30 seconds before allowing a retry. After 20 errors, the message will be considered as failed.&lt;br /&gt;&lt;br /&gt;The following parameters can be applied to the [SMSGW] section of the SMSGW.INI file to provide additional control for the retry schedule:&lt;br /&gt;&lt;br /&gt;RetryDelay=&lt;br /&gt;RetryDelayMultiplier=&lt;br /&gt;RetryDelayAfterAttempts=&lt;br /&gt;RetryDelayMax=&lt;br /&gt;RetryMaxAttempts=&lt;br /&gt;&lt;br /&gt;The above parameters control retry behaviour for when NowSMS is submitting messages to an SMSC and an error occurs.&lt;br /&gt;&lt;br /&gt;RetryDelay=#### specifies a number of seconds to wait to retry sending after an error condition, the default value is 30.&lt;br /&gt;&lt;br /&gt;RetryDelayMultiplier=### specifies a multiplier to be applied for successive send failures, the default value is 1. For each failed attempt, the retry delay will be the product of RetryDelay*RetryDelayMultiplier*#FailedAttempts. To use a fixed retry delay of RetryDelay, specify RetryDelayMultiplier=0.&lt;br /&gt;&lt;br /&gt;RetryDelayAfterAttempts=### specifies that the retry delay should only be applied after ### failed attempts, the default value is 2. NowSMS will immediately retry a failed message send until it has made RetryDelayAfterAttempts, after which it will apply a retry delay.&lt;br /&gt;&lt;br /&gt;RetryMaxAttempts=### specifies the maximum number of retries that NowSMS will attempt before a message is rejected, the default value is 20.&lt;br /&gt;&lt;br /&gt;That is all well and good, but in many situations, especially when you might be sending premium rate SMS to pre-pay users, your NowSMS message queues may become slow with numerous retry attempts sending to users with depleted credit balances.&lt;br /&gt;&lt;br /&gt;Our standard recommendation has been to reduce the RetryMaxAttempts setting to a lower value.  NowSMS only counts a message retry attempt when it encounters an error during a submit message operation.  If instead, there is a situation where an SMSC connection is down, this does not count as a message retry attempt.  (It does count as a retry attempt if the SMSC connection drops while NowSMS is attempting to submit a message.)&lt;br /&gt;&lt;br /&gt;If you have a situation where you want NowSMS to consider certain error SMSC error codes to be a permanent error, with no retry attempt, it is possible to add these error codes to an SMSGW.INI file setting.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For SMPP connections&lt;/strong&gt;, refer to the previous blog entry at &lt;a href="http://blog.nowsms.com/2007/06/smpp-error-code-handling-in-nowsms.html"&gt;http://blog.nowsms.com/2007/06/smpp-error-code-handling-in-nowsms.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For UCP/EMI and CIMD connections, the following configuration settings were added in NowSMS v2008.10.01 and later.  (Until the next major release of NowSMS, an interim update to this version can be downloaded from &lt;a href="http://www.nowsms.com/download/nowsmsupdate.zip"&gt;http://www.nowsms.com/download/nowsmsupdate.zip&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For UCP/EMI SMSC connections&lt;/strong&gt;, under the [SMSGW] section header, add &lt;strong&gt;UCPRejectErrorCodes=x,y,z&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This "x,y,z" value can be a comma-delimited list of decimal error codes that should be treated as permanent errors.  Note that if you are experiencing excessive retry problems, you can see what error your provider is returning by consulting the SMSOUT-yyyymmdd.LOG file.&lt;br /&gt;&lt;br /&gt;It is also possible to specify &lt;strong&gt;UCPRejectErrorCodes=All&lt;/strong&gt; to cause any error codes returned by your provider as a permanent message delivery failure.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;For CIMD2 SMSC connections&lt;/strong&gt;, under the [SMSGW] section header, add &lt;strong&gt;CIMDRejectErrorCodes=x,y,z&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This "x,y,z" value can be a comma-delimited list of decimal error codes that should be treated as permanent errors.  Note that if you are experiencing excessive retry problems, you can see what error your provider is returning by consulting the SMSOUT-yyyymmdd.LOG file.&lt;br /&gt;&lt;br /&gt;It is also possible to specify &lt;strong&gt;CIMDRejectErrorCodes=All&lt;/strong&gt; to cause any error codes returned by your provider as a permanent message delivery failure.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/4336657267532515942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=4336657267532515942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/4336657267532515942?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/4336657267532515942'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/10/sms-retry-error-handling-with-ucpemi.html' title='SMS Retry Error Handling with UCP/EMI and CIMD'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-8664815761530593248</id><published>2008-07-28T07:35:00.000+01:00</published><updated>2008-07-28T07:35:00.864+01:00</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-07-28T07:35:00.864+01:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='SMPP Async Mode'/><category scheme='http://www.blogger.com/atom/ns#' term='SMPP errors'/><title type='text'>SMPP Connection Types - Sender, Receiver, Transceiver</title><content type='html'>When making a connection to an SMPP server, there are three different types of connections that can be supported.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A "sender", or "send only", connection is allowed to transmit messages only over the connection, it cannot receive any messages.  (Some SMPP servers will still deliver SMPP delivery receipt messages over a "sender" connection.)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;A "receiver", or "receive only", connection is not allowed to transmit messages over the connection, it can only receive messages.  Any attempt to receive messages over this connection will usually result in the error ESME_RINVBNDSTS (Incorrect BIND Status for given command).  If you see the ESME_RINVBNDSTS error when submitting messages, check to see that NowSMS has not been inadvertantly configured for a receiver only connection.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt; &lt;/p&gt;&lt;ul&gt;&lt;li&gt;A "transceiver" connection is allowed to both send and transmit messages over the same connection.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;When defining an SMPP connection in NowSMS, it is possible to configure the connection to be only a "sender", only a "receiver", separate "sender" and "receiver" connections, or a single "transceiver" connection.&lt;br /&gt;&lt;br /&gt;The type of connection that you use will depend on the preferences and policies of your SMPP service provider.  Separate "sender" and "receiver" connections generally offer the best performance under extreme loads, however your provider may wish for you to use a "transceiver" connection to reduce the connection overhead on their server.&lt;br /&gt;&lt;br /&gt;There are also special configurations where you may need to configure a connection to be only a "sender", or only a "receiver".&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To define a "sender" connection only&lt;/strong&gt;, ensure that the following settings are applied in the properties for the SMPP connection:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"Receive SMS Messages" must not be checked.&lt;/li&gt;&lt;li&gt;Under "Advanced Settings", "Send and Receive Messages over the same connection" must not be checked.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;To define a "receiver" connection only&lt;/strong&gt;, ensure that the following settings are applied in the properties for the SMPP connection:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"Sender Address" should be left blank.&lt;/li&gt;&lt;li&gt;"Receive SMS Messages" must be checked.&lt;/li&gt;&lt;li&gt;"Support any outbound message traffic" must not be checked.&lt;/li&gt;&lt;li&gt;The "Preferred SMSC Connection for" list should be empty.&lt;/li&gt;&lt;li&gt;Under "Advanced Settings", "Send and Receive Messages over the same connection" must not be checked.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;To define a connection with separate "sender" and "receiver" connections&lt;/strong&gt;, ensure that the following settings are applied in the properties for the SMPP connection:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"Receive SMS Messages" must be checked.&lt;/li&gt;&lt;li&gt;Under "Advanced Settings", "Send and Receive Messages over the same connection" must not be checked.&lt;/li&gt;&lt;li&gt;Either "Support any outbound message traffic" must be checked, or there must be at least one entry in the "Preferred SMSC connection for" list.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;The last setting may cause problems for configurations where you only want to route messages for sending via this connection explicitly (as described in &lt;a href="http://blog.nowsms.com/2008/07/routing-sms-messages-to-specifc-smsc.html"&gt;"Routing SMS Messages to a Specific SMSC Route"&lt;/a&gt;).  If you wish to only use explicit routing to route messages via this connection, add the text "explicit" to the "Preferred SMSC connection for" list, so the list will no longer be blank.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To define a "transceiver" connection&lt;/strong&gt;, ensure that the following settings  are applied in the properties for the SMPP connection:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;"Receive SMS Messages" must be checked.&lt;/li&gt;&lt;li&gt;Under "Advanced Settings", "Send and Receive Messages over the same connection" must be checked.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt; &lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/8664815761530593248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=8664815761530593248' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/8664815761530593248?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/8664815761530593248'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/07/smpp-connection-types-sender-receiver.html' title='SMPP Connection Types - Sender, Receiver, Transceiver'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-1897172203693722321</id><published>2008-07-14T19:04:00.000+01:00</published><updated>2008-07-14T19:04:00.480+01:00</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-07-14T19:04:00.480+01:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='retry attempts'/><category scheme='http://www.blogger.com/atom/ns#' term='operator MMSC'/><category scheme='http://www.blogger.com/atom/ns#' term='routing'/><title type='text'>MMS Message Retries, Expiration, Conversion to SMS</title><content type='html'>There was a good simple question posted on the NowSMS Discussion Board.&lt;br /&gt;&lt;em&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;We are using the MMS Gateway service. For how long does the MMS content&lt;br /&gt;stays in the system?&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;Can we set a specific time for the message expiration?&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;We also use the option of converting the mms to SMS with web link. For&lt;br /&gt;how long is the content stored in the platform?&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;As I replied to that question, I realized that there are a number of MMSC related settings that are important to operator MMSC configurations, but that are either not configurable via the NowSMS configuration user interface, or when they are, they are perhaps not very well explained.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So let me start by answering these specific questions, and then I want to expand a bit on some inter-relationship between the settings, and some other related settings.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By default, MMS mesasge content is retained for 15 days before it is expired.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To change this timeout, it is necessary to edit MMSC.INI, and under the [MMSC] section header, add DataRetainDays=##, where ## is the number of days for MMS message data to be retained by the system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This same expiration timeout applies to messages that are converted from MMS to SMS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A simple question, and a simple answer. Hardly worth a blog posting. However, it did get me thinking about a lot of the related configuration settings that perhaps some users don't understand.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MMS Notification Retries&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.nowsms.com/howmmsworks.htm"&gt;"How MMS Works" web page&lt;/a&gt; is a good reference for explaining the basics of how the MMS delivery process works.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To deliver an MMS message to a client, the MMSC sends an MMS Notification message with WAP Push &lt;em&gt;(over SMS in most configurations)&lt;/em&gt;. When the client receives the MMS Notification mesasge, the client then connects to the MMSC to retrieve the MMS message content and complete the MMS delivery process.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The default settings in NowSMS assumes that the WAP Push over SMS delivery is reliable. Only one notification attempt is performed, and it is assumed that the SMSC that is responsible for delivering these notifications will queue the messages for delivery until the client is available.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In some situations this may not be a safe assumption. In these instances, the MMSC can be configured to retry these notifications to increase the probability that the client will actually receive the notification. &lt;em&gt;(MMS clients will ignore duplicate notifications.)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;To enable these retries, check "Retry MMS Delivery Notification". Then specify the number of "Attempts" that the MMSC should make in retrying the MMS notification, as well as the "Delay" interval &lt;em&gt;(in minutes)&lt;/em&gt; between attempts. Note that the MMSC will apply a progressive delay, increasing the delay with each attempt, such that the actual delay interval is the configured delay interval multiplied by the number of previous notification attempts. As an example, if "Attempts" is set to 4, and "Delay" is set to 15, the first retry attempt will occur after 15 minutes. The next attempt will occur after 30 minutes after the previous attempt, then 45 minutes after the previous attempt, then 60 minutes after the previous attempt, after which no further notifications will be attempted.&lt;br /&gt;&lt;br /&gt;It is also possible to configure the MMSC such that it if an MMS message is not retrieved from the MMSC within a configurable timeout period, the MMSC will then convert the message to SMS, sending a text SMS message to the recipient, with a URL like that can be used from either a phone or PC browser, to retrieve the content of the message.&lt;br /&gt;&lt;br /&gt;To enable this SMS conversion, it is necessary to define an "MMSC Routing" of the type "Convert to SMS web Web Link".&lt;br /&gt;&lt;br /&gt;Once that routing is defined, edit MMSC.INI, and add the following settings under the [MMSC] header:&lt;br /&gt;&lt;br /&gt;UndeliverableRouteToSMS=VASPOutboundRouteName&lt;br /&gt;&lt;br /&gt;This setting specifies the name of an MMSC Outbound Route that is defined in the "MMSC Routing" list, which must be of the type "Convert to SMS with Web Link". By default, if an MMS message has not been retrieved within 120 minutes, the message will be rerouted to be sent as an SMS with a web link for accessing the MMS content.&lt;br /&gt;&lt;br /&gt;UndeliverableRouteToSMSTimeout=####&lt;br /&gt;&lt;br /&gt;#### is a value in minutes that changes the time period after which the UnderliverableRouteToSMS setting is applied.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/1897172203693722321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=1897172203693722321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/1897172203693722321?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/1897172203693722321'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/07/mms-message-retries-expiration.html' title='MMS Message Retries, Expiration, Conversion to SMS'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-5301547347208619976</id><published>2008-07-10T14:13:00.002+01:00</published><updated>2008-07-10T14:13:00.333+01:00</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-07-10T14:13:00.333+01:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='routing'/><category scheme='http://www.blogger.com/atom/ns#' term='2-way SMS'/><title type='text'>Routing SMS messages to a Specifc SMSC Route</title><content type='html'>If you need control over routing to particular SMSC connections, the logic in NowSMS works like this:&lt;br /&gt;&lt;br /&gt;When NowSMS routes a message, it first looks to see if a sender address has been specified for the message submission &lt;em&gt;(normally there is not a sender address specified, unless you submitted the message via HTTP and specified a "Sender=" parameter)&lt;/em&gt;. If a sender address was specified, then NowSMS checks to see if the sender address matches the "Default Sender Address" that is configured for any of the SMSC links &lt;em&gt;(or the "Phone Number" associated with a GSM modem)&lt;/em&gt;. If NowSMS finds a match, then it will route the message only via an SMSC connection with a matching sender address.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Note:  It is possible for the "Default Sender Address" field to include a comma delimited list of phone/shortcode numbers, indicating that a message with a sender address that matches any of these numbers should be routed via the connection.)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;If NowSMS did not find a match on the sender address, then it evaluates the recipient address, and it will look to see if it finds a match in the "Preferred SMSC Connection for" recipient address masks associated with any of the SMSC connections. &lt;em&gt;(These recipient address masks can be wildcards such as "+44*" to match any phone number that starts with "+44".)&lt;/em&gt; If NowSMS finds a match, then it looks for the longest mask that provides a match, and routes the message via the connection with the longest matching mask. &lt;em&gt;(For example, if you were sending to +447624999999, and you had one connection with a mask of "+44*", and another with "+447624*", then the connection with the mask of "+447624*" would be used as it is a longer match than "+44*".)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;If there is no match on the recipient address mask, then the message will be routed via any connection that has "Support any outbound message traffic" checked.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(Note: It should also be mentioned that if NowSMS found multiple matches on the sender address, it evaluates the "Preferred SMSC Connection for" recipient address masks for each of the connections that had a sender address match.)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There is also an additional HTTP parameter setting that can be used to explicitly route a message via a particular SMSC, so that you don't have to use the sender/recipient matching logic if it is not appropriate for your configuration.&lt;br /&gt;&lt;br /&gt;This additional HTTP parameter works like this:&lt;br /&gt;&lt;br /&gt;When you submit a message via HTTP, the HTTP interface supports "&amp;amp;SMSCRoute=xxxxx", where the value of this setting can be the name of a defined SMSC &lt;em&gt;(e.g., "Bluetooth Modem" or "SMPP - a.b.c.d:xyz")&lt;/em&gt;. Or, rather than using the SMSC name, it can be a route name that is defined as associated with an SMSC. To define a route name for an SMSC, it is necessary to manually edit SMSGW.INI, and under the appropriate section header &lt;em&gt;(e.g., [Modem - Bluetooth Modem] or [SMPP - a.b.c.d:xyz])&lt;/em&gt;, add RouteName=xxxxx. It is possible for multiple SMSCs to share the same route name, meaning that if a message is submitted with "&amp;amp;SMSCRoute=xxxxx", it will be routed outbound over the first available SMSC that is configured with RouteName=xxxxx.&lt;br /&gt;&lt;br /&gt;With mobile number portability (MNP), it can be difficult to determine the mobile operator to which any given phone number belongs. If mobile subscribers initiate their subscription to your service by sending an SMS to your short code, it may be useful for your service to remember the SMSC route from which the message was received. This way, you can be sure to route any future messages to that subscriber via the same SMSC connection. If you use the 2-way command functionality in NowSMS, include an @@SMSCROUTE@@ parameter in your 2-way command, and NowSMS will insert the received "RouteName" into this parameter value. More information on this topic can be found in the posting titled &lt;a href="http://blog.nowsms.com/2008/06/2-way-sms-multiple-operators-with-same.html"&gt;&lt;strong&gt;2-way SMS: Multiple operators with the same shortcode&lt;/strong&gt;&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/5301547347208619976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=5301547347208619976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/5301547347208619976?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/5301547347208619976'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/07/routing-sms-messages-to-specifc-smsc.html' title='Routing SMS messages to a Specifc SMSC Route'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-6109319061386832872</id><published>2008-07-07T09:30:00.000+01:00</published><updated>2008-07-07T09:30:00.995+01:00</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-07-07T09:30:00.995+01:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='operator MMSC'/><category scheme='http://www.blogger.com/atom/ns#' term='WAP Proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='WAP Gateway'/><title type='text'>One WAP Gateway for both MMS and Browser Data</title><content type='html'>Smaller mobile operators often ask us how to deploy a single WAP Gateway (or WAP Proxy if you prefer that terminology, as our marketing folks seem to prefer) to deploy both MMS traffic and general browser traffic.&lt;br /&gt;&lt;br /&gt;Of course, technically there is no reason that a single WAP Gateway can't support both types of traffic.  So if you're not a mobile operator, you're probably wondering what the point of this posting is.&lt;br /&gt;&lt;br /&gt;In most environments, the mobile operator does not charge for data that is transferred to and from the MMSC.  This MMS data is simply considered to be a part of the charge for sending or recieiving the MMS message, as it is difficult to explain to a user that they are charged both for the message and the related data traffic.&lt;br /&gt;&lt;br /&gt;However, other non-MMS data traffic is considered chargeable.&lt;br /&gt;&lt;br /&gt;The way that this is normally implemented is that at least two different APNs are deployed on the GPRS/EDGE/WCDMA network.  One APN is for for MMS data traffic only, and another is for browsing data traffic.  (Additional APNs might support general internet traffic, or the general internet traffic might use the browsing APN.)&lt;br /&gt;&lt;br /&gt;When a user connects to the MMS APN, they should only be allowed to communicate with the MMSC.&lt;br /&gt;&lt;br /&gt;If the same WAP Gateway is to be used for both MMS and browsing data traffic, how does the WAP Gateway know whether or not to limit access?&lt;br /&gt;&lt;br /&gt;There are two ways that this can be configured using the NowWAP 2008 release.&lt;br /&gt;&lt;br /&gt;I would stress that this solution is only recommended for smaller to small/medium sized operators where there is insufficient data traffic to warrant multiple WAP gateways.&lt;br /&gt;&lt;br /&gt;As part of a contingency plan to allow for future growth, the first recommendation that we would make is that even though both services will be sharing the same WAP gateway, the mobile phone settings for your subscribers should have different IP addresses for the WAP gateway configured in the mobile phone settings for MMS or web browsing.  &lt;strong&gt;&lt;em&gt;It is an easy task to provision multiple IP addresses on the server that is running the WAP gateway, and we strongly recommend that this be done.&lt;/em&gt;&lt;/strong&gt;  If your traffic grows in the future, it will then make it a simpler task to migrate to separate WAP gateways for MMS and browsing traffic.&lt;br /&gt;&lt;br /&gt;Within NowWAP, it is possible to limit certain client connections so that they are only able to connect to the host/domain names that are listed in the &lt;strong&gt;"Content Domains to receive X-MSISDN header"&lt;/strong&gt; setting on the MSISDN page of the NowWAP configuration.&lt;br /&gt;&lt;br /&gt;This setting is primarily used for determing which hosts should receive the "X-MSIDN:" header, which contains the phone number of the user making the request.&lt;br /&gt;&lt;br /&gt;As a refresher, here is the description of this setting from the NowWAP documentation:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;When a content domain is added to this list, a host name that exactly matches the content domain, as well as any host names within the content domain will receive the “X-MSISDN:” header. For example, if “now.co.uk” is added to the content domain list, the “X-MSISDN:” header would be forwarded to a host named “now.co.uk” as well as for “www.now.co.uk” and “mms.now.co.uk”. If you wish to have the “X-MSISDN” header forwarded to all content servers, define a content domain named “*”.&lt;/blockquote&gt;&lt;br /&gt;Within NowWAP, it is then possible to specify that certain client connections should only be allowed to connect to hosts/domains that are in this list.   And obviously, the MMSC needs to be in this list in order to receive MSISDN information, as this is how that information is supplied to the MMSC.&lt;br /&gt;&lt;br /&gt;To configure that all client connections should only be allowed to connect to hosts/domains in this list, edit WAPGW.INI and under the [WAPGW] header, add IncludeMsisdnConnectOnly=Yes.&lt;br /&gt;&lt;br /&gt;Obviously, the above setting will only work for an MMS-only proxy, as it would otherwise be too restrictive.&lt;br /&gt;&lt;br /&gt;However, it is also possible to selectively restrict a connection to hosts/domains in this list based upon one of the following criteria:&lt;br /&gt;&lt;br /&gt;1.) &lt;strong&gt;Restriction based upon Multi-Homed Gateway IP Address&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is best described with an example.&lt;br /&gt;&lt;br /&gt;Let's say that the MMS-only APN gives out IP addresses on the 192.168.0.0 network.&lt;br /&gt;&lt;br /&gt;The other APN, for browser traffic, gives out IP addresses on the 10.10.0.0 network.&lt;br /&gt;&lt;br /&gt;The same WAP gateway is being used, the server operating system configured to be multi-homed on multiple networks.&lt;br /&gt;&lt;br /&gt;Server address 10.10.0.1 would serve the browser network, and 192.168.0.1 would serve the MMS only network.&lt;br /&gt;&lt;br /&gt;By adding &lt;strong&gt;IncludeMsisdnConnectOnlyGWIP=&lt;/strong&gt;192.168.0.1 to the [WAPGW] section of the WAPGW.INI file, this would tell the WAP gateway that for any requests received by the server on 192.168.0.1, the gateway should only allow connections to domains/hosts in the "X-MSIDN" list. Connections to the gateway on other server addresses would not be restricted.&lt;br /&gt;&lt;br /&gt;In order to make this solution work, it must not be possible (via firewall or networking setup) for any clients on the 192.168.0.0 network to connect to the WAP gateway on 10.10.0.1.&lt;br /&gt;&lt;br /&gt;2.) &lt;strong&gt;Restriction based upon Client IP Address&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is, again, best described with an example.&lt;br /&gt;&lt;br /&gt;Let's say that the MMS-only APN gives out IP addresses on the 192.168.0.0 network.&lt;br /&gt;&lt;br /&gt;The other APN, for browser traffic, gives out IP addresses on the 10.10.0.0 network.&lt;br /&gt;&lt;br /&gt;The same WAP gateway is being used, the server operating system may be configured to be multi-homed on multiple networks (this is not required, but recommended to allow for possible separation of MMS and browser traffic in the future).&lt;br /&gt;&lt;br /&gt;By adding &lt;strong&gt;IncludeMsisdnConnectOnlySourceIP=&lt;/strong&gt;10.10.*.* to the [WAPGW] section of the WAPGW.INI file, this would tell the WAP gateway that for any requests that come from clients in that IP address range, the gateway should only allow connections to domains/hosts in the "X-MSIDN" list. Connections to the gateway from other client addresses would not be restricted. This setting can have a comma delimited list of IP addresses (e.g., 10.10.*.*,10,11.*.*). It does not support net masks ... it can only use the "*" character as a wildcard in parts of the IP address.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/6109319061386832872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=6109319061386832872' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/6109319061386832872?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/6109319061386832872'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/07/one-wap-gateway-for-both-mms-and.html' title='One WAP Gateway for both MMS and Browser Data'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-6910680164639741017</id><published>2008-07-01T08:00:00.000+01:00</published><updated>2008-07-01T08:00:03.273+01:00</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-07-01T08:00:03.273+01:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='GPRS modem'/><category scheme='http://www.blogger.com/atom/ns#' term='GSM modem'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS Error'/><title type='text'>GSM Modem CMS Error Code List</title><content type='html'>When sending and/or receiving SMS messages with a GSM modem, if an error occurs, the modem will report a "+CMS ERROR" with a numeric code to indicate the reason for the problem.  These error codes are defined in the ETSI GSM specifications, specifically GSM 07.05, GSM 03.40 and GSM 04.11.&lt;br /&gt;&lt;br /&gt;I posted a list of CMS ERROR codes on the NowSMS discussion board almost 5 years ago at &lt;a href="http://www.nowsms.com/discus/messages/1/829.html"&gt;http://www.nowsms.com/discus/messages/1/829.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It's a useful reference that I seem to search for a few times every month, so to make the information easier to find, I figured I would post it here.&lt;br /&gt;&lt;br /&gt;Before I get to the list, and the sometimes cryptic definitions defined in the specifications, I want to highlight a few of the error codes that seem to occur most frequently.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;+CMS ERROR 500&lt;/span&gt; is probably the most commonly observed error code.  The specifications define this as "unknown error".  So, of course, that is the error code that many modems return for almost any reason.  Most frequently, it seems that this error occurs when the modem simply does not have a signal, or it has too weak of a signal.  It's a good idea to check the signal strength of the modem, and possibly relocate the modem so that it can acquire a stronger signal from the mobile operator.&lt;br /&gt;&lt;br /&gt;+CMS ERROR 500 can also occur in situations where the mobile operator does not have SMS over GPRS (or SMS over 3G packet data) enabled.  The default behaviour with most dedicated GSM modem devices is to try to send SMS over the packet network, and if this fails, fallback to the circuit switched network.  However, in some environments, the modem doesn't know how to interpret the failure, and the fallback does not occur properly.  To determine if this is the problem, try going into "Properties" for the modem in the "SMSC" list of NowSMS, and change "SMS Access" to "GSM".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;+CMS ERROR 330&lt;/span&gt; occurs frequently with 3G modems, it means that the address of the operator SMSC is not defined.  It seems to be a bug in commonly used modem chipsets, where they do not read this address automatically from the SIM.  To resolve this error, you need to manually define the operator SMSC address in the NowSMS configuration.&lt;br /&gt;&lt;br /&gt;You can set the SMSC address by manually editing the SMSGW.INI file. Under the section header for the modem configuration (e.g., [Modem - ...], add SMSC=+phonenumber, where "+phonenumber" is the address of the SMSC.  The best way to find this SMSC address is to move the SIM card from the modem temporarily to a phone, and go through the SMS configuration menus on the phone to determine the currently configured SMSC number. When you enter the SMSC phone number, always start it with a "+" and don't include any other non-numeric characters (no dashes or dots) in the address.&lt;br /&gt;&lt;br /&gt;Always restart the gateway service after making a change to the SMSGW.INI file.&lt;br /&gt;&lt;br /&gt;If you try setting the SMSC value by manually editing SMSGW.INI ... if the setting doesn't make a difference, always go back in and remove it immediately so that it doesn't confuse things down the road.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;+CMS ERROR 304&lt;/span&gt; occurs frequently when using Motorola phones as a modem.  Basically, these modems have a bug that prevent them from being able to send any messages that include UDH (User Data Header).  This includes almost all types of binary messages, as well as long text messages.  There is no resolution for this problem, other than to use a different modem that does not suffer from this bug.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;+CMS ERROR 512&lt;/span&gt; is defined as a manufacturer specific error.  From what we've seen, when this error occurs, it is usually the same as error 500.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;General Troubleshooting Tips&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Before I get into the full CMS ERROR code list, it may be worth offering some general troubleshooting tips, as the error codes themselves are usually quite cryptic.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In the "SMSC" list, highlight the modem and press "Properties".  Try changing the "SMS Access" to "GSM".&lt;/li&gt;&lt;li&gt;Remove the SIM card from the modem, and put it into a mobile phone.  Verify that you can actually send SMS messages using the SMS client in the mobile phone.  If you cannot, then there may be a problem with your account with the mobile operator.  (Note:  We have observed that with some mobile operators, if you buy a modem with a SIM card, they assume that the modem is going to be used for internet access, and SMS capabilities are not provisioned for the account.)&lt;/li&gt;&lt;li&gt;Check the signal strength of the modem.  Connect to the modem using HyperTerminal, and issue the command AT+CSQ.  This will return a result in the format +CSQ: xx,yy.  If the xx value is 99 (no signal), or lower than 10, you may have a signal problem.  It's subjective, but I like to see this value as at least 16.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;CMS ERROR Code List&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1 - "Unassigned (unallocated) number"&lt;br /&gt;This cause indicates that the destination requested by the Mobile Station cannot be reached because, although the number is in a valid format, it is not currently assigned (allocated).&lt;br /&gt;&lt;br /&gt;8 - "Operator determined barring"&lt;br /&gt;This cause indicates that the MS has tried to send a mobile originating short message when the MS's network operator or service provider has forbidden such transactions.&lt;br /&gt;&lt;br /&gt;10 - "Call barred"&lt;br /&gt;This cause indicates that the outgoing call barred service applies to the short message service for the called destination.&lt;br /&gt;&lt;br /&gt;17 - "Network failure".&lt;br /&gt;This cause is sent to the MS if the MSC cannot service an MS generated request because of PLMN failures, e.g. problems in MAP.&lt;br /&gt;&lt;br /&gt;21 - "Short message transfer rejected"&lt;br /&gt;This cause indicates that the equipment sending this cause does not wish to accept this short message, although it could have accepted the short message since the equipment sending this cause is neither busy nor incompatible.&lt;br /&gt;&lt;br /&gt;22 - "Congestion".&lt;br /&gt;This cause is sent if the service request cannot be actioned because of congestion (e.g. no channel, facility busy/congested etc.).&lt;br /&gt;&lt;br /&gt;22 - "Memory capacity exceeded".&lt;br /&gt;This cause indicates that the mobile station cannot store the incoming short message due to lack of storage capacity.&lt;br /&gt;&lt;br /&gt;Note that error "22" is defined twice. It is likely that "CMS ERROR 22" would be due to the first definition, while the second definition is likely to only be a status code for delivery reports.&lt;br /&gt;&lt;br /&gt;27 - "Destination out of service"&lt;br /&gt;This cause indicates that the destination indicated by the Mobile Station cannot be reached because the interface to the destination is not functioning correctly. The term "not functioning correctly" indicates that a signalling message was unable to be delivered to the remote user; e.g., a physical layer or data link layer failure at the remote user, user equipment off-line, etc.&lt;br /&gt;&lt;br /&gt;28 - "Unidentified subscriber"&lt;br /&gt;This cause indicates that the subscriber is not registered in the PLMN (i.e. IMSI not known).&lt;br /&gt;&lt;br /&gt;29 - "Facility rejected"&lt;br /&gt;This cause indicates that the facility requested by the Mobile Station is not supported by the PLMN.&lt;br /&gt;&lt;br /&gt;30 - "Unknown subscriber"&lt;br /&gt;This cause indicates that the subscriber is not registered in the HLR (i.e. IMSI or directory number is not allocated to a subscriber).&lt;br /&gt;&lt;br /&gt;38 - "Network out of order"&lt;br /&gt;This cause indicates that the network is not functioning correctly and that the condition is likely to last a relatively long period of time; e.g., immediately reattempting the short message transfer is not likely to be successful.&lt;br /&gt;&lt;br /&gt;41 - "Temporary failure"&lt;br /&gt;This cause indicates that the network is not functioning correctly and that the condition is not likely to last a long period of time; e.g., the Mobile Station may wish to try another short message transfer attempt almost immediately.&lt;br /&gt;&lt;br /&gt;42 - "Congestion"&lt;br /&gt;This cause indicates that the short message service cannot be serviced because of high traffic.&lt;br /&gt;&lt;br /&gt;47 - "Resources unavailable, unspecified"&lt;br /&gt;This cause is used to report a resource unavailable event only when no other cause applies.&lt;br /&gt;&lt;br /&gt;50 - "Requested facility not subscribed"&lt;br /&gt;This cause indicates that the requested short message service could not be provided by the network because the user has not completed the necessary administrative arrangements with its supporting networks.&lt;br /&gt;&lt;br /&gt;69 - "Requested facility not implemented"&lt;br /&gt;This cause indicates that the network is unable to provide the requested short message service.&lt;br /&gt;&lt;br /&gt;81 - "Invalid short message transfer reference value"&lt;br /&gt;This cause indicates that the equipment sending this cause has received a message with a short message reference which is not currently in use on the MS-network interface.&lt;br /&gt;&lt;br /&gt;95 - "Invalid message, unspecified"&lt;br /&gt;This cause is used to report an invalid message event only when no other cause in the invalid message class applies.&lt;br /&gt;&lt;br /&gt;96 - "Invalid mandatory information"&lt;br /&gt;This cause indicates that the equipment sending this cause has received a message where a mandatory information element is missing and/or has a content error (the two cases are indistinguishable).&lt;br /&gt;&lt;br /&gt;97 - "Message type non-existent or not implemented"&lt;br /&gt;This cause indicates that the equipment sending this cause has received a message with a message type it does not recognize either because this is a message not defined or defined but not implemented by the equipment sending this cause.&lt;br /&gt;&lt;br /&gt;98 - "Message not compatible with short message protocol state"&lt;br /&gt;This cause indicates that the equipment sending this cause has received a message such that the procedures do not indicate that this is a permissible message to receive while in the short message transfer state.&lt;br /&gt;&lt;br /&gt;99 - "Information element non-existent or not implemented"&lt;br /&gt;This cause indicates that the equipment sending this cause has received a message which includes information elements not recognized because the information element identifier is not defined or it is defined but not implemented by the equipment sending the cause. However, the information element is not required to be present in the message in order for the equipment sending the cause to process the message.&lt;br /&gt;&lt;br /&gt;111 - "Protocol error, unspecified"&lt;br /&gt;This cause is used to report a protocol error event only when no other cause applies.&lt;br /&gt;&lt;br /&gt;127 - "Interworking, unspecified"&lt;br /&gt;This cause indicates that there has been interworking with a network which does not provide causes for actions it takes; thus, the precise cause for a message which is being send cannot be ascertained.&lt;br /&gt;&lt;br /&gt;0...127 - Other values in this range are reserved, defined by GSM 04.11 Annex E-2 values&lt;br /&gt;&lt;br /&gt;128 - Telematic interworking not supported x&lt;br /&gt;129 - Short message Type 0 not supported x x&lt;br /&gt;130 - Cannot replace short message x x&lt;br /&gt;143 - Unspecified TP-PID error x x&lt;br /&gt;144 - Data coding scheme (alphabet) not supported x&lt;br /&gt;145 - Message class not supported x&lt;br /&gt;159 - Unspecified TP-DCS error x x&lt;br /&gt;160 - Command cannot be actioned x&lt;br /&gt;161 - Command unsupported x&lt;br /&gt;175 - Unspecified TP-Command error x&lt;br /&gt;176 - TPDU not supported x x&lt;br /&gt;192 - SC busy x&lt;br /&gt;193 - No SC subscription x&lt;br /&gt;194 - SC system failure x&lt;br /&gt;195 - Invalid SME address x&lt;br /&gt;196 - Destination SME barred x&lt;br /&gt;197 - SM Rejected-Duplicate SM x&lt;br /&gt;198 - TP-VPF not supported X&lt;br /&gt;199 - TP-VP not supported X&lt;br /&gt;208 - SIM SMS storage full x&lt;br /&gt;209 - No SMS storage capability in SIM x&lt;br /&gt;210 - Error in MS x&lt;br /&gt;211 - Memory Capacity Exceeded X&lt;br /&gt;212 - SIM Application Toolkit Busy x x&lt;br /&gt;255 - Unspecified error cause&lt;br /&gt;&lt;br /&gt;128...255 - Other values in this range are reserved, defined by GSM 03.40 subclause 9.2.3.22 values&lt;br /&gt;&lt;br /&gt;300 - ME failure&lt;br /&gt;301 - SMS service of ME reserved&lt;br /&gt;302 - operation not allowed&lt;br /&gt;303 - operation not supported&lt;br /&gt;304 - invalid PDU mode parameter&lt;br /&gt;305 - invalid text mode parameter&lt;br /&gt;310 - SIM not inserted&lt;br /&gt;311 - SIM PIN required&lt;br /&gt;312 - PH-SIM PIN required&lt;br /&gt;313 - SIM failure&lt;br /&gt;314 - SIM busy&lt;br /&gt;315 - SIM wrong&lt;br /&gt;316 - SIM PUK required&lt;br /&gt;317 - SIM PIN2 required&lt;br /&gt;318 - SIM PUK2 required&lt;br /&gt;320 - memory failure&lt;br /&gt;321 - invalid memory index&lt;br /&gt;322 - memory full&lt;br /&gt;330 - SMSC address unknown&lt;br /&gt;331 - no network service&lt;br /&gt;332 - network timeout&lt;br /&gt;340 - no +CNMA acknowledgement expected&lt;br /&gt;500 - unknown error&lt;br /&gt;&lt;br /&gt;256...511 - Other values in this range are reserved&lt;br /&gt;&lt;br /&gt;512... - manufacturer specific</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/6910680164639741017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=6910680164639741017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/6910680164639741017?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/6910680164639741017'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/07/gsm-modem-cms-error-code-list.html' title='GSM Modem CMS Error Code List'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-3516816253456416937</id><published>2008-06-26T14:58:00.000+01:00</published><updated>2008-06-26T15:14:38.721+01:00</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-06-26T15:14:38.721+01:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='throttling'/><category scheme='http://www.blogger.com/atom/ns#' term='ESME_RTHROTTLED'/><category scheme='http://www.blogger.com/atom/ns#' term='SMPP Async Mode'/><category scheme='http://www.blogger.com/atom/ns#' term='SMPP errors'/><title type='text'>SMSC Speed Limits</title><content type='html'>In a perfect world, we'd all be able to send SMS messages as fast as we wanted.&lt;br /&gt;&lt;br /&gt;But the reality is that there is a combination of commercial and technical limitations throughout the message distribution chain.&lt;br /&gt;&lt;br /&gt;NowSMS has commercial limitations where outbound message delivery is throttled at a per minute or per second license limit.&lt;br /&gt;&lt;br /&gt;Individual SMS service providers have similar limits that they impose.&lt;br /&gt;&lt;br /&gt;When you have a single SMS service provider connection, it is often easiest to match a NowSMS license limit with the license limit of your SMS service provider connection.&lt;br /&gt;&lt;br /&gt;But sometimes this speed limit matching isn't a perfect match.&lt;br /&gt;&lt;br /&gt;For example, if your NowSMS system is connecting to multiple SMSC providers, NowSMS may try to send messages to one or more of your SMSC connections which exceeds the limit imposed by your SMS service provider.&lt;br /&gt;&lt;br /&gt;What happens when you exceed the speed limit imposed by your SMS service provider?&lt;br /&gt;&lt;br /&gt;It depends. There is no single answer, because there are a lot of different software implementations used by different SMS service providers.&lt;br /&gt;&lt;br /&gt;In some cases, no problems occur. If the SMS service provider throttles back the speed at which it returns responses to NowSMS, NowSMS automatically slows down the connection to the speed desired by the service provider. &lt;em&gt;(If you define an SMPP async window size that is too large, however, you may end up with retry errors and duplicate messages in this situation. A good rule of thumb is that the SMPP async window size should not exceed 2, or maybe 3, times the number of messages per second that the connection will accept.)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;In other cases, the SMSC starts returning throttling errors, the dreaded ESME_RTHROTTLED. But throttling errors can occur for different reasons. They could also occur because the overall SMS system message queue is too large, and the provider needs all customers to slow down to give the system some time to catch up. By default, a throttling error causes NowSMS to have to retry the current message, and to wait 5 seconds before submitting the next message.&lt;br /&gt;&lt;br /&gt;5 seconds is a long time to wait for sending the next message if you're exceeding a 10 message per second limit. However, the default throttling delay of 5 seconds exists because when you're connecting directly to a mobile operator, most of these mobile operators have acceptance testing procedures where they test your connection before allowing you to connect to their system. And one of the tests is always the handling of the throttling error, where historically they have wanted to see longer delays.&lt;br /&gt;&lt;br /&gt;This throttle error delay can be adjusted by editing &lt;strong&gt;SMSGW.INI&lt;/strong&gt;, and under the &lt;strong&gt;[SMSGW]&lt;/strong&gt; section header, adding &lt;strong&gt;SMPPThrottleErrorDelay=##&lt;/strong&gt;, where ## is a number of seconds to delay. SMPPThrottleErrorDelay=0 will remove any delay.&lt;br /&gt;&lt;br /&gt;If you are receiving throttling errors, or possibly other error conditions, because you are exceeding the provider imposed speed limit of your SMSC connection, the best solution is to configure NowSMS to apply this speed limit to that particular SMSC connection.&lt;br /&gt;&lt;br /&gt;It is possible to manually edit the &lt;strong&gt;SMSGW.INI&lt;/strong&gt; file, and under the settings header for a particular SMSC connection (e.g., &lt;strong&gt;[SMPP - server:port]&lt;/strong&gt;), use the following setting to define a speed limit for that connection only using the &lt;strong&gt;SMSCSendLimit=x/y&lt;/strong&gt; setting.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;SMSCSendLimit=x/y&lt;/strong&gt; setting can specify that the gateway will send no more than x&lt;br /&gt;messages per y seconds. If y is not specified, then the default is 1. For example, to limit a&lt;br /&gt;connection to 1 message every 5 seconds, specify SMSCSendLimit=1/5. To limit a&lt;br /&gt;connection to 3 messages per second, specify SMSCSendLimit=3 or SMSCSendLimit=3/1.&lt;br /&gt;&lt;br /&gt;In versions of NowSMS prior to v2008.06.03, this setting did not work very well for limits higher than around 50 messages per second. However, in more recent versions of NowSMS, this setting works well for speed limits higher than 50 messages per second.&lt;br /&gt;&lt;br /&gt;While on the subject of SMSC speed limits, it is also worth mentioning that when NowSMS is used as an SMPP server, it can apply speed limits against the accounts that are submitting messages via SMPP (but not HTTP). When defining an "SMS Users" account, there is a setting to "Limit Speed of receiving messages for this account" which uses a similar "x messages / y seconds" type of definition.&lt;br /&gt;&lt;br /&gt;It is also worth mentioning that this "SMS Users" account setting can also limit the number of SMPP connections that the client is allowed to make. Under the "SMPP Options" on the "Web" page of the NowSMS configuration, there is a system default limit for defining the maximum number of connections per individual client. However, this setting can be overridden on a per-account basis using the "Limit speed of receiving messages for this account" setting. In the "# Messages/# Seconds" field, enter a value of x/y/z, where "x" is the number of messages allowed per "y" seconds, and "z" is the connection limit to be applied for this account. To disable message speed limits, but define a connection limit, use a value of 0/0/z, which indicates no limits, but specifies "z" as the connection limit for this account.</content><link rel='replies' type='application/atom+xml' href='http://blog.nowsms.com/feeds/3516816253456416937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=5228203547789870316&amp;postID=3516816253456416937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5228203547789870316/posts/default/3516816253456416937?v=2'/><link rel='self' type='application/atom+xml' href='http://blog.nowsms.com/feeds/posts/default/3516816253456416937'/><link rel='alternate' type='text/html' href='http://blog.nowsms.com/2008/06/smsc-speed-limits.html' title='SMSC Speed Limits'/><author><name>Bryce Norwood</name><uri>http://www.blogger.com/profile/15428404631060278711</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5228203547789870316.post-5770028071599871951</id><published>2008-06-23T11:02:00.003+01:00</published><updated>2008-06-23T11:14:03.387+01:00</updated><app:edited xmlns:app='http://purl.org/atom/app#'>2008-06-23T11:14:03.387+01:00</app:edited><category scheme='http://www.blogger.com/atom/ns#' term='operator MMSC'/><category scheme='http://www.blogger.com/atom/ns#' term='NowWAP'/><category scheme='http://www.blogger.com/atom/ns#' term='WAP Proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='WAP Gateway'/><category scheme='http://www.