在呼叫合成实现中,最主要有两个方法:

(1)设定CDR缓存的方法void SetCdrBuffer(CAPCDR BUF*pBuf):其中CAP CDR BUF是包含CCapCDR的CDR缓存模板类,此函数指定了CDR记录缓存的位置。

(2)CDR处理函数:void Handle(const CallInfoCap&CapInfo,const NgnPktInfo& PktInfo)。他是进行呼叫合成的核心,也是设计的关键。他有两个参数,分别是该协议呼叫信息和数据帧信息。其基本流程如图4所示。

其中,判断某CDR是否已缓存,通知CDR缓存该CDR已结束和向缓存中添加新的CDR都需要调用CDR缓存模板类的方法,对于CAP协议的CDR子类:CCapCDR,声明一个CAP CDR缓存类型方法如下:ty-pedef CCallBufCAP CDR BUF。

在缓存操作中的具体实现如下:

(1)查询某CDR是否已缓存,利用CDR缓存的Search方法:

newCdr.nLinkID=nLinkld:

//设定关联属性(根据协议类型增加)

_tcscpy(newCdr.Call ID,Caplnfo.Call ID);

CCapCDR*pFind=m pCdrBuf=-》Search(newCdr);

//查询该CDR是否已存在

(2)向缓存中添加新的CDR:使用InsertNewCDR方法:

CCapCDR*pFind=m pCdrBuf-》InsertNewCDR(newCdr);

(3)通知缓存某CDR已结束:

bool bReturn=m pCdrlBuf-》CallCompleted(*pFind);CDR呼叫其他相关分析在此不再赘述。

4、 软件运行实现结果

在模块的整个开发流程中,每一步都要进行软件的测试工作,以保证整个模块开发工作的正确性。下面是软件实测后进行CDR合成的结果,可以从图5中看到,软件实现了CAP的CDR功能,点击单条消息名称可以看到消息的关键数据,在此不再进行演示。