00001 00025 #ifndef _PURPLE_STUN_H_ 00026 #define _PURPLE_STUN_H_ 00027 00028 #ifdef __cplusplus 00029 extern "C" { 00030 #endif 00031 00032 /**************************************************************************/ 00034 /**************************************************************************/ 00037 typedef struct _PurpleStunNatDiscovery PurpleStunNatDiscovery; 00038 00039 typedef enum { 00040 PURPLE_STUN_STATUS_UNDISCOVERED = -1, 00041 PURPLE_STUN_STATUS_UNKNOWN, /* no STUN server reachable */ 00042 PURPLE_STUN_STATUS_DISCOVERING, 00043 PURPLE_STUN_STATUS_DISCOVERED 00044 } PurpleStunStatus; 00045 00046 typedef enum { 00047 PURPLE_STUN_NAT_TYPE_PUBLIC_IP, 00048 PURPLE_STUN_NAT_TYPE_UNKNOWN_NAT, 00049 PURPLE_STUN_NAT_TYPE_FULL_CONE, 00050 PURPLE_STUN_NAT_TYPE_RESTRICTED_CONE, 00051 PURPLE_STUN_NAT_TYPE_PORT_RESTRICTED_CONE, 00052 PURPLE_STUN_NAT_TYPE_SYMMETRIC 00053 } PurpleStunNatType; 00054 00055 struct _PurpleStunNatDiscovery { 00056 PurpleStunStatus status; 00057 PurpleStunNatType type; 00058 char publicip[16]; 00059 char *servername; 00060 time_t lookup_time; 00061 }; 00062 00063 typedef void (*StunCallback) (PurpleStunNatDiscovery *); 00064 00077 PurpleStunNatDiscovery *purple_stun_discover(StunCallback cb); 00078 00079 void purple_stun_init(void); 00080 00083 #ifdef __cplusplus 00084 } 00085 #endif 00086 00087 #endif /* _PURPLE_STUN_H_ */