コード例 #1
0
        /// <summary>
        /// Decodes a user data header into information elements.
        /// </summary>
        /// <param name="userDataHeader">The user data header to be decoded.</param>
        /// <returns>The elements found as an array of <see cref="T:GsmComm.PduConverter.SmartMessaging.InformationElement" /> objects.</returns>
        /// <remarks>
        /// <para>Known information elements are decoded into their respective objects, while unknown
        /// information elements are stored in generic <see cref="T:GsmComm.PduConverter.SmartMessaging.UnknownInformationElement" /> objects.</para>
        /// <para>The list of known information elements consists of elements used within Smart Messaging,
        /// and does not aim to be a complete set of all existing elements.</para>
        /// <para>The currently recognized elements are:</para>
        /// <list type="bullet">
        /// <item><description><see cref="T:GsmComm.PduConverter.SmartMessaging.ConcatMessageElement8" /></description></item>
        /// <item><description><see cref="T:GsmComm.PduConverter.SmartMessaging.ConcatMessageElement16" /></description></item>
        /// <item><description><see cref="T:GsmComm.PduConverter.SmartMessaging.PortAddressElement16" /></description></item>
        /// </list>
        /// </remarks>
        public static InformationElement[] DecodeUserDataHeader(byte[] userDataHeader)
        {
            InformationElement        unknownInformationElement;
            List <InformationElement> informationElements = new List <InformationElement>();
            byte num  = 0;
            byte num1 = userDataHeader[0];

            if (num1 > 0)
            {
                num = (byte)(num + 1);
                do
                {
                    byte num2 = num;
                    num = (byte)(num2 + 1);
                    byte num3 = userDataHeader[num2];
                    byte num4 = num;
                    num = (byte)(num4 + 1);
                    byte   num5     = userDataHeader[num4];
                    byte[] numArray = new byte[num5 + 2];
                    Array.Copy(userDataHeader, num - 2, numArray, 0, num5 + 2);
                    num = (byte)(num + num5);
                    if (num3 != 0)
                    {
                        if (num3 != 8)
                        {
                            if (num3 != 5)
                            {
                                unknownInformationElement = new UnknownInformationElement(numArray);
                            }
                            else
                            {
                                unknownInformationElement = new PortAddressElement16(numArray);
                            }
                        }
                        else
                        {
                            unknownInformationElement = new ConcatMessageElement16(numArray);
                        }
                    }
                    else
                    {
                        unknownInformationElement = new ConcatMessageElement8(numArray);
                    }
                    informationElements.Add(unknownInformationElement);
                }while (num < num1);
            }
            return(informationElements.ToArray());
        }
コード例 #2
0
		/// <summary>
		/// Decodes a user data header into information elements.
		/// </summary>
		/// <param name="userDataHeader">The user data header to be decoded.</param>
		/// <returns>The elements found as an array of <see cref="T:GsmComm.PduConverter.SmartMessaging.InformationElement" /> objects.</returns>
		/// <remarks>
		/// <para>Known information elements are decoded into their respective objects, while unknown
		/// information elements are stored in generic <see cref="T:GsmComm.PduConverter.SmartMessaging.UnknownInformationElement" /> objects.</para>
		/// <para>The list of known information elements consists of elements used within Smart Messaging,
		/// and does not aim to be a complete set of all existing elements.</para>
		/// <para>The currently recognized elements are:</para>
		/// <list type="bullet">
		/// <item><description><see cref="T:GsmComm.PduConverter.SmartMessaging.ConcatMessageElement8" /></description></item>
		/// <item><description><see cref="T:GsmComm.PduConverter.SmartMessaging.ConcatMessageElement16" /></description></item>
		/// <item><description><see cref="T:GsmComm.PduConverter.SmartMessaging.PortAddressElement16" /></description></item>
		/// </list>
		/// </remarks>
		public static InformationElement[] DecodeUserDataHeader(byte[] userDataHeader)
		{
			InformationElement unknownInformationElement;
			List<InformationElement> informationElements = new List<InformationElement>();
			byte num = 0;
			byte num1 = userDataHeader[0];
			if (num1 > 0)
			{
				num = (byte)(num + 1);
				do
				{
					byte num2 = num;
					num = (byte)(num2 + 1);
					byte num3 = userDataHeader[num2];
					byte num4 = num;
					num = (byte)(num4 + 1);
					byte num5 = userDataHeader[num4];
					byte[] numArray = new byte[num5 + 2];
					Array.Copy(userDataHeader, num - 2, numArray, 0, num5 + 2);
					num = (byte)(num + num5);
					if (num3 != 0)
					{
						if (num3 != 8)
						{
							if (num3 != 5)
							{
								unknownInformationElement = new UnknownInformationElement(numArray);
							}
							else
							{
								unknownInformationElement = new PortAddressElement16(numArray);
							}
						}
						else
						{
							unknownInformationElement = new ConcatMessageElement16(numArray);
						}
					}
					else
					{
						unknownInformationElement = new ConcatMessageElement8(numArray);
					}
					informationElements.Add(unknownInformationElement);
				}
				while (num < num1);
			}
			return informationElements.ToArray();
		}
コード例 #3
0
		/// <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 = SmartMessageFactory.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");
				}
			}
		}
コード例 #4
0
        /// <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 = SmartMessageFactory.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");
                }
            }
        }