Ejemplo n.º 1
0
        /// <summary> Called to create a SubmitSmResp object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> SubmitSmResp </returns>
        public static SubmitSmResp Create(DataCodings defaultEncoding,
                                          SmppBuffer buf,
                                          ref int offset)
        {
            var submitSmResp = new SubmitSmResp(defaultEncoding);

            try
            {
                var start_offset = offset;

                buf.ExtractHeader(submitSmResp,
                                  ref offset);

                if (submitSmResp.Length > HEADER_LENGTH)
                {
                    submitSmResp.MessageId = buf.ExtractCString(ref offset);

                    while (offset - start_offset < submitSmResp.Length)
                    {
                        submitSmResp.Optional.Add(buf.ExtractTLV(ref offset));
                    }
                }
            }

            catch { submitSmResp = null; }

            return(submitSmResp);
        }
Ejemplo n.º 2
0
        /// <summary> Called to create a PduBindResp object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> PduBindResp </returns>
        public static BindSmResp Create(DataCodings defaultEncoding,
                                        SmppBuffer buf,
                                        ref int offset)
        {
            var bindResp = new BindSmResp(defaultEncoding);

            try
            {
                var start_offset = offset;

                buf.ExtractHeader(bindResp,
                                  ref offset);

                bindResp.SystemId = buf.ExtractCString(ref offset);

                while (offset - start_offset < bindResp.Length)
                {
                    bindResp.Optional.Add(buf.ExtractTLV(ref offset));
                }
            }

            catch { bindResp = null; }

            return(bindResp);
        }
Ejemplo n.º 3
0
        /// <summary> Called to create a AlertNotification object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> AlertNotification </returns>
        public static AlertNotification Create(DataCodings defaultEncoding, SmppBuffer buf, ref int offset)
        {
            AlertNotification alertNotification = new AlertNotification(defaultEncoding);

            try
            {
                int start_offset = offset;

                buf.ExtractHeader(alertNotification, ref offset);

                alertNotification.SourceAddrTon = buf.ExtractByte(ref offset);
                alertNotification.SourceAddrNpi = buf.ExtractByte(ref offset);
                alertNotification.SourceAddr    = buf.ExtractCString(ref offset);
                alertNotification.EsmeAddrTon   = buf.ExtractByte(ref offset);
                alertNotification.EsmeAddrNpi   = buf.ExtractByte(ref offset);
                alertNotification.EsmeAddr      = buf.ExtractCString(ref offset);

                while (offset - start_offset < alertNotification.Length)
                {
                    alertNotification.Optional.Add(buf.ExtractTLV(ref offset));
                }
            }

            catch
            {
                alertNotification = null;
            }

            return(alertNotification);
        }
Ejemplo n.º 4
0
        /// <summary> Called to create a DeliverSmResp object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> DeliverSmResp </returns>
        public static DeliverSmResp Create(DataCodings defaultEncoding, SmppBuffer buf, ref int offset)
        {
            DeliverSmResp deliverSmResp = new DeliverSmResp(defaultEncoding);

            try
            {
                int start_offset = offset;

                buf.ExtractHeader(deliverSmResp, ref offset);

                if (deliverSmResp.Length > Header.HEADER_LENGTH)
                {
                    deliverSmResp.MessageId = buf.ExtractCString(ref offset);

                    while (offset - start_offset < deliverSmResp.Length)
                    {
                        deliverSmResp.Optional.Add(buf.ExtractTLV(ref offset));
                    }
                }
            }

            catch
            {
                deliverSmResp = null;
            }

            return(deliverSmResp);
        }
Ejemplo n.º 5
0
        /// <summary> Called to create a SubmitMultiResp object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> SubmitMultiResp </returns>
        public static SubmitMultiSmResp Create(DataCodings defaultEncoding, SmppBuffer buf, ref int offset)
        {
            SubmitMultiSmResp submitMultiResp = new SubmitMultiSmResp(defaultEncoding);

            try
            {
                int start_offset = offset;

                buf.ExtractHeader(submitMultiResp, ref offset);

                if (submitMultiResp.Length > Header.HEADER_LENGTH)
                {
                    submitMultiResp.MessageId = buf.ExtractCString(ref offset);
                    submitMultiResp.UnsuccessDestinationAddresses = buf.ExtractUnsuccessDestinationAddresses(ref offset);

                    while (offset - start_offset < submitMultiResp.Length)
                    {
                        submitMultiResp.Optional.Add(buf.ExtractTLV(ref offset));
                    }
                }
            }

            catch
            {
                submitMultiResp = null;
            }

            return(submitMultiResp);
        }
Ejemplo n.º 6
0
        /// <summary> Called to create a SubmitMulti object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> SubmitMulti </returns>
        public static SubmitMultiSm Create(DataCodings defaultEncoding, SmppBuffer buf, ref int offset)
        {
            SubmitMultiSm submitMulti = new SubmitMultiSm(defaultEncoding);

            try
            {
                int start_offset = offset;

                buf.ExtractHeader(submitMulti, ref offset);

                submitMulti.ServiceType          = buf.ExtractCString(ref offset);
                submitMulti.SourceTon            = buf.ExtractByte(ref offset);
                submitMulti.SourceNpi            = buf.ExtractByte(ref offset);
                submitMulti.SourceAddr           = buf.ExtractCString(ref offset);
                submitMulti.DestinationAddresses = buf.ExtractDestinationAddresses(ref offset);
                submitMulti.EsmClass             = buf.ExtractByte(ref offset);
                submitMulti.ProtocolId           = buf.ExtractByte(ref offset);
                submitMulti.PriorityFlag         = buf.ExtractByte(ref offset);
                submitMulti.ScheduleDeliveryTime = buf.ExtractCString(ref offset);
                submitMulti.ValidityPeriod       = buf.ExtractCString(ref offset);
                submitMulti.RegisteredDelivery   = buf.ExtractByte(ref offset);
                submitMulti.ReplaceIfPresent     = buf.ExtractByte(ref offset);
                submitMulti.DataCoding           = (DataCodings)buf.ExtractByte(ref offset);
                submitMulti.DefaultMsgId         = buf.ExtractByte(ref offset);
                submitMulti.ShortMessageLength   = buf.ExtractByte(ref offset);

                if (submitMulti.ShortMessageLength > 0)
                {
                    submitMulti.UserDataBuffer = new SmppBuffer(defaultEncoding, buf.ExtractByteArray(ref offset, submitMulti.ShortMessageLength));
                }

                while (offset - start_offset < submitMulti.Length)
                {
                    submitMulti.Optional.Add(buf.ExtractTLV(ref offset));
                }
            }

            catch
            {
                submitMulti = null;
            }

            return(submitMulti);
        }
Ejemplo n.º 7
0
        /// <summary> Called to create a DataSm object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> DataSm </returns>
        public static DataSm Create(DataCodings defaultEncoding, SmppBuffer buf, ref int offset)
        {
            DataSm dataSm = new DataSm(defaultEncoding);

            try
            {
                int start_offset = offset;

                buf.ExtractHeader(dataSm, ref offset);

                dataSm.ServiceType        = buf.ExtractCString(ref offset);
                dataSm.SourceTon          = buf.ExtractByte(ref offset);
                dataSm.SourceNpi          = buf.ExtractByte(ref offset);
                dataSm.SourceAddr         = buf.ExtractCString(ref offset);
                dataSm.DestTon            = buf.ExtractByte(ref offset);
                dataSm.DestNpi            = buf.ExtractByte(ref offset);
                dataSm.DestAddr           = buf.ExtractCString(ref offset);
                dataSm.EsmClass           = buf.ExtractByte(ref offset);
                dataSm.RegisteredDelivery = buf.ExtractByte(ref offset);
                dataSm.DataCoding         = (DataCodings)buf.ExtractByte(ref offset);

                if (offset - start_offset < dataSm.Length)
                {
                    if (dataSm.Optional == null)
                    {
                        dataSm.Optional = new TLVCollection();
                    }

                    while (offset - start_offset < dataSm.Length)
                    {
                        dataSm.Optional.Add(buf.ExtractTLV(ref offset));
                    }
                }

                if (dataSm.Optional != null && dataSm.Optional.Count > 0)
                {
                    TLV tlv_payload = dataSm.Optional[OptionalTags.MessagePayload];
                    if (tlv_payload != null)
                    {
                        dataSm.UserDataBuffer = new SmppBuffer(defaultEncoding, tlv_payload.Value);
                    }

                    TLV tlv_globalSeq = dataSm.Optional[OptionalTags.SarMsgRefNum];
                    if (tlv_globalSeq != null)
                    {
                        dataSm.MessageReferenceNumber = SmppBuffer.BytesToShort(tlv_globalSeq.Value, 0);
                    }

                    TLV tlv_pocketsNumber = dataSm.Optional[OptionalTags.SarTotalSegments];
                    if (tlv_pocketsNumber != null)
                    {
                        dataSm.TotalSegments = tlv_pocketsNumber.Value[0];
                    }

                    TLV tlv_localSeq = dataSm.Optional[OptionalTags.SarSegmentSeqnum];
                    if (tlv_localSeq != null)
                    {
                        dataSm.SequenceNumber = tlv_localSeq.Value[0];
                    }
                }

                if (dataSm.UserDataBuffer != null && dataSm.UserDataBuffer.Length > 0)
                {
                    dataSm.UserData = UserData.Create(dataSm.UserDataBuffer, dataSm.MessageFeature == GSMSpecificFeatures.UDHI);
                }
                else
                {
                    dataSm.UserData = UserData.Create();
                }
            }

            catch
            {
                dataSm = null;
            }

            return(dataSm);
        }
Ejemplo n.º 8
0
        /// <summary> Called to create a SubmitSm object </summary>
        /// <param name="defaultEncoding"></param>
        /// <param name="buf"></param>
        /// <param name="offset"></param>
        /// <returns> SubmitSm </returns>
        public static SubmitSm Create(DataCodings defaultEncoding, SmppBuffer buf, ref int offset)
        {
            SubmitSm submitSm = new SubmitSm(defaultEncoding);

            try
            {
                int start_offset = offset;

                buf.ExtractHeader(submitSm, ref offset);

                submitSm.ServiceType          = buf.ExtractCString(ref offset);
                submitSm.SourceTon            = buf.ExtractByte(ref offset);
                submitSm.SourceNpi            = buf.ExtractByte(ref offset);
                submitSm.SourceAddr           = buf.ExtractCString(ref offset);
                submitSm.DestTon              = buf.ExtractByte(ref offset);
                submitSm.DestNpi              = buf.ExtractByte(ref offset);
                submitSm.DestAddr             = buf.ExtractCString(ref offset);
                submitSm.EsmClass             = buf.ExtractByte(ref offset);
                submitSm.ProtocolId           = buf.ExtractByte(ref offset);
                submitSm.PriorityFlag         = buf.ExtractByte(ref offset);
                submitSm.ScheduleDeliveryTime = buf.ExtractCString(ref offset);
                submitSm.ValidityPeriod       = buf.ExtractCString(ref offset);
                submitSm.RegisteredDelivery   = buf.ExtractByte(ref offset);
                submitSm.ReplaceIfPresent     = buf.ExtractByte(ref offset);
                submitSm.DataCoding           = (DataCodings)buf.ExtractByte(ref offset);
                submitSm.DefaultMsgId         = buf.ExtractByte(ref offset);
                submitSm.ShortMessageLength   = buf.ExtractByte(ref offset);

                if (submitSm.ShortMessageLength > 0)
                {
                    submitSm.UserDataBuffer = new SmppBuffer(defaultEncoding, buf.ExtractByteArray(ref offset, submitSm.ShortMessageLength));
                }

                while (offset - start_offset < submitSm.Length)
                {
                    submitSm.Optional.Add(buf.ExtractTLV(ref offset));
                }

                if (submitSm.ShortMessageLength == 0)
                {
                    if (submitSm.Optional != null && submitSm.Optional.Count > 0)
                    {
                        TLV tlv_payload = submitSm.Optional[OptionalTags.MessagePayload];
                        if (tlv_payload != null)
                        {
                            submitSm.UserDataBuffer = new SmppBuffer(defaultEncoding, tlv_payload.Value);
                        }

                        TLV tlv_globalSeq = submitSm.Optional[OptionalTags.SarMsgRefNum];
                        if (tlv_globalSeq != null)
                        {
                            submitSm.MessageReferenceNumber = SmppBuffer.BytesToShort(tlv_globalSeq.Value, 0);
                        }

                        TLV tlv_pocketsNumber = submitSm.Optional[OptionalTags.SarTotalSegments];
                        if (tlv_pocketsNumber != null)
                        {
                            submitSm.TotalSegments = tlv_pocketsNumber.Value[0];
                        }

                        TLV tlv_localSeq = submitSm.Optional[OptionalTags.SarSegmentSeqnum];
                        if (tlv_localSeq != null)
                        {
                            submitSm.SeqmentNumber = tlv_localSeq.Value[0];
                        }
                    }
                }

                if (submitSm.UserDataBuffer != null && submitSm.UserDataBuffer.Length > 0)
                {
                    bool hasUDHI = submitSm.MessageFeature == GSMSpecificFeatures.UDHI || submitSm.MessageFeature == GSMSpecificFeatures.UDHIandReplyPath;
                    submitSm.UserData = UserData.Create(submitSm.UserDataBuffer, hasUDHI);

                    if (submitSm.UserData.Headers.Count > 0)
                    {
                        UserDataHeader udh = submitSm.UserData.Headers[InformationElementIdentifiers.ConcatenatedShortMessages8bit];
                        if (udh != null)
                        {
                            submitSm.MessageReferenceNumber = udh.Data[0];
                            submitSm.TotalSegments          = udh.Data[1];
                            submitSm.SeqmentNumber          = udh.Data[2];
                        }

                        udh = submitSm.UserData.Headers[InformationElementIdentifiers.ConcatenatedShortMessage16bit];
                        if (udh != null)
                        {
                            submitSm.MessageReferenceNumber = SmppBuffer.BytesToShort(udh.Data, 0);
                            submitSm.TotalSegments          = udh.Data[2];
                            submitSm.SeqmentNumber          = udh.Data[3];
                        }
                    }
                }
                else
                {
                    submitSm.UserData = UserData.Create();
                }
            }

            catch
            {
                submitSm = null;
            }

            return(submitSm);
        }