⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sgip.cs

📁 联通的SGIP发送代码
💻 CS
📖 第 1 页 / 共 5 页
字号:
            nIndex += 21;
            _TP_pid = buffer[nIndex++];
            _TP_udhi = buffer[nIndex++];
            _messageCoding = buffer[nIndex++];
            _messageLength = BitConverter.ToUInt32(buffer, nIndex);
            nIndex += 4;
            _messageContent = SgipHelper.GetASCIIString(buffer, nIndex, (int)MessageLength); //注意是MessageLength而非_messageLength
            nIndex += (int)MessageLength;
            Buffer.BlockCopy(buffer, nIndex, _reserved, 0, 8);
        }
    }

    public class Deliver_Resp: ResponseBody
    {
        public override uint GetCommandID()
        {
            return Command.SGIP_DELIVER_RESP;
        }
    }

    public class Report: Body
    {
      #region private members
        private SequenceNumber _sequenceNumber = new SequenceNumber(); //12, 该命令所涉及的Submit或deliver命令的序列号
        private byte _reportType; //1, Report命令类型  0:对先前一条Submit命令的状态报告 1:对先前一条前转Deliver命令的状态报告
        private string _userNumber = ""; //21, 接收短消息的手机号,手机号码前加“86”国别标志
        private byte _state;      //1, 该命令所涉及的短消息的当前执行状态  0:发送成功  1:等待发送 2:发送失败
        private byte _errorCode; //1, 当State=2时为错误码值,否则为0
        private byte[] _reserved = new byte[8]; // 保留,最多8个字节
      #endregion 

      #region public propertys
        /// <summary>
        /// 该命令所涉及的Submit或deliver命令的序列号
        /// </summary>
        public SequenceNumber SequenceNumber
        {
            get { return _sequenceNumber; }
            set { _sequenceNumber = value; }
        }

        /// <summary>
        /// Report命令类型  0:对先前一条Submit命令的状态报告 1:对先前一条前转Deliver命令的状态报告
        /// </summary>
        public byte ReportType
        {
            get
            {
                return _reportType;
            }
            set
            {
                _reportType = value;
            }
        }

        /// <summary>
        /// 接收短消息的手机号,手机号码前加“86”国别标志
        /// </summary>
        public string UserNumber
        {
            get { return _userNumber; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 21);
                _userNumber = SgipHelper.Prefix86ForMobilbeNumber(value);
            }
        }

        /// <summary>
        /// 该命令所涉及的短消息的当前执行状态  0:发送成功  1:等待发送 2:发送失败
        /// </summary>
        public byte State
        {
            get
            {
                return _state;
            }
            set
            {
                _state = value;
            }
        }

        /// <summary>
        /// 当State=2时为错误码值,否则为0
        /// </summary>
        public byte ErrorCode
        {
            get
            {
                return _errorCode;
            }
            set
            {
                _errorCode = value;
            }
        }

        /// <summary>
        /// 保留,最多8个字节
        /// </summary>
        public byte[] Reserved
        {
            get { return _reserved; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 8);
                _reserved = value;
            }
        }
      #endregion


        public override uint GetCommandID()
        {
            return Command.SGIP_REPORT;
        }

        public override int GetLength()
        {
            return 44;
        }

        public override byte[] GetBytes()
        {
            byte[] result = new byte[this.GetLength()];
            int nIndex = 0;
            _sequenceNumber.GetBytes().CopyTo(result, nIndex);
            nIndex += _sequenceNumber.GetLength();
            result[nIndex++] = _reportType;
            Encoding.ASCII.GetBytes(_userNumber).CopyTo(result, nIndex);
            nIndex += 21;
            result[nIndex++] = _state;
            result[nIndex++] = _errorCode;
            _reserved.CopyTo(result, nIndex);

            return result;
        }

        internal override void ReadFromBytes(byte[] buffer, int startIndex)
        {
            int nIndex = startIndex;
            _sequenceNumber.ReadFromBytes(buffer, nIndex);
            nIndex += _sequenceNumber.GetLength();
            _reportType = buffer[nIndex++];
            _userNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);
            nIndex += 21;
            _state = buffer[nIndex++];
            _errorCode = buffer[nIndex++];
            Buffer.BlockCopy(buffer, nIndex, _reserved, 0, 8);
        }
    }

    public class Report_Resp: ResponseBody
    {
        public override uint GetCommandID()
        {
            return Command.SGIP_REPORT_RESP;
        }
    }

    /// <summary>
    /// UserRpt命令和UserRpt_Resp应答用于完成对用户鉴权后,由SMG向手机用户所注册的SP发送命令,对手机用户进行状态配置。
    /// </summary>
    public class UserRpt : Body
    {
        public override uint GetCommandID()
        {
            return Command.SGIP_USERRPT;
        }

      #region private member's
        private string _spNumber = ""; //21, SP的接入号码
        private string _userNumber = ""; //21, 待配置的手机号码,手机号码前加“86”国别标志
        private byte _userCondition; //1, 0:注销;1:欠费停机;2:恢复正常
        private byte[] _reserved = new byte[8]; //保留,扩展用
      #endregion

      #region  public property's
        /// <summary>
        /// SP的接入号码
        /// </summary>
        public string SPNumber
        {
            get { return _spNumber; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 21);
                _spNumber = value;
            }
        }

        /// <summary>
        /// 待配置的手机号码,手机号码前加“86”国别标志
        /// </summary>
        public string UserNumber
        {
            get { return _userNumber; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 21);
                _userNumber = SgipHelper.Prefix86ForMobilbeNumber(value);
            }
        }

        /// <summary>
        /// 0:注销;1:欠费停机;2:恢复正常
        /// </summary>
        public byte UserCondition
        {
            get
            {
                return _userCondition;
            }
            set
            {
                _userCondition = value;
            }
        }

        /// <summary>
        /// 保留,最多8个字节
        /// </summary>
        public byte[] Reserved
        {
            get { return _reserved; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 8);
                _reserved = value;
            }
        }
      #endregion

        public override int GetLength()
        {
            return 51;
        }

        public override byte[] GetBytes()
        {
            byte[] result = new byte[this.GetLength()];
            int nIndex = 0;
            Encoding.ASCII.GetBytes(_spNumber).CopyTo(result, nIndex);
            nIndex += 21;
            Encoding.ASCII.GetBytes(_userNumber).CopyTo(result, nIndex);
            nIndex += 21;
            result[nIndex++] = _userCondition;
            _reserved.CopyTo(result, nIndex);

            return result;
        }

        internal override void ReadFromBytes(byte[] buffer, int startIndex)
        {
            int nIndex = startIndex;
            _spNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);
            nIndex += 21;
            _userNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);
            nIndex += 21;
            _userCondition = buffer[nIndex++];
            Buffer.BlockCopy(buffer, nIndex, _reserved, 0, 8);
        }

    }

    /// <summary>
    /// UserRpt命令和UserRpt_Resp应答用于完成对用户鉴权后,由SMG向手机用户所注册的SP发送命令,对手机用户进行状态配置。
    /// </summary>
    public class UserRpt_Resp : ResponseBody
    {
        public override uint GetCommandID()
        {
            return Command.SGIP_USERRPT_RESP;
        }
    }

    public class Trace : Body
    {
        #region private members
        private SequenceNumber _sequenceNumber = new SequenceNumber(); //12, 被跟踪MT短消息的命令序列号
        private string _userNumber = ""; //21, 接收短消息的手机号,手机号码前加“86”国别标志
        private byte[] _reserved = new byte[8]; // 保留,最多8个字节
        #endregion

        #region public propertys

        /// <summary>
        /// 被跟踪MT短消息的命令序列号
        /// </summary>
        public SequenceNumber SequenceNumber
        {
            get { return _sequenceNumber; }
            set { _sequenceNumber = value; }
        }

        /// <summary>
        /// 接收短消息的手机号,手机号码前加“86”国别标志
        /// </summary>
        public string UserNumber
        {
            get { return _userNumber; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 21);
                _userNumber = SgipHelper.Prefix86ForMobilbeNumber(value);
            }
        }

        /// <summary>
        /// 保留,最多8个字节
        /// </summary>
        public byte[] Reserved
        {
            get { return _reserved; }
            set
            {
                SgipHelper.CheckMaxBytes(value, 8);
                _reserved = value;
            }
        }
        #endregion


        public override uint GetCommandID()
        {
            return Command.SGIP_TRACE;
        }

        public override int GetLength()
        {
            return 41;
        }

        public override byte[] GetBytes()
        {
            byte[] result = new byte[this.GetLength()];
            int nIndex = 0;
            _sequenceNumber.GetBytes().CopyTo(result, nIndex);
            nIndex += _sequenceNumber.GetLength();
            Encoding.ASCII.GetBytes(_userNumber).CopyTo(result, nIndex);
            nIndex += 21;
            _reserved.CopyTo(result, nIndex);

            return result;
        }

        internal override void ReadFromBytes(byte[] buffer, int startIndex)
        {
            int nIndex = startIndex;
            _sequenceNumber.ReadFromBytes(buffer, nIndex);
            nIndex += _sequenceNumber.GetLength();
            _userNumber = SgipHelper.GetASCIIString(buffer, nIndex, 21);
            nIndex += 21;
            Buffer.BlockCopy(buffer, nIndex, _reserved, 0, 8);
        }
    }

    public class Trace_Resp: Body
    {
        private byte _count; //1, 被跟踪MT短消息经过的节点个数,当被跟踪短消息经过多个节点时,以下各个字段可重复

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -