/// <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; }