TR 069是DSL Fourm提出來的一種協(xié)議,即CWMP協(xié)議,主要是對 用戶終端設(shè)備的管理。
其功能主要有兩塊組成ACS(Auto Config Server)和CPE(Customer Pression Equalment)。其具體功能請參考
TR-069協(xié)議,網(wǎng)絡(luò)上也有介紹,在此不再多說了。
最近公司接到了一個項(xiàng)目,主要是對電信的AP(Access Point)設(shè)備進(jìn)行性能監(jiān)控和管理。我也是項(xiàng)目組的開發(fā)人員,主要是負(fù)責(zé)ACS的搭建。
CPE會定時呼叫ACS,ACS也可以呼叫CPE。根據(jù)協(xié)議的描述,其實(shí)ACS和CPE之間的通信其實(shí)類似與WebService,在HTTP的基礎(chǔ)上通過RCP遠(yuǎn)程過程調(diào)用CPE的方法。說白了,就是通過HTTP發(fā)送XML或者解析xml。那么ACS就很簡單了,只需要支持HTTP就可了,所以Servlet是ACS實(shí)現(xiàn)的一種選擇。
在進(jìn)行開發(fā)之前,必須確定你的CPE 支持TR-069協(xié)議,這個是基礎(chǔ),否則本文也就沒有寫下去的必要了。
目前測試的CPE是H3C的AP。由于我以前也沒接觸TR-069,這次是摸索這前進(jìn)。
既然是基于HTTP傳輸XML的通信,那么先寫個Servlet來接收XML消息了,第一次接觸,看了協(xié)議只知道規(guī)則,也不知道到底有啥,既然TR-069說AP會定時呼叫ACS,那么先接收消息了,看看能收到啥情報(bào)。
第一,創(chuàng)建ACSServlet,準(zhǔn)備接收消息。
代碼如下:
1
import java.io.BufferedReader;
2
import java.io.IOException;
3
import java.io.InputStream;
4
import java.io.InputStreamReader;
5
import java.io.OutputStream;
6
import java.util.HashMap;
7
8
import javax.servlet.ServletException;
9
import javax.servlet.http.HttpServlet;
10
import javax.servlet.http.HttpServletRequest;
11
import javax.servlet.http.HttpServletResponse;
12
import javax.servlet.http.HttpSession;
13
14
import com.seahigh.tyt.acs.util.AcsUtil;
15
16
17
/** *//**
18
* ACS serverImp
19
*
20
* @author 汪心利
21
* @Create Time 2009-1-4下午04:34:42 (c)copy right seahigh 2009
22
*/
23
public class ACSServlet extends HttpServlet
{
24
25
private static final long serialVersionUID = 1L;
26
27
public void doGet(HttpServletRequest request, HttpServletResponse response)
28
throws ServletException
{
29
30
}
31
32
public void doPost(HttpServletRequest request, HttpServletResponse response)
33
throws ServletException, IOException
{
34
// session 記住已執(zhí)行的method
35
36
37
InputStream in = request.getInputStream();
38
String ip = request.getRemoteAddr();
39
InputStreamReader ir = new InputStreamReader(request.getInputStream());
40
BufferedReader input = new BufferedReader(ir);
41
String line;
42
String xml = "";
43
while ((line = input.readLine()) != null)
{
44
if (line.trim().length() <= 0)
45
continue;
46
xml += line;
47
}
48
in.close();
49
System.out.println(ip+"Post:"+xml);
50
51
52
}
53
}
54
55
不知道大家是怎么貼代碼的,感覺這樣貼代碼很不好看。呵呵。。。。。
然后在web.xml中配置Servlet了,這個過程就不多說了。
既然服務(wù)器寫好了,那么下一步就讓AP給我發(fā)Inform吧,當(dāng)然AP并不知道ACS的地址
所以下一步就需要配置AP了。
再次申明:使用的是H3C的AP,不一定是通用的,具體請參考不同的CPE。
Windows Command Window中輸入:
//telent 到AP
telnet 192.168.1.200
//出現(xiàn)授權(quán)框,輸入用戶名和密碼
system-view
cwmp