Change all stun_XXX_t enums/structs into StunXxx to have a common naming convention
[sipe-libnice.git] / stun / stun5389.c
blob4c2ac66cd247ee79ed68bc1a4b2783300396b6c6
1 /*
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
17 * License.
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.
24 * Contributors:
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.
38 #ifdef HAVE_CONFIG_H
39 # include <config.h>
40 #endif
42 #ifdef _WIN32
43 #include <winsock2.h>
44 #else
45 #include <sys/socket.h>
46 #include <netinet/in.h> /* htons() */
47 #endif
49 #include <string.h>
50 #include <stdlib.h>
52 #include "stuncrc32.h"
53 #include "stunmessage.h"
55 uint32_t stun_fingerprint (const uint8_t *msg, size_t len)
57 crc_data data[3];
58 uint16_t fakelen = htons (len - 20u);
60 // assert (len >= 28u);
62 data[0].buf = (void *)msg;
63 data[0].len = 2;
64 data[1].buf = (uint8_t *)&fakelen;
65 data[1].len = 2;
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)
75 StunTransactionId id;
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);