一.工作流程:
客户端发送cer命令去请求连接服务器(OCS),当ocs返回成功的cea命令,则表明与ocs的链接建立成功;
为了保证客户端与服务器连接正常,需每隔一段时间发送dwr命令检测链路;
有了以上的保证,客户端可以放心的发送ccr命令与服务器进行数据交互
二.操作步骤
1.初始化(与ocs连接和心跳响应被jdiameter内部实现,开发者可以不考虑构造和发送cer命令和dwr命令)
init方法:
ClientConfiguration clientConfiguration = new ClientConfiguration();
Stack stack = new org.jdiameter.client.impl.StackImpl();
SessionFactory factory = stack.init(clientConfiguration);
Loggers.FSM.logger().setLevel(Level.ALL);
Loggers.Stack.logger().setLevel(Level.ALL);
ConsoleHandler fh = new ConsoleHandler();
fh.setLevel(Level.ALL);
stack.getLogger().addHandler(fh);
stack.getLogger().setUseParentHandlers(false);
// start(Mode mode, long timeout, java.util.concurrent.TimeUnit
// unit)
stack.start(Mode.ALL_PEERS, stackTimeOut, TimeUnit.SECONDS);
ClientConfiguration类:
public static class ClientConfiguration extends EmptyConfiguration {
public ClientConfiguration() {
super();
log.info("加载配置文件开始");
AppConfiguration appConfiguration = AppConfiguration.getInstance();
add(OwnDiameterURI, "aaa://" + AvpContants.ORIGIN_HOST + ":"
+ appConfiguration.getClientPort());
log.info("OwnDiameterURI:" + "aaa://" + AvpContants.ORIGIN_HOST
+ ":" + appConfiguration.getClientPort());
add(OwnIPAddress, appConfiguration.getClientIp());
add(OwnRealm, hostRealm);
add(OwnVendorID, vendorId);
add(ApplicationId,
// AppId 1
getInstance().add(VendorId, vendorId).add(AcctApplId,
acctApplId));
add(DwaTimeOut, (long) appConfiguration.getAvpDwrTimeout());
// dwr 间隔时间
add(IacTimeOut, (long) appConfiguration.getAvpDwrTimeout());
add(CeaTimeOut, (long) appConfiguration.getAvpCerTimeout());
add(RecTimeOut, (long) appConfiguration.getAvpCerTimeout());
// peerTable 用来管理peer
// 一个Peer对象表示一个远程的Diameter客户端,服务器或者代理。
add(PeerTable,
// Peer 1
getInstance().add(
PeerName,
"aaa://" + appConfiguration.getServerIp() + ":"
+ appConfiguration.getServerPort()));// 连接ip+port
log.info("PeerName___" + "aaa://" + appConfiguration.getServerIp()
+ ":" + appConfiguration.getServerPort());
// realm 域信息
add(RealmTable,
// Realm 1
getInstance().add(
RealmEntry,
hostRealm + ":" + AvpContants.ORIGIN_HOST + ","
+ appConfiguration.getServerIp()));
log.info("RealmEntry___" + hostRealm + ":"
+ AvpContants.ORIGIN_HOST + ","
+ appConfiguration.getServerIp());
org.jdiameter.client.impl.helpers.AppConfiguration extensionPoints = (org.jdiameter.client.impl.helpers.AppConfiguration) getChildren(Extensions.ordinal())[0];
extensionPoints.add(InternalPeerController, "com.sntele.surfing.ability.ocs.test.MyPeerTable");
}
}
2.构造命令ccr与发送命令到ocs
Session session = factory.getNewSession();
// createRequest(int commandCode, ApplicationId appId, java.lang.String
// destRealm, java.lang.String destHost)
Request request = session.createRequest(command,
org.jdiameter.api.ApplicationId.createByAccAppId(vendorId,
acctApplId), hostRealm);
AvpSet avpSet = request.getAvps();
// {Auth-Application-Id} DCCA 4
avpSet.addAvp(AvpCode.AUTH_APPLICATION_ID,4,true,false);
// {Service-Context-Id}
avpSet.addAvp(AvpCode.SERVICE_CONTEXR_ID,AvpContants.SERVICE_CONTEXT_ID_ISMP,true,false,false);
// {CC-Request-Type} 4 - EVENT_REQUEST
avpSet.addAvp(AvpCode.CC_REQUEST_TYPE,4,true,false);
// {CC-Request-Number} 0
avpSet.addAvp(AvpCode.CC_REQUEST_NUMBER,0,true,false);
...........................................
Future<Message> future = session.send(request, timeOut,
TimeUnit.SECONDS);
(Answer) future.get();
3.解析ocs返回的cca信息
log.info("验证OCS请求返回信息 start");
int commandCode = answer.getCommandCode();//命令码
log.info("返回的命令编码:" + commandCode);
int resultCode = answer.getResultCode().getInteger32();//结果码
AvpSet avpSet = answer.getAvps();//返回数据集合
三.如果在dwr命令中断时,由于心跳连接(dwr)被封装在jdiameter内,可通过以下方法得知连接什么时候断开
在ClientConfiguration类加入:
org.jdiameter.client.impl.helpers.AppConfiguration extensionPoints = (org.jdiameter.client.impl.helpers.AppConfiguration) getChildren(Extensions.ordinal())[0];
extensionPoints.add(InternalPeerController, "test.MyPeerTable");
创建MyPeerTable类(继承与PeerTableImpl),并重写ActionContext的sendDwrMessage()方法即可
分享到:
相关推荐
中国电信在线计费系统(OCS)OCP接口规范是中国电信移动业务在线计费系统的计费接口协议,旨在规范OCS与综合业务管理平台ISMP、OCS与智能网SCP、OCS与内容计费网关CCG之间的接口协议。该规范基于国内外在线计费协议...
1. **开放APIs**: OCS的关键组成部分是其开放APIs,这些APIs定义了与通信服务交互的标准化接口。开发者可以使用这些接口在自己的应用中实现各种通信功能,无需深入了解底层通信协议的复杂性。常见的API包括WebRTC...
- **接口服务器**:作为系统与其他网络元素交互的桥梁,如对接BSS(Business Support Systems)、计费网关等。 - **业务逻辑处理单元**:根据预设的业务规则进行决策,例如额度控制、优惠策略等。 4. **OCS系统的...
- 测试客户端与OCS服务器的连接和功能。 ### 8. 部署Live Meeting 2007客户端 - 安装Live Meeting客户端,用于远程协作和会议。 - 部署Outlook加载项,方便创建和参加Live Meeting。 - 自定义会议邀请模板,以符合...
本文将基于文档中的内容,深度解析OCS企业版的部署步骤与关键知识点。 ### 一、先决条件 部署OCS企业版前,需确保满足以下基础环境设置: 1. **安装VC++2005 SP1**:用于支持OCS所需的运行时库。 2. **安装.NET ...
CWA的主窗口是用户与OCS交互的界面。它提供了一个直观的布局,用户可以查看联系人列表、发起即时消息、拨打电话、加入会议等。界面通常包括以下部分: 1. 登录界面:用户输入凭据以连接到OCS服务器。 2. 联系人列表...
### Exchange 2007 UM 与 OCS 2007 整合知识点 #### 一、背景介绍 统一通信(Unified Communications, UC)技术的发展使得不同通信平台之间的融合成为可能。Microsoft Exchange Server 2007 中的统一消息(Unified...
标题与描述中的关键词“ocs2007介绍内容不错”,以及标签“ocs2007server”指向了Microsoft Office Communications Server 2007(以下简称OCS 2007)这一企业级统一通信解决方案。本文旨在深入解析OCS 2007的关键...
1. **蓝牙门禁控制器配置**:该工具支持对OCS90系列蓝牙门禁控制器进行参数设置,包括但不限于蓝牙配对、权限设置、时间同步、报警设置等,确保门禁系统的安全与稳定运行。 2. **跨网段通信**:突破传统网络限制,...
"OCS Inventory NG安装后提示三个错误解决方法" OCS Inventory NG是一款开源的计算机资产管理和Inventory管理软件,旨在帮助IT管理员管理和跟踪计算机资产。然而,在安装完成后,用户可能会遇到三个错误提示,本文...
微软Office OCS 配置、使用说明书
1. **接口定义**:规范详细阐述了OCS与其他系统之间的接口,包括与业务支持系统(BSS)、操作支持系统(OSS)、网络设备以及第三方应用的交互。这些接口通常包括HTTP、FTP、 Diameter、GTP等通信协议,确保了数据...
当GLPI与OCS Inventory-NG结合使用时,GLPI可以从OCS Inventory-NG的数据库中获取硬件和软件配置信息,并根据用户的设置展示在GLPI的界面上,用户可以方便地查询、分析和导出这些信息。这种集成使得IT资产管理变得...
9. **Web服务**:提供SOAP接口的Web服务访问,便于与其他系统集成。 10. **插件支持**:通过API接口,可以扩展额外的功能和集成第三方应用。 **OCS+GLPI应用架构图**:结合GLPI(Gestion Libre de Parc ...
本教程旨在详细介绍如何配置 OCS 2007 R2 与 AsteriskNOW 进行互联互通的过程,以便实现两者之间的电话通信功能。 #### 二、环境准备 在开始配置前,需要确保以下条件已满足: 1. **虚拟机环境**:使用 VMware ...
接口是OCS系统与其他系统或外部网络进行通信的桥梁,包括OCS与其他业务支撑系统(如SCP、ISMP、CCG)之间的接口。这些接口必须满足标准化和规范化的要求,以确保不同系统间能够有效交互信息。一个设计良好的接口能够...
《OCS 2007图文部署手册 完整版》是针对微软的Office Communications Server 2007(简称OCS 2007)的一款详尽的安装与部署指南,非常适合初学者学习。OCS 2007是微软推出的统一通信解决方案,它在提升性能的同时,...
OCS培训课件