电信服务干扰 在电信网络中的一个基本呼叫为两个用户之间提供一个传输路径。还由一组服务(也称特征)提供一些附加功能。如果在同一呼叫中产生多个服务要求,那么保证它们之间不发生相互有害干扰是很重要的。这里所描述的系统就是用以检测在服务要求或建立过程中可能发生的干扰。
根据本发明,提供了这样一种在通信系统中检测服务干扰的方法,包括在一个基本呼叫状态模型(BCSM)基础上产生的抽象服务,和由基本呼叫处理及与数据项有关的服务所进行的数据处理。
下面将通过举例的方法来描述本发明,参考附图及表格,其中:
图1说明的是一个检测前提条件和访问类型冲突的机制;
图2是该服务程序的主窗口;
图3是该服务程序的Add窗口;
图4是该服务干扰检测程序的主窗口;
图5a及图5b说明了服务窗口列举的两种不同的版本;
图6是库窗口列表;
图7是干扰窗口列表;
图8是排它原则窗口;
图9是增加排它原则窗口;
表1是服务访问表;
表2是曾经访问表;
表3是前提及访问类型冲突;
表4是候选信息项;
表5是一组前提及访问类型冲突的例子,以及
表6是服务缩略符表。
准备了“服务抽象”,它封装了该服务的行为并且基于两个模型。
基本呼叫状态模型(BCSM)对呼叫处理子系统给予了高层描述:附加服务的处理是这样进行的,在一个起始检测点(DP)离开BCSM,然后当处理结束时在结束检测点重新加入BCSM。
第二个模型是关于由基本呼叫处理和服务来进行地数据处理过程。为了支持这个模型标识一组全局数据项。
服务抽象包括起始检测点DP、终止检测点DP,以及用于使标明拥有同一起始检测点DP的多个服务具优先权的位置标号。另外,对每一数据项都给出前提条件和访问类型。一个前提条件要求一个项还未曾被建立或修改。访问类型(建立、读取、修改、锁定、隐芷、消费)定义了将在某数据项上执行的操作。服务抽象并未揭示操作完成的细节,因此更象是由某个第三部分来揭示的。
1.检测点控制冲突:当起始检测点和终止检测点之间的服务范围屏蔽了另一服务的起始检测点时,就会发生这样的冲突。
2.前提条件和访问类型冲突。当某个服务有一个前提条件,即一个数据项必须尚未建立(或修改),且该数据项却已事先建立(或修改)时,就会发生前提条件冲突。当某个数据项由不匹配的访问类型来访问时,就会发生访问类型冲突。
3.对有限资源的竞争,这种情况发生在几个服务需要排它地利用同一资源的时候。1.简介
在IEEE的1993年8月通信杂志上,由E.Kuisch、R.Janmat、H.Mulder及I.Keesmaat所著的“一个用于服务干扰的实用方法”一文中,介绍了说明一个服务的过后及前提条件的概念。其中指出当服务A之后紧接服务B,那么如果服务A的过后条件与服务B的前提条件冲突时,就会产生一个服务干扰。这里只考虑由前提条件和访问类型冲突带来的干扰。
一个服务利用以下各种访问类型在数据项上执行各种操作:建立、读取、修改、锁定、隐藏。典型的数据项包括:被叫方号码、主叫方号码、帐户号码等。所有访问列表取代服务前提条件。用到了两种服务前提条件:先前未曾创建的项,和先前未曾修改过的项。其他前提条件是隐含而非明确说明的,例如,如果一个项已被锁定了,那么它是不可以被修改的。服务干扰是通过将该服务的前提条件和访问类型与前面的服务访问相比较来发现的。假定所有服务是顺序执行的。
在服务生存周期的说明步骤期间以及在各数据项被分配给一个物理地址之前,前提条件和访问类型冲突有可能被发现。在后面某个阶段,将定义一些消息集合。每一个消息被定义为一个信息流,并且传送一组信息元素。尽管在许多场合下它们之间有紧密的映像,数据项和信息元素是不同的实体。因此研究信息流对于确定候选数据项是有益的。2.用于查找服务前提条件和访问类型冲突的模型
确定前提条件和访问类型冲突是基于由图1所示的一个概念模型的。该模型包含一个数据项的采集,它是由基本呼叫状态模型(BCSM)或是由某一个服务创建的。由BCSM创建的那些项将依赖于出口检测点。在一个数据项上应用一组访问类型来执行一些操作。用到了如下的访问类型标准操作:Create(C)—创建;Read(R)—读;和Modify(M)—修改。我们还发现有必要用到另外两个访问类型:Lock(L)—锁定,和Hide(H)—隐藏。锁定用于防止某数据项被修改,隐藏用于防止某数据项被读、修改或锁定。另外,可以将前提条件附加到某个服务,这要求某个数据项事先不得被创建(!C)或不得被事先修改(!M)。假定由BCSM的操作在最前面,然后是各服务排序进行。返回至BCSM可以有前提条件,(图1中没有显示出来)。
该模型具有不必说明消息集合或信息流的优点。3.服务访问和曾经访问表
为了找出前提条件和访问类型冲突,有必要为每个服务定义一个服务访问表。该表为所有的数据项指定了服务前提条件和访问类型的综合情况。表1给出了一个简单的例子。应注意到对于同一数据项可以允许有多种访问类型。
还需要另外一张表用于记录以前所有的服务序列(包括基本呼叫状态模型)所做过的所有访问。这张表被叫作曾经访问表,表2给出了一个简单的例子。
通过比较服务访问表和曾经访问表来找出冲突。表3例举了所有可能的冲突类型。第1行和第2行表示的是前提条件冲突,因为该相应的数据项已被事先创建、修改过。第3行到第6行试图访问一个当前服务或事先未曾创建的数据项。第7行为重创建冲突的产生。一个已被锁定的项不能有修改访问(第8行),一个已被隐藏的项不应已被读、修改、或锁定(第9~11行)。4.用于找出服务前提条件和访问类型冲突的算法
考虑服务A和B,按序操作(图1),第1步是测试在服务A和基本呼叫状态模型之间是否存在冲突。通过比较服务A的访问表和曾经访问表—即这里应是BCSM访问表,可以找到任何初始冲突。然后,将曾经访问表更新为包括由服务A所做的任何访问。这样再比较服务B的访问表和已更新的曾经访问表,可以进一步找出任何冲突。为确定个附加服务可以一直重新这个过程,就得到了如下的算法:
由BCSM访问表初始化曾经访问表;
当还有需测试的服务
开始
读出下一个将要被测试的服务名字;
从服务抽象中提取出服务访问表;
通过比较服务访问表和曾经访问表
测试是否存在冲突;
更新曾经访问表;
结束。
设想服务A后面跟着服务B会出现一组服务干扰。在A与B序列之间插入另外一系列服务对原有的干扰是不会造成任何影响的。这是因为曾经访问表包括了所有曾经做过的访问而不仅仅只是刚才前面的服务所做的访问。因此,在测试一个新的服务时,只需每次考虑它同一个服务的干扰。5.由前提条件和访问类型冲突带来的服务干扰的例子
以下给出了由不同类型冲突带来的服务干扰的例子。斜体字指的是数据项。前缀!(例!C和!M)指的是NOT-非。5.1自动回呼(ABC)与终端键码保护(TKCP)
(C-!C冲突)
ABC服务允许被呼叫方自动回呼最后一次呼叫它的主叫方。这就涉及automatic dialled number(自动拨号号码)的创健。TKCP服务能使某个用户通过自定义键,例如PIN码来保护自己的线路。呼叫者需要输入这个键。为了做到这一点呼叫者需要知道目的地,这就得出一个前提条件即automatic dialled number必须未曾被创建。5.2无条件转发呼叫(CFU)与终端键码保护
(M-!M冲突)
CFU服务将呼叫重定向,于是将修改called party number(被呼叫方号码)。而TKCP服务要求呼叫者知道目的地,这又得出一个前提条件即called party number必须不曾修改过。5.3安全保护与授权码
(C-C冲突)
这两个服务都要求呼叫者输入一个个人身份号码,那么就造成了PIN的多重创建。5.4发起呼叫保护(OCS)与无条件呼叫转发(CFU)
(L-M冲突)
OCS服务允许用户根据一个保护表指定哪些既能被限制又能被允许的出呼叫。called party number(被叫方号码)被锁定以防止将来重定向,即可以阻止保护处理。而CFU服务则会修改called party number(被叫方号码)。5.5主叫线路标识限制(CLIR)与主叫线路标识显示(CLIP)
(H-R冲突)
CLIR服务允许主叫方限制将自己的号码显示给被呼叫方。CLIP服务则允许在被呼叫方提供呼叫方的号码。CLIR服务将calling party number(呼叫方)隐芷,而CLIP服务将读该主叫号码。5.6标准干扰分类
我们希望上述例子能够形成几个广泛知道的干扰类别的基础。许多服务要由翻译或由转向修改called party number(被呼叫方号码),其他一些服务有一个前提条件,即被呼叫方号码不可以被修改。因此5.2部分给出的例子只是干扰类别大家族中由called party number(被呼叫方号码)标明的一类的例子。6.服务访问表的创建
这包括两个方面:对适当的数据项的标识;说明每个服务和每个数据项的前提条件和访问类型。
表4给出了一组基本的候选数据项。这些是通过检查服务说明选出的,包括经标准化的信息流。很直观更为现实的列表会含有50个或100个数据项。只有由单一或由从属过程服务用到的项一般避免列出。
表4中第1组数据项与呼叫建立有关。called party number(被呼叫方号码)假定与所拔数字等同的。翻译被拨数字的服务创建一个transleted number(翻译号码)项。数字翻译不包括呼叫转移或重进行路由选择。calling party number(主叫方号码)有时被称作主叫线路id。在一个非成功的呼叫建立尝试过后,一些服务创建一个automatic dialled number(自动拨号号码),这样可以继续下一次尝试。
PIN(个人身份号码)这一项是由那些要求呼叫者输入个人身份号码的服务来服建的。为了简化只显示了一个PIN项,尽管有可能需要多个PIN来满足所有服务的需要。
接下来一组数据项与计费有关。在缺省情况下由呼叫方付费。存在某些服务可以对指定帐户或信用卡计费,因此相应由这些服务创建accout code(帐户码)或credit card number(信用卡号码)。免费电话类型的服务对被呼叫方计费并创建charge calledparty(对被呼叫方计费)这一数据项。另外一些服务分摊费用因此创建chage both parties(由双方付费)这一数据项。
最后一组数据项与资源竞争有关。这个主题在下一部分考虑。
在表5中给了一组前提条件和访问类型的例子,为了完整还在表6给出了服务缩写列表。表5只是用于图例说明而非定义性的。它也可用于测试计算机软件。假定一个呼叫被转向时主叫方号码未曾修改,尽管这不总是对的。有些服务包括好几方(某一方的号码跟在下划线之后),例如免费时回呼。如果CBWF_1在呼叫建立中检测到“忙”状态,它就创建一个自动拨号号码。当被呼叫方变为空闲时,CBWF-2会重新开始一个新的呼叫建立,当然,要假定主叫方仍保持空闲的状态。7.对基本算法的扩展
在第4部分描述的算法中读出一个指定的服务序列,但并没有检查其顺序是否合法有效。若给每一个服务一个唯一的十进制顺序号码,则可以建立起正确的顺序了。
如果一个服务的起始检测点和终止检测点不同的话,可以产生一系列被该服务屏蔽的检测点的列表。那么如果某个服务的起始检测点处在该列表中的话,就不可能获得对这个服务的访问。这是一种控制类型服务干扰。这种无法被访问到的服务是无需包括在前提条件和访问类型冲突的测试中的。
当存在对有限物理或逻辑资源的竞争时会产生另外一类冲突。例如,一个用户可能不允许使用多于一个的桥。这种冲突可以通过引入另一个访问类型—消费访问类型来检测出来。第一个需要桥的服务将brige resource(桥资源)消费掉。后来再需要桥的那些服务也试图要消费桥资源,于是便造成了多重消费冲突。在更通常的情况下,一个用户可能被允许使用某个资源的多个事例。然而如果事例数目超过了允许的最大值时仍然会产生竞争。
8.软件
在此描述了两个软件程序作为可以用于执行服务干扰检测的例子:Servab和Sicheck。Servab程序允许服务抽象文件可以通过人机交互方式创建起来,而sicheck程序则允许对一组由其服务抽象文件定义的服务进行干扰检测。Sicheck程序使用了如下两种算法进行干扰检测:
·基于控制的方法—使用服务检测点(DP)
·基于数据的方法—使用数据库类型的访问定义,也具备标明某些资源冲突的能力。
在实际应用中,例如系统X的呼叫处理软件,其抽象信息很难自动得到,因此就同时需要使用Servab程序和Sicheck程序。系统X是最初安装在英国的一个存贮程序控制电话交换系统。在智能网络(IN)应用中,似乎要开发出一种系统,能够从某个服务创建环境(SCE)产生的数据中提取出服务抽象。Servab程序的使用可以被看成是一种能够尽早使用Sicheck程序中体现的干扰检测方法的权宜之计。
下面将介绍这两种程序,第9节和第10节介绍servab程序的用户界面,第11~15节介绍sicheck程序的用户界面,而第16节则是描述这两个程序的软件。9.Servab程序概述
Servab允许通过人机交互的方式创建服务抽象文件。图2显示了该程序的主窗口。每一个抽象具有如下的元素:
·服务标识符
这是该服务的缩语。用来在Sicheck程序干扰检测中标识该服务,同时还用来构成抽象文件的文件名。这一项是强制性的。
·服务名
这是该服务的描述性名字。如果它不是用户指定的,缺省为服务标识符。
·BCSM类型
这是从一个弹出式菜单中选出的。当前提提供的可选项有:Q.1214 CS-1′、Q.1204 CS-N和系统X。
·起始检测点(DP)
必须指定一个起始检测点(DP)。
·位置标号
这应为一个正整数,这一项必有。一个服务的优先权是由其起始检测点和位置标号综合指定的,可参考分段式呼叫模型中呼叫链的段顺序。Sicheck程序使用某个需要进行干扰检测的服务的位置标号和起始检测点来为它安排次序。
·终止检测点(DP)
可以有任意多个终止检测点,但至少要有一个。
·冲突检测点
这是一系列与正在描述的服务发生冲突的检测点的列表。在sicheck程序中,任何后来的服务如果其起始检测点在这些冲突检测点之列的话就会产生一个控制冲突干扰。这是当BCSM类型发生改变或给定了起始检测点或终止检测点时自动生成的列表。
·入口记录列表
一个入口记录包括一个数据项和一个前提条件或是一个访问类型。可以指定任意多个入口记录,该给定的列表应该完全地描述出该服务的前提条件和各种动作。每一个入口记录都是用图3所示的Add(增加)窗口来建立的。图3中显示了一个可用的信息项标准列表。用户可以从所示菜单中选出新的信息项加到该列表中,还可以调入或存贮信息项文件(见第10节)。图3还显示了可供使用的访问类型和前提条件。10.Servab程序的选项
在Servab程序的主窗口的底部的菜单包括4个选项,用户可以装载或存贮服务抽象文件及数据项文件,可以清除主窗口定义的所有数据,还可以退出该程序。
·Load-Abstract装载抽象
选择这个选项,会显示出一个文件选择窗口,用户可以浏览目录结构并指定一个将装载的服务抽象文件。若装载成功,该文件的信息将在主窗口中显示出来。如果在上一次存盘之后用户又对当前的抽象文件进行过修改,则会给用户一个警告,并给出选项,在一个新文件被选择之前是存贮还是中断装载。所有的服务抽象文件都带有扩展名“.abs”。
·Load-Information装载信息
选择这个选项,会显示出一个文件选择窗口,用户可以浏览目录结构并指定一个将被装载的数据项文件。若文件装载成功,则该文件的数据项会被用来形成图3中所示的数据项菜单。如果在当前数据项文件上一次存盘之后用户又增加了某些新的数据项,则会给用户一个警告提示,要求用户选择在新文件能被选择之前是存贮还是中止装载。所有的数据文件都带有扩展名“.inf”。
·Save-Abstract存贮抽象
选中这个选项,先检查在主窗口中输入的所有数据,若认可则将当前服务抽象存贮在当前工作目录的一个叫做“服务标识符.abs”的文件中,若该文件原来存在则自动覆盖旧文件。
·Save-Information存贮信息
这一选项显示出一个文件选择窗口,用户可以在此浏览目录结构并指定当前数据项列表将存贮的一个数据项文件名,(那些在当前数据项菜单中的)。所有数据项文件都带有扩展名“.inf”。
·Clear清除
这个选择项将主窗口中的数据全部清除掉。如果在上一次存盘之后,有关当前抽象的信息又发生了变化,则用户会得到一个警告提示,要求选择是在清除数据之前先存盘还是中止清除。
·Quit退出
这个选项将退出程序。在上一次存盘之后如果用户又修改过有关当前抽象的信息或在数据项中加入了新项,则会得到警告提示,要求选择在退出程序之前先存盘或是中止退出程序。11.Sicheck程序概述
Sicheck程序检测在各服务之间是否存在干扰。它可以检测任意多个服务之间的干扰,也可以检测某一个服务与一个服务库之间是否存在干扰。任何被发现的干扰或控制冲突都会显示给用户,使用户可以清除那些不希望出现的干扰,这可以通过显示说明或通过一组排它原则来实现。图4所示为该程序的主窗口。当将要公布一宗新服务时可以应用第一种模式,即检测一组服务之间的干扰。而第二种模式,即检测某一个服务与一组已存在的服务之间的干扰,在服务创建中是更为常用的,且一般是在制定了一个新的服务之后但在未着手实现和推广使用之前进行。12.Sickeck程序的输入选项
Sicheck程序的上层菜单中的输入选项在其相应的下拉式菜单中有3个选项:12.1 Service List服务列表
这个选项会显示出一个窗口,其中包含了当前服务列表(见图5a和图5b)。列出的服务总是按照服务标识符的字母排序的,但既可以按服务抽象文件的全路径名显示(图5a),也可以以后面跟着服务名的服务标识符形式显示(图5b),(也同时参考13.1节)。可以用Add(加)选项增加新的服务到该列表中,也可以用Delete(删除)选项从该列表中删掉某些服务(在某服务上连续两次按动鼠标键也可以将其删除)。Add(加)选项会显示一个文件选择窗口,用户可以在此浏览目录结构,并选择一个服务抽象文件。12.2库列表
这个选项会显示出一个窗口,其中包含了库的当前列表(见图6)。一个库是一个包含一组服务抽象文件的目录。列表中的目录总是按字母顺序排序。可以通过Add(加)选项在列表中增加库,也可以通过Delete(删除)选项从列表中删掉某些库,(也可在某库上连续两次按动鼠标键来将其删除)。Add(加)选项将显示一个文件选择窗口,用户可以在此浏览目录结构并选择一个含有服务抽象文件的目录。12.3读原则
这个选项允许用户装载一个先前创建的排它原则文件(见第15.2节)。它显示一个文件选择窗口,用户可以在此浏览目录结构并选择一个要装载入的原则文件名。所有的原则文件带有扩展名“.rul”。13.Sicheck程序的Option选项中的选项
Sicheck程序的上层菜单中的Option选项在其相应的下拉式菜单中有两个选项,每个选项都有两个子选项:13.1 Service List服务列表
通过这个选项控制在服务列表中服务显示的方式(见图5和第12.1节)。用户可以选择显示每个服务抽象文件的全路径名(显示文件子选项),或选择显示后面跟着每个服务名的方式来显示服务标识符(显示名字子选项)。13.2干扰列表
通过这个选项控制在干扰列表中干扰排序及显示的方式。(见图7和第15.1节)。用户可以选择按数据项字母对干扰排序(按服务排序子选项)。如果干扰是按数据项排序,则数据项首先出现在每一次报告的干扰中。如果干扰按第一个服务排序,则首先出现的服务标识符和干扰按每个第一个服务中的数据项排序。14.Sicheck程序的检测选项
Sicheck程序的顶部菜单的Check(检测)选项在其相应的下拉式菜单中有两个选项:14.1 Service服务
这个服务选项启动对当前服务列表(12.1节)中所有服务之间的干扰检测。对这些服务按照它们的起始检测点和位置标号定义的顺序进行检测。若发现任何干扰,则显示干扰列表(图7)。14.2 Library库
这个库选项启动对当前在服务列表中选中的服务与当前在库列表中选中的库中的所有服务之间的干扰检测(见12.1和12.2)。对这些服务按照它们的起始检测点和位置标号定义的顺序进行检测。可从服务列表和库列表中选择服务和库。若检测到任何干扰,则显示干扰列表(图7)。15.Sicheck程序中的干扰选项
Sicheck程序的顶部菜单的Interactions(干扰)选项在其相应的下拉式菜单中含有5个选项:15.1显示干扰
Sicheck程序检测两类干扰:任何控制干扰,以及有关前提条件和与服务数据项(第9节)相关的访问类型的干扰。当一个服务或库检测成功完成并且发现了干扰存在之后,则会显示干扰列表(图7)。干扰经过排序,这样访问类型干扰总是出现在控制冲突之前。访问类型干扰或按数据项排序,或按其后跟随一个第一服务中的数据项的第一服务排序(见6.2节)。控制冲突总是以第一个服务排序。每个控制冲突和访问类型干扰(当按数据项排序)的格式如图7中所示。当以第一服务排序访问类型干扰排序时,每个在列表中的干扰采取以下格式:
<服务-1><访问类型><信息项><服务-2><访问类型>
干扰列表实际上由两个列表组成:希望的干扰列表和排除/删除的干扰列表。可以通过Remove(删除)选项或在相干扰上连接两下鼠标的方法将某些干扰从希望的干扰列表中删除(这样它会被放在排除/删除列表中)。可以通过Restore(恢复)选项或在相应干扰上连按两下鼠标,将干扰恢复到想要的列表中(并因此从排除/删除列表中移走)允许用户定义任意多个排它原则,以强制干扰从希望的列表移入排除/删除列表中(见15.2节)。请注意被排除的干扰不能重新恢复,而被删除的干扰不能被排除。15.2编辑排除原则
干扰可以通过排它原则从希望的干扰列表中排除掉。Editexclusion rules(编辑排除原则)选项输出一个窗口,其形式如图8所示。该列表中的是一条原则标明了与某一特定数据项有关的干扰。还可进一步细化,标明干扰中牵涉到的第一个服务和第二个服务的特定前提条件和访问类型。
Add(加)选项允许用户通过一个如图9所示的窗口增加一条新原则。数据项是从一个由可用数据项构成的菜单中选择的,访问类型(或前提条件)则是从类似图3所示菜单中选择出来的。Edit(编辑)选项允许用户编辑当前选中的排它原则(这也可以通过在相应的排它原则上连接两下鼠标来得到),而Delete(删除)选项将当前选中的原则从列表中删除。15.3应用排它原则
这个选项只是将所有指定的排它原则应用于干扰的完整列表。请注意那些已显式地从Wanted list(希望的列表中)Remove(删除)的干扰不受排它原则的影响。15.4 Save rules存贮原则
这个选项显示一个文件选择窗口,用户可以在此浏览目录结构指定一个原则文件名来存贮当前的排列原则列表。所有的原则文件以“.rul”为扩展名。16.软件
Servab程序和Sicheck程序拥有一些共同的数据结构、全程.数据和函数。16.1包含文件
comdefs.h -两个程序的公用定义
comtypes.h -两个程序共用的数据结构类型定义
comfunc.h -两个程序公共函数的声明
comglob.h -两个程序公共全程数据的声明
abstype.h -servab程序结构类型定义
absfunc.h -servab程序函数说明
absglob.h -servab程序全局数据说明
sicdefs.h -sicheck程序用到的定义
sicfunc.h -sicheck程序函数说明
sicglob.h -sicheck程序全局数据说明
sictyps.h -sicheck程序结构定义16.2源文件16.2.1公共文件
comcode.c -包括如下函数:有关从文件中读一个服务抽
象的函数,向一个入口记录列表中增加某些
数据项记录和访问类型,释放公共数据,以及
将访问类型串转换成访问类型值。
strfuns.c -包括一些操作及维护按字母排序的、动态创建
的串列表(STRLIST结构)的函数。16.2.2 Servab程序
abstract.c -servab程序的主函数(Main)
abinits.c -主题工具、全局数据以及数据项初始列表的初
始化函数
bcsm.c -与将BCSM数据文件读入内存,并根据给定的起
始检测点和终止检测点来计算出冲突检测点列
表有关的函数
entries.c -创建及控制与增加、编辑某服务抽象的数据项
和访问类型的记录相关的主题工具的函数
filing.c -与读、写服务抽象文件及数据项文件有关的函数
items.c -创建并控制与向数据项菜单中增添新数据项有
关的主题工具的函数
listfuns.c -与从某记录列表中删除某些与记录有关、及与
记录串的创建有关的函数
mquest.c -创建并控制这样一些与提示用户在上次存盘
之后或数据发生变化则需清除、重新装载或退
出的主题工具有关的函数
toplevel.c -创建并控制这样一些主题工具,即有关servab
程序主窗口的函数16.2.3 Siceck程序
sicheck -sicheck程序的主函数(Main)
dochecks.c -这些函数负责读和创建执行服务或服务-库
干扰检测所需的所有数据
interacts.c -这些函数负责实际执行对两个服务进行干扰
检测并且构造、操作干扰列表
rules.c -这些函数负责创建、维护、读、写排它原则列表
sicfree.c -这些函数负责释放各种全局数据项
sicinput.c -这些函数负责创建、维护服务列表和库列表
sicints.c -这些函数负责创建并控制这样一些有关干扰列
表的显示工具
siclist.c -这些函数负责创建并控制与库列表有关的工具
sicmenu.c -这些函数创建并控制sicheck程序的工具主
菜单
sicrules.c -这些函数创建并控制与排它原则列表有关的
工具
sicslist.c -这些函数创建并控制与服务列表有关的工具16.3.数据结构
在下面的一节,是一组说明数据结构的列表,包括三个成员:一个指针数组和两个整数。指针数组是动态创建的(即是,每当需要时,分配给该数组的空间会增加),第一个整数存贮了当前数组中指针的个数,第二个整数存贮着数组中可以容纳的最大的指针个数(即当第一个整数等于第二个整数时,分配给该数组的空间必须增加)。
ACCESS:一个访问类型且与标识/描述串相关
ENTRY:一个数据串和一个访问类型
INFOLIST:描述某个服务抽象所需的全部信息:服务标识
符、服务名,BCSM类型、位置标号,起始检测
点、终止检测点的个数以及一个终止检测点的
数组,冲突检测点的个数以及一个冲突检测点
数组,和一个INFOLIST
STRLIST:串的列表
BCSMINFO:一个BCSM标识串以及与之相关的文件名
CDPINFO:一个控制检测点的数组,与一个起始检测点以及
一个标明该起始检测点是否有效的标志相关
REDACC:一个数据项串,以及一个整数数组,以及一个指明
与某个特定服务的数据项相关的访问类型的整
数数组REDACCLIST:REDACC结构列表SERVENT:一个服务标识符、一个服务名,以及一个与该特
定服务的全文件名相关的名字SERVLIST:SERVENT结构列表SERVICE:与ABSTRACT结构非常相似,只是它不包含服
务名,但它包含一系列“被减少的”数据项/访问
类型信息(REDACCLIST),而非记录的全部列
表(INFOLIST)SABSLIST:SERVICE结构列表ACCESS-INFO:一个数据项串,和两个访问类型用于存贮
与某访问类型干扰相关的信息。DP INFD:两个起始检测点,用于存贮与某个检测点控制冲
突干扰有关的信息INTERACTION:一个干扰类型(任何控制冲突的访问类型
之一),一个状态(WANTED、
EXCLUDED或REMOVED),这两个相
互干扰的服务的标识符,与该干扰有关的
说明信息以及将该干扰描述给用户的串。
与该干扰有关的说明信息包含在一个由
一个ACCESS_INFO和DP_INFO构成
的联合结构中INTERLIST:INTERACTION结构列表及另两个成员:两个
整数,分别用于存贮当前列表中访问类型干扰
的个数和冲突控制干扰的个数。
INTRULE:一个数据项串,与这两个干扰服务相关的访问类
型,以及将该排它原则描述给用户的串
RULELIST:INTRULE结构列表16.4全程数据16.4.1公共数据
所有对两个程序相同的全局数据都定义在comcode.c中。
accstrs -一个NUMACC ACCESS结构数组,用于存贮当
前在这两个程序中可用的访问类型的列表
bcsminfo -一个NUMBCSM BCSMINFO结构数目,用于
存贮当前可用的各BCSM类型16.4.2.Servab程序
serab程序用到的所有全局数据都定义在abstract.c中。
abstract -一个ABSTRACT结构,用于存贮与当前服务有
关的所有信息。
itemlist -一个STRLIST结构,用于存贮程序中可用的数
据项当前列表。
bcsmdps -一个MAX DP+1 CDPINFO结构数目,用于存
贮由相应的BCSM文件中读出的BCSM控制
检测点信息。
abschngd -一个标志,用于标明在一次存入文件之后服务
抽象信息是否发生过变化。
infchngd -一个标志,用于标明在上一次存入文件之后用
户是否又在列表中增加过数据项。16.4.3 Sicheck程序
sicheck程序用到的所有全局数据都定义在sicheck.c中。
services -一个SERVLIST结构,用于存贮用户输入的服
务列表。
libraries -一个STRLIST结构,用于存贮用户输入的库的
列表。
infoitems一个STRLIST结构,当用户定义排它原则时,用
于存贮可以从中选择的数据项列表。
interactions -一个INTERLIST结构,用于存贮程序生成
的干扰的当前列表。
rules -一个RULELIST结构,用于存贮用户输入的排它
原则的当前列表。
servabs -一个SABLIST结构,用于存贮将要进行干扰检
测的服务抽象列表。
SIC_checktype -一个标志,用于标明所进行的干扰检测
的类型,(对在服务列表中所有服务进行
检测,或对服务库中的单一服务进行检
测)。
SIC_servlst_type -一个标志,用于标明当前所用的显示
的服务列表的类型,(是文件名或服
务名)。
SIC_inslst_type -一个标志,用于标明当前所用的干扰
排序的类型(是按数据项排序,还是按
第一个服务排序)。16.5用于计算冲突检测点列表的算法
冲突检测点列表是根据相应的BCSM文件中所包含的信息以及该服务的起始检测点和终止检测点计算出来的。每个BCSM文件都有一些说明行(每行以‘C’开头),后面跟着该BCSM的每一个有效起始检测点的行。每行检测点信息包含一个起始检测点后面跟着一系列后序检测点。在程序被装载,抽象文件被装载且当用户改变了服务的BCSM类型时,相应的BCSM文件被读入bcsmdps数组。在bcsmdps数组中的每个元素都包含一个整数据数组和一个有效性标志。在一个新的BCSM文件被读入之前,每个整数数组都初始化为0并且每个有效性标志初始化为FALSE。当相应的起始检测点从文件中读取并且后序的各检测点也都被读入,并且从下标0开始顺序放在整数数组中后,有效性标志就被置为TRUE。注意bcsmdps数组是直接按起始检测点索引的,因此该数组的第0个元素是永远不用的。
用于计算冲突检测点的算法码包含以下步骤:
·将整数数组(dps_following_startdp)初始化为0。
·按照bcsmdps数组,由服务的起始检测点开始,后面跟着
每个可能的后序检测点,为每个检测点标号n将dps_
following_startdp的第n个元素的值设置为‘1’,直到所
有后序检测点都被设置为‘1’为止。
·将另一个整数数组(controlled_dps)初始化为0。
·对服务的每一个终止检测点:
—若这个终止检测点等于起始检测点,则移向下一个终止
检测点。
—将数组dps_following_startdps拷贝到一个新的数组
controlled_by_this_range。
—按照bcsmdps数组,由一个指定的终止检测点开始,后
面跟着每个可能的后序检测点,为每个检测点标号n,将
controlled_by_this_range的第n个元素的值设置为
‘0’,直到所有后序检测点都被设置为‘0’为止。
—将controlled_dps同controlled_by_this_range进行
OR(或)运算,并将结果放在controlled_dps中。
·将controlled_dps中所含信息传到ABSTRACT结构中的
冲突检测点数组中。(即,如果controlled_dps的第n个元
素被设置成‘1’的话,将检测点‘n’放入ccdp数组)。16.6.干扰检测算法
对于干扰检测所涉及的每一个服务,其抽象文件都被读取且创建一个SERVICE结构。每个SERVICE结构包含一个已减少的访问信息的列表。例如,我们考虑具有如下数据项/访问类型记录的服务:
未修改过:被呼叫方号码
锁定:被呼叫方号码
创建:PIN(个人身份号码)
未创建:自动拨号号码
上述每条记录都被存贮在一个ABSTRACT结构中的ENTRY结构中。这4个ENTRY被转换成3个REDACC结构,每个对应一个数据项。与每个数据项相关的整数数组中存贮着访问类型信息—一个‘1’代表一个已用过的访问类型,一个‘0’代表一个还未用过的访问类型。这些整数的顺序应为:NOTCREATED、NOTMODIFIED、CREATE、READ、MODIFY、LOCK、HIDE、CONSUME。
每个SERVICE结构被加到服务抽象列表servabs中。该列表按起始检测点的升序排列,而对每个起始检测点,又按其位置标号的升序排列。一旦这个列表完整了,则干扰检测也就执行了。如果要程序在所有服务之间做干扰检测,则用到如下的循环结构:
如果要求程序在某一个服务与一个服务库之间进行干扰检测,则用到下面的循环结构:
-->End If End For]]>
实际用于在两个服务之间检测干扰的函数首先检测访问类型干扰然后再检测控制冲突干扰。对于访问类型干扰,它含有一个冲突表。这只是一个整数标志组成的矩阵,这些标志在行、列中的顺序与其在REDACC结构中的访问类型整数数组中的顺序是一样的。标志的值或为TRUE(表明一个干扰发生)或是FALSE(没有发生干扰)。对访问类型干扰进行检测的源码具有如下的结构:
-->IF(标志为TRUE) 创建新的干扰且将其插入干扰列表 End If End For End For End For]]>
用于检测控制冲突干扰的源码只是相对于第一个服务的冲突检测点数组(ccdp)检测第二个服务的起始检测点。如果该起始检测点出现在ccdp数组中,则创建一个干扰且将它加到干扰列表中。16.7.库函数
有一些在程序中用到的函数通常是本地库中的一部分(例如,用于在窗口中输出的使用户必须响应的错误信息的函数,用于从文本文件中读取各种数据的工具函数,用于创建及控制文件选择的工具函数)。所有那些在程序中用到而不在标准库之列且也未在本节前面所列出的那些文件中定义的函数都在这些库中定义。
表1 信息项 服务前提条件 访问类型 项1 项2 项3 项4 项5 项6 … !M !C !M R L H R C L M
表2 信息项 曾经访问类型 项1 项2 项3 项4 项5 项6 … C R C H C R M C L C M
表3 信息项 曾经访问类型 服务前提条件 访问类型 项1 项2 项3 项4 项5 项6 项7 项8 项9 项10 项11 C C M C C L C H C H C H !C !M R M L H C M R M L
表4 信息项 被叫方号码 翻译号码 主呼叫方号码 自动拔号号码 呼叫等待标志 个人身份号码 帐号 信用卡号 被叫方付费 双方付费 桥资源 转呼计数
表5被叫方号码 主叫方号码 帐号 个人身份号 自动拨号号码PRE ACC PRE ACC PRE ACC PRE ACC PRE ACC AAB C C ABD!M M AC ACB_1 !M R C ACB_2 R ACC C C ACNI ADAC !M R AUTC C AUTZ C BN C CBWA_1 R C CBWA_2 R CBWF_1 R C CBWF_2 R CCC C C CCI R CD M CFU M CLIP !M R CLIR H CNA R COC CON CPM CRD M CRG R CW_1 CW_2 CW_3 R R DCR M !M R C DUP !M R FDC C FMD M FPH GAP LIM M LNS/D_1 C LNS/D_2 R MAS M !M R MCI B !M R MMC!M MSN NSN M OC !M R OCNI OCS_ORIG L C OCS_TERM !M R ODR M !M R OFA M C OFC M OUP!M L !C PNS M PRM M QUE REVC SCF_BUSY M SCF_NO_ANS M SEC C SPL TCS !M R TDR M TKCP!M L C TRA M !C TSO UDR R VOT!M
表6AAB AUTOMATIC ALTERNATIVE BILLINGABD ABBREVIATED DIALLINGAC ANSWER CALLACB AUTOMATIC CALLBACK AFTER BUSYACC ACCOUNT CARD CALLINGACNI AUTOMATIC CHANGE No.INTERCEPTIONADAC ADVICE OF DURATION & CHARGEAUTC AUTHENTICATIONAUTZ AUTHORISATION CODEBN BYPASS NUMBERCBWA CALL BACK WHEN AVAILABLECBWF CALL BACK WHEN FREECCC CREDIT CARD CALLINGCCI CALL CREDIT INDICATION CD CALL DISTRIBUTIONCFU CALL FORWARD UNCONDITIONALCLIP CLI PRESENTATIONCLIR CLI RESTRICTIONCNA CHARGE NUMBER ANNOUNCEMENTCOC CONSULTATION CALLINGCON CONFERENCE ADD ONCPM CUSTOMER PROFLIE MANAGEMENTCRD CALL REROUTING DISTRIBUTION(BUSY)CRG CUSTOMISED RINGINGCW CALL WAITINGDCR DESTINATION CALL ROUTINGDUP DESTINATION USER PROMPTINGFDC FIXED DESTINATION CALLFMD FOLLOW ME DIVERSIONFPH FREE PHONEGAP CALL GAPPINGLIM CALL LIMITERLNS/D LAST NUMBER SAVED/DIALLEDMAS MASS CALLINGMCI MALICIOUS CALL IDENTIFICATIONMMC MEET ME CONFERENCEMSN MULTIPLE SUBSCRIBER NUMBERSNSN NIGHT SERVICESOC ORDER CALLOCNI OPERATOR CHANGED No.INTERCEPTIONOCS_ORIG ORIGINATING CALL SCREENING AT ORIGINOCS_TERM ORIGINATING CALL SCREENING AT TERMINATIONODR ORIGIN DEPARTMENT ROUTINGOFA OFF NET ACCESSOFC OFF NET CALLINGOUP ORIGINATING USER PROMPTINGPNS PERSONAL NUMBER SERVICEPRM PREMIUM RATEQUE CALL QUEUINGREVC REVERSE CHARGESSCF_BUSY SELECTIVE CALL FORWARD(BUSY)SCF_NO_ANS SELECTIVE CALL FORWARD(NO ANSWER)SEC SECURITY SCREENINGSPL SPLIT CHARGINGTCS TERMINATING CALL SCREENINGTDR TIME DEPENDENT ROUTINGTKCP TERMINATION KEY CODE PROTECTIONTRA CALL TRANSFERTSO TELEPHONE SERVICE OBSERVATIONUDR USER DEFINED ROUTINGVOT TELEVOTING