Luận văn Lập trình SIP cho thiết bị di động bằng Java

MỤC LỤC

Trang Trang 1

Lời cam đoan 1

Mục lục 2

Danh mục các chữviết tắt 6

Danh mục các hình vẽ8

MỞ ĐẦU 10

Chương 1 – GIAO THỨC ĐIỀU KHIỂN PHIÊN (SIP) 11

1.1. Khái niệm 11

1.2. Các đặc điểm của SIP 11

1.3. Các phần tửmạng SIP 12

1.3.1. User agent (UA) 12

1.3.2. Proxy Server 12

1.3.2.1. Proxy server không trạng thái 12

1.3.2.2. Proxy server trạng thái 13

1.3.3. Registrar server 13

1.3.4. Redirect server 13

1.4. Các bản tin SIP 14

1.4.1. Các bản tin yêu cầu 14

1.4.2. Các bản tin phúc đáp 17

1.5. Các giao dịch SIP 19

1.6. Các hội thoại SIP 20

1.6.1. Các hội thoại làm cho định tuyến thuận tiện 21

1.6.2. Nhận dạng hội thoại 22

1.7. Những kịch bản SIP điển hình. 23

1.7.1. Đăng ký 23

3

1.7.2. Khởi tạo phiên 23

1.7.3. Kết thúc phiên 24

1.7.4. Định tuyến bản ghi 25

1.8. So sánh SIP và H.323 26

Chương 2 - CƠBẢN VỀLẬP TRÌNH CHO THIẾT BỊDI

ĐỘNG BẰNG JAVA

29

2.1. Giới thiệu 29

2.2. Máy ảo Java (JVM – Java Virtual Machine) 29

2.3. Cấu hình thiết bị29

2.3.1. Cấu hình thiết bịkết nối 29

2.3.2. Cấu hình thiết bịhạn chếkết nối 30

2.3.2.1. Những khác biệt của CLDC so với Java chuẩn 30

2.3.2.2. Các lớp CLDC kếthừa từJ2SE 30

2.3.2.3. Khung kết nối chung (GCF – Generic Connection

Framework)

32

2.4. Profile 33

2.5. Máy ảo Java cho CLDC 33

2.6. Xác minh file lớp (.class) 34

2.6.1. Tiền xác minh 34

2.6.2. Xác minh bởi thiết bị34

2.7. MIDLET 34

2.7.1. Cơbản vềMIDlet 34

2.7.1.1. Quản lý ứng dụng và môi trường thực thi Runtime 35

2.7.1.2. File lưu trữJava (JAR) 35

2.7.1.3. Bộmô tả ứng dụng Java (file JAD) 36

2.7.2. Vòng đời của MIDlet 37

2.7.3. Tạo ra một MIDlet 38

4

2.7.4. MIDlet API 39

2.7.5. Giao tiếp từbộquản lý ứng dụng 39

2.7.6. Giao tiếp tới bộquản lý ứng dụng 40

2.7.7. Truy vấn thuộc tính MIDlet 40

Chương 3 - BỘCÔNG CỤKHÔNG DÂY J2ME 41

3.1. Giới thiệu 41

3.1.1. Các công cụtrong bộcông cụ41

3.1.2. Đặc điểm bộcông cụ41

3.1.3. Các công nghệhỗtrợ42

3.2. Phát triển các bộMIDlet 42

3.2.1. Dựán (Project) 42

3.2.2. Quy trình phát triển đơn giản 44

3.2.3. Quy trình phát triển đầy đủ44

3.3. Làm việc với các project 45

3.3.1. Lựa chọn các API 45

3.3.2. Thay đổi các thuộc tínhcủa bộMIDlet 45

3.3.3. Thao tác MIDlet 46

3.3.4. Cấu trúc thưmục dựán 46

3.3.5. Sửdụng các thưviện của bên thứba 46

3.3.5.1. Các thưviện của bên thứba cho một project 47

3.3.5.2. Các thưviện của bên thứba cho tất cảproject 47

3.4. An toàn và đánh dấu MIDlet 47

3.4.1. Sựcho phép (permission) 47

3.4.2. Các vùng bảo vệ(protect domain) 48

3.4.3. Đánh dấu một bộMIDlet 49

3.4.4. Quản lý khóa 49

3.4.4.1. Tạo một cặp khóa mới 49

5

3.4.4.2. Nhận các khóa thực 51

Chương 4 - GIAO TIẾP LẬP TRÌNH ỨNG DỤNG CHO J2ME

52

4.1. SipConnection 53

4.2. Tích hợp vào khung kết nối chung 53

4.3. Định tuyến yêu cầu gửi đến 54

4.4. SipClientConnection 55

4.5. SipServerConnection 56

4.6. SipConnectionNotifier 57

4.7. SipClientConnectionListener 58

4.8. SipServerConnectionListener 58

4.9. SipDialog 58

4.10. SipHeader 60

4.11. SipAddress 60

4.12. SipRefreshHelper 61

4.13. SipRefreshListener 62

4.14. SipException 62

Chương 5 - LẬP CHƯƠNG TRÌNH 63

5.1. Điều kiện thực hiện chương trình 63

5.2. Lưu đồthuật toán 63

5.3. Đăng nhập SIP 65

5.4. Gọi đi 69

5.5. Chờgọi đến và trảlời 71

5.6. Tạo project đóng gói chương trình 73

5.7. Mô phỏng 73

KẾT LUẬN 74

TÀI LIỆU THAM KHẢO 75

pdf70 trang | Chuyên mục: Java | Chia sẻ: dkS00TYs | Lượt xem: 2270 | Lượt tải: 1download
Tóm tắt nội dung Luận văn Lập trình SIP cho thiết bị di động bằng Java, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
p này có thể 
được sử dụng để phân tích các giá trị đầu đề ký tự tối thiểu mà đọc từ bản tin 
SIP sử dụng phương thức SipConnection.getHeader().SipHeader là một lớp 
trợ giúp riêng rẽ và không bắt buộc sử dụng cho tạo một kết nối SIP. Do đó 
SIP headers có thể được xây dựng với lớp này. SipHeader sử dụng khuôn 
dạng chung để phân tích các giá trị header và các tham số. 
4.11. SipAddress 
Khai báo: 
public class SipAddress 
java.lang.Object 
 | 
 +--javax.microedition.sip.SipAddress 
SipAddress cung cấp một bộ phân tích địa chỉ SIP chung. Các địa chỉ 
hợp lệ có thể được xây dựng với lớp này. SipAddress có các yêu cầu chức 
năng sau: 
• SipAddress không tránh được các chuỗi ký tự địa chỉ. 
• SipAddress bỏ qua phần đầu đề của SIP URI. 
• Khuôn dạng hợp lệ SipAddress là giống như được định nghĩa 
trong SIP BNF cho URI tuyệt đối. 
• Địa chỉ Contact hợp lệ “*” được chấp nhận trong SipAddress. 
Trong trường hợp này các thuộc tính sẽ là null và số cổng sẽ là 0. 
 61
4.12. SipRefreshHelper 
Khai báo: 
public class SipRefreshHelper 
java.lang.Object 
 | 
 +--javax.microedition.sip.SipRefreshHelper 
Lớp này thực hiện chức năng làm cho thuận tiện việc làm tươi các yêu 
cầu của ứng dụng. một số yêu cầu SIP (REGISTER, SUBSCRIBE, ...) cần 
phải được làm tươi đúng lúc. Ví dụ yêu cầu REGISTER cần phải được gửi lại 
để đảm bảo điểm khởi tạo vẫn hoạt động. Tính hợp lệ của yêu cầu được đề ra 
bởi điểm cuối trong yêu cầu và được xác nhận trong phúc đáp bởi 
registrar/notifier ví dụ trong expires header. Việc xử lý này sẽ làm tăng đáng 
kể độ phức tạp và kích thước chương trình. SipRefreshHelper có thể đwocj sử 
dụng để làm cho dễ dàng các công việc này. Khi ứng dụng muốn gửi một yêu 
cầu có thể làm tươi nó sẽ: 
• Thực hiện SipRefreshListener gọi lại giao diện. 
• Tạo một SipClientConnection mới và thiết lập nó. 
• Gọi phương thức enableRefresh(SipRefreshListener). 
• Nếu công việc làm tươi bị lỗi thì một sự kiện lỗi sẽ được gửi đến 
SipRefreshListener 
Một tham chiếu tới đối tượng SipRefreshHelper thu được bằng cách gọi 
phương thức tĩnh SipRefreshHelper.getInstance(). Cuối cùng sử dụng mã làm 
tươi từ enableRefresh(SipRefreshListener) ứng dụng có thể: 
• Dừng làm tươi: sự liên kết giữa điểm cuối và server bị hủy bỏ. 
• Cập nhật làm tươi với các tham số mới 
 62
4.13. SipRefreshListener 
Khai báo: public interface SipRefreshListener 
SipRefreshListener là giao diện nghe các sự kiện RefreshHelpe. Giao 
diện này định nghĩa một sự kiện mà chứa một refreshID để nhận dạng một 
công việc làm tươi tương ứng, statusCode diễn tả kết quả của quá trình làm 
tươi này (0 = bị hủy, 200 = thành công, còn lại = không thành công). 
statusCode tương ứng với phúc đáp nhận được cho yêu cầu nguyên thủy được 
gửi bởi SipRefreshHelper. reasonPhrase cho một bản tin nguyên bản về thành 
công hay không của công việc làm tươi này. 
4.14. SipException 
Khai báo: 
public class SipException extends java.io.IOException 
java.lang.Object 
 | 
 +--java.lang.Throwable 
 | 
 +--java.lang.Exception 
 | 
 +--java.io.IOException 
 | 
 +--javax.microedition.sip.SipException 
Đây là một lớp ngoại lệ cho các lỗi cụ thể SIP. Ngoại lệ bao gồm bản 
tin lỗi nguyên bản khuôn dạng tự do và mã lỗi để phân loại lỗi. 
 63
CHƯƠNG 5 : LẬP CHƯƠNG TRÌNH 
5.1. Điều kiện thực hiện chương trình 
 Để thực hiện được chương trình cần phải có những điều kiện sau: 
• Thiết bị di động phải có cài đặt CLDC và MIDP. Hiện nay các 
loại điện thoại di động phổ biến cài đặt CLDC 1.1 và MIDP 2.0. 
Ngoài ra thiết bị phải có kkhả năng kết nối mạng, có đủ bộ nhớ 
để cài đặt và thực hiện chương trình. 
• Đã có các SIP server (proxy server, registrar server, redirect 
server). 
• Có tài khoản của SIP server trên. 
5.2. Thuật toán chương trình 
 Các bước của thuật toán: 
• Khi bắt đầu chạy chương trình, thiết bị đăng nhập vào SIP server. 
• Sau đó thiết bị vào trạng thái chờ gọi đến. 
• Nếu có cuộc gọi đến thì trả lời hoặc không trả lời. 
• Nếu muốn gọi đi thì chuyển sang chế độ gọi đi. 
• Nếu đến thời gian phải làm tươi thì thực hiện lại đăng nhập tới 
server. 
• Nếu muốn kết thúc chương trình thì đóng chương trình và giải 
phóng bộ nhớ. 
 64
Bắt đầu 
Chờ 
Gọi đi? 
Đăng nhập 
Gọi 
Y 
N 
Y 
Có cuộc gọi 
đến? 
Kết thúc? 
Y 
N
Kết thúc 
N 
Làm tươi? 
Trả lời 
N 
Hình 5.1. Lưu đồ thuật toán 
 65
5.3. Đăng nhập SIP 
 Khi bắt đầu chạy, chương trình phải thực hiện đăng nhập vào mạng SIP 
bằng cách gửi bản tin REGISTER. Trước tiên phải nhập tên và mật khẩu.
 Các bước thực hiện như sau: 
 + Ứng dụng khởi tạo yêu cầu REGISTER gốc. 
 + Ứng dụng gọi send() 
 + SIP API thực hiện gửi yêu cầu REGISTER đến server. 
 + Ứng dụng gọi receive( ) để đợi phúc đáp. 
 + Nếu tên và mật khẩu không hợp lệ thì SIP server gửi phúc đáp “401 
Unauthorized”. Nếu hợp lệ thì SIP server gửi phúc đáp “200 OK”. 
 + Ứng dụng gọi getStatusCode(). 
 + Ứng dụng kết thúc kết nối bằng phương thức close( ). 
Hình 5.2. Thuật toán đăng nhập SIP 
Bắt đầu 
Khởi tạo REGISTER 
Gửi yêu cầu 
Nhận phúc đáp 
Hợp lệ? 
Kết thúc 
Y
N
 66
Hình 5.3. Quá trình thực hiện đăng nhập 
Mã chương trình: 
public void doRegister(String username, String password, String realm)
 { 
 SipClientConnection scc = null; 
 SipConnectionNotifier scn = 
 String contact = 
 try { 
 // open listener in application specific port 5080 
 scn = (SipConnectionNotifier) Connector.open(“sip:5080”); 
 67
 // build the contact URI 
 contact = 
new String(“sip:user@”+scn.getLocalAddress()+“:”+scn.getLocalPort(
)); 
 open client connection to the SIP registrar in this case “host.com” 
 scc =SipClientConnection)open(“sip:host.com”); 
 initialize REGISTER with appropriate headers 
 scc.initRequest(“REGISTER”, scn); 
 scc.setHeader(“From”, “sip:user@host.com”); 
setHeader(“To”,sip:user@host.com”); 
setHeader(“Contact”, contact); 
 scc.send(); 
 boolean handled = false; 
 int scode = 0; 
 while(!handled) { 
 SipHeader sh; 
 // wait max 30 secs for response 
 scc.receive(30000); 
 scode = scc.getStatusCode(); 
 switch(scode) 
 { 
 case 401: 
 sh = new SipHeader(“WWW-Authenticate”, 
 scc.getHeader(“WWW-Authenticate”)); 
 realm = sh.getParameter(“realm”); 
 // here for example, prompt user for password for this realm 
 // set credentials to initiate re-REGISTER 
 68
 scc.setCredentials(username, password, realm); 
 break; 
 case 407: 
 sh = new SipHeader(“Proxy-Authenticate”, 
 scc.getHeader(“Proxy-Authenticate”)); 
 realm = sh.getParameter(“realm”); 
 // here for example, prompt user for password for this realm 
 // set credentials to initiate re-REGISTER 
 scc.setCredentials(username, password, realm); 
 break; 
 case 200: 
 // handle OK response 
 handled = true; 
 default: 
 handle other responses 
 handled = 
 } 
 } 
 scc.close(); 
 } catch(Exception ex) { 
 // handle Exceptions 
 } 
 } 
 69
5.4. Gọi đi 
 Quy trình gọi đi như sau: 
• Khởi tạo và gửi bản tin INVITE 
• Nhận bản tin phúc đáp tạm thời 100, 180 cho đến khi nhận bản 
tin cuối cùng 200 OK. 
• Khởi tạo và gửi bản tin ACK để thiết lập phiên. 
• Trao đổi dữ liệu 
• Khởi tạo và gửi bản tin BYE. 
• Nhận bản tin 200 OK cho BYE, kết thúc phiên. 
Client Server 
INVITE 
100 Trying 
180 Ringing 
200 OK 
ACK 
Media 
BYE 
200 OK 
Hình 5.4. Quá trình thực hiện gọi đi 
 70
Bắt đầu 
Khởi tạo và gửi INVITE 
Khởi tạo và gửi BYE 
Nhận phúc đáp 
200 OK? 
Kết thúc 
Y 
N
Khởi tạo và gửi ACK 
Trao đổi dữ liệu 
Hình 5.5 Thuật toán gọi đi 
Kết thúc? 
Nhận 200 OK 
N
Y 
 71
5.5. Chờ gọi đến và trả lời 
 Quy trình chờ gọi đến và trả lời như sau: 
• Mở kết nối để chờ yêu cầu gửi đến. 
• Nhận yêu cầu INVITE. 
• Khởi tạo và gửi phúc đáp 180 và 200 OK. 
• Chờ nhận yêu cầu ACK :phiên được khởi tạo. 
• Trao đổi dữ liệu. 
• Chờ nhận yêu cầu BYE: phiên kết thúc. 
• Gửi phúc đáp 200 OK 
Client Server 
INVITE 
Open connection 
180 Ringing 
200 OK 
ACK 
Media 
BYE 
200 OK 
Hình 5.6. Quá trình thực hiện trả lời cuộc gọi đến 
 72
Bắt đầu 
Nhận bản tin 
Gửi 200 OK 
Gửi 180 Ringing 
Kết thúc 
Nhận bản tin 
Trao đổi dữ liệu 
Hình 5.7 Thuật toán trả lời cuộc gọi đến 
BYE? 
Mở kết nối 
Gửi 200 OK 
INVITE? 
ACK? 
Y 
N
Y 
N
Nhận bản tin 
Y 
N
 73
5.6. Tạo project đóng gói chương trình 
 Sau khi viết xong mã nguồn, sử dụng J2ME Wireless Toolkit để lập dự 
án đóng gói chương trình. Trước hết ta khởi động chương trình KToolbar. Đặt 
tên dự án là “SIP”. Sau đó copy các file nguồn vào thư mục \SIP\src\. Tiến 
hành biên dịch và tiền xác minh các file nguồn này bằng cách chọn Project → 
Package → Create Package. Trong quá trình dịch nếu có lỗi thì phải sửa lỗi ở 
các file nguồn. Sau khi dịch và tiền xác minh xong bộ công cụ sẽ tạo ra các 
file JAD, JAR và lưu trữ vào thư mục \SIP\bin\. 
5.7. Mô phỏng 
 Sau khi đóng gói chương trình thì chạy trương trình mô phỏng trên máy 
tính. Hình mô phỏng như ở hình 5.8: 
Hình 5.8. Mô phỏng điện thoại di động
 74
KẾT LUẬN 
 Luận văn đã thực hiện được những vấn đề sau: 
1. Tìm hiểu về J2ME, SIP, tìm được các điểm mạnh, điểm yếu, 
so sánh với các công nghệ tương tự. 
2. Ứng dụng xây dựng một chương trình có tính năng: 
a. Đăng nhập vào mạng SIP. 
b. Thực hiện khởi tạo một phiên để gọi đến một thiết bị SIP 
khác. 
c. Trả lời khi có một cuộc gọi từ thiết bị SIP khác đến. 
3. Phân tích, đánh giá, tổng hợp tạo ra một qui trình xây dựng 
các ứng dụng dựa trên J2ME và các giao thức truyền thông. 
 Hướng nghiên cứu tiếp theo là mở rộng framework về giao thức truyền 
tải thời gian thực (RTP- Real-time Transport Protocol) và thực hiện RTP bằng 
J2ME. 
 Một lần nữa em xin chân thành cảm ơn thầy giáo TS Hà Quốc Trung 
tận tình hướng dẫn em trong quá trình thực hiện luận văn. Đồng thời em cũng 
xin cảm ơn bạn bè, đồng nghiệp đã hỗ trợ em trong quá trình thực hiện luận 
văn này. Nếu có gì thiếu sót em rất mong được các thầy cô giáo và các bạn 
đồng nghiệp chỉ bảo. 

File đính kèm:

  • pdfLuận văn Lập trình SIP cho thiết bị di động bằng Java.pdf
Tài liệu liên quan