2 * This file is part of the Nice GLib ICE library.
4 * (C) 2007 Nokia Corporation. All rights reserved.
5 * Contact: Rémi Denis-Courmont
6 * COPYRIGHT (C) 1986 Gary S. Brown
7 * See documentation of the function crc32() below.
9 * The contents of this file are subject to the Mozilla Public License Version
10 * 1.1 (the "License"); you may not use this file except in compliance with
11 * the License. You may obtain a copy of the License at
12 * http://www.mozilla.org/MPL/
14 * Software distributed under the License is distributed on an "AS IS" basis,
15 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
16 * for the specific language governing rights and limitations under the
19 * The Original Code is the Nice GLib ICE library.
21 * The Initial Developers of the Original Code are Collabora Ltd and Nokia
22 * Corporation. All Rights Reserved.
25 * Rémi Denis-Courmont, Nokia
27 * Alternatively, the contents of this file may be used under the terms of the
28 * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
29 * case the provisions of LGPL are applicable instead of those above. If you
30 * wish to allow use of your version of this file only under the terms of the
31 * LGPL and not to allow others to use your version of this file under the
32 * MPL, indicate your decision by deleting the provisions above and replace
33 * them with the notice and other provisions required by the LGPL. If you do
34 * not delete the provisions above, a recipient may use your version of this
35 * file under either the MPL or the LGPL.
45 #include <sys/socket.h>
46 #include <netinet/in.h> /* htons() */
52 #include "stuncrc32.h"
53 #include "stunmessage.h"
55 uint32_t stun_fingerprint (const uint8_t *msg
, size_t len
)
58 uint16_t fakelen
= htons (len
- 20u);
60 // assert (len >= 28u);
62 data
[0].buf
= (void *)msg
;
64 data
[1].buf
= (uint8_t *)&fakelen
;
66 data
[2].buf
= (void *)(msg
+ 4);
67 /* first 4 bytes done, last 8 bytes not summed */
68 data
[2].len
= len
- 12u;
70 return htonl (crc32 (data
, 3) ^ 0x5354554e);
73 bool stun_has_cookie (const StunMessage
*msg
)
76 uint32_t cookie
= htonl (STUN_MAGIC_COOKIE
);
77 stun_message_id (msg
, id
);
78 return memcmp (id
, &cookie
, sizeof (cookie
)) == 0;
82 StunMessageReturn
stun_message_append_software (StunMessage
*msg
)
84 static const char software
[] = PACKAGE_STRING
;
85 // assert (strlen (software) < 128);
87 return stun_message_append_string (msg
, STUN_ATTRIBUTE_SOFTWARE
, software
);