Commit d6b9b813 authored by Yann Diorcet's avatar Yann Diorcet

Update linphone tunnel API

parent 8315c4cf
This diff is collapsed.
......@@ -23,8 +23,8 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifndef LINPHONETUNNELMANAGER_H
#define LINPHONETUNNELMANAGER_H
#ifndef LINPHONETUNNEL_H
#define LINPHONETUNNEL_H
#include "linphonecore.h"
......@@ -48,34 +48,108 @@ extern "C"
{
#endif
typedef struct _LinphoneTunnelConfig LinphoneTunnelConfig;
/**
* Add a tunnel server. At least one should be provided to be able to connect.
* When several addresses are provided, the tunnel client may try each of them until it gets connected.
* @param tunnel object
* @param host server ip address
* @param port tunnel server tls port, recommended value is 443
* Create a new tunnel configuration
*/
void linphone_tunnel_add_server(LinphoneTunnel *tunnel, const char *host, int port);
LinphoneTunnelConfig *linphone_tunnel_config_new();
/**
*Add tunnel server with auto detection capabilities
* Set address of server.
*
* @param tunnel object
* @param tunnel configuration object
* @param host tunnel server ip address
*/
void linphone_tunnel_config_set_host(LinphoneTunnelConfig *tunnel, const char *host);
/**
* Get address of server.
*
* @param tunnel configuration object
*/
const char *linphone_tunnel_config_get_host(LinphoneTunnelConfig *tunnel);
/**
* Set tls port of server.
*
* @param tunnel configuration object
* @param port tunnel server tls port, recommended value is 443
* @param remote_udp_mirror_port remote port on the tunnel server side used to test udp reachability
*/
void linphone_tunnel_config_set_port(LinphoneTunnelConfig *tunnel, int port);
/**
* Get tls port of server.
*
* @param tunnel configuration object
*/
int linphone_tunnel_config_get_port(LinphoneTunnelConfig *tunnel);
/**
* Set the remote port on the tunnel server side used to test udp reachability.
*
* @param tunnel configuration object
* @param remote_udp_mirror_port remote port on the tunnel server side used to test udp reachability, set to -1 to disable the feature
*/
void linphone_tunnel_config_set_remote_udp_mirror_port(LinphoneTunnelConfig *tunnel, int remote_udp_mirror_port);
/**
* Get the remote port on the tunnel server side used to test udp reachability.
*
* @param tunnel configuration object
*/
int linphone_tunnel_config_get_remote_udp_mirror_port(LinphoneTunnelConfig *tunnel);
/**
* Set the udp packet round trip delay in ms for a tunnel configuration.
*
* @param tunnel configuration object
* @param delay udp packet round trip delay in ms considered as acceptable. recommended value is 1000 ms.
*/
void linphone_tunnel_add_server_and_mirror(LinphoneTunnel *tunnel, const char *host, int port, int remote_udp_mirror_port, int delay);
void linphone_tunnel_config_set_delay(LinphoneTunnelConfig *tunnel, int delay);
/**
* Get the udp packet round trip delay in ms for a tunnel configuration.
*
* @param tunnel configuration object
*/
int linphone_tunnel_config_get_delay(LinphoneTunnelConfig *tunnel);
/**
* Destroy a tunnel configuration
*
* @param tunnel configuration object
*/
void linphone_tunnel_config_destroy(LinphoneTunnelConfig *tunnel);
/**
* Add tunnel server configuration
*
* @param tunnel object
* @param tunnel_config object
*/
void linphone_tunnel_add_server(LinphoneTunnel *tunnel, LinphoneTunnelConfig *tunnel_config);
/**
* Remove tunnel server configuration
*
* @param tunnel object
* @param tunnel_config object
*/
void linphone_tunnel_remove_server(LinphoneTunnel *tunnel, LinphoneTunnelConfig *tunnel_config);
/**
* @param tunnel object
* returns a string of space separated list of host:port of tunnel server addresses
* */
char *linphone_tunnel_get_servers(LinphoneTunnel *tunnel);
const MSList *linphone_tunnel_get_servers(LinphoneTunnel *tunnel);
/**
* @param tunnel object
* Removes all tunnel server address previously entered with addServer()
**/
void linphone_tunnel_clean_servers(LinphoneTunnel *tunnel);
/**
* Sets whether tunneling of SIP and RTP is required.
* @param tunnel object
......@@ -84,11 +158,13 @@ void linphone_tunnel_clean_servers(LinphoneTunnel *tunnel);
*
**/
void linphone_tunnel_enable(LinphoneTunnel *tunnel, bool_t enabled);
/**
* @param tunnel object
* Returns a boolean indicating whether tunneled operation is enabled.
**/
bool_t linphone_tunnel_enabled(LinphoneTunnel *tunnel);
/**
* @param tunnel object
* Forces reconnection to the tunnel server.
......@@ -97,6 +173,7 @@ bool_t linphone_tunnel_enabled(LinphoneTunnel *tunnel);
* the lost connection to be closed and new connection to be issued.
**/
void linphone_tunnel_reconnect(LinphoneTunnel *tunnel);
/**
* Start tunnel need detection.
* @param tunnel object
......@@ -129,8 +206,6 @@ void linphone_tunnel_get_http_proxy(LinphoneTunnel*tunnel,const char **host, int
void linphone_tunnel_set_http_proxy_auth_info(LinphoneTunnel*tunnel, const char* username,const char* passwd);
void linphone_tunnel_enable_logs(LinphoneTunnel *tunnel, bool_t enabled);
/**
* @}
**/
......@@ -140,5 +215,5 @@ void linphone_tunnel_enable_logs(LinphoneTunnel *tunnel, bool_t enabled);
#endif
#endif
#endif //LINPHONETUNNEL_H
......@@ -1429,7 +1429,7 @@ void linphone_core_init_default_params(LinphoneCore*lc, LinphoneCallParams *para
*/
bool_t linphone_core_tunnel_available(void);
typedef struct LinphoneTunnel LinphoneTunnel;
typedef struct _LinphoneTunnel LinphoneTunnel;
/**
* get tunnel instance if available
*/
......
......@@ -1177,44 +1177,22 @@ void linphone_gtk_edit_tunnel_closed(GtkWidget *button){
gtk_widget_destroy(pb);
}
static void tunnel_get_server_host_and_port(LinphoneTunnel *tunnel, char *host, int size, int *port){
char *colon;
char *addresses;
char *str1;
char *address;
const char* configured_addresses;
configured_addresses=linphone_tunnel_get_servers(tunnel);
if (configured_addresses==NULL){
host[0]=0;
*port=0;
return;
}
addresses=ms_strdup(configured_addresses);
str1=addresses;
address=strtok(str1," "); // Not thread safe
if (!address) return;
colon=strchr(address, ':');
if (!colon) return;
*colon++='\0';
*port=atoi(colon);
strncpy(host,address,size);
ms_free(addresses);
}
void linphone_gtk_edit_tunnel(GtkButton *button){
GtkWidget *w=linphone_gtk_create_window("tunnel_config");
LinphoneCore *lc=linphone_gtk_get_core();
LinphoneTunnel *tunnel=linphone_core_get_tunnel(lc);
char host[128]={'\0'};
const MSList *configs;
const char *host = NULL;
int port=0;
if (!tunnel) return;
tunnel_get_server_host_and_port(tunnel, host, sizeof(host), &port);
configs = linphone_tunnel_get_servers(tunnel);
if(configs != NULL) {
LinphoneTunnelConfig *ltc = (LinphoneTunnelConfig *)configs->data;
host = linphone_tunnel_config_get_host(ltc);
port = linphone_tunnel_config_get_port(ltc);
}
gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"host")),host);
if (port==0) port=443;
......@@ -1247,6 +1225,7 @@ void linphone_gtk_tunnel_ok(GtkButton *button){
GtkWidget *w=gtk_widget_get_toplevel(GTK_WIDGET(button));
LinphoneCore *lc=linphone_gtk_get_core();
LinphoneTunnel *tunnel=linphone_core_get_tunnel(lc);
LinphoneTunnelConfig *config=linphone_tunnel_config_new();
gint port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"port")));
gboolean enabled=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"radio_enable")));
......@@ -1260,7 +1239,9 @@ void linphone_gtk_tunnel_ok(GtkButton *button){
if (host && *host=='\0') host=NULL;
if (http_port==0) http_port=8080;
linphone_tunnel_clean_servers(tunnel);
linphone_tunnel_add_server(tunnel,host,port);
linphone_tunnel_config_set_host(config, host);
linphone_tunnel_config_set_port(config, port);
linphone_tunnel_add_server(tunnel, config);
linphone_tunnel_enable(tunnel,enabled);
linphone_tunnel_set_http_proxy(tunnel,http_host,http_port,username,password);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment