1. 软件架构
1.1.1. 模块描述
本模块处于终端产品的上层,属于媒介性质的模块。与远程的ACS连接,响应ACS发起的各项命令并执行相应功能。本模块主要实现如下功能:
1)支持ACS和CPE之间基于TR069协议的会话。
2)支持ACS设置获取CPE参数;
3)支持ACS设置和获取CPE的参数属性;
4)支持ACS添加和删除参数对象;
5)支持从ACS服务器下载升级CPE的版本或配置文件;
6)支持将CPE的日志文件或者配置文件上传到网管侧;
7)支持ACS重启CPE以及恢复出厂设置;
8)支持对CPE进行Ping等诊断测试;
1.1.2. 模块位置
本模块在整个系统中的位置如下图中蓝色标记部分所示,属于网管应用的一个子模块。
1.1.3. 模块的架构
TR069模块软件架构如下图所示:
1) 连接管理模块,包含会话层管理、选路层处理;
2)报文处理模块, 包含HTTP模块,
SOAP
编解码以及
RPC
方法处理模块;
3)对外适配模块,包含公有的对象节点device.xml以及对象适配函数g_TR069_obj_func_list。
1.1.3.1. 会话管理
不管是CPE
发起的连接,还是
ACS
发起的连接,
TR069
会话都是从
CPE发送一条初始Inform
开始,直到满足会话终止的条件才终止会话。需要注意的是,ACS
发起的连接,初始
Inform
的
EventCode
必须为”
6 CONNECTIONREQUEST
”。本模块设置一个全局会话锁
g_session_status
;当会话创建后,打开会话锁,防止开启另外一个会话,保证同一时间只有一个会话进行;当会话结
束时,释放会话锁。创建会话时,如果有会话正在进行,等待会话结束后再创建会话。下图为会话管理的流程图。
1.1.3.2 HTTP/HTTPS模块
HTTP(S)模块支持
Digest
方式的
WWW-Authentication
认证。支持
SSL/TLS的安全连接提供机密性,支持使用证书的安全认证。
TR069的
SOAP
报文使用
HTTP1.1
来承载,
ACS
发送给
CPE
的请求基于HTTPresponse,
CPE
发送给
ACS
的应答基于
HTTPPost
。本模块
socket
调用
API——CreateSocket()来建立。同时对
socket
设置了超时(默认30
S
)检测,当socket在超时规定的时间内没有响应,关闭socket
,释放占用资源。
ACS发起的连接(反向连接)
ACS发起的连接又称反向连接,
ACS
首先发送请求方法为
”GET”
的
HTTP 消息,CPE
收到该消息后会回复
HTTPresponse
。当
WWW-Authentication
认证通过后,CPE回复状态为”200OK”的HTTPresponse;认证失败,CPE回复状态为”
401Unauthorized”的
HTTPresponse
。当认证通过后,
CPE
会发起
RPC
为
”Inform”的HTTPpost
,开始
TR069
的会话。
TR069
在初始化时会建立一个
socket
,在固定端口(默认58000
)处于监听状态。这个
socket
是为了监听
ACS
发起的反向
链接,当监听到有连接请求时,就会建立连接进行消息处理。
CPE
接收消息,检测到该消息是ACS
发送的
HTTP
请求且请求方法为
”GET”
时,关闭该连接。然后新建一个socket
,
CPE
主动发起
RPC
为
”Inform”
的
HTTPpost
,此时
inform
的EventCode为
”6CONNECTIONREQUEST”
,
TR069
会话正式开始。
CPE发起的连接
CPE有请求要发送时,需要建立连接,
CPE
新建
socket
,发送
HTTPPOST请求,ACS
回复
HTTPResponse
。
TR069
的会话从
CPE
发送
HTTPPOST
开始,直到会话结束。
1.1.3.3. SOAP编码解码
TR069协议将
SOAP
作为
HTTP
的
Body
封装在
HTTP
包中。本模块负责将接收的SOAP
包中解析出数据,需要发送的数据封装成
SOAP
包,
SOAP
包详细的格式及含义参考《TR069CPEWAN
管理协议》。