Hello!
After proxying a REGISTER from a WebRTC client to our SIP backend, the backend starts sending keepalives. Every 30 seconds I get a log entry in Kamailio saying: “INFO: stun [kam_stun.c:169]: stun_parse_header(): INFO: stun_parse_header:
incomplete header of STUN message”.
Here's one such packet:
No. Time Source Destination Protocol Length Info
1 0.000000 xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy UDP 60 5060 ? 15060 Len=4
Frame 1: 60 bytes on wire (480 bits), 60 bytes captured (480 bits)
Ethernet II, Src: JuniperN_4f:3f:f0 (40:a6:77:4f:3f:f0), Dst: 02:81:64:58:cf:d1 (02:81:64:58:cf:d1)
Internet Protocol Version 4, Src: xxx.xxx.xxx.xxx, Dst: yyy.yyy.yyy.yyy
0100 .... = Version: 4
.... 0101 = Header Length: 20 bytes (5)
Differentiated Services Field: 0x00 (DSCP: CS0, ECN: Not-ECT)
Total Length: 32
Identification: 0x5bf5 (23541)
Flags: 0x4000, Don't fragment
Time to live: 56
Protocol: UDP (17)
Header checksum: 0x2fc3 [validation disabled]
[Header checksum status: Unverified]
Source: xxx.xxx.xxx.xxx
Destination: yyy.yyy.yyy.yyy
User Datagram Protocol, Src Port: 5060, Dst Port: 15060
Source Port: 5060
Destination Port: 15060
Length: 12
Checksum: 0xfa28 [unverified]
[Checksum Status: Unverified]
[Stream index: 0]
Data (4 bytes)
0000 00 00 00 00 ....
Data: 00000000
[Length: 4]
I found this in kam_stun.c:
static int stun_parse_header(struct stun_msg* req, USHORT_T* error_code)
{
if (sizeof(req->hdr) > req->msg.buf.len) {
/* the received message does not contain whole header */
LOG(L_INFO, "INFO: stun_parse_header: incomplete header of STUN message\n");
/* Any better solution? IMHO it's not possible to send error response
* because the transaction ID is not available.
*/
return FATAL_ERROR;
}
…
Could someone please explain what’s wrong?
Med vennlig hilsen
Pan B. Christensen
Utvikler
Phonect AS
Brugata 19, PB 9156 Grønland, N-0133 Oslo, Norway
E-post: pan.christensen@phonect.no
Mobil: 41 88 88 00