diff --git a/sflphone-client-gnome/src/actions.c b/sflphone-client-gnome/src/actions.c index f5d353f063fff3e5259b5d40204eef69f691cfa5..5239c0d38885d98c9ec8fc718ecd88f159484d8c 100644 --- a/sflphone-client-gnome/src/actions.c +++ b/sflphone-client-gnome/src/actions.c @@ -31,6 +31,17 @@ #include <sys/types.h> #include <unistd.h> +#include <netinet/in.h> +#include <arpa/nameser.h> +#include <resolv.h> + +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <linux/if.h> + + + GHashTable * ip2ip_profile=NULL; void @@ -1305,7 +1316,6 @@ void sflphone_save_history (void) void sflphone_srtp_sdes_on(callable_obj_t * c) { - DEBUG("*************** Srtp SDES ON *************"); c->_srtp_state = SRTP_STATE_SDES_SUCCESS; @@ -1403,3 +1413,39 @@ sflphone_call_state_changed( callable_obj_t * c, const gchar * description, cons calltree_update_call(current_calls, c, NULL); update_actions(); } + + +void sflphone_get_interface_addr_from_name(char *iface_name) { + + struct ifreq ifr; + int fd; + int err; + static char iface_addr[18]; + char *tmp_addr; + + struct sockaddr_in *saddr_in; + struct in_addr *addr_in; + + if((fd = socket (AF_INET, SOCK_DGRAM,0)) < 0) + DEBUG("getInterfaceAddrFromName error could not open socket\n"); + + memset (&ifr, 0, sizeof (struct ifreq)); + + strcpy (ifr.ifr_name, iface_name); + ifr.ifr_addr.sa_family = AF_INET; + + if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0) + DEBUG("getInterfaceAddrFromName use default interface (0.0.0.0)\n"); + + + saddr_in = (struct sockaddr_in *)&ifr.ifr_addr; + addr_in = &(saddr_in->sin_addr); + + tmp_addr = (char *)addr_in; + + snprintf(iface_addr, sizeof(iface_addr), "%d.%d.%d.%d", + UC(tmp_addr[0]), UC(tmp_addr[1]), UC(tmp_addr[2]), UC(tmp_addr[3])); + + printf("************************************* %s ****************************\n", iface_addr); +} + diff --git a/sflphone-client-gnome/src/actions.h b/sflphone-client-gnome/src/actions.h index 6cf10d932fc6b6a9158e2e12aa08d92e9e621720..eaca4713faedc4ca39c5c8abf4eff6948bed5580 100644 --- a/sflphone-client-gnome/src/actions.h +++ b/sflphone-client-gnome/src/actions.h @@ -30,6 +30,8 @@ #include <errors.h> #include <conference_obj.h> +#define UC(b) (((int)b)&0xff) + /** @file actions.h * @brief General functions that change the state of the application. * All of these functions are called when dbus signals are triggered. Exceptions @@ -284,5 +286,8 @@ void sflphone_request_go_clear(void); */ void sflphone_call_state_changed(callable_obj_t * c, const gchar * description, const guint code); - +/** + * Resolve an interface address given its name + */ +void sflphone_get_interface_addr_from_name(char *iface_name); #endif diff --git a/sflphone-client-gnome/src/config/accountconfigdialog.c b/sflphone-client-gnome/src/config/accountconfigdialog.c index 28f45737aec30f5609a225de89a0c7e8a63b9edf..55512d1879b6ee63b768a1793c8e9c132fd26eb1 100644 --- a/sflphone-client-gnome/src/config/accountconfigdialog.c +++ b/sflphone-client-gnome/src/config/accountconfigdialog.c @@ -566,6 +566,7 @@ static local_interface_changed_cb(GtkWidget * widget, gpointer data UNUSED) { gchar *local_address; local_interface = (gchar *) gtk_combo_box_get_active_text (GTK_COMBO_BOX (localAddressCombo)); + // sflphone_get_interface_addr_from_name((char *)local_interface); local_address = dbus_get_address_from_interface_name (local_interface); gtk_entry_set_text (GTK_ENTRY(publishedAddressEntry), local_address); @@ -646,6 +647,7 @@ static same_as_local_cb(GtkWidget * widget, gpointer data UNUSED) gchar * local_address; local_interface = (gchar *) gtk_combo_box_get_active_text(GTK_COMBO_BOX(localAddressCombo)); + // sflphone_get_interface_addr_from_name((char *)local_interface); local_address = dbus_get_address_from_interface_name(local_interface); gtk_entry_set_text(GTK_ENTRY(publishedAddressEntry), local_address); diff --git a/sflphone-common/src/sip/sipvoiplink.cpp b/sflphone-common/src/sip/sipvoiplink.cpp index 9b2a1e510a349d72623e19ab983274e87ea02abf..fcb88cec6248c920680b99f40ee8be0fab9182ab 100644 --- a/sflphone-common/src/sip/sipvoiplink.cpp +++ b/sflphone-common/src/sip/sipvoiplink.cpp @@ -395,8 +395,6 @@ std::string SIPVoIPLink::getInterfaceAddrFromName(std::string ifaceName) { if((err = ioctl(fd, SIOCGIFADDR, &ifr)) < 0) _debug("getInterfaceAddrFromName use default interface (0.0.0.0)\n"); - - // printf("Local address: %s\n", inet_ntos( ((struct sockaddr_in *) &ifr.ifr_ifru.ifru_addr)->sin_addr )); saddr_in = (struct sockaddr_in *)&ifr.ifr_addr; addr_in = &(saddr_in->sin_addr);