/* This file is part of GNUnet. Copyright (C) 2009, 2015 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /** * This code is based on ministun.c, that is based on Asterisk old STUN code. * This code provides some support for doing STUN transactions. * The simplest request packet is just the header defined in * struct stun_header, and from the response we may just look at * one attribute, STUN_MAPPED_ADDRESS, that we find in the response. * By doing more transactions with different server addresses we * may determine more about the behaviour of the NAT boxes, of * course - the details are in the RFC. * * All STUN packets start with a simple header made of a type, * length (excluding the header) and a 16-byte random transaction id. * Following the header we may have zero or more attributes, each * structured as a type, length and a value (whose format depends * on the type, but often contains addresses). * Of course all fields are in network format. * * * @file nat/nat_stun.c * @brief Testcase for STUN library * @author Bruno Souza Cabral */