專利名稱:Ip電話中的呼叫快速查找方法
技術(shù)領(lǐng)域:
本發(fā)明涉及IP(國(guó)際互聯(lián)網(wǎng)協(xié)議)電話技術(shù)領(lǐng)域,更確切地說(shuō)是涉及IP電話中的一種呼叫控制塊的快速查找方法。
由于在每一個(gè)呼叫的過(guò)程中經(jīng)常需要獲得與該呼叫相對(duì)應(yīng)的呼叫控制塊,且在一特定時(shí)間內(nèi)會(huì)有相當(dāng)數(shù)目的呼叫存在,根據(jù)H.323協(xié)議,給每個(gè)呼叫分配一個(gè)Call ID,此Call ID能夠唯一地標(biāo)識(shí)一個(gè)呼叫并且不會(huì)發(fā)生重復(fù)。一般的呼叫控制軟件都是通過(guò)Call ID來(lái)查找相應(yīng)的呼叫控制塊。
根據(jù)Call ID查找呼叫控制塊的方法有很多種,最常見(jiàn)的是順序查找法和HASH查找法。其中的順序查找法,因?yàn)槭前凑誄all ID順序進(jìn)行對(duì)比查找,因而查找速度很慢,當(dāng)呼叫數(shù)目巨大時(shí)會(huì)急劇降低整個(gè)系統(tǒng)的效率。
HASH查找法的查找流程如
圖1中所示,包括步驟11,開(kāi)始;
步驟12,讀取有關(guān)消息(如交換機(jī)發(fā)出的被叫摘機(jī)信息中就包含有CallID),獲得Call ID;步驟13,對(duì)Call ID按HASH方法進(jìn)行操作,生成一個(gè)A值(由于Call ID是一個(gè)長(zhǎng)16個(gè)字節(jié)的字符串,通過(guò)HASH方法對(duì)其進(jìn)行變短操作);步驟14,取得與A值對(duì)應(yīng)的鏈表(由于對(duì)Call ID進(jìn)行了變短操作,就可能有重復(fù)的A值產(chǎn)生,需將相同A值的呼叫控制塊進(jìn)行鏈接,形成鏈表),在鏈表中通過(guò)比較Call ID進(jìn)行順序查找,尋找與查找的Ca11 ID一致的鏈表;步驟15,判斷當(dāng)前所查找的Call ID與鏈表中的Call ID是否相等;步驟16,判斷相等時(shí),表示找到了該呼叫的呼叫控制塊(CCB);步驟18,判斷不相等時(shí),則作錯(cuò)誤處理;步驟17,結(jié)束查找過(guò)程。
HASH查找法的核心內(nèi)容是將順序法查找時(shí)的全部順序轉(zhuǎn)化為部分順序,以此來(lái)提高查找速度,雖然有速度快的優(yōu)點(diǎn),但由于HASH操作上的固有問(wèn)題,不可能保證在HASH操作后的A值絕對(duì)不重復(fù),因此需要一個(gè)鏈表將HASH操作后具有相同A值的呼叫控制塊鏈接起來(lái),從而導(dǎo)致過(guò)程(算法)復(fù)雜化,而且其查找過(guò)程也不能保證一次完成。
綜上所述,由于Call ID是一個(gè)長(zhǎng)16個(gè)字節(jié)的字符串,若采用簡(jiǎn)單的順序法進(jìn)行查找,則效率非常低下;而進(jìn)行HASH操作雖然速度較快,但存在HASH操作后有重復(fù)、不能一次完成以及算法較復(fù)雜的缺點(diǎn)。
實(shí)現(xiàn)本發(fā)明目的的技術(shù)方案是這樣的一種IP電話中的呼叫快速查找方法,其特征在于包括如下處理步驟
A.創(chuàng)建一個(gè)從零至最大值X的呼叫數(shù)組,每一數(shù)組元素用于對(duì)應(yīng)一個(gè)呼叫,每一數(shù)組元素的內(nèi)容包含有與呼叫相關(guān)的所有信息,并讓數(shù)組元素的下標(biāo)等于一呼叫的內(nèi)部呼叫參考值(crv);B.為每一個(gè)新呼叫分配一個(gè)內(nèi)部呼叫參考值(crv),該內(nèi)部呼叫參考值(crv)在一時(shí)間范圍內(nèi)是唯一的;C.根據(jù)內(nèi)部呼叫參考值(crv)建立內(nèi)部呼叫參考值(crv)與呼叫控制塊(CCB)間一一對(duì)應(yīng)的映射關(guān)系;D.直接根據(jù)獲取的內(nèi)部呼叫參考值(crv)一次查找到與之對(duì)應(yīng)的呼叫控制塊(CCB),進(jìn)行操作。
所述步驟A中,所創(chuàng)建的最大值為X的呼叫數(shù)組,應(yīng)能容納一時(shí)間范圍內(nèi)所有呼叫的內(nèi)部呼叫參考值(crv)。
所述步驟A中,每一數(shù)組元素的內(nèi)容至少包含有呼叫參考值(CRV)、主叫號(hào)碼、被叫號(hào)碼、通話開(kāi)始時(shí)間和通話結(jié)束時(shí)間。
所述步驟B中,所述的新呼叫包括主動(dòng)發(fā)起的呼叫和被動(dòng)接收的呼叫。
所述步驟B的分配內(nèi)部呼叫參考值(crv)進(jìn)一步包括以下處理步驟a.從呼叫數(shù)組中取出上一次分配過(guò)的內(nèi)部呼叫參考值(crv),對(duì)其進(jìn)行加1操作;b.判斷該加1操作后的內(nèi)部呼叫參考值(crv)所對(duì)應(yīng)的數(shù)組元素是否是空閑的;c.在該數(shù)組元素是空閑時(shí),將該數(shù)組元素下標(biāo)的內(nèi)部呼叫參考值(crv)分配給所述的新呼叫,在該數(shù)組元素不是空閑時(shí),返回步驟a.繼續(xù)操作;d.在重復(fù)執(zhí)行步驟a、b、c共(X-1)次后仍未能找到空閑的數(shù)組元素時(shí),終止步驟B的操作。
所述數(shù)組元素的空閑是指該數(shù)組元素沒(méi)有與呼叫控制塊建立起一一對(duì)應(yīng)的映射關(guān)系。
所述步驟C中,建立內(nèi)部呼叫參考值(crv)與呼叫控制塊(CCB)間一一對(duì)應(yīng)的映射關(guān)系,進(jìn)一步包括以下步驟e.按呼叫控制塊的大小申請(qǐng)一個(gè)內(nèi)存地址;f.將與呼叫相關(guān)的信息填入該地址的內(nèi)存區(qū)域中;g.將成功分配的新呼叫的內(nèi)部呼叫參考值(crv)與該內(nèi)存區(qū)域間建立對(duì)應(yīng)的映射關(guān)系;h.在新呼叫沒(méi)有成功分配到內(nèi)部呼叫參考值(crv)時(shí),則釋放該新呼叫及內(nèi)存地址。
所述的步驟D,是從呼叫的交互信息中獲取內(nèi)部呼叫參考值(crv),對(duì)內(nèi)部呼叫參考值(crv)指向的呼叫控制塊內(nèi)容進(jìn)行操作。
所述步驟D中,是通過(guò)網(wǎng)絡(luò)端口號(hào)與內(nèi)部呼叫參考值(crv)映射,和通過(guò)內(nèi)部呼叫參考值(crv)與呼叫控制塊映射后,再對(duì)與網(wǎng)絡(luò)端口號(hào)映射的呼叫控制塊內(nèi)容進(jìn)行操作。
本發(fā)明方法的有益效果是可根據(jù)內(nèi)部呼叫參考值(crv),直接通過(guò)Call[crv]獲取呼叫控制塊,一次查找就可以完成,而且相應(yīng)的維護(hù)方法非常簡(jiǎn)單,而查找空閑的crv,只需要大約10行的代碼,非常簡(jiǎn)單,添加一個(gè)呼叫控制塊和刪除一個(gè)呼叫控制塊都可以通過(guò)直接對(duì)數(shù)組元素操作完成。
圖2是本發(fā)明根據(jù)內(nèi)部呼叫參考值(crv)一次查找法的流程框圖。
圖1說(shuō)明前已述及不再贅述。
參見(jiàn)圖2,圖中示出實(shí)施本發(fā)明方法的主要處理步驟。
步驟21,建立一個(gè)足夠大的呼叫數(shù)組,能夠容納一特定時(shí)間范圍內(nèi)的所有呼叫,如長(zhǎng)度為兩個(gè)字節(jié)、最大值為65535(X為0-65535)的呼叫數(shù)組,用于映射最大值為65535個(gè)呼叫控制塊,使每一呼叫對(duì)應(yīng)呼叫數(shù)組中的一個(gè)數(shù)組元素,讓該數(shù)組元素的下標(biāo)與內(nèi)部呼叫參考值(crv)相等,每個(gè)數(shù)組元素包含有與呼叫相關(guān)的所有信息(呼叫參考值、主被叫號(hào)碼等),用數(shù)據(jù)結(jié)構(gòu)方式進(jìn)行描述,為typedeftagCCB{呼叫參考值主叫號(hào)碼被叫號(hào)碼通話開(kāi)始時(shí)間通話結(jié)束時(shí)間}CCBCCB *Call[65535]。
步驟22,在每一個(gè)新呼叫到來(lái)時(shí),不管它是被動(dòng)接收的呼叫還是主動(dòng)發(fā)起的呼叫,均為其新建一個(gè)內(nèi)部的(或稱本地的)呼叫參考值(crv)。
傳統(tǒng)的呼叫參考值(CRV)的生成一般采用每有一個(gè)新呼叫則加1的方法,加到預(yù)定的最大值時(shí)返回0再?gòu)男麻_(kāi)始。如將呼叫參考值(CRV)的范圍定得足夠大(為0-65534),以保證在同一時(shí)刻所有呼叫的CRV不重復(fù)。但是,由于實(shí)際上每個(gè)呼叫保持的時(shí)間不會(huì)是相同的,如有的呼叫時(shí)間長(zhǎng)有的呼叫時(shí)間短,僅簡(jiǎn)單的加1就可能導(dǎo)致在一定時(shí)間范圍內(nèi)有重復(fù)呼叫參考值(CRV)的情況(如一個(gè)時(shí)間特長(zhǎng)的呼叫的呼叫參考值與另一個(gè)時(shí)間短的呼叫的呼叫參考值相同)發(fā)生。
為了避免這種情況發(fā)生并能高效地生成內(nèi)部的(或稱本地的)呼叫參考值(crv),本發(fā)明采用的方法是從當(dāng)前的(i)內(nèi)部呼叫參考值(crv)的下一個(gè)內(nèi)部呼叫參考值(i+1)開(kāi)始尋找,直到找到一個(gè)沒(méi)有與之對(duì)應(yīng)的呼叫控制塊(CCB)的呼叫參考值(crv),即快速找到一個(gè)內(nèi)部呼叫參考值為crv的空閑的呼叫數(shù)組中的一個(gè)數(shù)組元素,該空閑是指該內(nèi)部呼叫參考值還沒(méi)有與呼叫控制塊間建立起一一對(duì)應(yīng)的映射關(guān)系,其過(guò)程表示如下<pre listing-type="program-listing">分配CRV() { i=上次分配的crv while{呼叫數(shù)組的第i+1個(gè)數(shù)組元素不為空并且i+1不等于上次分配的crv} { i=i+1; } if(i+1等于上次分配的crv) { 返回失敗 }else { 上次分配的crv=i+1 返回i+1 } }。</pre>上述過(guò)程保證了當(dāng)一特定時(shí)刻總的呼叫數(shù)目比65535小得多的時(shí)候,基本不會(huì)發(fā)生呼叫參考值重復(fù)的問(wèn)題,因?yàn)楫?dāng)循環(huán)65535次之后,已經(jīng)過(guò)了非常長(zhǎng)的時(shí)間,呼叫不釋放的可能性已經(jīng)非常小了,即使沒(méi)有釋放,也不可能有非常多的呼叫都不釋放,這樣就可以接續(xù)查找到下一個(gè)呼叫,效率非常高。該查找空閑的內(nèi)部呼叫參考值的過(guò)程只需要大約10行的代碼,非??焖?、簡(jiǎn)單。此外,假如在循環(huán)查找65535次之后仍未找到一個(gè)沒(méi)有與呼叫控制塊對(duì)應(yīng)的內(nèi)部呼叫參考值時(shí),則宣布查找失敗,終止查找。
步驟23,根據(jù)所生成的內(nèi)部的呼叫參考值(crv)建立起與呼叫控制塊(CCB)間的一一對(duì)應(yīng)的映射關(guān)系,具體操作過(guò)程是將一數(shù)組元素的下標(biāo)設(shè)為crv,該數(shù)組元素的內(nèi)容為指向呼叫控制塊的指針增加一個(gè)新的呼叫控制塊時(shí),同時(shí)創(chuàng)建一個(gè)新的crv,以此crv為下標(biāo)把呼叫控制塊的指針(P)寫(xiě)入數(shù)組元素中。
例如對(duì)一個(gè)到來(lái)的呼叫,其映射過(guò)程如下<pre listing-type="program-listing"> pCCB=申請(qǐng)一個(gè)CCB大小的內(nèi)存(地址) 將(呼叫)相關(guān)信息填入pCCB指向的數(shù)據(jù)結(jié)構(gòu) IF(分配CRV()=成功) { crv=獲得分配的CRV Call[crv]=pCCB }else { 釋放呼叫和內(nèi)存 }。</pre>上述步驟是以成功分配的內(nèi)部呼叫參考值為下標(biāo),直接將新呼叫的呼叫控制塊指針寫(xiě)入呼叫數(shù)組的相應(yīng)數(shù)組元素中。
步驟24,當(dāng)呼叫狀態(tài)發(fā)生改變需要查找Call ID的呼叫控制塊時(shí),只需要直接根據(jù)crv將數(shù)組元素的內(nèi)容取出來(lái)即可,即根據(jù)crv找到與之對(duì)應(yīng)的CCB,進(jìn)行操作。
若在呼叫的交互數(shù)據(jù)中包含crv,就可以直接獲取crv;若在呼叫的交互數(shù)據(jù)中不包含crv,則需要根據(jù)其它信息,如SOCKET端口號(hào)(網(wǎng)絡(luò)端口號(hào)),再進(jìn)行一次映射(網(wǎng)絡(luò)端口號(hào)是唯一的,使網(wǎng)絡(luò)端口號(hào)與呼叫參考值對(duì)應(yīng),使呼叫參考值與呼叫控制塊對(duì)應(yīng),從而使網(wǎng)絡(luò)端口號(hào)與呼叫控制塊對(duì)應(yīng))。
本發(fā)明推薦采用在交互數(shù)據(jù)中包含crv的方式。
具體過(guò)程如下從交互數(shù)據(jù)中獲得內(nèi)部呼叫參考值,賦給變量crvpCCB=Call[crv];對(duì)pCCB所指向的內(nèi)容進(jìn)行操作。
本發(fā)明的方法是根據(jù)IP電話特有的特點(diǎn)作出的,包括創(chuàng)建一個(gè)能夠容納所有CRV的呼叫數(shù)組;對(duì)于所有的呼叫均創(chuàng)建一個(gè)內(nèi)部的CRV;以內(nèi)部的CRV為下標(biāo)直接把新呼叫的呼叫控制塊指針寫(xiě)入呼叫數(shù)組;和直接根據(jù)內(nèi)部的CRV作為數(shù)組下標(biāo)來(lái)獲取呼叫控制塊,經(jīng)一次查找,就可快速查找到相應(yīng)的呼叫(呼叫控制塊)。與傳統(tǒng)的順序查找法及HASH查找法相比,明顯提高了速度與效率,且過(guò)程簡(jiǎn)單。
權(quán)利要求
1.一種IP電話中的呼叫快速查找方法,其特征在于包括如下處理步驟A.創(chuàng)建一個(gè)從零至最大值X的呼叫數(shù)組,每一數(shù)組元素用于對(duì)應(yīng)一個(gè)呼叫,每一數(shù)組元素的內(nèi)容包含有與呼叫相關(guān)的所有信息,并讓數(shù)組元素的下標(biāo)等于一呼叫的內(nèi)部呼叫參考值(crv);B.為每一個(gè)新呼叫分配一個(gè)內(nèi)部呼叫參考值(crv),該內(nèi)部呼叫參考值(crv)在一時(shí)間范圍內(nèi)是唯一的;C.根據(jù)內(nèi)部呼叫參考值(crv)建立內(nèi)部呼叫參考值(crv)與呼叫控制塊(CCB)間一一對(duì)應(yīng)的映射關(guān)系;D.直接根據(jù)獲取的內(nèi)部呼叫參考值(crv)一次查找到與之對(duì)應(yīng)的呼叫控制塊(CCB),進(jìn)行操作。
2.根據(jù)權(quán)利要求1所述的一種IP電話中的呼叫快速查找方法,其特征在于所述步驟A中,所創(chuàng)建的最大值為X的呼叫數(shù)組,應(yīng)能容納一時(shí)間范圍內(nèi)所有呼叫的內(nèi)部呼叫參考值(crv)。
3.根據(jù)權(quán)利要求1所述的一種IP電話中的呼叫快速查找方法,其特征在于所述步驟A中,每一數(shù)組元素的內(nèi)容至少包含有呼叫參考值(CRV)、主叫號(hào)碼、被叫號(hào)碼、通話開(kāi)始時(shí)間和通話結(jié)束時(shí)間。
4.根據(jù)權(quán)利要求1所述的一種IP電話中的呼叫快速查找方法,其特征在于所述步驟B中,所述的新呼叫包括主動(dòng)發(fā)起的呼叫和被動(dòng)接收的呼叫。
5.根據(jù)權(quán)利要求1所述的一種IP電話中的呼叫快速查找方法,其特征在于所述步驟B的分配內(nèi)部呼叫參考值(crv)進(jìn)一步包括以下處理步驟a.從呼叫數(shù)組中取出上一次分配過(guò)的內(nèi)部呼叫參考值(crv),對(duì)其進(jìn)行加1操作;b.判斷該加1操作后的內(nèi)部呼叫參考值(crv)所對(duì)應(yīng)的數(shù)組元素是否是空閑的;c.在該數(shù)組元素是空閑時(shí),將該數(shù)組元素下標(biāo)的內(nèi)部呼叫參考值(crv)分配給所述的新呼叫,在該數(shù)組元素不是空閑時(shí),返回步驟a.繼續(xù)操作;d.在重復(fù)執(zhí)行步驟a、b、c共(X-1)次后仍未能找到空閑的數(shù)組元素時(shí),終止步驟B的操作。
6.根據(jù)權(quán)利要求5所述的一種IP電話中的呼叫快速查找方法,其特征在于所述數(shù)組元素的空閑是指該數(shù)組元素沒(méi)有與呼叫控制塊建立起一一對(duì)應(yīng)的映射關(guān)系。
7.根據(jù)權(quán)利要求1所述的一種IP電話中的呼叫快速查找方法,其特征在于所述步驟C中,建立內(nèi)部呼叫參考值(crv)與呼叫控制塊(CCB)間一一對(duì)應(yīng)的映射關(guān)系,進(jìn)一步包括以下步驟e.按呼叫控制塊的大小申請(qǐng)一個(gè)內(nèi)存地址;f.將與呼叫相關(guān)的信息填入該地址的內(nèi)存區(qū)域中;g.將成功分配的新呼叫的內(nèi)部呼叫參考值(crv)與該內(nèi)存區(qū)域間建立對(duì)應(yīng)的映射關(guān)系;h.在新呼叫沒(méi)有成功分配到內(nèi)部呼叫參考值(crv)時(shí),則釋放該新呼叫及內(nèi)存地址。
8.根據(jù)權(quán)利要求1所述的一種IP電話中的呼叫快速查找方法,其特征在于所述的步驟D,是從呼叫的交互信息中獲取內(nèi)部呼叫參考值(crv),對(duì)內(nèi)部呼叫參考值(crv)指向的呼叫控制塊內(nèi)容進(jìn)行操作。
9.根據(jù)權(quán)利要求1所述的一種IP電話中的呼叫快速查找方法,其特征在于所述步驟D中,是通過(guò)網(wǎng)絡(luò)端口號(hào)與內(nèi)部呼叫參考值(crv)映射,和通過(guò)內(nèi)部呼叫參考值(crv)與呼叫控制塊映射后,再對(duì)與網(wǎng)絡(luò)端口號(hào)映射的呼叫控制塊內(nèi)容進(jìn)行操作。
全文摘要
本發(fā)明涉及一種IP電話中的呼叫快速查找方法,在呼叫過(guò)程中可一次查找到呼叫控制塊。包括如下步驟創(chuàng)建一個(gè)從零至最大值X的呼叫數(shù)組,每一數(shù)組元素用于對(duì)應(yīng)一個(gè)呼叫,每一數(shù)組元素的內(nèi)容包含有與呼叫相關(guān)的所有信息,并讓數(shù)組元素的下標(biāo)等于一呼叫的內(nèi)部呼叫參考值(crv);為每一個(gè)新呼叫分配一個(gè)crv,該crv在一時(shí)間范圍內(nèi)是唯一的,是從當(dāng)前crv的下一個(gè)crv找起,直至找到一個(gè)沒(méi)有與之對(duì)應(yīng)的呼叫控制塊的crv,將其分配給新呼叫;根據(jù)crv建立與呼叫控制塊(CCB)間一一對(duì)應(yīng)的映射關(guān)系;查找呼叫時(shí)可直接根據(jù)獲取的crv一次查找到內(nèi)存中與之對(duì)應(yīng)的呼叫控制塊(CCB),對(duì)其進(jìn)行操作。
文檔編號(hào)H04M3/42GK1399461SQ0112370
公開(kāi)日2003年2月26日 申請(qǐng)日期2001年7月27日 優(yōu)先權(quán)日2001年7月27日
發(fā)明者林海濤, 王曉蘭, 甘泉 申請(qǐng)人:華為技術(shù)有限公司