Example #1
0
        public virtual string Compose(SmsEncoding messageEncoding)
        {
            ComposePDUType();

            string encodedData = "00"; //Length of SMSC information. Here the length is 0, which means that the SMSC stored in the phone should be used. Note: This octet is optional. On some phones this octet should be omitted! (Using the SMSC stored in phone is thus implicit)

            encodedData += Convert.ToString(_pduType, 16).PadLeft(2, '0'); //PDU type (forst octet)
            encodedData += Convert.ToString(MessageReference, 16).PadLeft(2, '0');
            encodedData += EncodePhoneNumber(PhoneNumber);
            encodedData += "00"; //Protocol identifier (Short Message Type 0)
            encodedData += Convert.ToString((int) messageEncoding, 16).PadLeft(2, '0'); //Data coding scheme

            if (_validityPeriodFormat != ValidityPeriodFormat.FieldNotPresent)
                encodedData += Convert.ToString(_validityPeriod, 16).PadLeft(2, '0'); //Validity Period

            byte[] messageBytes;
            switch (messageEncoding) 
            {
                case SmsEncoding.Ucs2:
                    messageBytes = EncodeUCS2(_message);
                    break;
                default:
                    messageBytes = new byte[0];
                    break;
            }

            encodedData += Convert.ToString(messageBytes.Length, 16).PadLeft(2, '0'); //Length of message

            foreach (byte b in messageBytes)
                encodedData += Convert.ToString(b, 16).PadLeft(2, '0');

            return encodedData.ToUpper();
        }
Example #2
0
 /// <summary>
 ///   Split the provided text to individual parts like words, links etc.
 /// </summary>
 /// <param name="text"></param>
 /// <param name="encoding"></param>
 /// <returns></returns>
 public static List <TextBlock> Split(string text, SmsEncoding encoding)
 {
     return(SplitLinks(text)
            .SelectMany(b => b.IsLink ? new List <TextBlock> {
         b
     } : SplitWords(b.Content))
            .Select(t => ToTextBlock(t.Content, encoding))
            .ToList());
 }
Example #3
0
 /// <summary>
 ///   Convert text to <see cref="TextBlock"/> and calculate SMS length for that block
 /// </summary>
 /// <param name="text"></param>
 /// <param name="encoding"></param>
 /// <returns></returns>
 private static TextBlock ToTextBlock(string text, SmsEncoding encoding)
 {
     return(new TextBlock
     {
         Content = text,
         Length = encoding == SmsEncoding.GsmUnicode
             ? text.Length
             : text.Select(SmsInternalHelper.GetGsmCharLength).Sum()
     });
 }
Example #4
0
        public SmsBuilder(List <TextBlock> blocks, SmsEncoding encoding, bool concatenatedSms)
        {
            _smsEncoding     = encoding;
            _concatenatedSms = concatenatedSms;

            var lengthLimit = encoding == SmsEncoding.Gsm7Bit
                ? SmsConstants.GsmLengthLimitSinglePart
                : SmsConstants.UnicodeLengthLimitSinglePart;

            Add(blocks, lengthLimit);
        }
Example #5
0
 public SmsMessage(string msisdn, string text, string senderName, SmsEncoding encoding, string messageId = null, DateTime?sendTime = null, bool flash = false, TimeSpan?expireTimeSpan = null, bool?respectBlacklist = null)
 {
     MessageId        = messageId ?? "";
     Msisdn           = msisdn;
     Text             = text;
     SenderName       = senderName;
     Encoding         = encoding;
     SendTime         = sendTime;
     Flash            = flash;
     ExpireIn         = expireTimeSpan;
     RespectBlacklist = respectBlacklist;
 }
Example #6
0
        private string ToString(SmsEncoding encoding)
        {
            switch (encoding)
            {
            case SmsEncoding.GSM:
                return("gsm");

            case SmsEncoding.UCS2:
                return("ucs2");

            default:
                throw new InvalidOperationException();
            }
        }
Example #7
0
        public virtual string Compose(SmsEncoding messageEncoding)
        {
            ComposePDUType();

            string encodedData = "00";                                     //Length of SMSC information. Here the length is 0, which means that the SMSC stored in the phone should be used. Note: This octet is optional. On some phones this octet should be omitted! (Using the SMSC stored in phone is thus implicit)

            encodedData += Convert.ToString(_pduType, 16).PadLeft(2, '0'); //PDU type (forst octet)
            encodedData += Convert.ToString(MessageReference, 16).PadLeft(2, '0');
            encodedData += EncodePhoneNumber(PhoneNumber);
            encodedData += "00";                                                       //Protocol identifier (Short Message Type 0)
            encodedData += Convert.ToString((int)messageEncoding, 16).PadLeft(2, '0'); //Data coding scheme

            if (_validityPeriodFormat != ValidityPeriodFormat.FieldNotPresent)
            {
                encodedData += Convert.ToString(_validityPeriod, 16).PadLeft(2, '0'); //Validity Period
            }
            byte[] messageBytes;
            switch (messageEncoding)
            {
            case SmsEncoding.Ucs2:
                messageBytes = EncodeUCS2(_message);
                break;

            default:
                messageBytes = new byte[0];
                break;
            }

            encodedData += Convert.ToString(messageBytes.Length, 16).PadLeft(2, '0'); //Length of message

            foreach (byte b in messageBytes)
            {
                encodedData += Convert.ToString(b, 16).PadLeft(2, '0');
            }

            return(encodedData.ToUpper());
        }
 public SmsEncoder(SmsEncoding encoding)
 {
     _encoding = encoding;
 }
Example #9
0
        public void GetCharset_DetectEncoding(string text, SmsEncoding expectedEncoding)
        {
            var encoding = SmsHelpers.GetEncoding(text);

            Assert.AreEqual(encoding, expectedEncoding);
        }