📄 sgip.cs
字号:
//2:SMG向SP建立的连接,用于发送命令
//3:SMG之间建立的连接,用于转发命令
//4:SMG向GNS建立的连接,用于路由表的检索和维护
//5:GNS向SMG建立的连接,用于路由表的更新
//6:主备GNS之间建立的连接,用于主备路由表的一致性
//11:SP与SMG以及SMG之间建立的测试连接,用于跟踪测试
//其它:保留
/// </summary>
public byte LoginType
{
get { return _loginType; }
set { _loginType = value; }
}
/// <summary>
/// 服务器分配的登录名,最长为16
/// </summary>
public string LoginName
{
get { return _loginName; }
set
{
SgipHelper.CheckMaxBytes(value, 16);
_loginName = value;
}
}
/// <summary>
/// 密码
/// </summary>
public string LoginPassword
{
get { return _loginPassword; }
set
{
SgipHelper.CheckMaxBytes(value, 16);
_loginPassword = value;
}
}
/// <summary>
/// 保留,最多8个字节
/// </summary>
public byte[] Reserved
{
get { return _reserved; }
set
{
SgipHelper.CheckMaxBytes(value, 8);
_reserved = value;
}
}
public override int GetLength()
{
return 41;
}
public override byte[] GetBytes()
{
byte[] result = new byte[this.GetLength()];
int nIndex = 0;
result[nIndex++] = _loginType;
Encoding.ASCII.GetBytes(_loginName).CopyTo(result, nIndex); //_loginName
nIndex += 16;
Encoding.ASCII.GetBytes(_loginPassword).CopyTo(result, nIndex); //_loginPassword
nIndex += 16;
_reserved.CopyTo(result, nIndex); //_reserved
return result;
}
internal override void ReadFromBytes(byte[] buffer, int startIndex)
{
int nIndex = startIndex;
_loginType = buffer[nIndex++];
_loginName = SgipHelper.GetASCIIString(buffer, nIndex, 16);
nIndex += 16;
_loginPassword = SgipHelper.GetASCIIString(buffer, nIndex, 16);
nIndex += 16;
Buffer.BlockCopy(buffer, nIndex, _reserved, 0, 8);
}
public Bind()
{
}
public Bind(byte bLoginType, string strLoginName, string strLoginPwd)
{
LoginType = bLoginType;
LoginName = strLoginName;
LoginPassword = strLoginPwd;
}
}
public class Bind_Resp : ResponseBody
{
public override uint GetCommandID()
{
return Command.SGIP_BIND_RESP;
}
};
public class Unbind: Body
{
public override uint GetCommandID()
{
return Command.SGIP_UNBIND;
}
}
public class Unbind_Resp : Body
{
public override uint GetCommandID()
{
return Command.SGIP_UNBIND_RESP;
}
}
public class Submit: Body
{
public override uint GetCommandID()
{
return Command.SGIP_SUBMIT;
}
#region private members
private string _spNumber = ""; //21, SP的接入号码(=特服号=服务代码)
private string _chargeNumber = ""; //21, 付费号码,手机号码前加"86"国别标志;当且仅当群发且对用户收费时为空;如果为空,则该条短消息产生的费用由UserNumber代表的用户支付;如果为全零字符串"000000000000000000000",表示该条短消息产生的费用由SP支付。
private byte _userCount; //1, 接收短消息的手机数量,取值范围1至100
private UserNumber _userNumber = new UserNumber(); //21 * _userCount, 接收该短消息的手机号,该字段重复UserCount指定的次数,手机号码前加"86"国别标志
private string _corpID = ""; //5, 企业代码,取值范围0-99999
private string _serviceType = ""; //10, 业务代码,由SP定义
private byte _feeType; //1, 计费类型
private string _feeValue = ""; //6, 取值范围0-99999,该条短消息的收费值,单位为分,由SP定义,对于包月制收费的用户,该值为月租费的值
private string _givenValue = ""; //6, 取值范围0-99999,赠送用户的话费,单位为分,由SP定义,特指由SP向用户发送广告时的赠送话费
private byte _agentFlag; //1, 代收费标志,0:应收;1:实收
private byte _morelatetoMTFlag; //1, 引起MT消息的原因:0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息;2-非MO点播引起的MT消息;3-系统反馈引起的MT消息。
private byte _priority; //1, 优先级0-9从低到高,默认为0
private string _expireTime = ""; //16, 短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
private string _scheduleTime = ""; //16, 短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
private byte _reportFlag; //1, 状态报告标记0-该条消息只有最后出错时要返回状态报告1-该条消息无论最后是否成功都要返回状态报告2-该条消息不需要返回状态报告3-该条消息仅携带包月计费信息,不下发给用户,要返回状态报告其它-保留缺省设置为0
private byte _TP_pid; //1, GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
private byte _TP_udhi; //1, GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
private byte _messageCoding; //1, 短消息的编码格式。0:纯ASCII字符串 3:写卡操作 4:二进制编码 8:UCS2编码 15: GBK编码 其它参见GSM3.38第4节:SMS Data Coding Scheme
private byte _messageType; //1, 信息类型:0-短消息信息,其它:待定
private uint _messageLength = 140; //4, 默认为140,短消息的长度
private string _messageContent = ""; //_messageLength, 短消息的内容
private byte[] _reserved = new byte[8]; //8, 保留,扩展用
#endregion
#region public propertys
/// <summary>
/// SP的接入号码(=特服号=服务代码)
/// </summary>
public string SPNumber
{
get { return _spNumber;}
set
{
SgipHelper.CheckMaxBytes(value, 21);
_spNumber = value;
}
}
/// <summary>
/// 付费号码,手机号码前加"86"国别标志;当且仅当群发且对用户收费时为空;如果为空,则该条短消息产生的费用由UserNumber代表的用户支付;如果为全零字符串"000000000000000000000",表示该条短消息产生的费用由SP支付。
/// </summary>
public string ChargeNumber
{
get { return _chargeNumber;}
set
{
SgipHelper.CheckMaxBytes(value, 21);
_chargeNumber = SgipHelper.Prefix86ForMobilbeNumber(value);
}
}
/// <summary>
/// 接收短消息的手机数量,取值范围1至100
/// </summary>
public byte UserCount
{
get
{
return _userCount;
}
set
{
_userCount = value;
}
}
/// <summary>
/// 接收该短消息的手机号,该字段重复UserCount指定的次数,手机号码前加"86"国别标志(SgipHelper.Prefix86ForMobilbeNumber(value))
/// </summary>
public UserNumber UserNumber
{
get { return _userNumber; }
set { _userNumber = value; }
}
/// <summary>
/// 企业代码,取值范围0-99999
/// </summary>
public string CorpID
{
get { return _corpID; }
set
{
SgipHelper.CheckMaxBytes(value, 5);
_corpID = value;
}
}
/// <summary>
/// 业务代码,由SP定义
/// </summary>
public string ServiceType
{
get { return _serviceType; }
set
{
SgipHelper.CheckMaxBytes(value, 10);
_serviceType = value;
}
}
/// <summary>
/// 计费类型
/// </summary>
public byte FeeType
{
get
{
return _feeType;
}
set
{
_feeType = value;
}
}
/// <summary>
/// 取值范围0-99999,该条短消息的收费值,单位为分,由SP定义,对于包月制收费的用户,该值为月租费的值
/// </summary>
public string FeeValue
{
get { return _feeValue; }
set
{
SgipHelper.CheckMaxBytes(value, 6);
_feeValue = value;
}
}
/// <summary>
/// 取值范围0-99999,赠送用户的话费,单位为分,由SP定义,特指由SP向用户发送广告时的赠送话费
/// </summary>
public string GivenValue
{
get { return _givenValue; }
set
{
SgipHelper.CheckMaxBytes(value, 6);
_givenValue = value;
}
}
/// <summary>
/// 代收费标志,0:应收;1:实收
/// </summary>
public byte AgentFlag
{
get
{
return _agentFlag;
}
set
{
_agentFlag = value;
}
}
/// <summary>
/// 引起MT消息的原因:0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息;2-非MO点播引起的MT消息;3-系统反馈引起的MT消息。
/// </summary>
public byte MorelatetoMTFlag
{
get
{
return _morelatetoMTFlag;
}
set
{
_morelatetoMTFlag = value;
}
}
/// <summary>
/// 优先级0-9从低到高,默认为0
/// </summary>
public byte Priority
{
get
{
return _priority;
}
set
{
_priority = value;
}
}
/// <summary>
/// 短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
/// </summary>
public string ExpireTime
{
get { return _expireTime; }
set
{
SgipHelper.CheckMaxBytes(value, 16);
_expireTime = value;
}
}
/// <summary>
/// 短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
/// </summary>
public string ScheduleTime
{
get { return _scheduleTime; }
set
{
SgipHelper.CheckMaxBytes(value, 16);
_scheduleTime = value;
}
}
/// <summary>
/// 状态报告标记 0-该条消息只有最后出错时要返回状态报告 1-该条消息无论最后是否成功都要返回状态报告 2-该条消息不需要返回状态报告 3-该条消息仅携带包月计费信息,不下发给用户,要返回状态报告其它-保留缺省设置为0
/// </summary>
public byte ReportFlag
{
get
{
return _reportFlag;
}
set
{
_reportFlag = value;
}
}
/// <summary>
/// GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
/// </summary>
public byte TP_pid
{
get
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -