home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / include / libpurple / stun.h < prev    next >
Encoding:
C/C++ Source or Header  |  2007-05-04  |  2.6 KB  |  88 lines

  1. /**
  2.  * @file stun.h STUN API
  3.  * @ingroup core
  4.  *
  5.  * purple
  6.  *
  7.  * Purple is the legal property of its developers, whose names are too numerous
  8.  * to list here.  Please refer to the COPYRIGHT file distributed with this
  9.  * source distribution.
  10.  *
  11.  * This program is free software; you can redistribute it and/or modify
  12.  * it under the terms of the GNU General Public License as published by
  13.  * the Free Software Foundation; either version 2 of the License, or
  14.  * (at your option) any later version.
  15.  *
  16.  * This program is distributed in the hope that it will be useful,
  17.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.  * GNU General Public License for more details.
  20.  *
  21.  * You should have received a copy of the GNU General Public License
  22.  * along with this program; if not, write to the Free Software
  23.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  24.  */
  25. #ifndef _PURPLE_STUN_H_
  26. #define _PURPLE_STUN_H_
  27.  
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31.  
  32. /**************************************************************************/
  33. /** @name STUN API                                                        */
  34. /**************************************************************************/
  35. /*@{*/
  36.  
  37. typedef struct _PurpleStunNatDiscovery PurpleStunNatDiscovery;
  38.  
  39. typedef enum {
  40.     PURPLE_STUN_STATUS_UNDISCOVERED = -1,
  41.     PURPLE_STUN_STATUS_UNKNOWN, /* no STUN server reachable */
  42.     PURPLE_STUN_STATUS_DISCOVERING,
  43.     PURPLE_STUN_STATUS_DISCOVERED
  44. } PurpleStunStatus;
  45.  
  46. typedef enum {
  47.     PURPLE_STUN_NAT_TYPE_PUBLIC_IP,
  48.     PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT,
  49.     PURPLE_STUN_NAT_TYPE_FULL_CONE,
  50.     PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE,
  51.     PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE,
  52.     PURPLE_STUN_NAT_TYPE_SYMMETRIC
  53. } PurpleStunNatType;
  54.  
  55. struct _PurpleStunNatDiscovery {
  56.     PurpleStunStatus status;
  57.     PurpleStunNatType type;
  58.     char publicip[16];
  59.     char *servername;
  60.     time_t lookup_time;
  61. };
  62.  
  63. typedef void (*StunCallback) (PurpleStunNatDiscovery *);
  64.  
  65. /**
  66.  * Starts a NAT discovery. It returns a PurpleStunNatDiscovery if the discovery
  67.  * is already done. Otherwise the callback is called when the discovery is over
  68.  * and NULL is returned.
  69.  *
  70.  * @param cb The callback to call when the STUN discovery is finished if the
  71.  *           discovery would block.  If the discovery is done, this is NOT
  72.  *           called.
  73.  *
  74.  * @return a PurpleStunNatDiscovery which includes the public IP and the type
  75.  *         of NAT or NULL is discovery would block
  76.  */
  77. PurpleStunNatDiscovery *purple_stun_discover(StunCallback cb);
  78.  
  79. void purple_stun_init(void);
  80.  
  81. /*@}*/
  82.  
  83. #ifdef __cplusplus
  84. }
  85. #endif
  86.  
  87. #endif /* _PURPLE_STUN_H_ */
  88.