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,
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