了解 IMS 计费架构
页码:12

创建 Rf 请求

创建 Rf 请求相当简单。让我们从基于会话的请求入手。如前所述,获取 RfApplication 和 RfSession 之后,我们使用 RfSession 对象创建新的 Accounting-Request。由于这是第一个请求,因此 requestType 将以值的形式出现:

ACR acr = session.createACR(RecordType.START);

创建事件请求的代码为:

ACR acr = session.createACR(RecordType.INTERIM);

创建新的计费请求时,将自动填充以下 AVP:

属性
Session-Id 自动生成
Origin-Host 根据 diameter.xml 中的节点设置
Origin-Realm 根据 diameter.xml 中的节点设置
Acct-Application-Id 3,表示基于 Diameter 的计费
Destination-Host RfApplication 的 cdf.host 参数的值,在 diameter.xml 中设置
Destination-Realm RfApplication 的 cdf.realm 参数的值,在 diameter.xml 中设置

可以通过调用 addAvp 方法的重载版本之一添加其他 AVP:

Acr.addAvp(Attribute.EVENT_TIMESTAMP, new Integer(timestamp));

创建 Ro 请求

对 Ro 接口的请求(例如,Credit-Control-Request)的创建方式非常类似于创建计费请求的方式。以下示例可以说明一切:

CCR ccr = roSes.createCCR(RequestType.INITIAL);
CCR eventCcr = roApp.createEventCCR();

在两种情况下,WebLogic SIP Server 都会自动设置以下表中提到的 AVP。

属性
Session-Id 根据 diameter.xml 中的节点设置
Origin-Realm 根据 diameter.xml 中的节点设置
Auth-Application-Id 4,表示 Diameter Credit-Control
Destination-Host RoApplication 的 ocs.host 参数的值,在 diameter.xml 中设置
Destination-Realm RoApplication 的 ocs.realm 参数的值,在 diameter.xml 中设置
CC-Request-Type 由 createCCR() 的参数指示;对于 createEventCCR(),值为 EVENT_REQUEST (4)
CC-Request-Number 会话每创建一个 CCR,该数字就自增 1

可以使用与前面相同的方法添加其他 AVP。

Diameter 基本属性作为 Attribute 类的静态字段提供。此外,与计费相关的属性可以在 ChargingCreditControl 类中找到。 WebLogic SIP Server 并不限制用户只使用这些预先定义的属性。可以使用 Attribute.define() 方法之一来创建新属性。Attribute 类包含为所有基本属性预先定义的常量。以下是如何添加 AVP 的示例:

public static final Attribute SUBSCRIPTION_ID_TYPE = Attribute.define(666, "Subscription-Id-Type", Type.INTEGER);

如果添加已由容器或用户定义的 AVP,则 WebLogic Sip Server 会抛出异常。添加完所有必需的 AVP 之后,最后发送 CCR。可以使用以下两种方法完成此操作:

ccr.send();
// - or -
CCA answer = (CCA)ccr.sendAndWait();

第二种方法将发送 CCR 并阻塞执行,直到收到应答或发生超时。

接收应答

WebLogic SIP Server Diameter API 中有两种接收应答的方法。第一种是同步方式,基于 Request.sendAndWait() 方法。此方法会发送请求并阻塞呼叫线程,直到收到应答或请求超时。它将返回收到的应答。同步发送请求的方式适用于阻塞线程不会造成问题的应用程序。

第二种是通过异步方式将发送操作和接收操作分离。通过调用 Request.send() 发送请求。此方法将立即返回。收到应答后,将通过调用监听器的 rcvMessage() 方法通知监听器。监听器必须实现 SessionListener 接口,并且必须在收到应答之前在会话中设置该接口。以下示例演示了此方法:

//This is a listener class
class MyListener implements SessionListener {
        
   public void rcvMessage(Message message) {
      System.out.println("Received a message: " + message);

      if(message.getCommand().equals(CreditControl.CCA)) {
         System.out.println("The message is a Credit-Control-Answer");
      }
   }

}

//This code is inside some other (or the same) class, in a method
//responsible for sending the request

   //Create session and listener
   RoSession roSes = roApp.createSession();
   MyListener myListener = new MyListener();
   
   //Set the listener on the session
   roSes.setListener(myListener);

   //Now create and send a request
   CCR ccr = roSes.createCCR(RequestType.INITIAL);
   ccr.addAvp(...);
   ccr.send();

   //send() returns immediately. Answer will be received in
   //myListener.rcvMessage()

带有监听器的实现还允许接收当前会话内的服务器发送的请求(例如,当服务器决定立即关闭会话时发送的 Abort-Session-Request)。请求和应答都以相同的方式提供给监听器的 rcvMessage()。应用程序负责为请求和应答提供不同的行为。

错误和超时处理

在配置的时间内未收到请求的应答时,WebLogic SIP Server 会自动检测超时情况。默认超时值在 diameter.xml 中配置。还可以使用 send(...)sendAndWait(...) 方法的参数为每个请求指定默认超时值。

WebLogic SIP Server 通过创建包含结果代码 DIAMETER_UNABLE_TO_DELIVER 的响应来处理超时。实际上,并不会通过网络发送响应,但是会将响应传递给发送请求的应用程序。这种处理超时的方法类似于 SIP 中使用的方法。

此外,WebLogic SIP Server 可以抛出以下两种异常:

  • 协议错误(如消息格式无效)时,抛出 MessageException。
  • AVP 无效和/或丢失时,抛出 AvpException。

调试应用程序

WebLogic SIP Server 中的日志记录工具可用于跟踪传入和传出消息。可以使用控制台配置消息调试。此外,还可通过脚本文件(如果在 Unix 之类的计算机上运行,则为 sh 文件;如果在 Windows 平台上运行,则为 cmd)中的 -Ddiameter.Debug=true 选项来设置消息调试。调试消息将直接发送到控制台。

除了 WebLogic SIP Server 中的调试设置之外,使用网络嗅探器也很有帮助。这种类型的程序可以显示在网络中传输的数据包。Wireshark(以前称为 Ethereal)可能是最受欢迎的嗅探器,它是一款免费软件。

示例应用程序

可以下载 Ro 和 Rf 接口的简单演示应用程序。此应用程序为 SIP 会话提供了 Ro/Rf 计费功能。收到 INVITE 之后,通过发送类型为 INITIAL 的 CCR 启动计费功能。然后,使用完所有准许的额度之后,应用程序通过发送 UPDATE CCR 请求新的额度。收到 BYE 时,通过发送 TERMINATION CCR 来关闭计费会话。

在额度用完的情况下,应用程序也会结束会话。如果在 CCA 中收到 Final-Unit-Indication AVP,并且所有准许的单位都已用完,则应用程序通过发送 BYE 来断开 SIP 会话连接。它还发送 TERMINATION CCR 来关闭 Diameter 会话。

BEA 模拟器和 Rf 接口

BEA WebLogic Sip Server 提供了一种简单的测试方法,可以使用独立的 Rf 接口模拟器测试自己的应用程序。这个可作为独立应用程序运行来实现离线计费接口的模拟器就是 com.bea.wcp.diameter.charging.RfSimulator

此外,BEA 还提供了一个 HSS 模拟器来存储与服务相关的数据,可以使用相同的方法运行此模拟器。注意,此模拟器用于测试目的,并且仅支持 RepositoryData 和 PSI。HSS 的模拟器为 com.bea.wcp.diameter.sh.HSSSimulator

这两个模拟器的命令行选项包括:

  • -r、-real 节点实际名称
  • -h、-host 主机身份
  • -a、-address 节点监听地址
  • -p、-port 节点监听端口
  • -d、-debug 启用调试
  • -m、-mdebug 启用消息调试

以下示例演示了如何运行独立的 BEA Rf 模拟器:

java com.bea.wcp.diameter.util.Launcher -apps com.bea.wcp.diameter.charging.RfSimulator -r bea.com -h simulator -p 3900 -d -m

还可以使用以下脚本运行多个模拟器,如 HSS 模拟器:

java com.bea.wcp.diameter.util.Launcher -apps com.bea.wcp.diameter.charging.RfSimulator,com.bea.wcp.diameter.sh.HssSimulator -h simulator -r bea.com -p 3900 -d -m

请记住,要先运行 \sipserver30\server\bin\ 目录中的 setWLSEnv 脚本。

公认的互操作性

Ericpol Telecom 成功地将其运行于 BEA WebLogic SIP Server 3.0 之上的 IMS 预付费解决方案与 Amdocs IMS 计费解决方案进行了集成。IMS 预付费解决方案通过其组件的集成和相互协作提供了一种具有丰富特性、兼容 IMS、可互操作、运营商级别的预付费解决方案。在此集成方案中,IMS 预付费解决方案通过 Rf 和 Ro 接口与 Amdocs 计费解决方案相互通信。网络结构如下所示。

基于会话的模型 (SCUR)
图 11. BEA-Ericpol-Amdocs IOT 的网络架构(单击图像查看大图)

BEA-Ericpol IMS 预付费解决方案和 Amdocs 计费解决方案之间的互操作性测试 (IOT) 包括两个阶段:离线计费和在线计费。每个场景的消息流附加在本文的结尾。

IOT 已经证明 WebLogic SIP Server 中的 Diameter 实现符合协议规范。它还显示对 Java API 的完全编程控制使得 Diameter 实现极具灵活性。在 PoC 过程中需要进行几次小更改。这些更改的实施快速而简单。

IOT 中使用的 Amdocs IMS 计费解决方案基于 Amdocs 在线计费系统。根据 3GPP 标准,此在线计费功能通过 Diameter 接口(在线计费系统接口的 Diameter 参考点 Ro)与核心 IMS 网络元素进行交互。此外,Amdocs IMS 在线计费解决方案的两个关键组件分别是 Amdocs Rating 和 Amdocs Balance Manager。为了与 IMS 呼叫会话控制功能进行交互以实现离线计费,针对 IMS 的 3GPP 标准定义了两个组件:计费数据功能 (CDF) 和计费网关功能 (CGF)。这些功能可以构造、关联和格式化与计费事件有关的信息,并将这些信息传输到计费系统。Amdocs Service Mediation Manager 是 Amdocs IMS 计费解决方案的一部分,经过增强后符合 3GPP 标准,并且其本身可以提供 CDF 和 CGF 功能。

随着服务提供商竞相实现 IMS 架构并提供更加完善的服务,他们也开始面对各种问题,如收益率和定价、投资回报率、服务质量等等。Amdocs 使用一套横向、统一、模块化的 IMS 级计费产品,实现了一种全局的 IMS 计费方法,很好地解决了这些问题。如 Ericpol 和 BEA 的成功 IOT 所演示的那样,Amdocs 计费解决方案具有以下优点:

  • 正确地将所有业务线实时地聚合在一起
  • 缩短复杂 IMS 服务和产品的上市时间
  • 灵活地提供创新和多合一的服务
  • 聚合调解
  • 严格遵从 IMS 标准

总结

已经证明,Diameter 成功克服了 RADIUS 的局限性。如今,它已成为 IMS 标准的一部分。基于 IP 和电话技术的新服务的开发势头十分强劲,并且每个服务都需要计费功能。因此,基于 Diameter 的计费的普及指日可待。

通过阅读本文,您现在应该熟悉 Ro 和 Rf 接口的基本知识,并知道如何使用 BEA WebLogic SIP Server 处理它们。现在,您可以着手开发自己的应用程序了。

致谢

作者非常感谢 Rafi Kretchmer,他是 Amdocs 的 Revenue Management Product & Solutions Marketing 部门的产品营销经理。Rafi 负责为 Amdocs 的营收管理产品(包括行业领先的 Amdocs 计费产品系列)制定 IMS 业务战略。

参考资料

术语表

3GPP — 第三代合作伙伴项目
AAA — 验证、授权和计费
ABMF — 账户余额管理功能
ACA — 计费应答
ACR — 计费请求
API — 应用程序编程接口
AS — 应用服务器
AVP — 属性值对
BGCF — 出口网关控制功能
CCA — 额度控制应答
CCR — 额度控制请求
CDF — 计费数据功能
CDR — 计费数据记录
CGF — 计费网关功能
CSCF — 呼叫会话控制功能
CTF — 计费触发功能
DCC — Diameter Credit-Control 应用程序
GGSN — 网关 GPRS 支持节点
GPRS — 通用分组无线业务
HSS — 归属用户服务器
HTTP — 超文本传输协议
ICID — IMS 计费标识符
I-CSCF — 查询 CSCF
IMS — IP 多媒体子系统
IMS-GWF — IMS 网关功能
MGCF — 媒体网关控制功能
MRFC — 媒体资源功能控制器
OCF — 在线计费功能
OCS — 在线计费系统
P-CSCF — 代理 CSCF
RF — 换算功能
RFC — 请求注解
S-CSCF — 服务 CSCF
SGSN — 服务 GPRS 支持节点
SIP — 会话发起协议
WLSS — BEA WebLogic SIP Server

Stefano Gioia 是 EMEA 的 BEA WebLogic Sip Server 技术专家。他致力于在欧洲、中东和非洲寻求 IMS 运营商和合作伙伴。


Tomasz Radziszewski 是 Ericpol Telecom 的软件研发工作师。