第五課 一個基于IP插口的ISUP服務器例子
3. 實現細節(jié)
ISUP服務器軟件結構
多線程ISUP服務器

客戶端處理框圖
總體圖

數據結構
所有通信的數據包都有一個固定的格式,其中包括數據包的固定頭部和信息載荷。包大小固定為MAX_PSIZE+96。
數據包結構定義如下:
typedef struct ISrvPkt_s {
ISrvPktHdr hdr;
U8 payload[MAX_PSIZE];
} ISrvPkt;
數據包的頭部結構定義如下:
typedef struct ISrvPktHdr_s {
U16 size;
U16 type;
U32 ctahd;
U32 subtype;
} ISrvPktHdr;
其中:size 為16位的數據包有效包大小(包括頭部)。
Type 為16位的包類型,有2個值:
SC_DATA ISUP服務器發(fā)給客戶端的數據。
CS_DATA ISUP客戶端發(fā)給服務器的數據。
Ctahd 為32位的CT access句柄。
Subtype 為32位的子類型,目前有2個值:
ST_INCOMING_CALL 呼入;
ST_OUTGOING_CALL 呼出;
信息載荷有兩類,一為隸屬載荷,它指明信息隸屬的目標信令點(DPC)和電路號(CIC)。定義如下:
typedef struct ISrvAttachPayload_s {
U32 CIC;
U32 DPC;
} ISrvAttachPayload;
第二類為號碼載荷,包含呼叫的主被叫號碼,定義如下:
typedef struct ISrvNumbersPayload_s {
char calling_number[MAX_SIZE+1];
char called_number[MAX_SIZE+1];
} ISrvNumbersPayload;
映射表
|
Circuit |
Sockfd |
Ctahd |
CIC |
DPC |
|
1 |
5 |
0x80000001 |
1 |
1.1.1 |
|
2 |
6 |
0x80000002 |
2 |
1.1.1 |
|
3 |
7 |
0x80000003 |
3 |
1.1.1 |
|
4 |
8 |
0x80000001 |
1 |
1.1.2 |
|
5 |
9 |
0x80000002 |
2 |
1.1.2 |
4. 如何和ISUP服務器配合完成呼叫
提供的客戶端接口函數
DWORD NMSAPI ISUPServerConnect(char *ip_addr,char *logfilename);
DWORD NMSAPI ISUPServerAttach(CTAHD ctahd, unsigned long CIC, unsigned long DPC);
DWORD NMSAPI ISUPServerPlaceCall( CTAHD ctahd, char *calling_num, char *called_num);
DWORD NMSAPI ISUPServerAcceptCall(CTAHD ctahd);
DWORD NMSAPI ISUPServerAnswerCall(CTAHD ctahd);
DWORD NMSAPI ISUPServerReleaseCall(CTAHD ctahd);
DWORD NMSAPI ISUPServerRejectCall(CTAHD ctahd);
DWORD NMSAPI ISUPServerReset(CTAHD ctahd);
DWORD NMSAPI ISUPServerBlockCalls(CTAHD ctahd);
DWORD NMSAPI ISUPServerUnblockCalls(CTAHD ctahd);
呼入流程(確認并應答)

呼出流程(遠端應答)

呼叫釋放流程(由客戶端程序釋放)

呼叫釋放流程(由遠端SS7交換機釋放)

阻塞呼叫流程(由客戶端程序發(fā)出阻塞)

阻塞呼叫流程(由遠端SS7交換機發(fā)出阻塞)

5. 技術提示
高低字節(jié)順序說明:
通過插口發(fā)送數據之前和接收數據之后,要調用ntohs( ), ntohl( ), htons( ), htonl( )函數來轉換高低字節(jié)順序。
采用BSD插口API以便于移植。
采用POSIX多線程機制以便于移植。
用戶自定義的CTA_EVENT接收觸發(fā)事件,在客戶端中被集成到CTA事件處理循環(huán)之中,以便于集中處理。
客戶端使用nocc協議。
如果不采用單獨創(chuàng)建異步線程來處理ISUP消息,也可以采用另一個方法:調用ctaRegisterWaitObject.來把當前線程掛起,等待ISUP消息的到來,直到ISUP消息到來后激活線程。
6. 結論
現在讓我們總結一下上面實現的ISUP服務器:
首先,它是一個建立在NMS SS7支持的ISUP協議層基礎上的多線程服務器。它提供了基于TCP協議插口的API函數。它是跨平臺的,同時支持Solaris和NT。
但是,這個服務器只支持ISUP協議,不支持SS7中其它協議層。它只是一個演示程序,沒有經過完整的測試,不夠強壯。程序中用到的API函數(ISUPxxxx)也不是NMS SS7提供的標準API函數。
另外,是使用TCP還是使用UDP的問題,也沒有經過論證,有待實踐中作進一步確定。
相關資源
IETF(因特網工程任務組)網站:www.ietf.org
IETF是開發(fā)SS7/IP標準的主要組織,Sigtran組是專門從事SS7/IP開發(fā)的。
Rfc2960:這是SCTP協議的詳細說明書。
draft-ietf-sigtran-m3ua-10:這是MTP3用戶適應層協議。
介紹SS7/IP有關知識及產品:www.ss7oip.com
SS7/IP有關新聞:www.intellinet-tech.com/news
附相關書籍:
<<rfc2960>>;
<<draft-ietf-sigtran-m3ua-10>>;
<<tutorial_ss7_ip_interworking>>;
大新县| 西乡县| 南靖县| 甘孜县| 雅安市| 曲阜市| 榆林市| 日土县| 沅江市| 同仁县| 富阳市| 保靖县| 澄城县| 遵化市| 新干县| 崇文区| 璧山县| 和顺县| 鹤峰县| 梁河县| 朔州市| 垣曲县| 千阳县| 化隆| 隆回县| 张北县| 马尔康县| 霍邱县| 罗定市| 宜兰县| 广汉市| 泰宁县| 年辖:市辖区| 化州市| 甘谷县| 九台市| 报价| 桓仁| 资中县| 普陀区| 珲春市|