osip源代码框架详解
- 格式:doc
- 大小:1.08 MB
- 文档页数:36
OSI参考模型与TCPIP五层⽹络架构详解OSI七层模型OSI的来源OSI(Open System Interconnect),即开放式系统互联。
⼀般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的⽹络互连模型。
ISO为了更好的使⽹络应⽤更为普及,推出了OSI参考模型。
其含义就是推荐所有公司使⽤这个规范来控制⽹络。
这样所有公司都有相同的规范,就能互联了。
OSI七层模型的划分OSI定义了⽹络互连的七层框架(物理层、数据链路层、⽹络层、传输层、会话层、表⽰层、应⽤层),即ISO开放互连系统参考模型。
见下表OSI参考模型各层的解释应⽤层为应⽤程序提供服务表⽰层数据格式转换,数据加密会话层建⽴,管理和维护会话传输层建⽴,管理和维护端到端的链接⽹络层IP选址及路由选择数据链路层提供介质访问和链路管理物理层以⼆进制数据的形式在物理媒体上传输数据每⼀层实现各⾃的功能和协议,并完成相邻层的接⼝通信。
OSI的服务定义详细说明了各层所提供的服务。
某⼀层的服务就是该层及其下各层的⼀种能⼒,它通过接⼝提供给更⾼⼀层。
各层所提供的服务与这些服务是怎么实现的⽆关。
各层功能定义详解应⽤层OSI参考模型中最靠近⽤户的⼀层,是为计算机⽤户提供应⽤接⼝,也为⽤户直接提供各种⽹络服务。
我们常见应⽤层的⽹络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
表⽰层表⽰层提供各种⽤于应⽤层数据的编码和转换功能,确保⼀个系统的应⽤层发送的数据能被另⼀个系统的应⽤层识别。
如果必要,该层可提供⼀种标准表⽰形式,⽤于将计算机内部的多种数据格式转换成通信中采⽤的标准表⽰形式。
数据压缩和加密也是表⽰层可提供的转换功能之⼀。
会话层会话层就是负责建⽴、管理和终⽌表⽰层实体之间的通信会话。
该层的通信由不同设备中的应⽤程序之间的服务请求和响应组成。
传输层传输层建⽴了主机端到端的链接,传输层的作⽤是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。
网络OSI七层参考模型一、OSI参考模型在整个参考模型中,下层是为上层提供服务。
二、TCP/IP常见的协议(一)应用层为应用软件提供接口,使应用程序能够使用网络服务,应用层协议指定相应的传输层协议,以及传输层所使用的端口等。
应用层的PDU被称为Data(数据)。
Telnet:端口号23,使用传输层TCP协议,远程接入协议,提供远程管理服务,通过Telent客户端程序连接到服务器,用户在客户端中输入命令,这些命令在服务器端运行。
FTP:端口号20、21,使用传输层TCP协议,文件传输协议,主要用于文件的下载和上传,采用C/S((主机/服务器)结构。
TFTP:端口号69,使用传输层UDP协议,简单的文件传输协议SNMP:网络管理协议,一般用在管理平台,可将交换机、路由器等一些设备信息上传到网管平台HTTP:端口号80,使用传输层TCP协议,超文本传输协议,提供浏览网页服务。
SMTP:端口号25,使用传输层TCP协议,邮件传输协议DNS:域名解析协议,将域名翻译成IP地址进行访问网址DHCP:动态主机配置协议,自动匹配IP地址(二)传输层传输层协议接受来自应用层协议的数据,封装上相应的传输层头部,帮助其建立端到端的连接。
端口号的取值范围:0-655350-1023:知名端口号,发送过程中会在发送端随机匹配一个端口号,并且是在1023之外未使用的。
传输层的PDU被称为Segment(段)1.TCP一种面向连接的、可靠的传输层通信协议。
在传输前先建立连接,之后才可以传输,传多少接收多少,丢包之后重传确保全部收到。
使用场景在文件传输或者文档传输中使用。
(1)TCP的建立-三次握手A.主机1向主机2进行syn(查询B.主机2向主机1进行syn查询,ACK确定C.主机1进行ACK确定----------TCP连接建立--------------(2)TCP四次挥手A.主机1向主机2发送FIN请求断开连接B.主机2向主机1发送ACK确认C.主机2向主机1发送FIN请求断开连接D.主机1向主机2发送ACK确认----------TCP连接断开--------------(3)TCP序列号与确认序列号序列号:对包进行排序,根据序列号确认序列号:对收到的包进行确认A.主机1向主机2发送3000的数据包,最大数值需要1500包,进行分段传输,0-1499,1500-2999B.主机2收到包后向主机1进行发送确认序列号,未收到或者丢包,主机2会向主机1再次发送所丢失的包进行重传。
osi模型的组成概述及解释说明1. 引言1.1 概述在计算机网络领域中,Open Systems Interconnection(OSI)模型是一个被广泛使用的标准,用于定义和描述计算机网络中不同层级之间的通信协议。
通过将整个通信过程分为不同的抽象层级,OSI模型提供了一种结构化的方法来处理网络通信。
1.2 文章结构本文将对OSI模型进行详细的解释说明,包括其组成和各个层级的功能。
首先,我们将讨论OSI模型整体的概述,以及其作为一个框架所起到的作用。
然后,我们会逐一介绍每一层级,并详细解释它们在通信过程中扮演的角色和提供的功能。
最后,在结论部分我们将总结主要要点,并讨论OSI模型在现实世界中的重要性和应用,并展望未来发展趋势与挑战。
1.3 目的本文旨在向读者介绍OSI模型并解释其组成及各层级功能。
通过阅读本文,读者将能够深入理解OSI模型,并更好地理解计算机网络通信过程中各个层级之间的关系和交互。
同时,本文也旨在探讨OSI模型在实际应用中的重要性和应用前景,并提供展望未来发展趋势与挑战的观点。
通过阅读本文,读者将能够获得关于OSI模型的全面知识,并对计算机网络通信有更深入的理解。
2. OSI模型的组成2.1 OSI模型概述OSI模型(Open Systems Interconnection Model)是一种将计算机网络通信过程划分为7个不同层次的概念框架。
每个层次负责特定的功能,通过分层的方式实现了网络通信的可靠性和互操作性。
2.2 第一层:物理层物理层是OSI模型中最底层的一层。
它主要负责传输基本的比特流,将数字数据转化为电子信号并在物理介质上进行传输。
在这一层,我们关注的是数据如何通过传输介质(例如电缆、光纤等)从一个设备发送到另一个设备。
2.3 第二层:数据链路层数据链路层位于物理层之上,主要解决相邻节点之间可靠地传输数据的问题。
它将原始比特流转化为有意义的帧,并通过帧起始和结束字符标示出帧的界限。
OSI七层体系架构,TCPIP协议,HTTP协议⼿机推送了⼀篇⽂章简单介绍HTTP协议,然后想把其计算机⽹络分层构建再温习⼀下,上⽹看了⼏篇博客⽂章,竟然有许多错误,真是误⼈,这⾥再理⼀下。
HTTP之前,先了解⼀些计算机⽹络通信的基础。
OSI模型 - 七层体系架构开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,缩写为 OSI),简称为OSI模型(OSI model),⼀种,由提出,⼀个试图使各种计算机在世界范围内互连为⽹络的标准框架。
定义于ISO/IEC 7498-1。
层次划分根据建议X.200,OSI将计算机⽹络体系结构划分为以下七层,标有1~7,第1层在底部。
现“OSI/RM”是“Open Systems Interconnection Reference Model”的缩写。
第7层应⽤层主条⽬:应⽤层(Application Layer)提供为应⽤软件⽽设的接⼝,以设置与另⼀应⽤软件之间的通信。
例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
第6层表达层主条⽬:表达层表达层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式。
第5层会话层主条⽬:会话层(Session Layer)负责在数据传输中设置和维护计算机⽹络中两台计算机之间的通信连接。
第4层传输层主条⽬:传输层(Transport Layer)把传输表头(TH)加⾄数据以形成数据包。
传输表头包含了所使⽤的协议等发送信息。
例如:传输控制协议(TCP)等。
第3层⽹络层主条⽬:⽹络层(Network Layer)决定数据的路径选择和转寄,将⽹络表头(NH)加⾄数据包,以形成分组。
⽹络表头包含了⽹络数据。
例如:互联⽹协议(IP)等。
第2层数据链路层主条⽬:数据链路层(Data Link Layer)负责⽹络寻址、错误侦测和改错。
OSI模型解析OSI模型是计算机网络体系结构中的重要概念,它将网络通信的过程划分为七个不同的层次。
每一层都有自己的功能和任务,共同协作完成数据传输。
本文将对OSI模型进行详细解析,深入探究每一层的作用和相互关系。
第一层 - 物理层物理层是OSI模型的最底层,主要负责将数据转换为传输所需的电信号,并通过物理媒介进行传输。
它关注的是数据的传输单位是比特(bit),包括传输介质、电缆规范、编码方式等。
物理层主要作用是确保数据的可靠传输,例如通过传输介质的选择和电平控制来实现数据的传输。
第二层 - 数据链路层数据链路层负责在直连的节点之间提供可靠的数据传输。
它将原始数据分割成数据帧,并通过物理层提供的物理媒介进行传输。
数据链路层有两个子层,即逻辑链路控制(LLC)子层和介质访问控制(MAC)子层。
LLC子层主要处理数据帧的逻辑连接控制,而MAC 子层则处理数据的访问控制和媒介争用的问题。
第三层 - 网络层网络层是OSI模型的第三层,主要负责数据包的路由和转发。
它将数据分割成较小的数据包,并通过路由器进行传输。
网络层的主要功能是将数据从源节点发送到目标节点,通过确定最佳路径和设置优先级来实现数据的高效传输。
此外,网络层还处理数据包的片段、拥塞控制等问题。
第四层 - 传输层传输层负责提供端到端的数据传输服务。
它通过端口号来标识不同的应用程序,并通过传输协议(如TCP和UDP)来实现数据的可靠传输。
传输层提供了数据的分段、重组、流量控制和错误恢复等功能,确保数据的完整性和可靠性。
第五层 - 会话层会话层负责在不同计算机之间建立、管理和终止会话。
它通过提供会话控制机制和同步功能来实现进程之间的通信。
会话层允许应用程序在不同计算机之间建立连接,并提供同步点以确保数据的顺序和完整性。
第六层 - 表示层表示层负责对数据进行编码和解码,以确保不同系统之间的数据交换的兼容性。
它处理数据的格式转换、数据加密和解密、数据压缩和解压缩等任务。
Osip协议源代码框架详解Prepared by Mao minghua Date 2009.09.25 Reviewed by DateApproved by DateRevision HistoryVersion Author Reviewed By Comments Issued Date 0.1Mao minghua 描述osip协议栈的源代码框架目录1符号及缩写 (4)2整体描述 (4)3OSIP包的源代码框架解析 (5)3.1 OSIP的TRANSACTION的EVENT的产生 (5)3.1.1 定时器事件的产生过程 (6)3.1.2 报文触发的事件 (7)3.2 OSIP 的TRANSACTION的EVENT处理流程 (7)3.2.1 ICT的处理流程 (8)3.2.2 IST的处理流程 (9)3.2.3 NICT的处理流程 (9)3.2.4 NIST的处理流程 (9)3.3 O SIP报文的解析 (10)3.3.1 sip协议报文的解析整理流程 (10)3.3.2 Osip报文头的解析 (12)3.3.3 uri的解析 (14)3.3.4 添加一个新的协议header字段 (15)3.4 OSIP的TRANSACTION的管理 (16)3.5 OSIP中DIALOG的管理 (18)4EXOSIP包的源代码框架解析 (19)4.1 L IB库的初始化和销毁 (20)4.2 L IB库的主处理线程 (23)4.2.1 2xx应答的重发处理机制 (24)4.2.2 Exosip_execute执行流程 (24)4.2.2.1 Exosip_read_message的处理 (26)4.2.2.2 eXosip_process_response_out_of_transaction的处理流程: (29)4.2.3 eXosip_automatic_action处理流程 (29)4.3 C ALL的处理 (30)4.3.1 创建Call的第一个INVITE (30)4.3.2 INVITE的ACK应答的创建和发送 (32)4.3.3 dialog内的请求的创建和发送 (33)4.3.4 Dialog内answer的创建和发送 (34)4.4 R EGISTER的处理 (35)4.4.1 向一个服务器第一次注册 (35)4.4.2 调整一个注册的注册超时时间 (35)4.4.3 发送一个register注册 (36)Osip源代码框架详解1符号及缩写缩写英文全称中文名称ICT Invite Client Transaction Invite类型的客户端事务IST Invite Server Transaction Invite类型的服务端事务NICT Not Invite Client Transaction 非Invite类型的客户端事务NIST Not Invite Server Transaction 非Invite类型的服务端事务IMS IP Multimedia Subsystem IP多媒体子系统PSVT Packet service video telephony 分组域可视电话SIP Session Initiation Protocol 会话初始协议UDP User Datagram Protocol 用户数据报协议URL Uniform Resource Locator 统一资源定位器2整体描述开源代码的osip协议栈分为两个源代码包,整个协议栈采用lib库的形式,在内部没有使用到任务,采取与TCP/IP协议栈一样的策略,所以在使用上需要上层管理任务直接调用lib库提供的接口。
OSI参考模型的3个主要概念是什么?在今天的网络世界中,OSI参考模型是一个非常重要的概念。
它是一个框架,用于描述和理解计算机网络通信的各个方面。
本文将会分别介绍OSI参考模型的3个主要概念,帮助读者更好地理解和应用这个概念。
1. 层次结构OSI参考模型的第一个主要概念是层次结构。
OSI参考模型将计算机网络通信划分为7个层次,每个层次负责不同的功能。
这些层次按照功能从低到高分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
每个层次都有特定的功能和责任,但是它们之间又相互关联,协同工作。
通过层次结构,OSI参考模型将复杂的网络通信问题分解为相对简单的部分,使得网络设计、实现和调试更加科学和有效。
2. 分层协议OSI参考模型的第二个主要概念是分层协议。
为了实现层次结构,每个层次都需要使用相应的协议来完成特定的功能。
OSI参考模型中定义了各个层次的协议标准,这些标准通常被称为协议栈。
每个协议栈都包含多个协议,这些协议协同工作,完成特定层次的功能。
当一个计算机发送数据时,这些数据会经过每个层次的协议,分别添加相应的信息和处理方式。
而接收端的计算机则按照相反的顺序,逐层处理数据,最终将数据转化为应用层的信息,供应用程序使用。
3. 模块化设计OSI参考模型的第三个主要概念是模块化设计。
由于OSI参考模型采用了层次结构和分层协议,它使得计算机网络设计成为可能。
这种模块化的设计使得网络技术可以分为不同的领域,并且每个领域可以专门研究和发展。
物理层可以研究网络传输介质和信号编码方式,数据链路层可以研究MAC位置区域和帧格式,网络层可以研究IP位置区域和路由协议。
在实际的网络实现中,每个层次的技术和设备也变得更加专业和高效。
这种模块化的设计也为网络通信的标准化和互操作性提供了基础,推动了网络技术的发展和应用。
OSI参考模型的3个主要概念是层次结构、分层协议和模块化设计。
这些概念为计算机网络通信提供了理论基础,使得网络技术得以规范和发展。
一直没空仔细研究下oSIP,最近看到其版本已经到了3.x版本,看到网上的许多帮助说明手册都过于陈旧,且很多文档内容有点误人子弟的嫌疑~~Linux下oSIP的编译使用应该是很简单的,其Install说明文档里也介绍的比较清楚,本文主要就oSIP在Windows平台下VC6.0开发环境下的使用作出描述。
虽然oSIP的开发人员也说明了,oSIP只使用了标准C开发库,但许多人在Windows下使用oSIP时,第一步就被卡住了,得不到oSIP的LIB库和DLL库,也就没有办法将oSIP使用到自己的程序中去,所以第一步,我们将学习如何得到oSIP的静态和动态链接库,以便我们自己的程序能够使用它们来成功编译和执行我们的程序。
第一阶段:------------------------------------------------------先创建新工程,网上许多文档都介绍创建一个Win32动态链接库工程,我们这里也一样,创建一个空白的工程保存。
同样,将oSIP2版本3.0.1 src目录下的Osipparser2目录下的所有文件都拷到我们刚创建的工程的根目录下,在VC6上操作:Project-AddToProject-Files将所有的源程序和头文件都加入到工程内,保存工程。
这时,我们可以尝试编译一下工程,你会得到许多错误提示信息,其内容无非是找不到osipparser2/xxxxx.h头文件之类。
处理:在Linux下,我们一般是将头文件,lib库都拷到/usr/inclue;/usr/lib之类的目录下,c源程序里直接写#include <xxx.h>时,能直接去找到它们,在VC里,同样的,最简单的方法就是将oSIP2源码包中的Include目录下的 osipparser2目录直接拷到我们的Windows下默认包含目录即可,这个目录在VC6的Tool-Options-Directories里设置,(当然,如果你知道这一步,也可以不用拷贝文件,直接在这里把oSIP源码包所在目录加进来就可以了),默认如果装在C盘,目录则为 C:/Program Files/Microsoft Visual Studio/VC98/Include。
Osip协议源代码框架详解Revision History目录1符号及缩写 (4)2整体描述 (4)3OSIP包的源代码框架解析 (5)3.1 OSIP的TRANSACTION的EVENT的产生 (5)3.1.1 定时器事件的产生过程 (6)3.1.2 报文触发的事件 (7)3.2 OSIP 的TRANSACTION的EVENT处理流程 (7)3.2.1 ICT的处理流程 (8)3.2.2 IST的处理流程 (9)3.2.3 NICT的处理流程 (9)3.2.4 NIST的处理流程 (9)3.3 O SIP报文的解析 (10)3.3.1 sip协议报文的解析整理流程 (10)3.3.2 Osip报文头的解析 (12)3.3.3 uri的解析 (14)3.3.4 添加一个新的协议header字段 (15)3.4 OSIP的TRANSACTION的管理 (16)3.5 OSIP中DIALOG的管理 (18)4EXOSIP包的源代码框架解析 (19)4.1 L IB库的初始化和销毁 (20)4.2 L IB库的主处理线程 (23)4.2.1 2xx应答的重发处理机制 (23)4.2.2 Exosip_execute执行流程 (24)4.2.2.1 Exosip_read_message的处理 (25)4.2.2.2 eXosip_process_response_out_of_transaction的处理流程: (28)4.2.3 eXosip_automatic_action处理流程 (28)4.3 C ALL的处理 (29)4.3.1 创建Call的第一个INVITE (29)4.3.2 INVITE的ACK应答的创建和发送 (31)4.3.3 dialog内的请求的创建和发送 (32)4.3.4 Dialog内answer的创建和发送 (32)4.4 R EGISTER的处理 (33)4.4.1 向一个服务器第一次注册 (33)4.4.2 调整一个注册的注册超时时间 (34)4.4.3 发送一个register注册 (34)Osip源代码框架详解1符号及缩写2整体描述开源代码的osip协议栈分为两个源代码包,整个协议栈采用lib库的形式,在内部没有使用到任务,采取与TCP/IP协议栈一样的策略,所以在使用上需要上层管理任务直接调用lib库提供的接口。
因为在Lib库内部没有使用到像定时器、发送队列等的任务,而同时需要使用到定时器,所以在lib库的内部采用轮训遍历的方式不停的检查是否有定时器超时,这在某种程度上会浪费CPU的允许时间。
同时整个lib库实现了对call, notify等的管理,为了实现重入,在应用启用多线程的条件下,内部启用的信号量和锁的使用,在下面的分析中不涉及到信号量和锁机制。
Lib库按照sip协议栈的层次关系分为两个lib包,底层的osip lib包实现对单个请求、应答、ACK的处理,包括message的解析、拼装、内容set和get,单个请求形成的transaction 相关操作以及通信两端形成的一个dialog的操作。
Lib库上层的exosip lib在底层osip lib库的实现基础上,实现对sip协议整理逻辑上的管理。
Exosip主要关注的是sip协议的业务流程,包括call的整体管理,notify的整体管理,publish的管理,register的管理,option的管理,refer的管理和subscription的管理,其中最主要的为call和register的管理,这两个为sip协议栈必须实现的部分,另几个功能为sip协议栈扩展部分。
从这几个业务的管理流程出发,在业务的底层它们会使用到相似的一些功能,如注册的认证,发送message,接收message,每个请求和应答形成的transaction,多个transaction组合而成的dialog。
在message的处理方面,可以分为两类,一类为发送的message,因为是主动发送,所以上层管理层知道是什么类型的message,lib库直接提供各类接口供使用。
一类为接收到的message,因为不知道是哪种类型,所以需要根据解析出来的message的信息来进行处理,这部分的处理在udp.c文件中。
整个lib库的初始化在exOsip中介绍。
3Osip包的源代码框架解析在osip源代码包中最主要的包括了message的相关操作,其中最重要的为message的解析,即从获取到的一个message中解析生成一个能够被代码直接处理的message数据结构-——osip_message_t。
与message结构相关的操作包括根据message数据结构的信息安装sip 协议规范组装成一个message字符串;message结构的初始化和释放;message结构的拷贝操作;以及从message结构中获取各种已经解析的成员变量的值和设置各个成员变量的值。
在message的解析部分,除了message的头之外,还包括了body的解析,涉及到sdp协议,包括对每个sdp字段的解析。
在osip源代码包中,设计了一个与同一个请求相关的所有message的集合——transaction,在发送或接收到一个新的请求的时候就会生成一个transaction,其中ACK和CANCEL请求是比较特殊的,对于非2xx应答的ACK和初始INVITE请求是属于同一个transaction的,而对于2xx的请求是属于单独的transaction的,所以其重传操作由UAC来控制,而不在INVITE的transaction内部进行控制。
CANCEL的请求除了本身建立一个transaction外,根据协议它还会去匹配要CANCEL掉的请求的transaction,如果匹配成功会CANCEL掉相应的transaction。
在osip包中同样设计了dialog相关操作,包括dialog的建立,dialog信息的保存,dialog 的匹配及删除等操作。
其它方面,包括多线程中使用到的锁和信号量及信号,内部使用到的链表,用于事件的队列(需要先进先出策略),一些平台无关的封装,定时器以及常量等的定义。
这部分比较简单,而且都是最底层函数,直接封装了系统调用层。
3.1 osip的transaction的event的产生transaction的状态变化是由事件来驱动的,当transaction上有事件产生时,根据事件的类型和当前transaction的状态来处理该event。
Transaction上的事件分为两类:一为定时器事件,在设定的定时器超时时会产生相应的定时器事件;另一类为事件驱动事件,如发送一个请求、应答或接收到一个请求、应答,发送一个ACK和接收到一个ACK,即是由报文产生的事件。
3.1.1定时器事件的产生过程ICT、IST、NICT和NIST的定时器的事件产生流程都一样,对于每一个transaction,其定时器是有顺序的,ICT流程中TIMEOUT_B的优先级最高,TIMEOUT_B定时器触发后,会触发kill transaction的操作。
当transactionff队列中有未处理的事件时,不处理定时器,直接返回,所以在transactionff队列中总的事件的数量是不多的。
所有的定时器函数调用底层同一个定时器检查函数__osip_transaction_need_timer_x_event。
该函数会先检查该定时器是否启动,判断条件为(timer->tv_sec == -1),如果启动,检查当前时间是否超过定时器中设定的时间,如果是,则产生新的定时器事件。
因为定时器没有一个单独的任务,所以是采样轮训的方式检查是否有新的定时器事件产生,而不是根据系统时钟中断进行检测,因此会比较占用系统资源。
定时器的启动和修改使用接口osip_gettimeofday和add_gettimeofday。
只需要设定定时器的超时时间,即设定了一个新的定时器。
取消一个定时器,只需要修改定时器的timer->tv_sev为-1。
3.1.2报文触发的事件包括一个新的invite、response、ack的发送或接收,除了对非2xx的应答ack外,其他的请求和应答都会产生一个新的transaction,并且产生一个新的sipevent事件。
3.2 osip 的transaction的event处理流程在sip协议栈中为了更快更好的处理transaction,根据协议栈的描述,划分为四种不同的transaction,分别为ICT、IST、NICT和NIST。
四种不同的transaction会有不同的处理流程和状态转换表,以及使用到不同的定时器。
ICT、IST、NICT和NIST的状态转换采样注册函数处理方式,为便于管理和使用注册函数,源码中使用了四个全局变量管理四种不同类型transaction的转换表:ict_fsm、ist_fsm、nist_fsm和nist_fsm。
osip结构如下:struct osip{void *application_context; /**< User defined Pointer *//* list of transactions for ict, ist, nict, nist */osip_list_t osip_ict_transactions; /**< list of ict transactions */osip_list_t osip_ist_transactions; /**< list of ist transactions */osip_list_t osip_nict_transactions; /**< list of nict transactions */osip_list_t osip_nist_transactions; /**< list of nist transactions */……}整体简单处理流程如下图:图3-1:transaction的event处理流程3.2.1ICT的处理流程如上图,ICT事件处理时:1)检查osip管理结构中的osip_ict_transactions链表,如果没有链表元素,直接返回OSIP_SUCCESS2)获取链表中元素个数,并保存transaction到临时局部数组3)遍历所有transaction,osip_fifo_tryget顺序获取每个transaction中的事件,调用osip_transaction_execute处理每个事件,直到所有transaction中的所有事件被处理完毕,然后返回。