Ejemplo n.º 1
0
        /// <summary> Prepare SubmitSm instances for sending as wap push </summary>
        /// <param name="transactionId"></param>
        /// <param name="serviceType"></param>
        /// <param name="srcTon"></param>
        /// <param name="srcNpi"></param>
        /// <param name="srcAddr"></param>
        /// <param name="destTon"></param>
        /// <param name="destNpi"></param>
        /// <param name="destAddr"></param>
        /// <param name="url"></param>
        /// <param name="title"></param>
        /// <returns> A SubmitSm object </returns>
        public SubmitSm PrepareWapPush(byte transactionId, string serviceType, byte srcTon, byte srcNpi, string srcAddr, byte destTon,
                                       byte destNpi, string destAddr, string url, string title)
        {
            SubmitSm sp = null;

            SmppBuffer sb = new SmppBuffer(DefaultEncoding);

            sb.AddByte(transactionId);
            sb.AddByte(0x06);  //PDU Type: Push
            sb.AddByte(0x01);  //Header Length
            sb.AddByte(0xAE); // application/vnd.wap.sic 0x24 ^ 0x80

            // WAP Binary XML
            sb.AddByte(0x02);  //Version 1.2
            sb.AddByte(0x05);  //Public Identifier
            sb.AddByte(0x6a);  //Character Set: utf-8
            sb.AddByte(0x00);  //String table 0 bytes

            sb.AddByte(0x45);  //(.C) <si>
            sb.AddByte(0xc6);  //(AC) <indication

            string urlTmp = url;
            if (url.StartsWith("http://www."))
            {
                sb.AddByte(0x0d);
                urlTmp = url.Remove(0, "http://www.".Length);
            }
            else if (url.StartsWith("http://"))
            {
                sb.AddByte(0x0c);
                urlTmp = url.Remove(0, "http://".Length);
            }
            else if (url.StartsWith("https://www."))
            {
                sb.AddByte(0x0f);
                urlTmp = url.Remove(0, "https://www.".Length);
            }
            else if (url.StartsWith("https://"))
            {
                sb.AddByte(0x0e);
                urlTmp = url.Remove(0, "https://".Length);
            }
            else
            {
                sb.AddByte(0x0b);
            }

            string[] parts = Regex.Split(urlTmp, @"(\.com/|\.org/\.edu/|\.net/)");
            foreach (string part in parts)
            {
                if (part == ".com/")
                {
                    sb.AddByte(0x85);
                }
                else if (part == ".edu/")
                {
                    sb.AddByte(0x86);
                }
                else if (part == ".net/")
                {
                    sb.AddByte(0x87);
                }
                else if (part == ".org/")
                {
                    sb.AddByte(0x88);
                }
                else
                {
                    sb.AddEncodedString(part, DataCodings.Octets);
                }
            }

            sb.AddByte(0x07);  // action='signal-medium'
            sb.AddByte(0x01);  // END attribute list
            sb.AddEncodedString(title, DataCodings.Octets);

            sb.AddByte(0x01);  // END </indication>
            sb.AddByte(0x01);  // END </si>

            if (sb.Buffer.Length < 255 - 7)
            {
                sp = SubmitSm.Create(DefaultEncoding, serviceType, srcTon, srcNpi, srcAddr, destTon, destNpi, destAddr);

                sp.EsmClass = 0x40;
                sp.DataCoding = DataCodings.Class1ME8Bit;
                sp.ShortMessageBytes = sb.Buffer;

                sp.UserData.Headers.Add(
                    InformationElementIdentifiers.ApplicationPortAddressingScheme16bit,
                    new byte[] { 0x0b, 0x84, 0x23, 0xf0 } );
            }
            else
            {
                throw new ArgumentException("Message too large to send", "message_length");
            }

            return sp;
        }