//public static SmsSubmitPdu[] CreateConcatTextMessage(string userDataText, string destinationAddress) //{ // return SmartMessageFactory.CreateConcatTextMessage(userDataText, false, destinationAddress); //} /// <summary> /// Creates a concatenated text message. /// </summary> /// <param name="userDataText">The message text.</param> /// <param name="unicode">Specifies if the userDataText is to be encoded as Unicode. If not, the GSM 7-bit default alphabet is used.</param> /// <param name="destinationAddress">The message's destination address.</param> /// <returns>A set of <see cref="T:GsmComm.PduConverter.SmsSubmitPdu" /> objects that represent the message.</returns> /// <remarks> /// <para>A concatenated message makes it possible to exceed the maximum length of a normal message, /// created by splitting the message data into multiple parts.</para> /// <para>Concatenated messages are also known as long or multi-part messages.</para> /// <para>If no concatenation is necessary, a single, non-concatenated <see cref="T:GsmComm.PduConverter.SmsSubmitPdu" /> object is created.</para> /// </remarks> /// <exception cref="T:System.ArgumentException"><para>userDataText is so long that it would create more than 255 message parts.</para></exception> public static SmsSubmitPdu[] CreateConcatTextMessage(string userDataText, bool unicode, string destinationAddress) { string str; int length = 0; int num; byte[] bytes; SmsSubmitPdu smsSubmitPdu; int num1; byte num2; if (unicode) { num1 = 70; } else { num1 = 160; } int num3 = num1; if (unicode) { str = userDataText; } else { str = TextDataConverter.StringTo7Bit(userDataText); } if (str.Length <= num3) { if (unicode) { smsSubmitPdu = new SmsSubmitPdu(userDataText, destinationAddress, 8); } else { smsSubmitPdu = new SmsSubmitPdu(userDataText, destinationAddress); } SmsSubmitPdu[] smsSubmitPduArray = new SmsSubmitPdu[1]; smsSubmitPduArray[0] = smsSubmitPdu; return(smsSubmitPduArray); } else { ConcatMessageElement16 concatMessageElement16 = new ConcatMessageElement16(0, 0, 0); byte length1 = (byte)((int)SmartMessageFactory.CreateUserDataHeader(concatMessageElement16).Length); byte num4 = (byte)((double)length1 / 7 * 8); if (unicode) { num2 = length1; } else { num2 = num4; } byte num5 = num2; StringCollection stringCollections = new StringCollection(); for (int i = 0; i < str.Length; i = i + length) { if (!unicode) { if (str.Length - i < num3 - num5) { length = str.Length - i; } else { length = num3 - num5; } } else { if (str.Length - i < (num3 * 2 - num5) / 2) { length = str.Length - i; } else { length = (num3 * 2 - num5) / 2; } } string str1 = str.Substring(i, length); stringCollections.Add(str1); } if (stringCollections.Count <= 255) { SmsSubmitPdu[] smsSubmitPduArray1 = new SmsSubmitPdu[stringCollections.Count]; ushort num6 = CalcNextRefNumber(); byte num7 = 0; for (int j = 0; j < stringCollections.Count; j++) { num7 = (byte)(num7 + 1); ConcatMessageElement16 concatMessageElement161 = new ConcatMessageElement16(num6, (byte)stringCollections.Count, num7); byte[] numArray = SmartMessageFactory.CreateUserDataHeader(concatMessageElement161); if (unicode) { Encoding bigEndianUnicode = Encoding.BigEndianUnicode; bytes = bigEndianUnicode.GetBytes(stringCollections[j]); num = (int)bytes.Length; } else { bytes = TextDataConverter.SeptetsToOctetsInt(stringCollections[j]); num = stringCollections[j].Length; } SmsSubmitPdu smsSubmitPdu1 = new SmsSubmitPdu(); smsSubmitPdu1.DestinationAddress = destinationAddress; if (unicode) { smsSubmitPdu1.DataCodingScheme = 8; } smsSubmitPdu1.SetUserData(bytes, (byte)num); smsSubmitPdu1.AddUserDataHeader(numArray); smsSubmitPduArray1[j] = smsSubmitPdu1; } return(smsSubmitPduArray1); } else { throw new ArgumentException("A concatenated message must not have more than 255 parts.", "userDataText"); } } }
/// <summary> /// Creates an operator logo message. /// </summary> /// <param name="operatorLogo">The operator logo. Use <see cref="M:GsmComm.PduConverter.SmartMessaging.SmartMessageFactory.CreateOperatorLogo(GsmComm.PduConverter.SmartMessaging.OtaBitmap,System.String,System.String)" /> to create one.</param> /// <param name="destinationAddress">The message's destination address.</param> /// <returns>A set of <see cref="T:GsmComm.PduConverter.SmsSubmitPdu" /> objects that represent the message.</returns> /// <exception cref="T:System.ArgumentNullException">operatorLogo is null.</exception> /// <exception cref="T:System.ArgumentException"><para>operatorLogo is an empty array.</para> /// <para> -or- </para><para>destinationAddress is an empty string.</para> /// <para> -or- </para><para>operatorLogo is so big that it would create more than 255 message parts.</para></exception> public static SmsSubmitPdu[] CreateOperatorLogoMessage(byte[] operatorLogo, string destinationAddress) { int length; if (operatorLogo != null) { if ((int)operatorLogo.Length != 0) { PortAddressElement16 portAddressElement16 = new PortAddressElement16(5506, 0); byte num = (byte)((int)portAddressElement16.ToByteArray().Length); int num1 = num + 1; bool flag = (int)operatorLogo.Length > 140 - num1; if (flag) { ConcatMessageElement8 concatMessageElement8 = new ConcatMessageElement8(0, 0, 0); num = (byte)((int)portAddressElement16.ToByteArray().Length + (int)concatMessageElement8.ToByteArray().Length); num1 = num + 1; } ArrayList arrayLists = new ArrayList(); int num2 = 0; byte num3 = (byte)Math.Ceiling((double)((int)operatorLogo.Length) / (double)(140 - num1)); if (arrayLists.Count <= 255) { ushort num4 = 1; if (flag) { num4 = SmartMessageFactory.CalcNextRefNumber(); } for (byte i = 1; i <= num3; i = (byte)(i + 1)) { if ((int)operatorLogo.Length - num2 < 140 - num1) { length = (int)operatorLogo.Length - num2; } else { length = 140 - num1; } byte[] numArray = new byte[num1]; int length1 = 0; int num5 = length1; length1 = num5 + 1; numArray[num5] = num; portAddressElement16.ToByteArray().CopyTo(numArray, length1); length1 = length1 + (int)portAddressElement16.ToByteArray().Length; if (flag) { ConcatMessageElement8 concatMessageElement81 = new ConcatMessageElement8((byte)(num4 % 256), num3, i); concatMessageElement81.ToByteArray().CopyTo(numArray, length1); length1 = length1 + (int)concatMessageElement81.ToByteArray().Length; } byte[] numArray1 = new byte[(int)numArray.Length + length]; numArray.CopyTo(numArray1, 0); Array.Copy(operatorLogo, num2, numArray1, length1, length); SmsSubmitPdu smsSubmitPdu = new SmsSubmitPdu(); smsSubmitPdu.MessageFlags.UserDataHeaderPresent = true; smsSubmitPdu.DataCodingScheme = 21; smsSubmitPdu.DestinationAddress = destinationAddress; smsSubmitPdu.SetUserData(numArray1, (byte)((int)numArray1.Length)); arrayLists.Add(smsSubmitPdu); num2 = num2 + length; } SmsSubmitPdu[] smsSubmitPduArray = new SmsSubmitPdu[arrayLists.Count]; arrayLists.CopyTo(smsSubmitPduArray, 0); return(smsSubmitPduArray); } else { throw new ArgumentException("A concatenated message must not have more than 255 parts.", "operatorLogo"); } } else { throw new ArgumentException("operatorLogo must not be an empty array.", "operatorLogo"); } } else { throw new ArgumentNullException("operatorLogo"); } }