DeliverSm receives splitted message

Smpp v3.4 client

Moderator: alt

Locked
araxno
Posts: 21
Joined: Thu Jul 30, 2009 12:35 pm

DeliverSm receives splitted message

Post by araxno » Thu Jul 30, 2009 12:44 pm

Hi Everyone,
My application waits for sms from mobile phone. When I send long message to smsc via mobile phone.My message comes as splitted with two parts to application.
And also May I ask what
"UserDataPdu.Headers.AddConcatenatedShortMessages8bit" method is for?Can I use it to deliver long messages without split.

Any help would be appreciated.
Thanks
alt
Site Admin
Posts: 988
Joined: Tue Apr 25, 2006 9:45 am

Post by alt » Thu Aug 13, 2009 10:02 pm

If your SMSC sends information about concatenated messages than you can combine message parts.

Here is code from SmppClientDemo

Code: Select all

        private Dictionary<string, UserData[]> collector = new Dictionary<string, UserData[]>();

        private void client_evDeliverSm(object sender, DeliverSm data)
        {
            if (data.SegmentNumber > 0)
            {

                AddMessageSegmentToCollector(data);

                string messageText = SmppClient.GetMessageText(data.UserDataPdu.ShortMessage, data.DataCoding);

                AddToLog("DeliverSm part received : "
                    + " Sequence : " + data.Sequence.ToString()
                    + " SourceAddr : " + data.SourceAddr
                    + " Segments ( Number: " + data.SegmentNumber.ToString()
                    + ", Total : " + data.TotalSegments.ToString()
                    + ", Reference : " + data.MessageReferenceNumber.ToString()
                    + " ) Coding : " + data.DataCoding.ToString()
                    + " MessageText : " + messageText);


                if (IsLastSegment(data))
                {

                    string fullMessage = RetrieveFullMessage(data);

                    AddToLog("Full message: " + fullMessage);
                }

            }
            else
            {
                string messageText = SmppClient.GetMessageText(data.UserDataPdu.ShortMessage, data.DataCoding);

                AddToLog("DeliverSm received : "
                    + " Sequence : " + data.Sequence.ToString()
                    + " SourceAddr : " + data.SourceAddr
                    + " Coding : " + data.DataCoding.ToString()
                    + " MessageText : " + messageText);

            }

        }

        private void AddMessageSegmentToCollector(DeliverSm data)
        {
            UserData[] userDataArray = null;
            if (collector.ContainsKey(data.SourceAddr + data.MessageReferenceNumber))
            {
                userDataArray = (UserData[])collector[data.SourceAddr + data.MessageReferenceNumber];
            }
            else
            {
                userDataArray = new UserData[data.TotalSegments];
            }

            userDataArray[data.SegmentNumber - 1] = data.UserDataPdu;

            collector[data.SourceAddr + data.MessageReferenceNumber] = userDataArray;
        }

        private bool IsLastSegment(DeliverSm data)
        {
            bool finished = false;

            UserData[] userDataArray = null;
            string key = data.SourceAddr + data.MessageReferenceNumber;
            if (collector.ContainsKey(key))
            {
                userDataArray = (UserData[])collector[key];

                finished = true;

                foreach (UserData d in userDataArray)
                {
                    if (d == null)
                    {
                        finished = false;
                        break;
                    }
                }
            }

            return finished;
        }

        private string RetrieveFullMessage(DeliverSm data)
        {
            string message = null;
            string key = data.SourceAddr + data.MessageReferenceNumber;
            if (collector.ContainsKey(key))
            {
                UserData[]  userDataArray = (UserData[])collector[key];

                UserData fullUserData = null;
                foreach (UserData d in userDataArray)
                {
                    fullUserData += d;
                }

                message = SmppClient.GetMessageText(fullUserData.ShortMessage, data.DataCoding);


                collector.Remove(key);
            }

            return message;
        }
Locked