请教SGIP1.2的问题!
cxty 2005-04-25 09:27:04 我用Delphi写SGIP1.2的SP端
为什么在模拟器中SMG登陆SP的时候Login_Type会等于52而不是2呢???
高手请指教~
一下是SGIP的协议部分请高手指教!谢谢!
unit SGIP_Protocol12;
interface
const
SGIP_BIND = $1;
SGIP_BIND_RESP = $80000001;
SGIP_UNBIND = $2;
SGIP_UNBIND_RESP = $80000002;
SGIP_SUBMIT = $3;
SGIP_SUBMIT_RESP = $80000003;
SGIP_DELIVER = $4;
SGIP_DELIVER_RESP = $80000004;
SGIP_REPORT = $5;
SGIP_REPORT_RESP = $80000005;
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;
MSG_LENGTH = 140; //短信内容长度
DestUsr_tl = 1; //接收信息的用户数量(小于100个用户)。
const
//返回值
ERR_Return = $00; //无错误,命令正确接收
ERR_BIND_Return = $01; //非法登录,如登录名、口令出错、登录名与口令不符等。
ERR_BIND_Repetition_Return = $02; //重复登录,如在同一TCP/IP连接中连续两次以上请求登录。
ERR_BIND_Link_Full_Return = $03; //连接过多,指单个节点要求同时建立的连接数过多。
ERR_BIND_Logintype_Return = $04; //登录类型错,指bind命令中的logintype字段出错。
ERR_Parameter_Format_Return = $05; //参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符。
ERR_Mobile_Return = $06; //非法手机号码,协议中所有手机号码字段出现非86130号码或手机号码前未加"86"时都应报错。
ERR_Msg_ID_Return = $07; //消息ID错
ERR_Msg_Len_Return = $08; //信息长度错
ERR_Number_Return = $09; //非法序列号,包括序列号重复、序列号格式错误等
ERR_GNS_Return = $10; //非法操作GNS
ERR_Server_Busy_Return = $11; //节点忙,指本节点存储队列满或其他原因,暂时不能提供服务的情况
ERR_Address_Arrive_Return = $21; //目的地址不可达,指路由表存在路由且消息路由正确但被路由的节点暂时不能提供服务的情况
ERR_Router_Return = $22; //路由错,指路由表存在路由但消息路由出错的情况,如转错SMG等
ERR_Router_Null_Return = $23; //路由不存在,指消息路由的节点在路由表中不存在
ERR_FeeNumber_Invalid = $24; //计费号码无效,鉴权不成功时反馈的错误信息
ERR_User_Invalid_Return = $25; //用户不能通信(如不在服务区、未开机等情况)
ERR_Phone_Memory_Invalid_Return = $26; //手机内存不足
ERR_Phone_Message_Invalid_Return = $27; //手机不支持短消息
ERR_Message_Receive_Return = $28; //手机接收短消息出现错误
ERR_User_Return = $29; //不知道的用户
ERR_Function_Return = $30; //不提供此功能
ERR_Equipment_Return = $31; //非法设备
ERR_System_Return = $32; //系统失败
ERR_Center_Full_Return = $33; //短信中心队列满
//其它 //其它错误码(待定义)
//Submit 返回值
ERR_SUBMIT_SUCCESS = $00; //成功
//Deliver 返回值
ERR_DELIVER_SUCCESS = $00; //成功
//Report 返回值
ERR_Report_SUCCESS = $00; //成功
//Unbind 返回值
ERR_Unbind_SUCCESS = $00; //成功
ERR_Unbind_FAULT = $01; //失败
type
TEmpty = record //空纪录
end;
//消息头
PSGIP_HEAD_tag = ^TSGIP_HEAD_tag;
TSGIP_HEAD_tag = packed record
Message_Length: LongWord; //消息总长度(含消息头及消息体)
Command_ID: LongWord; //命令或响应类型
SNumber1, SNumber2, SNumber3: longword; //序列号,消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同)
end;
////////////////////////////////////////////////////////////////////////////
// SP 请求连接到 SMG
PSGIP_Bind_tag = ^TSGIP_Bind_tag;
TSGIP_Bind_tag = packed record
Login_Type: Byte; //登录类型。1:SP向SMG建立的连接,用于发送命令 2:SMG向SP建立的连接,用于发送命令 3:SMG之间建立的连接,用于转发命令 4:SMG向GNS建立的连接,用于路由表的检索和维护 5:GNS向SMG建立的连接,用于路由表的更新 6:主备GNS之间建立的连接,用于主备路由表的一致性 11:SP与SMG以及SMG之间建立的测试连接,用于跟踪测试 其它:保留
Login_Name: array[0..15] of Char; //服务器端给客户端分配的登录名
Login_Passowrd: array[0..15] of Char; //服务器端和Login Name对应的密码
Reserve: array[0..7] of Char; //保留,扩展用
end;
////////////////////////////////////////////////////////////////////////////
// SMG 返回链接状态到 SP
PSGIP_Bind_RESP_tag = ^TSGIP_Bind_RESP_tag;
TSGIP_Bind_RESP_tag = packed record
Result: Byte; //Bind执行命令是否成功。0:执行成功 其它:错误码
Reserve: array[0..7] of Char; //保留,扩展用
end;
////////////////////////////////////////////////////////////////////////////
// SP 或 SMG 请求拆除连接
TSGIP_Unbind_tag = TEmpty;
TSGIP_Unbind_RESP_tag = TEmpty;
////////////////////////////////////////////////////////////////////////////
// SP 向 SMG 提交短信
PSGIP_SUBMIT_tag = ^TSGIP_SUBMIT_tag;
TSGIP_SUBMIT_tag = packed record
SPNumber: array[0..20] of Char; //SP的接入号码
ChargeNumber: array[0..20] of Char; //付费号码,手机号码前加"86"国别标志;当且仅当群发且对用户收费时为空;如果为空,则该条短消息产生的费用由UserNumber代表的用户支付;如果为全零字符串"000000000000000000000",表示该条短消息产生的费用由SP支付。
UserCount: Byte; //接收短消息的手机数量,取值范围1至100
UserNumber: array[0..20] of Char; //接收该短消息的手机号,该字段重复UserCount指定的次数,手机号码前加"86"国别标志
CorpId: array[0..4] of Char; //企业代码,取值范围0-99999
ServiceType: array[0..9] of Char; //业务代码,由SP定义
FeeType: Byte; //计费类型
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..16] of Char; //短消息寿命的终止时间,如果为空,表示使用短消息中心的缺省值。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
ScheduleTime: array[0..16] of Char; //短消息定时发送的时间,如果为空,表示立刻发送该短消息。时间内容为16个字符,格式为"yymmddhhmmsstnnp" ,其中"tnnp"取固定值"032+",即默认系统为北京时间
ReportFlag: Byte; //状态报告标记 0-该条消息只有最后出错时要返回状态报告 1-该条消息无论最后是否成功都要返回状态报告 2-该条消息不需要返回状态报告 3-该条消息仅携带包月计费信息,不下发给用户,要返回状态报告 其它-保留 缺省设置为0
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: Byte; //短消息的长度
MessageContent: array[0..MSG_LENGTH - 1] of Char; //短消息的内容
Reserve: array[0..7] of Char; //保留,扩展用
end;
pSGIP_SUBMIT_RESP_tag = ^tSGIP_SUBMIT_RESP_tag;
tSGIP_SUBMIT_RESP_tag = packed record
Result: Byte; //Submit命令是否成功接收。0:接收成功 其它:错误码
Reserve: array[0..7] of Char; //保留,扩展用
end;