📄 sgip12_protocol.pas
字号:
//------------------------------------------------------------------------------
//完成时间 : 2003-3-25
//修改时间 : 2003-3-25
//当前版本 : 3.1.01
//------------------------------------------------------------------------------
unit SGIP12_Protocol;
interface
uses
SysUtils;
const
SGIP_BIND = $1; //对客户端验证
SGIP_BIND_RESP = $80000001; //服务端返回验证请求
SGIP_UNBIND = $2; //断开连接
SGIP_UNBIND_RESP = $80000002; //返回断开连接状态
SGIP_SUBMIT = $3; //向SMG提交MT短消息
SGIP_SUBMIT_RESP = $80000003; //返回SP提交MT短消息状态
SGIP_DELIVER = $4; //SMG向SP发送一条MO短消息
SGIP_DELIVER_RESP = $80000004; //返回SMG状态
SGIP_REPORT = $5; //向SP发送一条先前的submit命令的当前状态
SGIP_REPORT_RESP = $80000005; //响应SMG状态
SGIP_ADDSP = $6;
SGIP_ADDSP_RESP = $80000006;
SGIP_MODIFYSP = $7;
SGIP_MODIFYSP_RESP = $80000007;
SGIP_DELETESP = $8;
SGIP_DELETESP_RESP = $80000008;
SGIP_QUERYROUTE = $9;
SGIP_QUERYROUTE_RESP = $80000009;
SGIP_ADDTELESEG = $a;
SGIP_ADDTELESEG_RESP = $8000000a;
SGIP_MODIFYTELESEG = $b;
SGIP_MODIFYTELESEG_RESP = $8000000b;
SGIP_DELETETELESEG = $c;
SGIP_DELETETELESEG_RESP = $8000000c;
SGIP_ADDSMG = $d;
SGIP_ADDSMG_RESP = $8000000d;
SGIP_MODIFYSMG = $e;
SGIP_MODIFYSMG_RESP = $0000000e;
SGIP_DELETESMG = $f;
SGIP_DELETESMG_RESP = $8000000f;
SGIP_CHECKUSER = $10;
SGIP_CHECKUSER_RESP = $80000010;
SGIP_USERRPT = $11;
SGIP_USERRPT_RESP = $80000011;
SGIP_TRACE = $1000;
SGIP_TRACE_RESP = $80001000;
type
TEMPTY = packed record //空纪录
end;
//消息头
TSGIPHead = packed record
MessageLength: LongWord; //消息的总长度(字节)
CommandId: LongWord; //命令ID
SNumber1, SNumber2, SNumber3: LongWord; //序列号
end;
//消息体
TBind = packed record //
LonginType: Byte;
LonginName: array[ 0..15 ] of Char;
LonginPass: array[ 0..15 ] of Char;
Reserve: array[ 0..7 ] of Char;
end;
TBind_Resp = packed record
Result: Byte;
Reserve: array[ 0..7 ] of Char;
end;
//
TUnbind = TEMPTY;
TUnbind_Resp = TEMPTY;
//
TelCount = packed record //手机号码
TelN: array[ 0..20 ] of Char;
end;
//数据库中取出的记录包
TSubmitRecord = packed record
F_RecordID :Integer;
F_SPNumber :String;
F_ChargeNumber :String;
F_UserNumber :String;
F_ServiceType :String;
F_FeeType :Integer;
F_FeeValue :String;
F_GivenValue :String;
F_AgentFlag :Integer;
F_MOrelatetoMTFlag :Integer;
F_Priority :Integer;
F_ExpireTime :String;
F_ScheduleTime :String;
F_ReportFlag :Integer;
F_TP_pid :Integer;
F_TP_udhi :Integer;
F_MessageCoding :Integer;
F_MessageType :Integer;
F_MessageContent:String;
F_LinkID : String;
end;
//单个手机号发送
TSubmit = packed record
SPNumber: array[ 0..20 ] of Char; //SP的接入号码
ChargeNumber: array[ 0..20 ] of Char; //付费号码,手机号码前加"86"国别标志;当且仅当群发且对用户收费时为空;如果为空,则该条短消息产生的费用由UserNumber代表的用户支付;如果为全零字符串"000000000000000000000",表示该条短消息产生的费用由SP支付。
UserCount: Byte; //1-100 //接收短消息的手机数量,取值范围1至100
UserNumber: array[ 0..20 ] of Char; //长度为UserCount 接收该短消息的手机号,该字段重复UserCount指定的次数,手机号码前加"86"国别标志
CorpID: array[ 0..4 ] of Char; //企业代码,取值范围0-99999
ServiceType: array[ 0..9 ] of Char; //业务代码,由SP定义
FeeType: Byte; //“短消息类型”为“发送”,对“计费用户号码”不计信息费,此类话单仅用于核减SP对称的信道费对“计费用户号码”免费对“计费用户号码”按条计信息费对“计费用户号码”按包月收取信息费对“计费用户号码”的收费是由SP实现
FeeValue: array[ 0..5 ] of Char; //取值范围0-99999,该条短消息的收费值,单位为分,由SP定义对于包月制收费的用户,该值为月租费的值
GivenValue: array[ 0..5 ] of Char; //取值范围0-99999,赠送用户的话费,单位为分,由SP定义,特指由SP向用户发送广告时的赠送话费
AgentFlag: Byte; //代收费标志,0:应收;1:实收
MOrelatetoMTFlag: Byte; //引起MT消息的原因0-MO点播引起的第一条MT消息;1-MO点播引起的非第一条MT消息;2-非MO点播引起的MT消息;3-系统反馈引起的MT消息。
Priority: Byte; //优先级0-9从低到高,默认为0
ExpireTime: array[ 0..15 ] of Char; //短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
ScheduleTime: array[ 0..15 ] of Char; //短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
ReportFlag: Byte; //状态报告标记0-该条消息只有最后出错时要返回状态报告1-该条消息无论最后是否成功都要返回状态报告2-该条消息不需要返回状态报告3-该条消息仅携带包月计费信息,不下发给用户,要返回状态报告
TP_pid: Byte; //GSM协议类型。详细解释请参考GSM03.40中的9.2.3.9
TP_udhi: Byte; // GSM协议类型。详细解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐
MessageCoding: Byte; //短消息的编码格式。0:纯ASCII字符串3:写卡操作4:二进制编码8:UCS2编码15: GBK编码其它参见GSM3.38第4节:SMS Data Coding Scheme
MessageType: Byte; // 信息类型:0-短消息信息其它:待定
MessageLength: LongWord; //短消息的长度
MessageContent: array[ 0..160 ] of Char; //长度为 MessageLength; 短消息的内容
Reserve: array[ 0..7 ] of Char; //保留,扩展用
end;
//多个手机号发送
TSubmitQF1 = packed record
SPNumber: array[ 0..20 ] of Char;
ChargeNumber: array[ 0..20 ] of Char;
UserCount: Byte; //1-100
end;
//UserNumber: array[ 0..20 ] of TelCount; //长度为UserCount
TSubmitQF2 = packed record
CorpID: array[ 0..4 ] of Char;
ServiceType: array[ 0..9 ] of Char;
FeeType: Byte;
FeeValue: array[ 0..5 ] of Char;
GivenValue: array[ 0..5 ] of Char;
AgentFlag: Byte;
MOrelatetoMTFlag: Byte;
Priority: Byte;
ExpireTime: array[ 0..15 ] of Char;
ScheduleTime: array[ 0..15 ] of Char;
ReportFlag: Byte;
TP_pid: Byte;
TP_udhi: Byte;
MessageCoding: Byte;
MessageType: Byte;
MessageLength: LongWord;
MessageContent: array[ 0..160 ] of Char; //长度为 MessageLength;
Reserve: array[ 0..7 ] of Char;
end;
TSubmit_Resp = packed record
Result: Byte;
Reserve: array[ 0..7 ] of Char;
end;
//
TDeliver = packed record
UserNumber: array[ 0..20 ] of Char;
SPNumber: array[ 0..20 ] of Char;
TP_pid: Byte;
TP_udhi: Byte;
MessageCoding: Byte;
MessageLength: LongWord;
MessageContent: array[ 0..254 ] of Char; //长度为 MessageLength;
Reserver: array[ 0..7 ] of Char;
end;
TDeliverHeaderSection = packed record
UserNumber: array[ 0..20 ] of Char;
SPNumber: array[ 0..20 ] of Char;
TP_pid: Byte;
TP_udhi: Byte;
MessageCoding: Byte;
MessageLength: LongWord;
end;
TDeliver_Resp = packed record
Result: Byte;
Reserve: array[ 0..7 ] of Char;
end;
//
TReport = packed record
SequenceNumber1, SequenceNumber2, SequenceNumber3: longword;
ReportType: Byte;
UserNumber: array[ 0..20 ] of Char;
State: Byte;
ErrorCode: Byte;
Reserve: array[ 0..7 ] of Char;
end;
TReport_Resp = packed record
Result: Byte;
Reserve: array[ 0..7 ] of Char;
end;
//--------------------------------------------------------------------------
TSGIPBind = packed record
Head : TSGIPHead;
Bind : TBind;
end;
TSGIPBind_Resp = packed record
Head : TSGIPHead;
Bind_Resp : TBind_Resp;
end;
TSGIPUnBind = packed record
Head : TSGIPHead;
UnBind : TUnBind;
end;
TSGIPUnBind_Resp = packed record
Head : TSGIPHead;
UnBind : TUnBind_Resp;
end;
TSGIPSubmit = packed record
Head : TSGIPHead;
Submit : TSubmit;
end;
TSGIPSubmit_Resp = packed record
Head : TSGIPHead;
Submit_Resp : TSubmit_Resp;
end;
TSGIPDeliver = packed record
Head : TSGIPHead;
Deliver : TDeliver;
end;
TSGIPDeliver_Resp = packed record
Head : TSGIPHead;
Deliver_Resp : TDeliver_Resp;
end;
TSGIPReport = packed record
Head : TSGIPHead;
Report : TReport;
end;
TSGIPReport_Resp = packed record
Head : TSGIPHead;
Report_Resp : TReport_Resp;
end;
function GetSGIP12ErrorInfo(ErrorCode:integer):String;
implementation
function GetSGIP12ErrorInfo(ErrorCode:integer):String;
begin
Result := '其它 其它错误码(待定义)';
Case ErrorCode of
0 : Result := '无错误,命令正确接收。';
1 : Result := '非法登录,如登录名、口令出错、登录名与口令不符等。';
2 : Result := '重复登录,如在同一TCP/IP连接中连续两次以上请求登录。';
3 : Result := '连接过多,指单个节点要求同时建立的连接数过多。';
4 : Result := '登录类型错,指bind命令中的logintype字段出错。';
5 : Result := '参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符。';
6 : Result := '非法手机号码,协议中所有手机号码字段出现非86130号码或手机号码前未加"86"时都应报错。';
7 : Result := '消息ID错。';
8 : Result := '信息长度错。';
9 : Result := '非法序列号,包括序列号重复、序列号格式错误等。';
10 : Result := '非法操作GNS。';
11 : Result := '节点忙,指本节点存储队列满或其他原因,暂时不能提供服务的情况。';
21 : Result := '目的地址不可达,指路由表存在路由且消息路由正确但被路由的节点暂时不能提供服务的情况。';
22 : Result := '路由错,指路由表存在路由但消息路由出错的情况,如转错SMG等。';
23 : Result := '路由不存在,指消息路由的节点在路由表中不存在。';
24 : Result := '计费号码无效,鉴权不成功时反馈的错误信息。';
25 : Result := '用户不能通信(如不在服务区、未开机等情况)。';
26 : Result := '手机内存不足。';
27 : Result := '手机不支持短消息。';
28 : Result := '手机接收短消息出现错误。';
29 : Result := '不知道的用户。';
30 : Result := '不提供此功能。';
31 : Result := '非法设备。';
32 : Result := '系统失败。';
33 : Result := '短信中心队列满。';
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -