network.h File Reference

Network API. More...

Go to the source code of this file.

Network API

typedef struct
_PurpleNetworkListenData 
PurpleNetworkListenData
typedef void(* PurpleNetworkListenCallback )(int listenfd, gpointer data)
const unsigned char * purple_network_ip_atoi (const char *ip)
 Converts a dot-decimal IP address to an array of unsigned chars.
void purple_network_set_public_ip (const char *ip)
 Sets the IP address of the local system in preferences.
const char * purple_network_get_public_ip (void)
 Returns the IP address of the local system set in preferences.
const char * purple_network_get_local_system_ip (int fd)
 Returns the IP address of the local system.
const char * purple_network_get_my_ip (int fd)
 Returns the IP address that should be used anywhere a public IP addresses is needed (listening for an incoming file transfer, etc).
void purple_network_listen_map_external (gboolean map_external)
 Should calls to purple_network_listen() and purple_network_listen_range() map the port externally using NAT-PMP or UPnP? The default value is TRUE.
PurpleNetworkListenData * purple_network_listen (unsigned short port, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data)
 Attempts to open a listening port ONLY on the specified port number.
PurpleNetworkListenData * purple_network_listen_range (unsigned short start, unsigned short end, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data)
 Opens a listening port selected from a range of ports.
void purple_network_listen_cancel (PurpleNetworkListenData *listen_data)
 This can be used to cancel any in-progress listener connection by passing in the return value from either purple_network_listen() or purple_network_listen_range().
unsigned short purple_network_get_port_from_fd (int fd)
 Gets a port number from a file descriptor.
gboolean purple_network_is_available (void)
 Detects if there is an available network connection.
void * purple_network_get_handle (void)
 Get the handle for the network system.
void purple_network_init (void)
 Initializes the network subsystem.
void purple_network_uninit (void)
 Shuts down the network subsystem.


Detailed Description

Network API.

Definition in file network.h.


Function Documentation

void* purple_network_get_handle ( void   ) 

Get the handle for the network system.

Returns:
the handle to the network system

const char* purple_network_get_local_system_ip ( int  fd  ) 

Returns the IP address of the local system.

You probably want to use purple_network_get_my_ip() instead.

Note:
The returned string is a pointer to a static buffer. If this function is called twice, it may be important to make a copy of the returned string.
Parameters:
fd The fd to use to help figure out the IP, or else -1.
Returns:
The local IP address.

const char* purple_network_get_my_ip ( int  fd  ) 

Returns the IP address that should be used anywhere a public IP addresses is needed (listening for an incoming file transfer, etc).

If the user has manually specified an IP address via preferences, then this IP is returned. Otherwise the IP address returned by purple_network_get_local_system_ip() is returned.

Note:
The returned string is a pointer to a static buffer. If this function is called twice, it may be important to make a copy of the returned string.
Parameters:
fd The fd to use to help figure out the IP, or -1.
Returns:
The local IP address to be used.

unsigned short purple_network_get_port_from_fd ( int  fd  ) 

Gets a port number from a file descriptor.

Parameters:
fd The file descriptor. This should be a tcp socket. The current implementation probably dies on anything but IPv4. Perhaps this possible bug will inspire new and valuable contributors to Purple.
Returns:
The port number, in host byte order.

const char* purple_network_get_public_ip ( void   ) 

Returns the IP address of the local system set in preferences.

This returns the value set via purple_network_set_public_ip(). You probably want to use purple_network_get_my_ip() instead.

Returns:
The local IP address set in preferences.

const unsigned char* purple_network_ip_atoi ( const char *  ip  ) 

Converts a dot-decimal IP address to an array of unsigned chars.

For example, converts 192.168.0.1 to a 4 byte array containing 192, 168, 0 and 1.

Parameters:
ip An IP address in dot-decimal notiation.
Returns:
An array of 4 bytes containing an IP addresses equivalent to the given parameter, or NULL if the given IP address is invalid. This value is statically allocated and should not be freed.

gboolean purple_network_is_available ( void   ) 

Detects if there is an available network connection.

Returns:
TRUE if the network is available

PurpleNetworkListenData* purple_network_listen ( unsigned short  port,
int  socket_type,
PurpleNetworkListenCallback  cb,
gpointer  cb_data 
)

Attempts to open a listening port ONLY on the specified port number.

You probably want to use purple_network_listen_range() instead of this. This function is useful, for example, if you wanted to write a telnet server as a Purple plugin, and you HAD to listen on port 23. Why anyone would want to do that is beyond me.

This opens a listening port. The caller will want to set up a watcher of type PURPLE_INPUT_READ on the fd returned in cb. It will probably call accept in the watcher callback, and then possibly remove the watcher and close the listening socket, and add a new watcher on the new socket accept returned.

Parameters:
port The port number to bind to. Must be greater than 0.
socket_type The type of socket to open for listening. This will be either SOCK_STREAM for TCP or SOCK_DGRAM for UDP.
cb The callback to be invoked when the port to listen on is available. The file descriptor of the listening socket will be specified in this callback, or -1 if no socket could be established.
cb_data extra data to be returned when cb is called
Returns:
A pointer to a data structure that can be used to cancel the pending listener, or NULL if unable to obtain a local socket to listen on.

void purple_network_listen_cancel ( PurpleNetworkListenData *  listen_data  ) 

This can be used to cancel any in-progress listener connection by passing in the return value from either purple_network_listen() or purple_network_listen_range().

Parameters:
listen_data This listener attempt will be canceled and the struct will be freed.

void purple_network_listen_map_external ( gboolean  map_external  ) 

Should calls to purple_network_listen() and purple_network_listen_range() map the port externally using NAT-PMP or UPnP? The default value is TRUE.

Parameters:
map_external Should the open port be mapped externally?
Deprecated:
In 3.0.0 a boolean will be added to the above functions to perform the same function.
Since:
2.3.0

PurpleNetworkListenData* purple_network_listen_range ( unsigned short  start,
unsigned short  end,
int  socket_type,
PurpleNetworkListenCallback  cb,
gpointer  cb_data 
)

Opens a listening port selected from a range of ports.

The range of ports used is chosen in the following manner: If a range is specified in preferences, these values are used. If a non-0 values are passed to the function as parameters, these values are used. Otherwise a port is chosen at random by the operating system.

This opens a listening port. The caller will want to set up a watcher of type PURPLE_INPUT_READ on the fd returned in cb. It will probably call accept in the watcher callback, and then possibly remove the watcher and close the listening socket, and add a new watcher on the new socket accept returned.

Parameters:
start The port number to bind to, or 0 to pick a random port. Users are allowed to override this arg in prefs.
end The highest possible port in the range of ports to listen on, or 0 to pick a random port. Users are allowed to override this arg in prefs.
socket_type The type of socket to open for listening. This will be either SOCK_STREAM for TCP or SOCK_DGRAM for UDP.
cb The callback to be invoked when the port to listen on is available. The file descriptor of the listening socket will be specified in this callback, or -1 if no socket could be established.
cb_data extra data to be returned when cb is called
Returns:
A pointer to a data structure that can be used to cancel the pending listener, or NULL if unable to obtain a local socket to listen on.

void purple_network_set_public_ip ( const char *  ip  ) 

Sets the IP address of the local system in preferences.

This is the IP address that should be used for incoming connections (file transfer, direct IM, etc.) and should therefore be publicly accessible.

Parameters:
ip The local IP address.