Esempio n. 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:GSMCommunication.PDUDecoder.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:GSMCommunication.PDUDecoder.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:GSMCommunication.PDUDecoder.SmartMessaging.ConcatMessageElement8" /></description></item>
        /// <item><description><see cref="T:GSMCommunication.PDUDecoder.SmartMessaging.ConcatMessageElement16" /></description></item>
        /// <item><description><see cref="T:GSMCommunication.PDUDecoder.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());
        }
Esempio n. 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:GSMCommunication.PDUDecoder.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:GSMCommunication.PDUDecoder.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:GSMCommunication.PDUDecoder.SmartMessaging.ConcatMessageElement8" /></description></item>
 /// <item><description><see cref="T:GSMCommunication.PDUDecoder.SmartMessaging.ConcatMessageElement16" /></description></item>
 /// <item><description><see cref="T:GSMCommunication.PDUDecoder.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();
 }