1. Trang chủ
  2. » Giáo án - Bài giảng

Phát triển dịch vụ giá trị gia tăng trên mạng viễn thông

95 8 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

HỌC VIỆN CƠNG NGHỆ BƢU CHÍNH VIỄN THƠNG KHOA THIẾT KẾ VÀ SÁNG TẠO ĐA PHƢƠNG TIỆN ***** GIÁO TRÌNH BÀI GIẢNG (Phƣơng pháp đào tạo theo tín chỉ) TÊN HỌC PHẦN: IT PHÁT TRIỂN DỊCH VỤ GIÁ TRỊ GIA TĂNG TRÊN MẠNG VIỄN THƠNG PT (03 tín chỉ) Biên soạn TS VŨ HỮU TIẾN ThS ĐỖ ĐỨC ANH LƢU HÀNH NỘI BỘ Hà Nội, 11/2014 MỤC LỤC MỤC LỤC DANH SÁCH HÌNH VẼ CHƢƠNG I Tổng quan mạng viễn thông 1.1 Khái niệm chung mạng viễn thông 1.2 Các giai đoạn phát triển viễn thông 1.3 Một số mạng viễn thơng điển hình Mạng PSTN 1.3.2 Mạng thông tin di động 10 1.3.3 Mạng truyền số liệu 10 1.3.4 Mạng truyền hình 10 1.4 IT 1.3.1 Một số dịch vụ mạng viễn thông 11 1.4.1 Dịch vụ mạng NGN 11 1.4.2 Dịch vụ mạng di động 12 CHƢƠNG II Tổng quan IMS 14 Lịch sử hình thành phát triển 14 2.2 Kiến trúc hỗ trợ phát triển dịch vụ IMS 14 PT 2.1 2.2.1 Mặt phẳng truyền tải (Media/Transport Plane) 15 2.2.2 Lớp điều khiển (Control/Signalling Plane) 16 2.2.3 Mặt phẳng ứng dụng dịch vụ (Service/Application Plane) 18 2.3 Giao thức SIP 19 2.3.1 Vai trị SIP mạng Viễn thơng 19 2.3.2 Lịch sử phát triển 19 2.3.3 Cấu trúc tin 20 2.4 Giao thức RTP 23 2.4.1 Vai trò RTP mạng Viễn thông 23 2.4.2 Lịch sử phát triển 24 2.4.3 Cấu trúc tin 24 2.5 Giao thức SDP 26 2.5.1 Vai trị SDP mạng Viễn thơng 26 2.5.2 Lịch sử phát triển 26 2.5.3 2.6 Cấu trúc tin 26 Các kịch dịch vụ điển hình 33 2.6.1 Đăng ký 33 2.6.2 Khởi tạo phiên 36 CHƢƠNG III Phát triển dịch vụ đa phƣơng tiện IMS 45 3.1 Hệ thống Open-IMS 45 3.1.1 Lịch sử phát triển 45 3.1.2 Cấu hình hệ thống Open-IMS 45 3.2 Phát triển dịch vụ tích hợp đa phƣơng tiện 58 3.2.1 Giới thiệu thƣ viện PJSIP 58 3.2.2 Phát triển dịch vụ dựa thoại 64 3.2.3 Phát triển dịch vụ Messaging 78 PT IT TÀI LIỆU THAM KHẢO 95 DANH SÁCH HÌNH VẼ Hình 1: Các thành phần mạng viễn thông Hình 2: Các loại hình viễn thơng Hình 3: Sự phát triển hệ thống dịch vụ viễn thông IT Hình 1: Kiến trúc IMS(Theo IEC Newletter) 15 Hình 2: Kiến trúc mạng lõi IMS 16 Hình 3: Vai trị SIP mạng viễn thông 19 Hình 4: Cấu trúc tin SIP 20 Hình 5: Cấu trúc tin RTP 24 Hình 6: Cấu trúc tin SDP 28 Hình 7: Đăng ký thành công 33 Hình 8: Đăng ký không thành công 36 Hình 9: Khởi tạo phiên thành công 36 Hình 10: Khởi tạo phiên không thành công bên bị gọi khơng trả lời 40 Hình 11: Khởi tạo phiên không thành công bên bị gọi bận 42 Hình 12: Khởi tạo phiên không thành công không nhận đƣợc tin đáp ứng từ bên bị gọi 43 PT Hình 1: Hệ thống IMS đƣợc nghiên cứu phát triển FOKUS 45 Hình 2: Khai báo IMSU HSS 51 Hình 3: Khai báo IMSU HSS(tiếp) 51 Hình 4: Khai báo IMPI HSS 53 Hình 5: Khai báo IMPI HSS(tiếp) 54 Hình 6: Khai báo IMPU HSS 55 Hình 7: Khai báo IMPU HSS (tiếp) 55 Hình 8: Mối quan hệ IMSU, IMPI IMPU 56 Hình 9: Cấu hình Service Profile 56 Hình 10: Cấu hình Application Server 57 Hình 11: Cấu hình Trigger Point 58 Hình 12: Cấu hình IFC 58 Hình 13: Kiến trúc PJSIP 59 Hình 14: Flow dịch vụ thoại thông thƣờng 65 Hình 15: Flow gọi bị bận 65 Hình 16: Flow gọi khơng trả lời 66 Hình 17: Flow giải phóng gọi 67 Hình 18: Flow giải phóng gọi (tiếp) 68 Hình 19: Flow tạm dừng gọi 70 Hình 20: Flow tự động trả lời gọi 71 Hình 21: Flow từ chối gọi 72 Hình 22: Flow chuyển gọi 73 Hình 23 Flow dịch vụ thoại hội nghị 75 Hình 24: Flow dịch vụ nhắn tin sử dụng Page Mode 79 PT IT Hình 25: Flow dịch vụ nhắn tin sử dụng Session mode 80 CHƢƠNG I Tổng quan mạng viễn thông 1.1 Khái niệm chung mạng viễn thông Viễn thông bao gồm vấn đề liên quan đến việc truyền thông tin (trao đổi hay quảng bá thông tin) đối tƣợng qua khoảng cách, nghĩa bao gồm hoạt động liên quan tới việc phát/nhận tin tức (âm thanh, hình ảnh, chữ viết, liệu, …) qua phƣơng tiện truyền thông (hữu tuyến nhƣ đƣờng dây kim loại, cáp quang vô tuyến hệ thống điện từ khác) Thiết bị đầu cuối Thiết bị chuyển mạch Thiết bị đầu cuối IT Mạng viễn thông tập hợp thiết bị đầu cuối, thiết bị truyền dẫn điểm chuyển mạch Thiết bị truyền dẫn điểm chuyển mạch có nhiệm vụ kết nối thiết bị đầu cuối với phép thông tin đƣợc truyền thiết bị đầu cuối Thiết bị truyền dẫn Thiết bị truyền dẫn Thiết bị đầu cuối Thiết bị chuyển mạch Môi trƣờng truyền dẫn Thiết bị đầu cuối PT Hình 1: Các thành phần mạng viễn thơng Các điểm chuyển mạch sử dụng cơng nghệ chuyển mạch kênh, chuyển mạch gói chuyển mạch tin để truyền tín hiệu từ điểm tới điểm khác mạng theo địa đặt Mỗi thiết bị mạng thƣờng có địa Do vậy, tin kết nối đƣợc định tuyến đến ngƣời cần đƣợc nhận Thiết bị truyền dẫn có chức kết nối thiết bị mạng Thiết bị truyền dẫn cáp quang cáp đồng Môi trƣờng truyền dẫn bao gồm truyền dẫn vô tuyến truyền dẫn hữu tuyến Truyền dẫn hữu tuyến bao gồm dây cáp kim loại, cáp quang… để truyền tín hiệu Truyền dẫn vô tuyến bao gồm viba vệ tinh Thiết bị đầu cuối mạng viễn thông bao gồm máy điện thoại, máy fax, máy tính,… Hình 1.2 lƣợc đồ phân loại viễn thông Viễn thông chiếm phần chủ đạo truyền thông Truyền thông việc truyền thông tin từ điểm tới điểm khác, gồm có truyền thơng học (bƣu chính) truyền thơng điện (viễn thơng) phát triển từ dạng học (máy móc) sang dạng điện/quang ngày sử dụng hệ thống điện/quang phức tạp Viễn thông Đơn hƣớng Truyền Song hƣớng Truyền hinh Truyền hình vơ tuyến Điện báo Telex Điện thoại cố định Điện thoại di động Truyền liệu Thƣ điện tử Truyền hình hội nghị Truyền hình theo yêu cầu … Truyền hình cáp Hình 2: Các loại hình viễn thông IT Tỷ phần truyền thông học (thƣ từ, báo chí) có xu hƣớng giảm tỷ phần truyền thông điện/quang, đặc biệt truyền song hƣớng, lại gia tăng chiếm thị phần chủ đạo tƣơng lai Vì vậy, ngày tập đồn báo chí tập trung hƣớng tới truyền thơng điện/quang, coi hội kinh doanh tƣơng lai PT Mạng viễn thơng lâu đời nhắc tới mạng điện thoại cố định, sau mạng điện thoại vơ tuyến, mạng đa dịch vụ, mạng Internet Chúng ta thấy mạng viễn thơng cung cấp nhiều dịch vụ nhƣ dịch vụ thoại cố định, di động hay số liệu Các mạng liên kết với để cung cấp dịch vụ liên mạng cho nhiều đối tƣợng thuê bao 1.2 Các giai đoạn phát triển viễn thông Viễn thông trải qua nhiều giai đoạn lịch sử khác Error! Reference source not found cho ta mốc lịch sử phát triển quan trọng viễn thông, chủ yếu nhấn mạnh vào phát triển mở rộng hệ thống dịch vụ viễn thơng Có thể phân chia phát triển viễn thông qua bốn giai đoạn Giai đoạn thứ kéo dài khoảng 90 năm từ điện thoại đời phát triển Giai đoạn thứ hai giai đoạn xuất chuyển mạch SPC, truyền dẫn số thông tin vệ tinh Giai đoạn thứ giai đoạn phát triển đặc trƣng mạng liệu công nghệ chuyển mạch gói Giai đoạn thứ xuất vấn đề liên kết mạng truyền thơng Phần trình bày mốc thời gian đáng nhớ theo kiện bật liên quan tới viễn thông 1838-1866 Điện báo (telegraph): Samuel Morse hoàn thiện hệ thống điện báo mình; điện báo dịch vụ viễn thông xuất năm 1844 1876-1899 Điện thoại (telephony): Alexander Graham Bell phát minh điện thoại (1876); xuất tổng đài điện thoại với đƣờng dây; Almond Strowger sáng chế tổng đài điện kiểu nấc (step by step, 1887) 1920-1928 Carson, Nyquist, Johnson Hartley giới thiệu lý thuyết truyền dẫn 1923-1938 Truyền hình (Television): Hệ thống hình ảnh đƣợc thực hiện; bắt đầu thử nghiệm thực nghiệm quảng bá 1937 Alec Reeves hình thành khái niệm điều xung mã (PCM) 1938-1945 Các hệ thống radar viba phát triển Đại chiến giới lần thứ 2; FM đƣợc sử dụng rộng khắp truyền thông quân 1948-1950 C.E Shannon phát hành báo tảng lý thuyết thông tin PT IT WAN: Mạng diện rộng LAN: Mạng nội WLAN: LAN Không dây WWW: World Wide Web ADSL: Đƣờng dây thuê bao bất đối xứng ISDN: Mạng tích hợp đa dịch vụ AM: Điều chế theo biên độ FM: Điền chế theo tần số IP: Giao thức Internet CS:Chuyển mạch kênh PS: Chuyển mạch gói VoD: Truyền Video theo yêu cầu TV: Truyền hình Hình 3: Sự phát triển hệ thống dịch vụ viễn thông 1950 Ghép kênh phân chia theo thời gian (TDM) đƣợc áp dụng vào điện thoại 1953 Các chuẩn Tivi màu đƣợc công bố Mỹ 1955 J R Pierce đề xuất hệ thống truyền thông vệ tinh 1962-1966 Dịch vụ truyền liệu đƣợc thƣơng mại; PCM chứng tỏ thích hợp cho truyền thoại TV; lý thuyết truyền dẫn số đƣợc phát triển 1965 Mariner IV truyền ảnh từ Sao Hỏa Trái Đất 1976 Ethernet LAN Metcalfe Broggs (Xerox) sáng chế 1970–1975 Chuẩn PCM đƣợc CCITT triển khai 1980–1983 Khởi động Internet toàn cầu dựa giao thức TCP/IP 1980–1985 Các mạng di động tế bào đại cung cấp dịch vụ; NMT Bắc Âu, AMPS Mỹ, mơ hình tham chiếu OSI đƣợc Tổ chức chuẩn hóa quốc tế (ISO) định nghĩa 1989 Tim Berners-Lee (CERN) đề cử ban đầu cho văn kiện kết nối Web WWW (World Wide Web) 1990–1997 Hệ thống tế bào số đầu tiên, Global System for Mobile Communications (GSM), đƣợc thƣơng mại phát triển mạnh toàn giới; Sử dụng Internet dịch vụ mở rộng nhanh chóng nhờ có WWW 1997–2001 Cộng đồng viễn thông đƣợc bãi bỏ quy định kinh doanh phát triển nhanh chóng; mạng tế bào số, đặc biệt GSM mở rộng toàn giới; ứng dụng thƣơng mại Internet mở rộng phần truyền thông thoại truyền thống đƣợc chuyển từ mạng điện thoại chuyển mạch công cộng (PSTN) sang Internet; chất lƣợng LAN đƣợc cải thiện với công nghệ Ethernet tiên tiến có tốc độ lên tới tầm Gigabit/s 2001–2005 Truyền hình số bắt đầu thay truyền hình quảng bá tƣơng tự; hệ thống truy nhập băng rộng mở rộng khả cung cấp dịch vụ Internet đa phƣơng tiện tới ngƣời; dịch vụ thoại trở thành dịch vụ truyền thông cá nhân xâm nhập hệ thống tế bào PCS tăng lên PT IT 2005- : Truyền hình số dần thay truyền hình tƣơng tự bắt đầu cung cấp dịch vụ tƣơng tác dịch vụ quảng bá (truyền hình dựa giao thức IP-IPTV, Truyền hình theo yêu cầu-VoD, Truyền nội dung theo yêu cầu- CoD); hệ thống di động tế bào hệ thứ công nghệ WLAN cung cấp dịch vụ liệu tiên tiến cho ngƣời sử dụng di động; dịch vụ di động nội hạt mở rộng, ứng dụng cho công nghệ không dây khoảng cách ngắn nhà công sở tăng lên; mạng viễn thơng tồn cầu tiến triển hƣớng tới mặt mạng chuyển mạch gói chung cho tất loại dịch vụ, hình thành mạng dịch vụ hội tụ nhƣ NGN 1.3 Một số mạng viễn thơng điển hình 1.3.1 Mạng PSTN Mạng điện thoại chuyển mạch công cộng (PSTN) mạng dịch vụ phát triển sớm, sau hệ thống điện báo Morse Mạng PSTN cung cấp dịch vụ thoại phi thoại Hệ thống cung cấp dịch vụ thoại đƣợc triển khai rộng khắp giới trải qua nhiều giai đoạn công nghệ khác PSTN mạng viễn thông lâu đời lớn từ trƣớc tới nay, tính đến 1998 có 700 triệu thuê bao, tới năm 2000 có tỷ th bao tồn giới Ở Việt Nam, tính đến 2004 có triệu thuê bao điện thoại PSTN tổng số 10 triệu thuê bao điện thoại (cố định+di động) tới 6/2006, số tƣơng ứng khoảng triệu thuê bao PSTN tổng số khoảng 17 triệu thuê bao điện thoại Tới nay, dịch vụ giai đoạn bão hòa, cụ thể số lƣợng thuê bao điện thoại cố định PSTN Việt Nam 11/2009 khoảng 11 triệu Tính đến tháng 6/2012 nƣớc có 15.2 triệu thuê bao cố định (trang thông tin thông tin truyền thông – MIC) Xét chất PSTN mạng hoạt động theo phƣơng thức kênh (circuit mode), nghĩa theo phƣơng thức hƣớng kết nối (connection-oriented): gọi điện thoại đƣợc tiến hành theo pha: Thiết lập kết nối, trì kết nối giải phóng kết nối (setup-conversationreleased) cách sử dụng hệ thống báo hiệu Đặc điểm chủ yếu PSTN:  Truy nhập analog 300-3400 Hz  Kết nối song công chuyển mạch kênh  Băng thông chuyển mạch 64kb/s 300-3400Hz chuyển mạch analog  Khơng có khả di động di động với cự ly hạn chế 1.3.2 Mạng thông tin di động IT Là mạng đời sau mạng điện thoại cố định, mạng điện thoại di động cung cấp khả di động cho thuê bao trình thực thơng tin liên lạc Tùy theo tính di động, đặc điểm phủ sóng, mục đích sử dụng kỹ thuật điều chế, mã hóa mà ngƣời ta phân biệt hệ thống thông tin di động khác nhau: thông tin di động nội vùng (cịn gọi thơng tin vơ tuyến nội hạt, mạch vịng vơ tuyến nội hạt ), thơng tin di động tồn cầu GSM, thơng tin di động CDMA PT Ở Việt Nam, tính đến 2004 có triệu thuê bao điện thoại di động (chiếm 40% tổng số thuê bao điện thoại), tới 6/2006, số tƣơng ứng triệu thuê bao (gần 47% tổng số thuê bao điện thoại, số lƣợng thuê bao điện thoại di động cố định gần ngang nhau) Tuy nhiên với xu hƣớng phát triển dịch vụ điện thoại hƣớng sang di động nên số lƣợng thuê bao cố định bắt đầu chững lại, lƣợng thuê bao di động liên tục phát triển, cụ thể tới 11/ 2009, tổng số lƣợng thuê bao cố định di động đạt 107,5 triệu thuê bao (tƣơng ứng với mật độ điện thoại khoảng 126,4%) có 80% số thuê bao di động Cho đến tháng 6/2012 tổng số điện thoại di động 120.7 triệu thuê bao di động 1.3.3 Mạng truyền số liệu Truyền số liệu loại hình phổ biến thời đại thơng tin Đó loại hình dịch vụ viễn thơng đƣợc thực số mạng khác nhƣ: Mạng số liệu chuyển mạch gói, mạng số liệu chuyển mạch kênh, mạng điện thoại công cộng, hay đơn giản mạng máy tính (LAN, MAN, WAN), mạng thuê riêng, … 1.3.4 Mạng truyền hình Mạng truyền hình mạng cung cấp thơng tin đến ngƣời dùng dƣới dạng hình ảnh âm Ở Việt nam có nhiều nhà cung cung cấp truyền hình nhƣ VTV, VTC, Hà nội TV, TPHCM TV, Về công nghệ , mạng truyền hình chia làm dạng: - Một mạng truyền hình vơ tuyến bao gồm : cơng nghệ tƣơng tự (analog ) công nghệ số ( số mặt đất số vệ tinh) - Hai mạng truyền hình hữu tuyến (truyền hình cáp) 10 gửi tin MESSAGE bên dialog Tuy nhiên RFC 3428 rõ việc không nên tạo dialog để phục vụ gửi tin MESSAGE thực thể với a Gửi tin MESSAGE i Outside Dialog Để gửi tin tin yêu cầu MESSAGE bên dialog, ứng dụng tạo tin yêu cầu cách gọi hàm pjsip_endpt_create_request() Chèn thông tin ngƣời gửi, thông tin ngƣời nhận, nội dung tin nhắn Sau gọi hàm pjsip_endpt_send_request() để gửi tin yêu cầu MESSAGE pj_status_t send_im(const pj_str_t *from, const pj_str_t *to, const pj_str_t *text) { pjsip_method message_method = { PJSIP_OTHER_METHOD, {“MESSAGE”, 7}}; pj_status_t status; IT pjsip_tx_data *tdata; status = pjsip_endpt_create_request( endpt, &message_method, to, from, to, NULL /*Contact*/, NULL /*Call-ID */, -1 /*CSeq*/, text /*Text body*/ &tdata); PT status = pjsip_endpt_send_request( endpt, tdata, -1 /*Timeout*/, NULL /*Callback data*/, NULL /*Callback*/); } ii Inside Dialog Để gửi tin yêu cầu MESSAGE bên dialog, ứng dụng tạo tin yêu cầu với dialog cách gọi hàm pjsip_dlg_create_request() Chèn nội dung tin nhắn Sau gọi hàm pjsip_dlg_send_request () để gửi tin yêu cầu MESSAGE pj_status_t send_im_in_dlg( pjsip_dialog *dlg, const pj_str_t *text) { pjsip_method message_method = { PJSIP_OTHER_METHOD, {“MESSAGE”, 7}}; const pj_str_t STR_TEXT = pj_str(“text”); const pj_str_t STR_PLAIN = pj_str(“plain”); 81 pjsip_tx_data *tdata; pj_status_t status; /* Must lock dialog */ pjsip_dlg_inc_lock(dlg); /* Create the MESSAGE request */ status = pjsip_dlg_create_request( dlg, &message_method, -1 /*CSeq*/, &tdata); /* Attach “text/plain” body */ tdata->msg->body = pjsip_msg_body_create( tdata->pool, &STR_TEXT, &STR_PLAIN, text ); /* Send the request */ /* Done */ IT status = pjsip_dlg_send_request(dlg, tdata, NULL /*Ptr to receive tsx*/ ); pjsip_dlg_dec_lock(dlg); } PT Ví dụ sử dụng Application Server để gửi tin MESSAGE ////////////////////////////////////////////////////////////////////////// static pj_status_t mod_im_send_MESSAGE_authentication(pj_pool_t *pool, pjsip_endpoint *endpt, pjsip_module *module, im_msg *MES_msg){ pj_status_t status; pjsip_transaction *uac_tsx; pjsip_tx_data *tdata; pjsip_method message_method = { PJSIP_OTHER_METHOD, {"MESSAGE", 7}}; const pj_str_t STR_INSTANT_MESSAGING = { "Instant Messaging", }; const pj_str_t p_charging_str = { "P-Charging-Vector", 17}; pj_str_t target, from, to, body_text; char from_buf[64], to_buf[64], body_buf[512]; char number[32], domain[32]; 82 memset(from_buf, 0, 64); sprintf_s(from_buf, 64, "", "WebSupport", "ims.cdit.com.vn"); memset(to_buf, 0, 64); memset(number, 0, 32); memset(domain, 0, 32); pj_ansi_strncpy(number, MES_msg->to.value.ptr, MES_msg->to.value.slen); pj_ansi_strncpy(domain, MES_msg->to.host.ptr, MES_msg->to.host.slen); sprintf_s(to_buf, 64, "",number, domain); memset(body_buf, 0, 512); IT pj_ansi_strncpy(body_buf, MES_msg->body.ptr, MES_msg->body.slen); target = pj_str(to_buf); //target, To from = pj_str(from_buf); //from to = pj_str(to_buf); //to //body PT body_text = pj_str(body_buf); /* create MESSAGE message */ status = pjsip_endpt_create_request(endpt, &message_method, &target, &from, &to, NULL, NULL, //&call_id, -1, &body_text, &tdata); if (status != PJ_SUCCESS){ return PJ_TRUE; } pool = pjsip_endpt_create_pool(endpt, "MSG_Send_Offline", 4000, 4000); 83 /**********************************/ /* save msg */ { pjsip_cid_hdr *cid_hdr; /* callid */ cid_hdr = (pjsip_cid_hdr *) pjsip_msg_find_hdr(tdata->msg, PJSIP_H_CALL_ID, NULL); if (cid_hdr){ MES_msg->callid.slen = cid_hdr->id.slen; MES_msg->callid.ptr = (char *)pj_pool_alloc(pool, MES_msg>callid.slen); strncpy(MES_msg->callid.ptr, cid_hdr->id.ptr, MES_msg>callid.slen); } /* from */ IT MES_msg->callid.ptr[MES_msg->callid.slen] = 0; MES_msg->from.value = pj_str("WebSupport"); PT MES_msg->from.host = pj_str("ims.cdit.com.vn"); } /**********************************/ /* Add P-Charging-Vector */ { pjsip_hdr *p_charging_hdr; pj_str_t str_charging_vector; /* Find P-Charging */ str_charging_vector = pj_str("icid-value=\"PCSCFabcd5289c6210000001a\";icid-generated-at=10.171.18.21;origioi=\"ims.cdit.com.vn\""); p_charging_hdr = (pjsip_hdr *)pjsip_generic_string_hdr_create(tdata>pool, &str_charging_vector, NULL); pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)p_charging_hdr); } 84 /**********************************/ /* Add Route */ { pjsip_route_hdr *route_hdr; pjsip_sip_uri *url; route_hdr = pjsip_route_hdr_create(tdata->pool); pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)route_hdr); url = pjsip_sip_uri_create(tdata->pool, PJ_FALSE); route_hdr->name_addr.uri = (pjsip_uri*)url; //pj_strdup2(tdata->pool, &url->host, "scsf-stdn.imsg0-000.hni-ics0101.hni1.ims.vnpt.vn"); IT pj_strdup2(tdata->pool, &url->host, "scscf.ims.cdit.com.vn"); url->lr_param = 1; url->port = 5060; } PT /* create uac transaction */ status = pjsip_tsx_create_uac(module, tdata, &uac_tsx); if (status != PJ_SUCCESS){ return PJ_TRUE; } /* send MESSAGE message */ status = pjsip_tsx_send_msg(uac_tsx, tdata); if (status != PJ_SUCCESS){ return PJ_TRUE; } return PJ_SUCCESS; } b Nhận tin đáp ứng Client nhận đƣợc tin request gửi từ Application Server 85 /* Callback to be called to handle transaction state changed */ static void im_on_tsx_state(pjsip_transaction *tsx, pjsip_event *event){ struct uac_data *uac_data; // pj_status_t status; MES_DETAIL message; int iResult; im_msg msg; if (tsx->role == PJSIP_ROLE_UAS) { if (tsx->state == PJSIP_TSX_STATE_TERMINATED) { struct uas_data *uas_data; uas_data = (struct uas_data*) tsx->mod_data[mod_im_tu.id]; IT if (uas_data->uac_tsx) { uac_data = (struct uac_data*)uas_data->uac_tsx- >mod_data[mod_im_tu.id]; uac_data->uas_tsx = NULL; } PT } return; } /* Get the data that we attached to the UAC transaction previously */ uac_data = (struct uac_data*) tsx->mod_data[mod_im_tu.id]; /* Handle incoming response */ if (event->body.tsx_state.type == PJSIP_EVENT_RX_MSG) { pjsip_rx_data *rdata; pjsip_response_addr res_addr; pjsip_via_hdr *hvia; pjsip_tx_data *tdata; rdata = event->body.tsx_state.src.rdata; 86 /* Do not forward 100 response for INVITE (we already responded * INVITE with 100) */ if (tsx->method.id == PJSIP_INVITE_METHOD && rdata->msg_info.msg->line.status.code == 100){ return; } /********************************************************************/ /* incoming 404 response message */ if ((rdata->msg_info.msg->line.req.method.id == 404) || (rdata>msg_info.msg->line.req.method.id == 481) || IT (rdata->msg_info.msg->line.req.method.id == 400) || (rdata>msg_info.msg->line.req.method.id == 408)){ /* Parser MESSAGE message */ msg = mod_im_parse_msg2(globalPjCfg.pool, rdata); /* Update status to DataBase */ PT iResult = mod_dbs_update_MESS_status2(msg, -1); // pjsip_tsx_terminate(uac_data->uas_tsx, 202); // return; }//4xx bad request ////////////////////////////////////////////////////////////////////////// /********************************************************************/ /* incoming 200 response message */ if (rdata->msg_info.msg->line.req.method.id == 200){ /* Parser MESSAGE message */ /* Parser MESSAGE message */ msg = mod_im_parse_msg2(globalPjCfg.pool, rdata); /* Update status to DataBase */ iResult = mod_dbs_update_MESS_status2(msg, 1); 87 // pjsip_tsx_terminate(uac_data->uas_tsx, 202); // return; }//200 OK ////////////////////////////////////////////////////////////////////////// /* Create response to be forwarded upstream * (Via will be stripped here) */ status = pjsip_endpt_create_response_fwd(globalPjCfg.endpt, rdata, 0, &tdata); if (status != PJ_SUCCESS) { app_perror("Error creating response", status); return; IT } /* Get topmost Via header of the new response */ hvia = (pjsip_via_hdr*) pjsip_msg_find_hdr(tdata->msg, PJSIP_H_VIA, NULL); if (hvia == NULL) { PT /* Invalid response! Just drop it */ pjsip_tx_data_dec_ref(tdata); return; } /* Calculate the address to forward the response */ pj_bzero(&res_addr, sizeof(res_addr)); res_addr.dst_host.type = PJSIP_TRANSPORT_UDP; res_addr.dst_host.flag = pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_UDP); /* Destination address is Via's received param */ res_addr.dst_host.addr.host = hvia->recvd_param; if (res_addr.dst_host.addr.host.slen == 0) { /* Someone has messed up our Via header! */ res_addr.dst_host.addr.host = hvia->sent_by.host; 88 } /* Destination port is the rport */ if (hvia->rport_param != && hvia->rport_param != -1) res_addr.dst_host.addr.port = hvia->rport_param; if (res_addr.dst_host.addr.port == 0) { /* Ugh, original sender didn't put rport! * At best, can only send the response to the port in Via */ res_addr.dst_host.addr.port = hvia->sent_by.port; } IT /* Forward response with the UAS transaction */ pjsip_tsx_send_msg(uac_data->uas_tsx, tdata); } PT /* If UAC transaction is terminated, terminate the UAS as well * This could happen because of: * - timeout on the UAC side * - receipt of 2xx response to INVITE */ if (tsx->state == PJSIP_TSX_STATE_TERMINATED && uac_data && uac_data->uas_tsx){ pjsip_transaction *uas_tsx; struct uas_data *uas_data; uas_tsx = uac_data->uas_tsx; uas_data = (struct uas_data*) uas_tsx->mod_data[mod_im_tu.id]; uas_data->uac_tsx = NULL; if (event->body.tsx_state.type == PJSIP_EVENT_TIMER) { /* Send 408/Timeout if this is an INVITE transaction, since 89 * we must have sent provisional response before For non * INVITE transaction, just destroy it */ if (tsx->method.id == PJSIP_INVITE_METHOD) { pjsip_tx_data *tdata = uas_tsx->last_tx; tdata->msg->line.status.code = PJSIP_SC_REQUEST_TIMEOUT; tdata->msg->line.status.reason = pj_str("Request timed out"); tdata->msg->body = NULL; pjsip_tx_data_add_ref(tdata); IT pjsip_tx_data_invalidate_msg(tdata); pjsip_tsx_send_msg(uas_tsx, tdata); } else { /* For non-INVITE, just destroy the UAS transaction */ PT pjsip_tsx_terminate(uas_tsx, PJSIP_SC_REQUEST_TIMEOUT); } } else if (event->body.tsx_state.type == PJSIP_EVENT_RX_MSG) { if (uas_tsx->state < PJSIP_TSX_STATE_TERMINATED) { pjsip_msg *msg; int code; msg = event->body.tsx_state.src.rdata->msg_info.msg; code = msg->line.status.code; uac_data->uas_tsx = NULL; pjsip_tsx_terminate(uas_tsx, code); } } } 90 } c Nhận tin MESSAGE Bản tin yêu cầu MESSAGE đƣợc gửi đến không thuộc dialog đƣợc nhận application module Bản tin yêu cầu MESSAGE đƣợc gửi đến thuộc dialog đƣợc nhận hàm calback on_tsx_state(pjsip_transaction *tsx, pjsip_event *event) Ví dụ sử dụng Application Server đón tin MESSAGE static pjsip_module mod_im_as = { NULL, NULL, /* prev, next { "mod-instant-messaging-server", 28 }, */ /* Name */ -1, /* Id */ PJSIP_MOD_PRIORITY_UA_PROXY_LAYER, /* Priority */ NULL, NULL, NULL, &im_on_rx_request, &im_on_rx_response, */ /* start() */ /* stop() */ /* unload() */ /* on_rx_request() */ /* on_rx_response() */ /* on_tx_request PT NULL, /* load() IT NULL, */ NULL, /* on_tx_response() */ NULL, /* on_tsx_state() */ }; /* Callback to be called to handle new incoming requests */ static pj_bool_t im_on_rx_request( pjsip_rx_data *rdata ){ pjsip_transaction *uas_tsx, *uac_tsx; struct uac_data *uac_data; struct uas_data *uas_data; pjsip_tx_data *tdata; pj_status_t int // status; iResult, i; pj_str_t status_text; MES_DETAIL REG_msg, MES_msg; 91 // MES_OFF_LIST MES_msg_off_list; // BLACK_LIST black_list; char sqlCmd[256]; char to[32]; int iMESS_msg_offline_Count, iblacklistCnt; im_msg REG_msg2, MES_msg2; im_msg MES_msg_offline2[32]; im_msg blacklist2[32]; status_text = pj_str("AppSer-01@CDiT"); /* CANCEL request*/ IT if (rdata->msg_info.msg->line.req.method.id != PJSIP_CANCEL_METHOD){ /* Verify incoming request */ status = proxy_verify_request(rdata); if (status != PJ_SUCCESS) { app_perror("RX invalid request", status); PT return PJ_TRUE; } /* * Request looks sane, next clone the request to create transmit data */ /********************************************************************/ /* Incoming request message is MESSAGE */ if (strncmp(rdata->msg_info.msg->line.req.method.name.ptr, "MESSAGE", rdata->msg_info.msg->line.req.method.name.slen) == 0){ /* Parser MESSAGE message */ // memset(&MES_msg, 0, sizeof(MES_DETAIL)); // MES_msg = mod_im_paser_msg(rdata); MES_msg2 = mod_im_parse_msg2(globalPjCfg.pool, rdata); /* Check contact in DB */ /* Kiem tra xem truong To co imuser hay khong 92 + neu co thi tiep tuc + neu khong co thi bo qua, khong luu, tra ve loi 404-Not Found */ iResult = mod_im_check_user2(MES_msg2); if (iResult == DB_CONTACT_NOT_EXISTS){ /* Return response message */ pjsip_endpt_respond_stateless(globalPjCfg.endpt, rdata, PJSIP_SC_NOT_FOUND, &status_text, NULL, NULL);//404-NOT FOUND return PJ_TRUE; } /* Check blacklist */ IT //kiem tra truong To co nam imblacklist table blacklist khong? memset(to, 0, 32); memset(sqlCmd, 0, 256); pj_ansi_strncpy(to, MES_msg2.to.value.ptr, MES_msg2.to.value.slen); pj_ansi_sprintf(sqlCmd, "select count(*)\ PT from imuser\ where im_iduser in ( select im_idblock from imblacklist\ where im_iduser = (select im_iduser from imuser where im_number = '%s'))", to); iResult = mod_dbs_load_count2(sqlCmd, &iblacklistCnt); if (iblacklistCnt >0){ iResult = mod_dbs_load_blacklist2(globalPjCfg.pool, MES_msg2, blacklist2, 32); for (i=0; i

Ngày đăng: 19/03/2021, 17:09

Xem thêm:

w