📄 sgip.cs
字号:
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 + -