suibi

本文档详细介绍了MML接口的使用,包括消息分类、消息格式、心跳消息的处理以及MML接口开发指导。营帐系统通过MML接口与MML Server进行交互,涉及登录、心跳、操作消息编码和解码过程。此外,还阐述了调试准备和调试方法。最后,讨论了操作员管理接口,如登录、注销和密码修改的MML命令。
摘要由CSDN通过智能技术生成

1 概述

关于本章

MML接口描述及消息描述。

1.1  接口描述

营帐系统与infoX AAAMML Server之间的接口。

1.2  消息描述

营帐系统与MML Server之间交互的消息描述。

1.1 接口描述

营帐系统与infoX AAAMML Server之间的接口。

infoX AAA与营帐系统在网络中的位置如1-1所示。

图1-1 infoX AAA与营帐系统的网络位置

 

infoX AAA中,WMAS为运营商提供一个Web方式的营业管理接口,运营商可以通过Web浏览器访问WMAS,实现业务的远程管理。MML ServerMan Machine Language Server)是业务管理的服务器端,与WMAS配合提供Web方式的业务管理功能。

MML Server对外提供MML接口和基于该接口的管理功能,使第三方(例如营帐系统)设备可以通过MML接口实现对用户数据的管理功能,如开户、销户和密码修改等。

营帐系统(Billing)作为第三方设备,是负责用户入网、变更、收费、帐务以及智能卡管理、积分管理、资源管理、系统管理、报表、联机指令等综合的营业系统。

营帐系统可以作为MML Server的客户端,通过MML消息与MML Server交互,管理用户数据。

为了更好的理解MML消息交互过程,需要预先了解以下概念:

l   连接

营帐系统与MML Server采用TCP/IP传输层协议创建连接,并进行信息交互。

l   会话

会话是营帐系统与MML Server之间的一个虚拟连接(逻辑连接)。

会话标识了操作员到MML Server的一次有效登录。操作员登录时,营帐系统和MML Server为该操作员建立一个会话;操作员退出登录后会话被释放。如果操作员在登录后连续空闲时间超过1个小时,则MML Server自动将会话释放。

在一条连接上可以有多个会话即同时有多个操作员登录MML Server,但同一连接上不能同时存在两个相同的会话ID

会话ID是营帐系统操作员登录到MML Server中的唯一标识,由营帐系统指定,取值为整数。

l   事务

事务是指为了完成某项任务而进行的一系列串行操作。事务中的各个操作依次执行以完成一个任务。

infoX AAA系统中,一个事务仅可包括一个操作,即一条MML命令。

1.2 消息描述

营帐系统与MML Server之间交互的消息描述。

1.2.1  消息分类

营帐系统与MML Server之间交互的消息分类,包括普通消息和心跳消息。

1.2.2  消息格式

营帐系统与MML Server之间交互的消息格式。

1.2.1 消息分类

营帐系统与MML Server之间交互的消息分类,包括普通消息和心跳消息。

营帐系统和MML Server之间通过MML消息进行交互,MML消息分为如下两类:

l   普通消息

普通消息用于传递操作及操作结果响应信息。

l   心跳消息

心跳消息用于对连接实体的连接状态进行确认。

infoX AAA支持两种消息格式:

l   AAA MML消息

l   IINIntegrated Intelligent NetworkMML消息

二者的区别仅在于消息开始标志和校验和。

infoX AAA支持两种格式的MML消息,旨在为开发者提供更多的选择。例如,在营帐系统既要对接infoX AAA又要对接IIN时,可以将营帐系统开发成仅支持IIN格式MML命令,仅需要在infoX AAA侧做相应的配置即可。

系统对于两种MML消息格式的支持可以通过在/export/home/ismpmml/sms_run/shell/env.rc中配置MMLMSGTYPE的值来实现。MMLMSGTYPE的值为0时,系统支持AAA格式的MML命令,值为1时,系统支持IIN格式的MML命令。

更改配置后需要执行以下命令使环境变量生效,并重启MML Server

<8 info131 :/export/home/ismpmml/sms_run/shell>source env.rc

<9 info131 :/export/home/ismpmml/sms_run/shell>restart.sh

1.2.2 消息格式

营帐系统与MML Server之间交互的消息格式。

普通消息

营帐系统与MML Server之间交互的普通消息格式。

普通消息报文用于营帐系统和MML Server之间的信息交互,AAA格式和IIN格式的普通消息报文分别如1-2所示和1-3所示。

图1-2 普通消息报文(AAA格式)示意图

 

图1-3 普通消息报文(IIN格式)示意图

 

一条完整的普通消息报文=消息开始标志(4B)+消息长度(4B)+消息头(20B)+会话头(18B)+事务头(18B)+操作信息(N×4B)+校验和(4B8B

l   消息长度=从消息头到操作信息结束(包括填充的空格)的长度,16进制字符(0-F)表示的16位整数(4B),取值范围为5665000(10进制)

l   消息头=版本号(4B)+终端标识(8B)+服务名(8B)

l   会话头=会话ID(8B)+会话控制字(6B)+会话保留字(4B)

l   事务头=事务ID(8B)+事务控制字(6B)+事务保留字(4B)

l   操作信息=命令码[:命令参数];命令码[:命令参数];……;

l   校验和=对“消息头+会话头+事务头+操作信息”组成的字符数组按32位分段后异或所得的结果再取反得到的值

具体格式的说明请参见1-1

表1-1 普通报文消息格式说明表

域名称

说明

取值范围

消息开始标志

消息开始的标识,底层通讯用,对于上层透明。

4个字节的字符数组,

采用AAA格式时固定为“/x1C/x1D/x1E/x1F”

采用IIN格式时固定为“/x60/x53/x43/x60”

消息长度

从消息头到操作信息结束(包括填充的空格)的长度,底层通讯用,对于上层透明。16进制字符(0-F)表示的16位整数(4B),即先将16位二进制数表示成416进制数,再对这4位数字(0-F)依次进行ASCII编码。例如,10进制数88转成16进制为0058,再ASCII编码得“/x30/x30/x35/x38”

取值范围(10进制):5665000

版本号

MML版本号。

固定为“1.00”

终端标识

当前登录终端的标识。

固定为“internal”

服务名

服务的名字。操作员登录和注销的服务名为SRVM;普通MML命令的服务名为命令的中间部分,例如,MML命令“ADD C280 ACCOUNT”的服务名为C280

长度为8的字符数组。如果服务名不足8个字符,编码时,将用空格(/x20)补齐。

会话ID

会话ID是营帐操作员登录到MML Server中的唯一标识,由营帐系统指定。会话ID从操作员登录到退出保持相同值,如果在一个连接上同时有多个操作员登录则必须使用不同的会话ID16进制字符(0-F)表示的32位整数(8B),即先将32位二进制数表示成816进制数,再对这8位数字(0-F)依次进行ASCII编码。例如,10进制数88转成16进制为00000058,再ASCII编码得“/x30/x30/x30/x30/x30/x30/x35/x38”

取值范围(10进制):大于等于1且小于232的整数。

会话控制字

会话控制字包括:DLGLGNDLGCONDLGEND

说明

操作员登录MML Server时客户端发DLGLGN,在进行其它操作时,客户端均发DLGCON

操作员退出时,MMLServer给营帐的返回消息中会话控制字为DLGEND,表示会话的结束。

DLGLGN

DLGCON

DLGEND

会话保留字

保留,待扩展。

全部填0/x30)。

事务ID

事务ID由客户端产生。如果没有并行的操作,所有的事务ID都可以填1。如果需要使用并行操作,则客户端必须保证当前并行的所有操作中事务ID是不同的。

长度为8个字节的整数,用16进制字符表示。

事务控制字

事务控制字包括:TXBEGTXCONTXEND

说明

由营帐系统发起的操作,其事务控制字填写TXBEG

当一条MML命令的消息结束时,MML Server后返回给营帐系统的事务控制字为TXEND,表示一条事务结束。

TXBEG

TXCON

TXEND

事务保留字

保留,待扩展。

全部填0/x30)。

操作信息

格式:命令码[:命令参数]

一条MML命令。操作系统如果长度不足4字节需要在后面补空格(/x20)。

校验和

AAA格式的校验码是对消息头+会话头+事务头+操作信息组成的字符数组按32位分段后异或所得的结果再取反得到的值,底层通讯用,对于上层透明。IIN格式的校验码则是在AAA格式的校验码基础上按每个字节的高4位低4位分别扩展成一个字节的方式获得。

说明

校验和的具体计算方法请见附录A校验和源码

AAA格式的消息中是长度为4个字节的字符数组。

IIN格式的消息中是长度为8个字节的字符数组。

 

心跳消息

营帐系统与MML Server之间交互的心跳消息格式。

心跳消息报文用于监测营帐系统到MML Server之间的通信是否处于正常状态,AAA格式的心跳消息和IIN格式的心跳消息分别如1-41-5所示。

营帐系统与MML Server之间需定时(系统规定为60秒)相互发送心跳消息,如果连续10次接收不到对方发送的心跳消息响应,就认定营帐系统与MML Server的连接失败。

图1-4 心跳消息报文(AAA格式)示意图

 

图1-5 心跳消息报文(IIN格式)示意图

 

一条完整的心跳消息报文=消息开始标志(4B)+消息长度(4B)+内容(“HBHB”)+校验和

具体的格式说明请参见1-2

表1-2 心跳消息报文格式

域名称

说明

取值范围

消息开始标志

消息开始的标识,底层通讯用,对于上层透明。

采用AAA格式时固定为“/x1C/x1D/x1E/x1F”

采用IIN格式时固定为“/x60/x53/x43/x60”

消息长度

心跳消息内容(HBHB)的长度,底层通讯用,对于上层透明。16进制字符(0-F)表示的16位整数(4B),即先将16位二进制数表示成416进制数,再对这4位数字(0-F)依次进行ASCII编码。例如,10进制数4转成16进制为0004,再ASCII编码得“/x30/x30/x30/x34”

因为心跳消息内容固定,所以消息长度也是固定的。固定为4/x30/x30/x30/x34)。

内容

心跳消息传递的内容。

固定为“HBHB”/x48/x42/x48/x42)。

校验和

内容(HBHB)按位取反得到的值。IIN格式的校验码则是在AAA格式的校验码基础上按每个字节的高4位低4位分别扩展成一个字节的方式获得。

AAA格式的心跳消息中是“/xB7/xBD/xB7/xBD”

IIN格式的心跳消息中是“/x0B/x07/x0B/x0D/x0B/x07/x0B/x0D”

 


2 MML接口开发指导

关于本章

MML接口的客户端开发实例及客户端与MML Server之间对接调试指导。

2.1  开发概述

关于MML接口客户端的开发。

2.2  开发实例

MML接口客户端开发实例。

2.3  对接调试

MML接口的客户端与MML Server对接调试指导。

2.4  FAQ

常见错误的现象描述及分析处理。

2.1 开发概述

关于MML接口客户端的开发。

开发目的

实现MML接口客户端即营帐系统与MML Server之间的通信。

开发前提

在开发MML接口客户端前,需要了解MML Server所在服务器的IP地址和端口号。默认情况下MML Server的端口号为19999

营帐系统在MML Server处对应一个超级管理员,管理员的登录名为“billopr”“cdmaopr”“wimaxopr”“wcdmaadm”,初始密码为TELLIN

工作流程

营帐系统的操作流程如2-1所示。

图2-1 营帐系统的操作流程图

 

具体操作流程如下所示。

1.         营帐系统向MML Server发送login消息请求登录。

2.         MML Server接收login消息,对营帐系统进行身份验证,并返回login ACK消息。

3.         如果营帐系统通过身份验证,则可以通过发送operation消息,向MML Server发送相应的操作请求。

4.         MML Server根据营帐系统发送的消息执行内部操作,操作完成后返回operation ACK消息。

5.         营帐系统执行发送logout消息请求退出。

6.         MML Server接收logout消息,并返回logout ACK消息。

operation消息是营帐系统发起的操作消息,由营帐系统指定消息的数量,可以重复发送操作请求。

如果操作员在登录后连续空闲时间超过1个小时,则MML Server自动将会话释放。

2.2 开发实例

MML接口客户端开发实例。

操作步骤

                                步骤 1     连接到MML Server

营帐系统建立MML客户端到MML Server服务端口的Socket连接。

代码如下所示(以下为C语言代码,仅供参考)。

//建立Socket连接的函数。
 
void connectMML(Int& m_sockfd, Int& m_ip, Int& m_port)
{
struct sockaddr_in m_server_addr;
Int m_result;
memset((char*)&m_server_addr,'/0',(int)sizeof(m_server_addr));
m_server_addr.sin_family = AF_INET;
m_server_addr.sin_addr.s_addr =  m_ip;
m_server_addr.sin_port = htons( m_port );
m_sockfd = socket( AF_INET, SOCK_STREAM, 0 );
if (0 >= m_sockfd)
{
printf("socket creat failed/n");
exit(0);
}
//Socket
的内部函数,建立客户端到服务器的连接
m_result = connect(m_sockfd, (struct sockaddr * ) & m_server_addr
, sizeof( m_server_addr ));
if (0 != m_result)
{
printf("connect server failed/n");
exit(0);
}
}

                                步骤 2     编码。

MML客户端通过编码过程将需要发送的内容封装成一个符合MML接口规范的消息。

MML客户端需要支持编码普通消息和心跳消息。

编码的参考代码如下所示。

//宏定义
 
#define  MAX_LEN_VERSION        4 
#define  MAX_LEN_TERMINAL       8 
#define  MAX_LEN_SERVNAME       8  
#define MAX_LEN_DLGCTRL         6 
#define MAX_LEN_TXID             8 
#define MAX_LEN_TXCTRL          6
#define MAX_LEN_TXRSVD        4
#define MAX_MSG_LEN           65536
#define MAX_HEAD_LEN          56
#define MSG_STARTTAG_LEN     4
#define MSG_INFOLEN_LEN      4 
#define MSG_CHKSUM_LEN       4
#define MSG_COMM_LEN         12
#define MAX_HB_MSG_LEN       4 
#define MAX_HB_CONTENT_LEN  4
#define MAX_HB_CHCKSUM       4
#define HB_MSG_LEN            16
#define MAX_LEN_DLGID         8
#define MAX_LEN_DLGRSVD       4
#define MSG_STARTTAG        "/x1C/x1D/x1E/x1F"
#define MSG_VERSION        "1.00"
#define MSG_TERMINAL      "internal"
#define MSG_TXRSVD      "    "
#define MSG_DLGRSVD      "    "
#define HB_CONTENT "HBHB"
//Encode
函数
EnRet Encode(MsgInfo & sendMsg,char * sendBuff, int & sendLen, int send_type)
{
//
此处省略异常处理过程
......
//
如果是心跳消息,编码方式如下
if (TYPE_OF_HB_MSG == send_type)
{
int temp_len;
char * p_num, hb_checksum [MAX_HB_CHCKSUM];
temp_len = 0;
strncpy(sendBuff+ temp_len,MSG_STARTTAG, MSG_STARTTAG_LEN);
temp_len += MSG_STARTTAG_LEN;
p_num = Int2ToHex(HB_MSG_LEN);
strncpy(sendBuff + temp_len, p_num, MAX_HB_MSG_LEN);
temp_len += MAX_HB_MSG_LEN;
strncpy (sendBuff + temp_len, HB_CONTENT, MAX_HB_CONTENT_LEN);
temp_len = MSG_STARTTAG_LEN + MAX_HB_MSG_LEN;
GetChkSum(MAX_HB_MSG_LEN,sendBuff + temp_len,hb_checksum);
temp_len = HB_MSG_LEN - MAX_HB_CHCKSUM;
strncpy(sendBuff + temp_len, hb_checksum, MAX_HB_CHCKSUM);
printf("/ncode HB secceed!/n%s",sendBuff);
return Success;
}
//
如果是普通消息,编码如下
Int msglen,cmdlen,len;
char *p,chksum[MSG_CHKSUM_LEN];
char *pTx[ ] = { "TXBEG" , "TXCON"  , "TXCAN" , "TXEND" };
char *pDlg[ ] = { "DLGLGN" , "DLGBEG"  , "DLGCON" , "DLGEND" };
//
打印发送的消息
PrintMsg(sendMsg);
//
计算消息长度
cmdlen=strlen(sendMsg.cmd);
msglen=MAX_HEAD_LEN+cmdlen;
len=(4 - msglen % 4);
msglen+=len;
sendLen=msglen+MSG_COMM_LEN;
memset(sendBuff,' ',MAX_MSG_LEN);
len=0;
//
拼装消息开始标志
 
strncpy(sendBuff+len, MSG_STARTTAG, MSG_STARTTAG_LEN);
len+=MSG_STARTTAG_LEN;
//
拼装消息长度
p=Int2ToHex(msglen);
strncpy(sendBuff+len, p, MSG_INFOLEN_LEN);
len+=MSG_INFOLEN_LEN;
//
拼装消息头
 
strncpy(sendBuff+len, MSG_VERSION, MAX_LEN_VERSION);
len+=MAX_LEN_VERSION;
strncpy(sendBuff+len, MSG_TERMINAL, MAX_LEN_TERMINAL);
len+=MAX_LEN_TERMINAL;
strncpy(sendBuff+len,sendMsg.service, strlen(sendMsg.service));
len+=MAX_LEN_SERVNAME;
//
拼装会话头
 
p=Int4ToHex(sendMsg.snLogin);
strncpy(sendBuff+len, p, MAX_LEN_DLGID);
len+=MAX_LEN_DLGID;
strncpy(sendBuff+len,pDlg[sendMsg.dlgCtrl],strlen(pDlg[sendMsg.dlgCtrl]));
len+=MAX_LEN_DLGCTRL;
strncpy(sendBuff+len, MSG_DLGRSVD, MAX_LEN_DLGRSVD);
len+=MAX_LEN_DLGRSVD;
//
拼装事务头
 
p=Int4ToHex(sendMsg.sequence);
strncpy(sendBuff+len, p, MAX_LEN_TXID);
len+=MAX_LEN_TXID;
strncpy(sendBuff+len,pTx[sendMsg.txCtrl],strlen(pTx[sendMsg
.txCtrl]));
len+=MAX_LEN_TXCTRL;
strncpy(sendBuff+len, MSG_TXRSVD, MAX_LEN_TXRSVD);
len+=MAX_LEN_TXRSVD;
//
拼装操作信息
strncpy(sendBuff+len, sendMsg.cmd, cmdlen);
//
拼装校验和
 
len=MSG_STARTTAG_LEN + MSG_INFOLEN_LEN;
GetChkSum(msglen,sendBuff+len,chksum);
len=sendLen-MSG_CHKSUM_LEN;
strncpy(sendBuff+len, chksum, MSG_CHKSUM_LEN);
return Success;
}

GetChkSum()函数的具体内容请参见“附录  A”。

                                步骤 3     解码。

客户端通过解码过程从MML Server接口返回的消息中获取具体内容。

客户端需要支持解码普通消息和心跳消息。

解码的参考代码如下所示。

//Decode 函数
EnRet Decode(MsgInfo &recMsg,char * recBuff,Int & recLen, int recv_type)
{
//
此处省略异常处理过程
......
int msglen,len,tmpInt;
char chksum[MSG_CHKSUM_LEN],tmpStr[MAX_MSG_LEN];
char *pTx[ ] = { "TXBEG" , "TXCON"  , "TXCAN" , "TXEND" };
char *pDlg[ ] = { "DLGLGN" , "DLGBEG"  , "DLGCON" , "DLGEND" };
len=0;
//
解码消息开始标志
 
strncpy(tmpStr, recBuff+len, MSG_STARTTAG_LEN);
tmpStr[MSG_STARTTAG_LEN]='/0';
len+=MSG_STARTTAG_LEN;
if(strncmp(tmpStr,MSG_STARTTAG,MSG_STARTTAG_LEN) != 0)
{
printf("Msg head error.");
return NotCMD;
}
//
解码消息长度
strncpy(tmpStr, recBuff+len, MSG_INFOLEN_LEN);
tmpStr[MSG_INFOLEN_LEN]='/0';
len+=MSG_INFOLEN_LEN;
HexToInt2(tmpStr,tmpInt);
msglen=tmpInt;
if ( recv_type == TYPE_OF_CMD_MSG )
{
if(msglen+MSG_COMM_LEN != recLen)
{
printf("Msg length error.");
return Failure;
}
}
//
如果是心跳消息,解码方式如下
if ( recv_type == TYPE_OF_HB_MSG )
{
tmpInt=HB_MSG_LEN;
char HBtempStr[HB_MSG_LEN],HBStr[HB_MSG_LEN];
strncpy(HBtempStr, recBuff, tmpInt);
HBtempStr[tmpInt]='/0';
StrTrim(HBtempStr);
strcpy(HBStr,"HBHB");
for (int i=0; i<4; i++)
{
if( recBuff[MSG_STARTTAG_LEN+MAX_HB_MSG_LEN+i]!=HBStr[i])
{
return Failure;
}
}
return Success;
}
//
如果是普通消息,解码如下
//
解码消息头
 
strncpy(tmpStr, recBuff+len, MAX_LEN_VERSION);
tmpStr[MAX_LEN_VERSION]='/0';
len+=MAX_LEN_VERSION;
StrTrim(tmpStr);
strncpy(tmpStr, recBuff+len, MAX_LEN_TERMINAL);
tmpStr[MAX_LEN_TERMINAL]='/0';
len+=MAX_LEN_TERMINAL;
StrTrim(tmpStr);
strncpy(tmpStr, recBuff+len, MAX_LEN_SERVNAME);
tmpStr[MAX_LEN_SERVNAME]='/0';
len+=MAX_LEN_SERVNAME;
StrTrim(tmpStr);
strcpy(recMsg.service,tmpStr);
//
解码会话头
 
strncpy(tmpStr, recBuff+len, MAX_LEN_DLGID);
tmpStr[MAX_LEN_DLGID]='/0';
len+=MAX_LEN_DLGID;
HexToInt4(tmpStr,tmpInt);
recMsg.snLogin=tmpInt;
strncpy(tmpStr, recBuff+len, MAX_LEN_DLGCTRL);
tmpStr[MAX_LEN_DLGCTRL]='/0';
len+=MAX_LEN_DLGCTRL;
StrTrim(tmpStr);
for(tmpInt=0;tmpInt<4;tmpInt++) if(strcmp(pDlg[tmpInt],tmpStr)==0) break;
recMsg.dlgCtrl=tmpInt;
strncpy(tmpStr, recBuff+len, MAX_LEN_DLGRSVD);
tmpStr[MAX_LEN_DLGRSVD]='/0';
len+=MAX_LEN_DLGRSVD;
//
解码事务头
 
strncpy(tmpStr, recBuff+len, MAX_LEN_TXID);
tmpStr[MAX_LEN_TXID]='/0';
len+=MAX_LEN_TXID;
HexToInt4(tmpStr,tmpInt);
recMsg.sequence=tmpInt;
strncpy(tmpStr, recBuff+len, MAX_LEN_TXCTRL);
tmpStr[MAX_LEN_TXCTRL]='/0';
len+=MAX_LEN_TXCTRL;
StrTrim(tmpStr);
for(tmpInt=0;tmpInt<4;tmpInt++) if(strcmp(pTx[tmpInt],tmpStr)==0) break;
recMsg.txCtrl=tmpInt;
strncpy(tmpStr, recBuff+len, MAX_LEN_TXRSVD);
tmpStr[MAX_LEN_TXRSVD]='/0';
len+=MAX_LEN_TXRSVD;
//
解码操作信息
tmpInt=msglen-(MAX_HEAD_LEN);
strncpy(tmpStr, recBuff+len, tmpInt);
tmpStr[tmpInt]='/0';
len+=tmpInt;
StrTrim(tmpStr);
strcpy(recMsg.cmd, tmpStr);
//
解码校验和
 
strncpy(tmpStr, recBuff+len, MSG_CHKSUM_LEN);
tmpStr[MSG_CHKSUM_LEN]='/0';
len=MSG_STARTTAG_LEN + MSG_INFOLEN_LEN;
GetChkSum(msglen,recBuff+len,chksum);
if(strncmp(tmpStr,chksum,MSG_CHKSUM_LEN) != 0)
{
printf("Msg chksum error.");
return Failure;
}
//
解码完毕,打印消息
 
PrintMsg(recMsg);
return Success;
}

                                步骤 4     发送消息/接收系统返回响应。

客户端发送消息到MML Server,并接收MML Server的返回结果。

参考代码如下所示。

//此处省略与发送消息和接收无关的内容
 
......
//
发送消息
 
send(m_sockfd,sendBuff,sendLen,0);
outp_strm(sendBuff);
//
接收消息
while(1)
{
recLen=recv( m_sockfd, recBuff, sizeof(recBuff),0 );
if(recLen>0)
{
printf("/nreceive login ack message.../n/n");
outp_strm(recBuff);
//
解码消息并获取相应的操作结果
Decode(recMsg,recBuff,recLen,TYPE_OF_CMD_MSG);
break;
}
}

营帐系统与MML Server之间需定时(系统规定为60秒)相互发送心跳消息,如果连续10次接收不到对方发送的心跳消息,就认定营帐系统与MML Server断连,需要释放原来的连接,并尝试重新连接。

----结束

2.3 对接调试

MML接口的客户端与MML Server对接调试指导。

2.3.1  调试准备

MML接口的客户端与MML Server之间对接调试前的配置。

2.3.2  调试方法

MML接口的客户端与MML Server之间对接调试的方法。

2.3.3  调试过程

MML接口客户端与MML Server之间对接调试的过程指导。

2.3.1 调试准备

MML接口的客户端与MML Server之间对接调试前的配置。

背景信息

infoX AAAMML Server默认不接受外部客户端连接,需要执行如下操作,注册客户端IP

操作步骤

                                步骤 1     修改配置文件。

1.         ismpmml用户登录infoX AAA服务器。

2.         进入目录/export/home/ismpmml/sms_run/cfg

3.         修改配置文件caa.cfg

#whether or not limit client ip,1 is to limit,0 is not limit 
LIMITIP=1 
#Max access number
MAXACCESSNUM=100
[WWW SERVER IP]
#authorized IP address list
IP=127.0.0.1
IP=info131
IP=       //
将此IP设置为需要与MML Server连接的客户端的IP地址。

 

如果LIMITIP设置为0,则不限制连接MML Server的客户端的IP地址。

                                步骤 2     重启MML Server

在单机环境下,执行如下命令,重启MML Server

restart.sh

在双机环境下,如果双机管理软件为SUN Cluster,重启过程如下。

1.         root用户登录ismswork应用所在的双机节点,默认为主节点itellin1

2.         执行如下命令停止应用。

scswitch -n -j app_isms

3.         执行如下命令启动应用。

scswitch -e -j app_isms

在双机环境下,如果双机管理软件为VCS,重启过程如下。

1.         root用户登录ismswork应用所在的双机节点,默认为主节点itellin1

2.         执行如下命令停止应用。

hares -offline app_isms -sys 主机名

3.         执行如下命令启动应用。

hares -online app_isms -sys 主机名

----结束

2.3.2 调试方法

MML接口的客户端与MML Server之间对接调试的方法。

在调试MML接口的客户端程序时,主要使用“snoop”命令进行抓包,并对抓包结果进行分析。

例如:snoop命令格式为snoop -d hme0 -t a -x 54 port 19999。其中“hme0”为网卡名,“19999”为端口号即在该端口进行抓包操作。

如果网卡名未知,可通过“ifconfig -a”命令查看网卡信息。

snoopSolaris的内部命令,该命令的具体使用方法请参考相关的Solaris资料。

当服务器操作系统为Suse时,使用“tcpdump”进行抓包,命令的具体使用方法请参见相关Suse资料。

2.3.3 调试过程

MML接口客户端与MML Server之间对接调试的过程指导。

背景信息

通过对抓包结果的分析,达到判断调试过程是否成功的目的。

调试过程分以下两种情况:

l   如果某一操作的抓包结果不存在,则表明营帐系统没有将命令发送到MML Server或营帐系统与MML Server之间没有连接。

l   如果某一操作的抓包结果存在,则查看该抓包结果中的MML命令是否正确,由此判断该操作发送是否正确执行。

下面以一个营帐操作员登录操作为例介绍如何进行抓包分析。

操作步骤

                                步骤 1     root用户登录MML Server所在服务器。

                                步骤 2     执行如下命令获取抓包信息。

snoop -d hme0 -t a -x 54 port 19999

抓包结果如下所示。

 0: 1c1d 1e1f 3030 3730 312e 3030 696e 7465    ....00701.00inte
      16: 726e 616c 5352 564d 2020 2020 3030 3030    rnalSRVM    0000
      32: 3030 3037 444c 474c 474e 3030 3030 3030    0007DLGLGN000000
      48: 3030 3030 3033 5458 4245 4720 3030 3030    000003TXBEG 0000
      64: 4c4f 4749 4e3a 5553 4552 3d63 646d 6161    LOGIN:USER=cdmaa
      80: 646d 2c50 5357 443d 3443 4337 4232 3041    dm,PSWD=4CC7B20A
      96: 4341 3439 4144 3535 3832 3141 3243 3537    CA49AD55821A2C57
     112: 3031 3141 4146 3335 fce5 aa95                011AAF35..?
 
       0: 1c1d 1e1f 3031 6163 312e 3030 696e 7465    ....01ac1.00inte
      16: 726e 616c 2020 4143 4b4c 474e 3030 3030    rnal  ACKLGN0000
      32: 3030 3037 444c 4743 4f4e 3030 3030 3030    0007DLGCON000000
      48: 3030 3030 3033 2054 5845 4e44 3030 3030    000003 TXEND0000
      64: 4143 4b3a 4c4f 4749 4e3a 2052 4554 4e3d    ACK:LOGIN: RETN=
      80: 302c 2044 4553 433d 5375 6363 6573 732c    0, DESC=Success,
      96: 2041 5454 523d 524f 4c45 4944 2026 2052     ATTR=ROLEID & R
     112: 4f4c 454e 414d 4520 2620 4352 4541 544f    OLENAME & CREATO
     128: 5220 2620 4147 454e 5449 4420 2620 4147    R & AGENTID & AG
     144: 454e 544e 414d 4520 2620 5345 5256 4b45    ENTNAME & SERVKE
     160: 5920 2620 5553 4552 2026 204c 564c 4944    Y & USER & LVLID
     176: 2026 2053 4350 4944 2026 2050 5357 4445     & SCPID & PSWDE
     192: 5850 4420 2620 4c41 5354 4c4f 4749 4e54    XPD & LASTLOGINT
     208: 494d 4520 2620 5041 5353 574f 5244 4849    IME & PASSWORDHI
     224: 5354 4f52 5920 2620 4348 4750 5357 4454    STORY & CHGPSWDT
     240: 494d 452c 2052 4553 554c 543d 2231 347c    IME, RESULT="14|
     256: 4344 4d41 2053 7570 6572 204f 7065 7261    CDMA Super Opera
     272: 746f 7220 526f 6c65 7c73 6572 7661 646d    tor Role|servadm
     288: 7c32 3430 3030 307c 4344 4d41 2041 6765    |240000|CDMA Age
     304: 6e74 7c32 3730 7c63 646d 6161 646d 7c31    nt|270|cdmaadm|1
     320: 347c 3130 307c 3230 3038 3032 3234 7c32    4|100|20080224|2
     336: 3030 3731 3232 3331 3831 3334 387c 6561    0071223181348|ea
     352: 6361 3166 3638 6338 3838 3263 3464 3735    ca1f68c8882c4d75
     368: 3233 6366 3261 6436 3535 3531 6166 2061    23cf2ad65551af a
     384: 3435 3531 3631 3236 3366 6562 6333 6330    455161263febc3c0
     400: 3836 3536 6365 3631 6336 6436 3631 397c    8656ce61c6d6619|
     416: 3230 3037 3131 3236 3136 3035 3034 222c    20071126160504",
     432: 3b20 2020 e0d6 8fd0                        ;   ....

抓包结果的分析及说明如下:

l   1段中第1行的加粗字节“1c1d 1e1f”,表示营帐操作员登录消息的消息开始标识。

l   1段中58行的加粗部分表示营帐操作员登录操作的MML命令。

l   2段中第1行的加粗字节“1c1d 1e1f”,表示营帐操作员登录响应消息的消息开始标识。

l   2段中的56行的加粗部分,为MML Server对营帐系统的登录消息结果,由此可知营帐操作员登录成功。

其它标识的具体含义请参考1-1

----结束

2.4 FAQ

常见错误的现象描述及分析处理。

2.4.1  连接MML Server失败

2.4.2  MML Server返回“语法错误或命令码非法”错误

2.4.1 连接MML Server失败

现象描述

营帐系统作为客户端与MML Server对接调试过程中,连接MML Server失败。

分析处理

检查MML Server的配置文件caa.cfg中的IP地址。如果IP地址配置错误,修改配置文件并重启MML Server应用所在的双机,然后重新连接。

2.4.2 MML Server返回“语法错误或命令码非法”错误

现象描述

营帐系统与MML Server调试过程中,MML Server返回“语法错误或命令码非法”错误。

分析处理

l   命令码填充错误,指定的服务进程上没有此MML命令的操作。

l   MML命令语法错误,请核对MML命令是否正确。


3 操作员管理接口

关于本章

操作员管理相关MML命令。

3.1  功能简介

操作员管理MML命令功能。

3.2  MML命令参考

操作员管理命令的名称、功能、格式、实例。

3.1 功能简介

操作员管理MML命令功能。

操作员管理的MML接口是infoX AAA系统对外开放的用于管理操作员的接口,通过该接口营帐操作员可以进行登录、注销和修改密码操作。

在操作员管理MML接口中,修改密码命令和修改密码ACK命令的服务名为OPRM,其它命令无服务名。

l  ACK命令是infoX AAA系统对普通MML命令执行后的响应命令,例如:登录ACK命令,即infoX AAA系统对登录命令的响应命令。

l  操作员密码传输之前经过AES算法加密(存储之前先AES解密,再使用MD5算法加密)。AES加密算法原理请参见“附录 B加密简介”。

3.2 MML命令参考

操作员管理命令的名称、功能、格式、实例。

3.2.1  登录命令

3.2.2  登录ACK命令

3.2.3  注销命令

3.2.4  注销ACK命令

3.2.5  修改密码命令

3.2.6  修改密码ACK命令

3.2.1 登录命令

名称

LOGIN

功能

该命令用于操作员登录infoX AAA系统。

参数说明

登录命令的参数说明3-1所示。

表3-1 登录命令参数说明

参数

说明

是否可省略

是否可为空

取值范围

USER

操作员登录名。

No

No

116个字节的字符串,可以包括字母、数字、点号、减号、下划线,首字符必须为字母。

PSWD

操作员登录密码。

No

No

系统配置为操作员密码不加密时,操作员密码为616个字节的字符串,可以包括字母、数字、点号、减号、下划线。

系统配置为操作员密码加密时,操作员密码为3264个字节的16进制的大写字符串(加密后的密码)。

 

参考实例

下面以一个实例介绍登录命令的使用方法。

l   场景

       系统配置为操作员密码不加密。

       营帐操作员名称为billoprcdmaoprwimaxoprwcdmaadm

       营帐操作员登录密码为TELLIN

l   命令

login:user="billoprcdmaoprwimaxoprwcdmaadm",pswd="TELLIN"

3.2.2 登录ACK命令

SMP 系统结构................................................................................................................................1-1 关于本章...........................................................................................................................................................1-1 1.1 SMP 模块划分...........................................................................................................................................1-2 1.2 SMP 内MML 操作请求的消息通道.......................................................................................................1-4 1.3 客户端与SMP 的联系..............................................................................................................................1-5 2 SMP MML 消息协议.......................................................................................................................2-1 关于本章...........................................................................................................................................................2-1 2.1 概述............................................................................................................................................................2-2 2.2 登录............................................................................................................................................................2-3 2.2.1 登录请求MML...............................................................................................................................2-3 2.2.2 登录响应MML...............................................................................................................................2-4 2.3 操作............................................................................................................................................................2-4 2.3.1 操作请求MML...............................................................................................................................2-4 2.3.2 操作响应MML...............................................................................................................................2-5 2.4 注销............................................................................................................................................................2-6 2.4.1 注销请求MML...............................................................................................................................2-6 2.4.2 注销响应MML...............................................................................................................................2-7 3 SMP 客户端设计样例.......................................................................................................................3-1 关于本章...........................................................................................................................................................3-1 3.1 Level 1 设计描述.......................................................................................................................................3-2 3.1.1 分解描述..........................................................................................................................................3-2 3.1.2 依赖性描述......................................................................................................................................3-3 3.1.3 接口描述..........................................................................................................................................3-4 3.2 Level 2 设计描述.......................................................................................................................................3-5 3.2.1 分解描述..........................................................................................................................................3-5 3.2.2 依赖性描述......................................................................................................................................3-8 3.2.3 接口描述........................................................................................................................................3-10 3.3 设计流程..................................................................................................................................................3-16 3.3.1 API 设计流程.................................................................................................................................3-16 3.3.2 客户端程序操作流程....................................................................................................................3-19 4 SMP 日志......................................................................................................................................4-1 关于本章...........................................................................................................................................................4-1 4.1 $SMS_DIR/log/runlog 目录下运行日志..................................................................................................4-2 4.1.1 基本常识..........................................................................................................................................4-2 4.1.2 日志格式..........................................................................................................................................4-2 4.2 $SMS_DIR/log 目录下kernel 进程的运行日志.....................................................................................4-4 4.2.1 基本常识..........................................................................................................................................4-4 4.2.2 日志格式..........................................................................................................................................4-4 5 故障处理........................................................................................................................................5-1 关于本章...........................................................................................................................................................5-1 5.1 如何根据SMP 返回的错误消息快速定位问题原因............................................................................5-2 5.2 如何获取连接SMP 的IP 和端口号.......................................................................................................5-2 5.3 为什么客户端连接SMP 失败.................................................................................................................5-2 5.4 操作员登录SMP 失败的原因.................................................................................................................5-2 5.5 SMP 返回“消息转发失败”是什么原因..............................................................................................5-3 5.6 SMP 返回“语法错误或命令码非法”是什么原因..............................................................................5-3 5.7 SMP 返回“Authentication failed”是什么原因.........................................................................................5-3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值