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(); }
/// <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()); }
/// <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() }); }
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); }
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; }
private string ToString(SmsEncoding encoding) { switch (encoding) { case SmsEncoding.GSM: return("gsm"); case SmsEncoding.UCS2: return("ucs2"); default: throw new InvalidOperationException(); } }
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; }
public void GetCharset_DetectEncoding(string text, SmsEncoding expectedEncoding) { var encoding = SmsHelpers.GetEncoding(text); Assert.AreEqual(encoding, expectedEncoding); }