From 0eb1480fe02b28de9d0d67bbd8779d7296639cc1 Mon Sep 17 00:00:00 2001 From: file Date: Thu, 2 Apr 2009 17:20:52 +0000 Subject: Merge in the RTP engine API. This API provides a generic way for multiple RTP stacks to be integrated into Asterisk. Right now there is only one present, res_rtp_asterisk, which is the existing Asterisk RTP stack. Functionality wise this commit performs the same as previously. API documentation can be viewed in the rtp_engine.h header file. Review: http://reviewboard.digium.com/r/209/ git-svn-id: http://svn.digium.com/svn/asterisk/trunk@186078 f38db490-d61c-443f-a65b-d21fe96a405b --- include/asterisk/stun.h | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 include/asterisk/stun.h (limited to 'include/asterisk/stun.h') diff --git a/include/asterisk/stun.h b/include/asterisk/stun.h new file mode 100644 index 000000000..11921f814 --- /dev/null +++ b/include/asterisk/stun.h @@ -0,0 +1,71 @@ +/* + * Asterisk -- An open source telephony toolkit. + * + * Copyright (C) 1999 - 2008, Digium, Inc. + * + * Mark Spencer + * + * See http://www.asterisk.org for more information about + * the Asterisk project. Please do not directly contact + * any of the maintainers of this project for assistance; + * the project provides a web site, mailing lists and IRC + * channels for your use. + * + * This program is free software, distributed under the terms of + * the GNU General Public License Version 2. See the LICENSE file + * at the top of the source tree. + */ + +/*! + * \file stun.h + * \brief STUN support. + * + * STUN is defined in RFC 3489. + */ + +#ifndef _ASTERISK_STUN_H +#define _ASTERISK_STUN_H + +#include "asterisk/network.h" + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +enum ast_stun_result { + AST_STUN_IGNORE = 0, + AST_STUN_ACCEPT, +}; + +struct stun_attr; + +/*! \brief Generic STUN request + * send a generic stun request to the server specified. + * \param s the socket used to send the request + * \param dst the address of the STUN server + * \param username if non null, add the username in the request + * \param answer if non null, the function waits for a response and + * puts here the externally visible address. + * \return 0 on success, other values on error. + * The interface it may change in the future. + */ +int ast_stun_request(int s, struct sockaddr_in *dst, const char *username, struct sockaddr_in *answer); + +/*! \brief callback type to be invoked on stun responses. */ +typedef int (stun_cb_f)(struct stun_attr *attr, void *arg); + +/*! \brief handle an incoming STUN message. + * + * Do some basic sanity checks on packet size and content, + * try to extract a bit of information, and possibly reply. + * At the moment this only processes BIND requests, and returns + * the externally visible address of the request. + * If a callback is specified, invoke it with the attribute. + */ +int ast_stun_handle_packet(int s, struct sockaddr_in *src, unsigned char *data, size_t len, stun_cb_f *stun_cb, void *arg); + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif + +#endif /* _ASTERISK_STUN_H */ -- cgit v1.2.3