Android2.3 Sip简单分析( 四 )


6、每个会话对象被放到对象的中进行管理 。每个实例化的对象放到的中进行管理 。
客户端也可以通过对象的open函数发起一个被动会话请求 , 过程为:
1、 对象的open函数调用的open3函数 , 同时也实例化一个对象通过的open3函数传给服务端的对象中;
2、 在open3函数中调用函数实例化对象 , 并进一步实例化对象;
3、 接着调用对象的函数来实例化一个对象作为接收会话 , 派生自 , 对象作为函数参数传进函数 , 并在构造函数时调用内部对象成员(oxy类 , 一个实现接口的桩类)的函数 , 为内部类型的成员赋值 。
4、 当接收到底层协议发来的会话请求时 , 监听底层事件的对象的函数被调用;
5、 接着调用接收会话对象的函数 , 在函数中判断接收到的事件请求是.时就调用est函数;
6、 在est函数中调用实例化一个对象作为新的会话 , 新的会话状态为 。接着调用接收会话对象内部成员的函数 , 在函数中调用其成员(类型)的函数 , 实际调用对象的函数;
7、 在对象的函数中通过对象内部客户端传进来的对象向客户端发送CALL类型广播消息;
8、 客户端在接收到这个广播调用的函数 。函数首先通过接口获得一个服务端会话对象引用;接着实例化一个对象(对象对应的对象调用服务端会话对象的函数获得);然后根据服务端会话对象引用实例化一个客户端对象;并调用对象的实现对象与对象的绑定;
9、 最后调用现有的对象的函数 , 在对象的函数中调用对象的对象的函数实例化一个对象 , 完成通话建立过程 。
框架的数据连接模块负责数据连接通道的建立 , 使电话能够提供数据服务 , 如上网等 , 数据连接模块的类图如下图 。

Android2.3 Sip简单分析

文章插图
r是数据连接功能的核心 , cker、acker是r的两个派生类 , 实现具体网络的数据连接的建立和管理 。
每一个数据连接用一个对象表示 , 对应的具体网络的派生类为和 。r中用一个类型的变量维护每一个数据连接 。CDMA同时只能建立一路数据连接 , GSM网络则没有限制 。
对象是一个是一个状态机对象 , 维护连接的状态,并提供数据连接的和等属性 。对象的状态包括、、、、、六种状态 。
Android2.3 Sip简单分析

文章插图
对于cker对象 , 对象提供数据连接的APN上下文 , 每一个APN类型都对应一个对象 , 对象维护对应的APN设置、r的状态、对应的和等 。
数据连接通道的建立过程:
1、 数据连接的建立最终都通过cker和acker的函数启动数据连接;
2、 函数调用函数 , 设置数据连接参数(如采用的Apn设置参数 , 连接建立成功响应消息);
3、 然后调用对应的对象的函数发送数据连接消息() 。
4、 消息由对象的状态机的相应状态对象接收处理 , 对于开始尚未建立数据连接时 , 对象处于状态 , 因此状态对象接收处理事件 , 调用函数 , 并转变为状态 。
5、 在具体对象的函数中调用RIL接口函数启动数据连接;
6、 连接建立后RIL层回应请求应答事件 , 由对象的状态对象接收处理事件 , 调用函数 , 并过渡到状态 , 连接建立成功 。