专利名称:Ip电话中的呼叫快速查找方法
技术领域:
本发明涉及IP(国际互联网协议)电话技术领域,更确切地说是涉及IP电话中的一种呼叫控制块的快速查找方法。
由于在每一个呼叫的过程中经常需要获得与该呼叫相对应的呼叫控制块,且在一特定时间内会有相当数目的呼叫存在,根据H.323协议,给每个呼叫分配一个Call ID,此Call ID能够唯一地标识一个呼叫并且不会发生重复。一般的呼叫控制软件都是通过Call ID来查找相应的呼叫控制块。
根据Call ID查找呼叫控制块的方法有很多种,最常见的是顺序查找法和HASH查找法。其中的顺序查找法,因为是按照Call ID顺序进行对比查找,因而查找速度很慢,当呼叫数目巨大时会急剧降低整个系统的效率。
HASH查找法的查找流程如
图1中所示,包括步骤11,开始;
步骤12,读取有关消息(如交换机发出的被叫摘机信息中就包含有CallID),获得Call ID;步骤13,对Call ID按HASH方法进行操作,生成一个A值(由于Call ID是一个长16个字节的字符串,通过HASH方法对其进行变短操作);步骤14,取得与A值对应的链表(由于对Call ID进行了变短操作,就可能有重复的A值产生,需将相同A值的呼叫控制块进行链接,形成链表),在链表中通过比较Call ID进行顺序查找,寻找与查找的Ca11 ID一致的链表;步骤15,判断当前所查找的Call ID与链表中的Call ID是否相等;步骤16,判断相等时,表示找到了该呼叫的呼叫控制块(CCB);步骤18,判断不相等时,则作错误处理;步骤17,结束查找过程。
HASH查找法的核心内容是将顺序法查找时的全部顺序转化为部分顺序,以此来提高查找速度,虽然有速度快的优点,但由于HASH操作上的固有问题,不可能保证在HASH操作后的A值绝对不重复,因此需要一个链表将HASH操作后具有相同A值的呼叫控制块链接起来,从而导致过程(算法)复杂化,而且其查找过程也不能保证一次完成。
综上所述,由于Call ID是一个长16个字节的字符串,若采用简单的顺序法进行查找,则效率非常低下;而进行HASH操作虽然速度较快,但存在HASH操作后有重复、不能一次完成以及算法较复杂的缺点。
实现本发明目的的技术方案是这样的一种IP电话中的呼叫快速查找方法,其特征在于包括如下处理步骤
A.创建一个从零至最大值X的呼叫数组,每一数组元素用于对应一个呼叫,每一数组元素的内容包含有与呼叫相关的所有信息,并让数组元素的下标等于一呼叫的内部呼叫参考值(crv);B.为每一个新呼叫分配一个内部呼叫参考值(crv),该内部呼叫参考值(crv)在一时间范围内是唯一的;C.根据内部呼叫参考值(crv)建立内部呼叫参考值(crv)与呼叫控制块(CCB)间一一对应的映射关系;D.直接根据获取的内部呼叫参考值(crv)一次查找到与之对应的呼叫控制块(CCB),进行操作。
所述步骤A中,所创建的最大值为X的呼叫数组,应能容纳一时间范围内所有呼叫的内部呼叫参考值(crv)。
所述步骤A中,每一数组元素的内容至少包含有呼叫参考值(CRV)、主叫号码、被叫号码、通话开始时间和通话结束时间。
所述步骤B中,所述的新呼叫包括主动发起的呼叫和被动接收的呼叫。
所述步骤B的分配内部呼叫参考值(crv)进一步包括以下处理步骤a.从呼叫数组中取出上一次分配过的内部呼叫参考值(crv),对其进行加1操作;b.判断该加1操作后的内部呼叫参考值(crv)所对应的数组元素是否是空闲的;c.在该数组元素是空闲时,将该数组元素下标的内部呼叫参考值(crv)分配给所述的新呼叫,在该数组元素不是空闲时,返回步骤a.继续操作;d.在重复执行步骤a、b、c共(X-1)次后仍未能找到空闲的数组元素时,终止步骤B的操作。
所述数组元素的空闲是指该数组元素没有与呼叫控制块建立起一一对应的映射关系。
所述步骤C中,建立内部呼叫参考值(crv)与呼叫控制块(CCB)间一一对应的映射关系,进一步包括以下步骤e.按呼叫控制块的大小申请一个内存地址;f.将与呼叫相关的信息填入该地址的内存区域中;g.将成功分配的新呼叫的内部呼叫参考值(crv)与该内存区域间建立对应的映射关系;h.在新呼叫没有成功分配到内部呼叫参考值(crv)时,则释放该新呼叫及内存地址。
所述的步骤D,是从呼叫的交互信息中获取内部呼叫参考值(crv),对内部呼叫参考值(crv)指向的呼叫控制块内容进行操作。
所述步骤D中,是通过网络端口号与内部呼叫参考值(crv)映射,和通过内部呼叫参考值(crv)与呼叫控制块映射后,再对与网络端口号映射的呼叫控制块内容进行操作。
本发明方法的有益效果是可根据内部呼叫参考值(crv),直接通过Call[crv]获取呼叫控制块,一次查找就可以完成,而且相应的维护方法非常简单,而查找空闲的crv,只需要大约10行的代码,非常简单,添加一个呼叫控制块和删除一个呼叫控制块都可以通过直接对数组元素操作完成。
图2是本发明根据内部呼叫参考值(crv)一次查找法的流程框图。
图1说明前已述及不再赘述。
参见图2,图中示出实施本发明方法的主要处理步骤。
步骤21,建立一个足够大的呼叫数组,能够容纳一特定时间范围内的所有呼叫,如长度为两个字节、最大值为65535(X为0-65535)的呼叫数组,用于映射最大值为65535个呼叫控制块,使每一呼叫对应呼叫数组中的一个数组元素,让该数组元素的下标与内部呼叫参考值(crv)相等,每个数组元素包含有与呼叫相关的所有信息(呼叫参考值、主被叫号码等),用数据结构方式进行描述,为typedeftagCCB{呼叫参考值主叫号码被叫号码通话开始时间通话结束时间}CCBCCB *Call[65535]。
步骤22,在每一个新呼叫到来时,不管它是被动接收的呼叫还是主动发起的呼叫,均为其新建一个内部的(或称本地的)呼叫参考值(crv)。
传统的呼叫参考值(CRV)的生成一般采用每有一个新呼叫则加1的方法,加到预定的最大值时返回0再从新开始。如将呼叫参考值(CRV)的范围定得足够大(为0-65534),以保证在同一时刻所有呼叫的CRV不重复。但是,由于实际上每个呼叫保持的时间不会是相同的,如有的呼叫时间长有的呼叫时间短,仅简单的加1就可能导致在一定时间范围内有重复呼叫参考值(CRV)的情况(如一个时间特长的呼叫的呼叫参考值与另一个时间短的呼叫的呼叫参考值相同)发生。
为了避免这种情况发生并能高效地生成内部的(或称本地的)呼叫参考值(crv),本发明采用的方法是从当前的(i)内部呼叫参考值(crv)的下一个内部呼叫参考值(i+1)开始寻找,直到找到一个没有与之对应的呼叫控制块(CCB)的呼叫参考值(crv),即快速找到一个内部呼叫参考值为crv的空闲的呼叫数组中的一个数组元素,该空闲是指该内部呼叫参考值还没有与呼叫控制块间建立起一一对应的映射关系,其过程表示如下<pre listing-type="program-listing">分配CRV() { i=上次分配的crv while{呼叫数组的第i+1个数组元素不为空并且i+1不等于上次分配的crv} { i=i+1; } if(i+1等于上次分配的crv) { 返回失败 }else { 上次分配的crv=i+1 返回i+1 } }。</pre>上述过程保证了当一特定时刻总的呼叫数目比65535小得多的时候,基本不会发生呼叫参考值重复的问题,因为当循环65535次之后,已经过了非常长的时间,呼叫不释放的可能性已经非常小了,即使没有释放,也不可能有非常多的呼叫都不释放,这样就可以接续查找到下一个呼叫,效率非常高。该查找空闲的内部呼叫参考值的过程只需要大约10行的代码,非常快速、简单。此外,假如在循环查找65535次之后仍未找到一个没有与呼叫控制块对应的内部呼叫参考值时,则宣布查找失败,终止查找。
步骤23,根据所生成的内部的呼叫参考值(crv)建立起与呼叫控制块(CCB)间的一一对应的映射关系,具体操作过程是将一数组元素的下标设为crv,该数组元素的内容为指向呼叫控制块的指针增加一个新的呼叫控制块时,同时创建一个新的crv,以此crv为下标把呼叫控制块的指针(P)写入数组元素中。
例如对一个到来的呼叫,其映射过程如下<pre listing-type="program-listing"> pCCB=申请一个CCB大小的内存(地址) 将(呼叫)相关信息填入pCCB指向的数据结构 IF(分配CRV()=成功) { crv=获得分配的CRV Call[crv]=pCCB }else { 释放呼叫和内存 }。</pre>上述步骤是以成功分配的内部呼叫参考值为下标,直接将新呼叫的呼叫控制块指针写入呼叫数组的相应数组元素中。
步骤24,当呼叫状态发生改变需要查找Call ID的呼叫控制块时,只需要直接根据crv将数组元素的内容取出来即可,即根据crv找到与之对应的CCB,进行操作。
若在呼叫的交互数据中包含crv,就可以直接获取crv;若在呼叫的交互数据中不包含crv,则需要根据其它信息,如SOCKET端口号(网络端口号),再进行一次映射(网络端口号是唯一的,使网络端口号与呼叫参考值对应,使呼叫参考值与呼叫控制块对应,从而使网络端口号与呼叫控制块对应)。
本发明推荐采用在交互数据中包含crv的方式。
具体过程如下从交互数据中获得内部呼叫参考值,赋给变量crvpCCB=Call[crv];对pCCB所指向的内容进行操作。
本发明的方法是根据IP电话特有的特点作出的,包括创建一个能够容纳所有CRV的呼叫数组;对于所有的呼叫均创建一个内部的CRV;以内部的CRV为下标直接把新呼叫的呼叫控制块指针写入呼叫数组;和直接根据内部的CRV作为数组下标来获取呼叫控制块,经一次查找,就可快速查找到相应的呼叫(呼叫控制块)。与传统的顺序查找法及HASH查找法相比,明显提高了速度与效率,且过程简单。
权利要求
1.一种IP电话中的呼叫快速查找方法,其特征在于包括如下处理步骤A.创建一个从零至最大值X的呼叫数组,每一数组元素用于对应一个呼叫,每一数组元素的内容包含有与呼叫相关的所有信息,并让数组元素的下标等于一呼叫的内部呼叫参考值(crv);B.为每一个新呼叫分配一个内部呼叫参考值(crv),该内部呼叫参考值(crv)在一时间范围内是唯一的;C.根据内部呼叫参考值(crv)建立内部呼叫参考值(crv)与呼叫控制块(CCB)间一一对应的映射关系;D.直接根据获取的内部呼叫参考值(crv)一次查找到与之对应的呼叫控制块(CCB),进行操作。
2.根据权利要求1所述的一种IP电话中的呼叫快速查找方法,其特征在于所述步骤A中,所创建的最大值为X的呼叫数组,应能容纳一时间范围内所有呼叫的内部呼叫参考值(crv)。
3.根据权利要求1所述的一种IP电话中的呼叫快速查找方法,其特征在于所述步骤A中,每一数组元素的内容至少包含有呼叫参考值(CRV)、主叫号码、被叫号码、通话开始时间和通话结束时间。
4.根据权利要求1所述的一种IP电话中的呼叫快速查找方法,其特征在于所述步骤B中,所述的新呼叫包括主动发起的呼叫和被动接收的呼叫。
5.根据权利要求1所述的一种IP电话中的呼叫快速查找方法,其特征在于所述步骤B的分配内部呼叫参考值(crv)进一步包括以下处理步骤a.从呼叫数组中取出上一次分配过的内部呼叫参考值(crv),对其进行加1操作;b.判断该加1操作后的内部呼叫参考值(crv)所对应的数组元素是否是空闲的;c.在该数组元素是空闲时,将该数组元素下标的内部呼叫参考值(crv)分配给所述的新呼叫,在该数组元素不是空闲时,返回步骤a.继续操作;d.在重复执行步骤a、b、c共(X-1)次后仍未能找到空闲的数组元素时,终止步骤B的操作。
6.根据权利要求5所述的一种IP电话中的呼叫快速查找方法,其特征在于所述数组元素的空闲是指该数组元素没有与呼叫控制块建立起一一对应的映射关系。
7.根据权利要求1所述的一种IP电话中的呼叫快速查找方法,其特征在于所述步骤C中,建立内部呼叫参考值(crv)与呼叫控制块(CCB)间一一对应的映射关系,进一步包括以下步骤e.按呼叫控制块的大小申请一个内存地址;f.将与呼叫相关的信息填入该地址的内存区域中;g.将成功分配的新呼叫的内部呼叫参考值(crv)与该内存区域间建立对应的映射关系;h.在新呼叫没有成功分配到内部呼叫参考值(crv)时,则释放该新呼叫及内存地址。
8.根据权利要求1所述的一种IP电话中的呼叫快速查找方法,其特征在于所述的步骤D,是从呼叫的交互信息中获取内部呼叫参考值(crv),对内部呼叫参考值(crv)指向的呼叫控制块内容进行操作。
9.根据权利要求1所述的一种IP电话中的呼叫快速查找方法,其特征在于所述步骤D中,是通过网络端口号与内部呼叫参考值(crv)映射,和通过内部呼叫参考值(crv)与呼叫控制块映射后,再对与网络端口号映射的呼叫控制块内容进行操作。
全文摘要
本发明涉及一种IP电话中的呼叫快速查找方法,在呼叫过程中可一次查找到呼叫控制块。包括如下步骤创建一个从零至最大值X的呼叫数组,每一数组元素用于对应一个呼叫,每一数组元素的内容包含有与呼叫相关的所有信息,并让数组元素的下标等于一呼叫的内部呼叫参考值(crv);为每一个新呼叫分配一个crv,该crv在一时间范围内是唯一的,是从当前crv的下一个crv找起,直至找到一个没有与之对应的呼叫控制块的crv,将其分配给新呼叫;根据crv建立与呼叫控制块(CCB)间一一对应的映射关系;查找呼叫时可直接根据获取的crv一次查找到内存中与之对应的呼叫控制块(CCB),对其进行操作。
文档编号H04M3/42GK1399461SQ0112370
公开日2003年2月26日 申请日期2001年7月27日 优先权日2001年7月27日
发明者林海涛, 王晓兰, 甘泉 申请人:华为技术有限公司