我想解析一個SIP數據包並從中獲取一些信息。具體而言,該數據包看起來像這樣解析SIP數據包C
REGISTER sip:open-ims.test SIP/2.0
Via: SIP/2.0/UDP 192.168.1.64:5060;rport;branch=z9hG4bK1489975971
From: <sip:[email protected]>;tag=1627897650
To: <sip:[email protected]>
Call-ID: 1097412971
CSeq: 1 REGISTER
Contact: <sip:[email protected]:5060;line=5fc3b39f127158d>;+sip.instance="<urn:uuid:46f525fe-3f60-11e0-bec1-d965d1488cfa>"
Authorization: Digest username="[email protected]", realm="open-ims.test", nonce=" ", uri="sip:open-ims.test", response=" "
Max-Forwards: 70
User-Agent: UCT IMS Client
Expires: 600000
Supported: path
Supported: gruu
Content-Length: 0
現在,從包我需要提取以下內容:
- 值後,「從:」(在這種情況下
<sip:[email protected]>
) - 後的值:(在此情況下
<sip:[email protected]
)後 - 值 「用戶名」(在這種情況下
[email protected]
)
到目前爲止我的代碼是這個
char * tch;
char * saved;
tch = strtok (payload,"<>;");
while (tch != NULL)
{
int savenext = 0;
if (!strcmp(tch, "From: "))
{
savenext = 1;
}
tch = strtok (NULL, "<>;");
if (savenext == 1)
{
saved = tch;
}
}
printf ("### SIP Contact: %s ###\n", saved);
}
}
凡有效載荷包含與上述數據包。
但是,當我運行我的程序時,將導致分段錯誤。奇怪的是,如果我在strtok中使用字符「<> ;:」,並且在strcmp中的值爲「sip」,則消息將成功解析,並且會保存保存的值。但是我需要解析所有三個上面的值。
sip圖書館會幫助我解決我的問題嗎?
在此先感謝
一般而言,當您需要解析或構建像這樣的結構化文本時,使用庫是一個不錯的主意,因爲編碼中總是存在需要處理的角落案例 - 而其他人已經爲您完成了這項工作。假設,就是說,你可以找到足夠簡單和輕量級的東西來鏈接你正在做的事情。 – Rup 2011-02-23 15:46:33