Mercurial > pidgin.yaz
diff src/upnp.h @ 12909:8e3b85fe4a55
[gaim-migrate @ 15262]
Make UPnP truly asynchronous.
There are probably still a couple socket calls that should be made nonblocking, but I wanted to commit this before it became even bigger. This contains a number of probable leak fixes in the upnp stuff.
The UPnP stuff has been updated to use gaim_url_fetch_request() instead of the specific implementation.
To make this all work, I had to make gaim_network_listen() and gaim_network_listen_range() also asynchronous - seems to work just fine apart from the UPnP calls seeming to take longer than they should (I'm planning to look into this).
I also triggered a STUN and UPnP discovery on startup so that we hopefully have the information when we need it.
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Tue, 17 Jan 2006 05:48:51 +0000 |
parents | 9563b768e8e2 |
children |
line wrap: on
line diff
--- a/src/upnp.h Tue Jan 17 05:20:38 2006 +0000 +++ b/src/upnp.h Tue Jan 17 05:48:51 2006 +0000 @@ -27,13 +27,6 @@ #define _GAIM_UPNP_H_ -typedef struct -{ - gchar* controlURL; - gchar* serviceType; -} GaimUPnPControlInfo; - - #ifdef __cplusplus extern "C" { #endif @@ -43,27 +36,42 @@ /**************************************************************************/ /*@{*/ + +typedef void (*GaimUPnPCallback) (gboolean success, gpointer data); + /** * Sends a discovery request to search for a UPnP enabled IGD that * contains the WANIPConnection service that will allow us to recieve the * public IP address of the IGD, and control it for forwarding ports. + * The result will be cached for further use. * + * @param cb an optional callback function to be notified when the UPnP + * discovery is complete + * @param cb_data Extra data to be passed to the callback + */ +void gaim_upnp_discover(GaimUPnPCallback cb, gpointer cb_data); + +#if 0 +/** + * Retrieve the current UPnP control info, if there is any available. + * This will only be filled in if gaim_upnp_discover() had been called, + * and finished discovering. + * * @return The control URL for the IGD we'll use to use the IGD services */ -GaimUPnPControlInfo* gaim_upnp_discover(void); - +const GaimUPnPControlInfo* gaim_upnp_get_control_info(void); +#endif /** * Gets the IP address from a UPnP enabled IGD that sits on the local * network, so when getting the network IP, instead of returning the - * local network IP, the public IP is retrieved. - * - * @param controlInfo The control URL retrieved from gaim_upnp_discover. + * local network IP, the public IP is retrieved. This is a cached value from + * the time of the UPnP discovery. * * @return The IP address of the network, or NULL if something went wrong */ -gchar* gaim_upnp_get_public_ip(const GaimUPnPControlInfo* controlInfo); +const gchar* gaim_upnp_get_public_ip(void); /** @@ -71,15 +79,14 @@ * this gaim client. Essentially, this function takes care of the port * forwarding so things like file transfers can work behind NAT firewalls * - * @param controlInfo The control URL retrieved from gaim_upnp_discover. - * @param portMap The port to map to this client + * @param portmap The port to map to this client * @param protocol The protocol to map, either "TCP" or "UDP" - * - * @return TRUE if success, FALSE if something went wrong. + * @param cb an optional callback function to be notified when the mapping + * addition is complete + * @param cb_data Extra data to be passed to the callback */ -gboolean gaim_upnp_set_port_mapping(const GaimUPnPControlInfo* controlInfo, - unsigned short portMap, - const gchar* protocol); +void gaim_upnp_set_port_mapping(unsigned short portmap, const gchar* protocol, + GaimUPnPCallback cb, gpointer cb_data); /** * Deletes a port mapping in a UPnP enabled IGD that sits on the local network @@ -87,19 +94,16 @@ * port forwarding after they have completed a connection so another client on * the local network can take advantage of the port forwarding * - * @param controlInfo The control URL retrieved from gaim_upnp_discover. - * @param portMap The port to delete the mapping for + * @param portmap The port to delete the mapping for * @param protocol The protocol to map to. Either "TCP" or "UDP" - * - * @return TRUE if success, FALSE if something went wrong. + * @param cb an optional callback function to be notified when the mapping + * removal is complete + * @param cb_data Extra data to be passed to the callback */ -gboolean -gaim_upnp_remove_port_mapping(const GaimUPnPControlInfo* controlInfo, - unsigned short portMap, - const gchar* protocol); +void gaim_upnp_remove_port_mapping(unsigned short portmap, + const gchar* protocol, GaimUPnPCallback cb, gpointer cb_data); /*@}*/ - #ifdef __cplusplus } #endif