RasSrv.c: Chức năng

Một phần của tài liệu VoIP và báo hiệu số 7 (Trang 129 - 133)

V Lược bỏ số truy cập vùng

Chức năng của moduỉe

11.3.6. RasSrv.c: Chức năng

Chức năng

Định nghĩa các quy tắc để gatekeeper phân tích địa chỉ đích đến của một đầu cuối.

Thư viện

gkDestAnalysis.h/ stl_supp.h/ Toolkit.h/ h323util.h/ ANSI.h/ <map>/ <list> Các hàm và lớp của module

• Lớp OverlapSendDestAnalysis: Nếu đầu cuối gửi đến gatekeeper một yêu cầu kết nấi được chỉ ra trong bản tin ARQ và bản tin này chứa tên hình thức (alias) của đích đến thì gatekeeper sẽ kiểm tra alias này. Nếu alias chứa địa ch! không có trong bảng đăng ký thì gatekeeper sẽ gửi lại bản tin ARJ 0 và chỉ ra nguyên nhân từ chôì cuộc gọi:

reason=H225_AdmissionRejectReason::e_calledPartyNotRegistered;

Nếu alias là một tiền tố trong bảng đăng ký thì gatekeeper gửi lại bản tin ARJ với nguyên nhân:

reason=H225_AdmìssionRejectReason::e_iiicorapleteAddre8s;

Ngược lại, gatekeeper gửi đi bản tin chấp nhận cuộc gọi ACF bằng cách gọi hàm PTRACE.

• Lớp GkDestAnalysis: cấu hình địa chỉ của một đầu cuối khi đăng ký với gatekeeper.

Chương 11: OpenH323 Gatekeeper 291

11.3.6. RasSrv.c:Chức năng Chức năng

RAS-server cho gatekeeper H323.

Thư viện

RasSrv.h/ h323pdu.h/ gk.const.h/ gk.h/ SoaPBx'h/ ANSI.h/ GkStatus.h/ GkClient.h/ ProxyThread.h/ gkauth.h/ gkldap.h/ gkDestAnalysis.h

Các hàm vả lớp của modiiỉe

• Các hàm thuộc lớp H323RasSrv thiết lập chế độ báo hiệu theo file cấu hình:

- H323RasSrv::SetRoutedMode(): thiết lập chế độ định tuyến.

- H323RasSrv::AcceptUnregisteredCalls(PIPSocket::Address ip, bool & fp): kiểm tra gatekeeper có phải là gatekeeper Client, nếu đúng thì hàm hủy bỏ việc đăng ký của gatekeeper và trả về giá trị True, ngược lại, hàm trả về giá trị False.

- H323RasSrv::ClearAltGKsTableO: xóa bảng lưu trữ các gatekeeper ỉân cận của gatekeeper.

- H323RasSrv::GetAlternateGK(): tạo bảng lưu trữ các gatekeeper lân cận của gatekeeper.

- H323RasSrv::LoadConíỉg(): cấu hình thêm cho gatẹkeeper như: thêm vào các xác nhận, thêm vào các gatekeeper lân cận, khởi tạo LDÁP, thêm vào các địa chỉ đích (địa chỉ của các đầu cuối mà gatekeeper quản lý).

- H323RasSrv::Clo8e(void): cắt kết nối tất cả các cuộc gọi, yêu cầu các điểm cuối đăng ký lại ngay lập tức.

• Các hàm thuộc lớp H323RasSrv có chức năng xử lý các bản tin báo hiệu: - H323RasSrv::OnGRQ(const PIPSocket:iA.ddress & rx_addr, const

H225_RasMessage & obj_grq, H225_RasMessage & obj_rpỉ); hàm xử ỉý bản tin Gatekeeper request (GRQ) đến từ đầu cuối.

- H323RasSrv::OnRRQ(const PIPSocket::Address & rx_adđr, const H225_RasMessage & obj_grq, H225_Ra8Message & obj_rpl): hàm xử lý yêu cầu đăng ký của đầu cuối; nếu yêu cầu đến từ đầu cuối đã được đăng ký thì gatekeeper sẽ hủy bỏ yêu cầu đãng ký, ngược lại, gatekeeper thực hiện đăng ký cho đầu cuối.

- H323RasSrv::OnRCF(const PIPSocket::ÂddreBs & rx.addr, const H225_RasMessage & obj_grq, H22ỗ_RasMessage & obj_rpl): xác nhận việc đăng ký cho đầu cuối (gkClient->OnRCF(obj_rcf,rx_addr)). - H323RasSrv::OnRRJ(const PỈPSocketrAddress & rx.addr, const

H225_RasMessage & obj_grq, H225_RasMessage & obj_rpD: hàm này thiết lập các trường cho bản tin RRJ để tìỉ chối yêu cầu đăng ký của đầu cuối.

- H323RasSrv::OnARQ(const PIPSocket:;Addres8 & rx_addr, const H225_RasMessage & obj_grq, H225 RasMessage & obj_rpỉ): khi nhận được bản tin ARQ (PTRACEd, “GK ARQ Received”)), gatekeeper di xác định đầu cuối gửi yêu cầu này. Gatekeeper từ chối yêu cầu của đầu cuối trong các trường hợp:

Nếu đầu cuối yêu cầu chưa được đăng ký với gatekeeper:

r€ịiectReason=H225_AdxmssionRejectReason;:e_calledNotRegistered Nếu dịa chỉ của đầu cuối yêu cầu trùng với một preũx của một đầu cuối khác được lưu trong bảng thì;

rejectReason=H225^dinissionRejectReason::e_incompleteAddress; Nếu gatekeeper không xác định được đầu cuôl bị gọi:

rejectReason=H22ỗ_ÂdmissionRejectReason::e_calIedPãrtyNot Registered;

Nếu đầu cuối đâ đăng ký với gatekeeper thì gatekeeper sẽ thực hiện kiểm tra bảng thông mà đầu cuối yêu cầu. Nếu băng thông yêu cầu vượt quá khả năng của gatekeeper thì gatekeeper từ chối yêu cầu của đầu cuối:

rejectReason=H225_AdmissionRejectReason::e_reque8tDenieđ; Nếu cuộc gọi được yêu cầu định tuyến đến mạng chuyển mạch kênh:

rejectReason=H225_AdmissionRejectReason::e_routeCaìlToSCN; Trong lúc xử lý bản tin ARQ, nếu gatekeeper phát hiện có thêm một bản tin ARQ mới thì nó sẽ kiểm tra xem bản tin mới này có trùng với bản tin cũ không, nếu trùng gatekeeper sẽ loại bản tin này (PTRACE(3, “GK ACF: found exỉsting call no” «pExistingCallRec->GetcallNumber())), nếu số dược gọi của bản tin ARQ mới không trùng thì Gatekeeper sẽ thực hiện kỉểm tra bản tin này nếu thỏa các điều kiện thì gatekeeper sẽ gọi hàm Insert để thêm vào một kết nối mới.

Sau khi xử lý bản tin ARQ, nếu gatekeeper chấp nhận yêu cầu của đầu cuối, nó sẽ thiết lập các trường cho bản tin ACF và gửi cho đầu cuối.

- H323RasSrv::OnACF(const PIPSocket-Address & rx_addr, const H225_RasMe8sage & obj_grq, H225_RasMessage & obj_rpD: sau khi xác nhận bản tin ARQ của đầu cuếi, gatekeeper thiết ỉập bản tin ACF cho Client:

iflgkclient->l8RegÌ8teredO) gkClient->OnACF(obj_rr, rx_addr) Ngược lạỉ, hàm này sề trả về giá trị FALỖE return PALSE;

- H323Ra8Srv;:OnARJ(con8t PIPSocket-.rAddress & rx_addr, const H225_RasMessage & obj_grq, H225_RasMessage & obj_rpl); thiết lập bản tin ARJ.

- H323Ra8Srv:;OnDRQ(const PIPSocket;:Addre88 & rx_addr, const H225_RasMessage & obj_grq, H225_RasMessage & obj_rpD: thiết ỉập bản tin yẽu cầu cắt kết nối.

- H323RasSrv::OnưRQíconst PIPSocket:;Addres8 & rx_addr, const H225_Ra8Message & obj_grq, H225_RasMessage & obj_rpD: tạo bản tin URQ để hủy bỏ việc đảng ký của Client và khi phát hiện bản tin UCF đến từ đầu cuôì mà gatekeeper yêu cầu thì hàm này sẽ dược gọi dể cắt kết nối các cuộc gọi. Hàm này cũng có chức năng xử lý bản tin ƯRQ mà đầu cuối gửi đến, nếu sau khi thực hiện kiểm tra, gatekeeper chấp nhập yêu cầu của đầu cuối thi nó tạo bản tin UCF và gửi lại cho đầu cuối, nếu gatekeeper không chấp nhận yêu cầu của đầu cuối thì nó tạo bản tin URJ gửi cho đầu cuối.

- H323RasSrv::OnBRQ(const PIPSocket::Address & rx_addr, const H225_RasMessage & obj_grq,. H225_RasMessage & obj_rpl): khi nhận bản tin BRQ hàm này sẽ được gọi để kiểm tra giá trị băng thông mà đầu cuối yêu cầu, nếu gatekeeper không xác định được đầu cuối gửi yêu cầu thì hàm từ chối phân phối băng thông sẽ được gọi:

rsn=H225_BandRejectReason::e_invalidConferenceID;

Nếu băng thông mà đầu cuối yêu cầu vượt quá khả năng của gatekeeper thì yêu cầu cũng bị từ chối:

rsn=H225_BandRejectReason::e_insuffientResources;

và rsn được đưa vào bản tin BRJ (bri.m_rẹjectReason.SetTag(rsn)) để gửỉ tới đầu cuối.

Ngược lại, băng thông được thiết lập theo yêu cầu của đầu cuối và bản tin BCF được tạo gửi cho đầu cuối:

pCall->Setbandwidth(bandwidth)obj_rpl.SetTag(H225_ RasMessage::e_bandwidthConíìrm)

- H323RasSrv::OnLRQ(const PIPSocket::Address & rx_addr, const H225_RasMessage & obj_grq, H225_RasMessage & obj_rpD: khi gatekeeper nhận dược bản tin LRQ từ đầu cuôì hàm này sẽ được gọi để kiểm tra xem đầu cuối đang yêu cầu có được đăng ký với gatekeeper không và gọi hàm DestÂnaỉysis để kiểm tra dầu cuối bị gọi có thuộc gatekeeper không. Nếu đầu cuối chủ gọi và bị gọi được xác nhận thì gatekeeper sẽ kiểm tra tên hình thức. Nếu tìm thấy tên hình thức trong bảng địa chỉ thì địa chỉ hình thức được chuyển đổi thành địa chỉ IP thật, gatekeeper tạo bản tin LCF (gọi hàm obj_rpl.SetTag(H225_RasMe88age:;e_locationConfinn)) để truyền lại xác nhận cho đầu cuối. Nếu tên hình thức không được tìm thấy trong bảng địa chỉ thi gatekeeper tạo bản tin LRJ (gọi hàm obj_rpl.SetTag(H225_RasMessage::e_locatiờnReject) để từ chối định vị đầu cuối.

- H323RasSrv::OnLCF(const PIPSocket:;Address & rx_addr, const H225.RasMessage & obj_grq, H225_RasMessage & obj_rpl); thực hiện xử lý bản tin LCF đến từ gatekeeper khác với đoạn mã:

ifi:NeighborsGK->CheckIP(rx_addr)) arqPendingList->ProcessLCF(obj_rr);

- H323RasSrv::OnLRJ(const PIPSocket;:Address & rx_addr, const H225_RasMessage & obj_grq, H225_RasMessage & obj_rpD: thực hiện xử lý bản tin LRJ đến từ gatekeeper khác với đoạn mả:

iftNeighborsGK->CheckIP(rx_addr)) arqPendingList->ProcessLRJ(obj_rr);

- H323RasSrv::OnIRR(const PIPSocket;;Ađdress & rx_addr, const H225_RasMessage & o b j^ q , H225_RasMessage & obj_rpD: khi nhận bản tin IRR (bản tin thông báo trạng thái) của đầu cuối, gatekeeper sẽ định đanh đầu cuôi, nếu xác định được đầu cuối gatekeeper xử lý bản tin IRR để cập nhật thông tin trạng thái cho đầu cuối; sau đó, gatekeeper tạo bản tin lACK (Information Request ACK) để trả lời cho đầu cuối. Nếu gatekeeper không xác định được đầu cuối thì nó không xử lý bản tin IRR.

- H323RasSrv::OiiRAI(const PIPSocket;:Ađdress & rx_addr, const H225_RasMessage & obj_grq, H225_RasMessage & obj_rpl): xử lý bản tin chỉ thị tài nguyên sẵn có (RAI) nhận được từ gateway và tạo các trường cho bản tin RAC (Resource Avaiỉability Coníìrm) gửi lại cho gatevvay.

Một phần của tài liệu VoIP và báo hiệu số 7 (Trang 129 - 133)