⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2824.txt

📁 RFC文档
💻 TXT
📖 第 1 页 / 共 4 页
字号:

由于CPL是一种标准化的语言,因此它可以允许第三方来创建或者定制服务,为了客户端服务.这些脚本既可以在终端用户所属的服务器上执行,也可以在服务提供者上执行.

@管理员的服务定义

服务器的管理员同样可以使用CPL,建立一些简单的服务,或者可以他们所控制的服务器的方针.如果服务器正在执行CPL服务,那么就需要延伸服务构架,使得管理员可以象用户一样创建脚本.

@WEB中间设备

最后,这里为创建服务以及用web界面定制服务,提供几条建议.下列环境中,CPL可以用后--尾(back--end):为了使用者的利益,一个网络应用程序可以自行建立一个CPL脚本,然后电话服务就可以执行服务,而不需要理解其他相关的细节.

5CPL的构造

    CPL脚本的创建其实还有很多方法.就象HTML有很多中构造方法一样,我们可以为一个CPL脚本构想很多中构造方法.

@手动

实在是相当的简单直接,CPL的脚本是可以由有一定知识的用户手动编写的.[5]中所描述的CPL,可以用文本方式以一种并不复杂的方式描述,因此手动编写也是相当方便的.

@自动操作脚本

CPL的控制可以由自动操作的方法来创建,举个例子,就象前面所描述的网络中间件.用一个简单的,以文本方式为语法的,标准的文本处理语言,就可以非常简单的编辑CPL脚本.

@图形用户界面工具

最后,用户可以使用图形用户界面工具来编辑CPL脚本.我们希望,如果CPL变的流行的话,大多数中等水平的用户可以使用这种方法.事实上,CPL很快就会用这个工具来开发,以后,脚本语言强有力的表达能力就会简单用图形方法表现出来.

6网络模型

    呼叫处理语言是要在一个基础上工作的,所谓的基础就是要以一个标准的Internet电话网络模型.尽管多种协议的细节会出现不同,但抽象的说,所有主要的Internet电话网络构架都是十分相似的,它们的主要特点都相差不多.这篇文档主要使用了SIP术语,因为它的经验与协议的都一样.

6.1模型组成

    在呼叫处理语言的网络模型中,Internet电话网络包含两个部分.

6.1.1终端系统

    终端系统是一种设备,它可以产生或者接收信号信息和媒体.它包含简单,复杂的电话设备,PC电话客户端,自动语音系统.CPL抽象理解,不用理会这些设备的细节性能.一个终端系统可以发出一个呼叫,同时也可以接收,续传或者舍弃一个呼叫.过程的细节(响铃,多重接线,等等)对于CPL来说,并不重要.

    出于对CPL的目的性,网关--举例来说,一个设备可以连接IP电话网络和PSTN--同样可以认为是一个终端系统.其他设备,比如混合器,防火墙,并不直接由CPL控制,所以这里暂不讨论.

6.1.2信号服务器

    信号服务器是一种设备,它可以暂缓或者控制信号信息.在SIP中,它们是代理服务器,重寄服务器,或者是注册器;在H.323中,它们就是网关.

    在执行安装信息时,信号服务器有三种事情要做.它们可以:

代理:向前将信息继续传递给其他网络,或者其他终端,或者可以将回复传回.

重寄:将一个回复信息传回给发送请求的那个服务器.

舍弃:通知正在发送的系统,安装请求并没有完成.

    RFC[2543][1]有代理和重寄的详细功能说明.终端系统有时也可以完成其他操作:完全拒绝与可能重寄.

    信号服务器也可以正常的断定用户的位置.不管是用注册方法(SIP注册,或者H.323RAS信息),静态构造,还是动态搜索,信号服务器一定要确定一种方法,通过这种方法,它可以确定用户当前的具体位置,并以次来决定是代理,还是重寄.

6.2成分冲突

    当终端设备处理一个呼叫,呼叫的实施请求可以处理多线称,通过网络的各个组成.开始时,起始的终端设备一定要先决定向那里发送请求.有两种可能性:发起人可能由于某种配置,那么它所有的请求都会发送到一个单一的当地的服务器;或者也有可能改变目的地地址,查找远方的信号服务器或者终端,以便找到向那里发送.

    一旦请求到达信号服务器,服务器就会使用它当地的用户的数据库,它的当地的方针,DNS决议,或者其他方法,来决定向下一个发送服务器或者终端系统.一个请求可能会经过几个信号服务器:从零开始(如果终端系统直接相连的化),按理来说,传递到其他信号服务器.另外,终端系统或者信号服务器(按理来说)都可以接收或者发送请求给其他任何一个.

    例如,第一种情况(图[1]),有两条可供呼叫信息选择的路径,对于第一条路径,呼叫发出者只知道一个用户的地址,因为这个用户正在试图连接,并且它被配置成向外发送信息,通过本地的一个向外发送代理服务器.因此,它会把请求传给当地的服务器,服务器可以通过地址,找到要发往的那个服务器,然后把请求传过去.

    如果是这样,目的地用户组织就可以使用多重配置来寻找用户.社团服务器会识别这个用户是那个部分的,然后把请求发给它所属部分的服务器,而用户就在当地服务器附近.(这与经常配置的电子邮件路由是相似的)对于这个请求的回复会按照原路返回.

    但是,对于第二条路径,呼叫发出者知道它正试图连接的特殊设备的地址,并且它没有设置成使用本地向外发送代理服务器.这种情况时,呼叫发出者就会直接连接目的地,而不通过任何服务器中转.

    那么,我们可以考虑一下,Internet电话信号服务器通常并不了解他们所"控制"的终端设备的状态,因为信号信息可能只是把它当成中转.由于结构学的局限性,造成了一些服务在执行时,会有很多限制.举例来说,网络系统并不可能确实的知道一个终端系统是忙还是闲;呼叫也可能根本不通过网络直接传递.因此,信号信息一定要明白的传递给终端系统来判定它们的忙闲;比如终端系统会恢复一个忙的信号.


      向外发送                              伙伴                区域
        代理                              服务器               服务器
       _______  输出代理连接               _______            _______
       |     |     伙伴服务器              |     |            |     |
       |     | -------------------------> |     | ---------> |     |
       |_____|                            |_____|            |_____|
Route 1   ^                                                    \寻找用户
         /                                                      \   
发送给代 /                                                        \ 
理服务器 /                                                         _|
   _______                                                      _______
   |     |   Route 2                                            |     |
   |     | ---------------------------------------------------> |     |
   |_____|      起始者直接连接目的地                             |_____|

  起始端                                                         目的地
图[1]:呼叫传递的可能路径

7CPL与网络模型的交互

7.1脚本的作用

    CPL脚本是在信号服务器上运行的,控制方面:比如代理,重寄以及遗弃都是为了特殊的呼叫.它并不试图改变或调整多重信号服务器的行为,或者象"GLOBAL FUNCTIONAL PLANE"只能网络构架[6]中描述的那样.

    更多细节,脚本信号服务器的用户坐标功能.就象6.1.2中描述的那样,信号服务器通常可以确定用户通常使用的本地的数据库.CPL脚本取代了这种基本数据库查找功能;它能够提供注册信息,呼叫请求的细节,以及它想查找的额外信息,并且还可以选择那些信号动作来执行.

    理论上,脚本可以看做是条件/动作对的列表;如果注册,请求,额外信息的一些特征,与已知的条件相符,然后相应的动作(或者其他合适的动作集合)就会被执行.在这些环境中,以第一个动作和其他辅助动作为结果的附加动作会被执行.如果没有条件符合请求,信号服务器的标准动作--当地的数据库查找,举例--会被执行.

7.2哪一个脚本在执行

    CPL脚本通常是与特殊的Internet电话地址相连的.当一个呼叫确立的请求到达了CPL服务器时,那么那个服务器相连的资源,与目的地的地址,就是CPL脚本的数据库请求中列出的;如果一个匹配,相应的脚本就会被执行.

    一旦脚本被执行,如果它已经选择要执行一个代理动作,一个新的Internet电话地址就会作为代理的目的地.一旦事情发生,那么服务器就会重新检查脚本的数据库,看看是否还有其他相关的地址;如果有,那么脚本就会被执行(声明脚本不会尝试去代理发送给一个服务器已经连接过的地址).如果想深入了解这个过程的细节,以及一个服务器运行脚本时到底做了些什么,也就是脚本起始地址与目的地地址的关系,请看9.2.

    大体上说,在Internet电话网络中,一个地址就意味着两件事:用户或者设备.用户的地址涉及到特殊的个体;例如sip:joe@example.com,不管那个用户现在在那里,或者他或她在使用什么样的设备.设备地址,相比较而言,涉及到一个特殊的物理设备,例如:sip:x26063@phones.example.com.另外,中间(intermediate)的地址类型同样是可行的,并且有一定的用途(比如一个地址"我的电话,不管它在那里,它已经注册了.").但我们不希望它们频繁使用.CPL脚本对于当前所连接的地址类型是不知道的;让脚本与用户地址相连是大多数服务器的工作,所以没有理由让脚本与其他形式的地址相连.递归的作用过程允许一个脚本与几个用户地址相连;因此,一个脚本可以执行一个动作"试着在我的电话上执行.",而一个设备脚本则可以说"如果我不在家,就不接听电话."

    对于一个CPL脚本而言,也可以不只与一个特殊的Internet电话地址相连,而是与整个信号服务器所有的地址相连,或者与更大的集合相连.例如,管理员可以配置一个防止呼叫的系统,或者列出一个禁止呼叫的地址清单;这就会对所有人都适用,但同时,用户还是拥有他自己的常用脚本.准确的说,当这种脚本要在递归过程中执行时,它就要准确的按照管理员的脚本执行.9.2节有详细论述.

7.3脚本在那里执行

    用户可以在任何一个网络服务器上运行脚本,只要他们的呼叫确定请求可以通过,并且可以通过服务器建立互信的关系.举例来说,就象图[1]中描述的那样,起始用户在输出代理上运行一个脚本,目的地用户同时在伙伴服务器和部分服务器运行脚本.这些脚本通常是包含不同函数的,只是连接在它们所运行的服务器;在总服务器上运行的脚本可以用来定制用户希望找到的那部分,这样,不管脚本在哪个部分服务器,都可以使用.一些服务,比如过滤不想接收的呼叫,可以在任何的服务器上运行.详情请看9.3节.

    这个模型不只指定了用户所在的网络服务器.大体上说,这可以通过它们所在的当地的Internet电话服务器注册它们自己;当然也可以通过外型指南,或者通过自动处理手段,就象本地服务协议[7].有人提议,上述服务器的自动处理手段应该包含一个区域,来判断是否允许用户升级他们的CPL.

8呼叫处理语言脚本的创建和传输

    用户创建呼叫语言处理脚本,通常是在终端设备上,然后通过网络传输给信号服务器.脚本将坚持服务于信号服务器,知道被改变或者删除,除非它被赋予一个有效时限;支持CPL脚本的网络系统需要非常稳定的存储.

    终端设备,用户以它为基础创建脚本,不需要承担任何到其他终端的连接,在那里呼叫被处理.例如,CPL脚本可能在PC上创建,但是,呼叫可能只设定为在电话上接收.事实上,以它为基础创建脚本的设备并不一定是终端设备.详情请看6.1.1;例如,用户可以在一个独立的终端上创建和升级一个CPL脚本.

    CPL同样不需要在网上的终端设备和信号服务器附近的设备才能创建.例如,用户可以继续向前传递他或她的呼叫,传个更远的地方.

    具体的方法,通过它可以传递脚本去服务器,还需要确定;还有好多方法需要进一步解决.建议的方法,包括网络文件升级,SIP注册信息的有效载荷,遥远方法的调用,SNMP,ACAP,LDAP,以及遥远文件系统,比如NFS.

    用户可以得到当前脚本,不管是从网络,还是终端设备,从而进行编辑.信号服务器可以报告错误,并且与用户,脚本相连.静态错误可能在升级时被检测出来,运行的错误也可能发生.

    用户可以相信与多重信号服务器之间的友好关系(详情请看7.3).用户可以选择升级任何一个服务器的脚本.这些脚本可能是完全独立的.

9特征冲突(interactions)操作

    特征冲突是一个术语,通常是在电话系统中使用的,尤其是当两个或更多的请求特征发生冲突或是不明确时[8].特征冲突的重点:就是它在和呼叫处理脚本语言一起执行时,大致分成三类:同一个服务器上的特征--特征,同一个服务器上的脚本--脚本,服务器--服务器.

9.1特征--特征之间的冲突

    由于前面几章中讨论的事情条件的清晰本质,特征--特征之间的冲突并不能算是一个问题,在呼叫处理语言环境中.然而,一个传统的电话特征的捐献者(subscriber),可能不会想到要同时准备对"呼叫等待"和"呼叫忙"服务,用户创建的CPL脚本只对一个行为有反应"当线路忙时,呼叫到达".
为了有利于创建而提供一个好的用户界面,或者提供一个CPL服务器可以在升级脚本时检测没有达到目的的代码,反对的条件/动作对是可能被避免的.

9.2脚本--脚本之间的冲突

    只有当一个服务器为一个呼叫提供多重脚本时,脚本--脚本之间的冲突才会出现,就象7.2中讲的一样.这可能在下列情况中发生:如果呼叫发出者和目的地在各自不同的服务器上,有不一样的脚本;
当一个脚本向前传递一个请求时,那个地址有也有一个脚本;或者一个管理员级的脚本被认为是一个用户的脚本.

    对这种冲突的解决方法,就是要在正在执行的脚本中决定一个顺序.在这个顺序中,"第一个"脚本最先执行;如果脚本允许呼叫代理,脚本传递到的另一方地址,同样会被执行.当"第一个"脚本向前传递请求时,这些在"第二个"脚本抵达的行为就会被认为是新的请求.当第二个脚本发送回复时,回复就会以相同的方式抵达第一脚本,就象呼叫抵达在网络之外.注意:在一些情况中,向前传递可能会是递归的,CPL脚本一定要对向前(foreword)的循环特别小心.

    理论上,这也可以看成是互不相连的服务器上执行各自的脚本.由于CPL脚本的构架设计成允许脚本在多重信号服务器上执行,在寻找用户期间,概念上,我们可以把脚本--脚本之间的冲突转变为服务器--服务器之间的冲突,就象下部分中讲的那样,应该尽量减少我们需要面对的冲突种类.

    接下来,要解决的问题,就要将脚本正确的进行排序.为了处理这样一种情况,当一个脚本向一个地址传递时,该地址同时有另外一个脚本,顺序是明显的;另外的一些情况就较为敏感了.当起始者和目的地同时有两个脚本,起始者的脚本应该在目的地的脚本执行前执行;这就意味着起始者可以做地址传输,呼叫过滤,等等,在目的地地址和顺序被确定之前.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -