Mercurial > pidgin
comparison libpurple/network.c @ 31558:ce968e115c95
propagate from branch 'im.pidgin.cpw.masca.p2p' (head 33ca865dacb9e5bcf763d06f6a42cbaca337cc64)
to branch 'im.pidgin.pidgin' (head 92f47f4e8b0cbb107fd97e1ab814d1cedbf109ad)
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Fri, 06 May 2011 06:25:14 +0000 |
parents | b671728e6ee9 |
children | 8b434ffd4efc |
comparison
equal
deleted
inserted
replaced
31557:f021d93a1f9b | 31558:ce968e115c95 |
---|---|
69 | 69 |
70 #ifdef HAVE_NETWORKMANAGER | 70 #ifdef HAVE_NETWORKMANAGER |
71 #include <dbus/dbus-glib.h> | 71 #include <dbus/dbus-glib.h> |
72 #include <NetworkManager.h> | 72 #include <NetworkManager.h> |
73 | 73 |
74 #if !defined(NM_CHECK_VERSION) | |
75 #define NM_CHECK_VERSION(x,y,z) 0 | |
76 #endif | |
77 | |
74 static DBusGConnection *nm_conn = NULL; | 78 static DBusGConnection *nm_conn = NULL; |
75 static DBusGProxy *nm_proxy = NULL; | 79 static DBusGProxy *nm_proxy = NULL; |
76 static DBusGProxy *dbus_proxy = NULL; | 80 static DBusGProxy *dbus_proxy = NULL; |
77 static NMState nm_state = NM_STATE_UNKNOWN; | 81 static NMState nm_state = NM_STATE_UNKNOWN; |
78 static gboolean have_nm_state = FALSE; | 82 static gboolean have_nm_state = FALSE; |
269 if (ifr->ifr_addr.sa_family == AF_INET) { | 273 if (ifr->ifr_addr.sa_family == AF_INET) { |
270 struct sockaddr_in *sinptr = (struct sockaddr_in *)&ifr->ifr_addr; | 274 struct sockaddr_in *sinptr = (struct sockaddr_in *)&ifr->ifr_addr; |
271 | 275 |
272 inet_ntop(AF_INET, &sinptr->sin_addr, dst, | 276 inet_ntop(AF_INET, &sinptr->sin_addr, dst, |
273 sizeof(dst)); | 277 sizeof(dst)); |
274 purple_debug_info("network", | 278 purple_debug_info("network", |
275 "found local i/f with address %s on IPv4\n", dst); | 279 "found local i/f with address %s on IPv4\n", dst); |
276 if (!purple_strequal(dst, "127.0.0.1")) { | 280 if (!purple_strequal(dst, "127.0.0.1")) { |
277 result = g_list_append(result, g_strdup(dst)); | 281 result = g_list_append(result, g_strdup(dst)); |
278 } | 282 } |
279 } | 283 } |
861 | 865 |
862 purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL); | 866 purple_signal_emit(purple_network_get_handle(), "network-configuration-changed", NULL); |
863 | 867 |
864 switch(state) | 868 switch(state) |
865 { | 869 { |
870 #if NM_CHECK_VERSION(0,8,992) | |
871 case NM_STATE_CONNECTED_LOCAL: | |
872 case NM_STATE_CONNECTED_SITE: | |
873 case NM_STATE_CONNECTED_GLOBAL: | |
874 #else | |
866 case NM_STATE_CONNECTED: | 875 case NM_STATE_CONNECTED: |
876 #endif | |
867 /* Call res_init in case DNS servers have changed */ | 877 /* Call res_init in case DNS servers have changed */ |
868 res_init(); | 878 res_init(); |
869 /* update STUN IP in case we it changed (theoretically we could | 879 /* update STUN IP in case we it changed (theoretically we could |
870 have gone from IPv4 to IPv6, f.ex. or we were previously | 880 have gone from IPv4 to IPv6, f.ex. or we were previously |
871 offline */ | 881 offline */ |
872 purple_network_set_stun_server( | 882 purple_network_set_stun_server( |
873 purple_prefs_get_string("/purple/network/stun_server")); | 883 purple_prefs_get_string("/purple/network/stun_server")); |
874 purple_network_set_turn_server( | 884 purple_network_set_turn_server( |
875 purple_prefs_get_string("/purple/network/turn_server")); | 885 purple_prefs_get_string("/purple/network/turn_server")); |
876 | 886 |
877 if (ui_ops != NULL && ui_ops->network_connected != NULL) | 887 if (ui_ops != NULL && ui_ops->network_connected != NULL) |
878 ui_ops->network_connected(); | 888 ui_ops->network_connected(); |
879 break; | 889 break; |
880 case NM_STATE_ASLEEP: | 890 case NM_STATE_ASLEEP: |
881 case NM_STATE_CONNECTING: | 891 case NM_STATE_CONNECTING: |
882 case NM_STATE_DISCONNECTED: | 892 case NM_STATE_DISCONNECTED: |
893 #if NM_CHECK_VERSION(0,8,992) | |
894 case NM_STATE_DISCONNECTING: | |
895 #endif | |
883 if (prev != NM_STATE_CONNECTED && prev != NM_STATE_UNKNOWN) | 896 if (prev != NM_STATE_CONNECTED && prev != NM_STATE_UNKNOWN) |
884 break; | 897 break; |
885 if (ui_ops != NULL && ui_ops->network_disconnected != NULL) | 898 if (ui_ops != NULL && ui_ops->network_disconnected != NULL) |
886 ui_ops->network_disconnected(); | 899 ui_ops->network_disconnected(); |
887 break; | 900 break; |
934 } | 947 } |
935 | 948 |
936 #endif | 949 #endif |
937 | 950 |
938 static void | 951 static void |
939 purple_network_ip_lookup_cb(GSList *hosts, gpointer data, | 952 purple_network_ip_lookup_cb(GSList *hosts, gpointer data, |
940 const char *error_message) | 953 const char *error_message) |
941 { | 954 { |
942 const gchar **ip = (const gchar **) data; | 955 const gchar **ip = (const gchar **) data; |
943 | 956 |
944 if (error_message) { | 957 if (error_message) { |
945 purple_debug_error("network", "lookup of IP address failed: %s\n", | 958 purple_debug_error("network", "lookup of IP address failed: %s\n", |
946 error_message); | 959 error_message); |
947 g_slist_free(hosts); | 960 g_slist_free(hosts); |
948 return; | 961 return; |
949 } | 962 } |
950 | 963 |
951 if (hosts && g_slist_next(hosts)) { | 964 if (hosts && g_slist_next(hosts)) { |
952 struct sockaddr *addr = g_slist_next(hosts)->data; | 965 struct sockaddr *addr = g_slist_next(hosts)->data; |
953 char dst[INET6_ADDRSTRLEN]; | 966 char dst[INET6_ADDRSTRLEN]; |
954 | 967 |
955 if (addr->sa_family == AF_INET6) { | 968 if (addr->sa_family == AF_INET6) { |
956 inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr, | 969 inet_ntop(addr->sa_family, &((struct sockaddr_in6 *) addr)->sin6_addr, |
957 dst, sizeof(dst)); | 970 dst, sizeof(dst)); |
958 } else { | 971 } else { |
959 inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, | 972 inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, |
960 dst, sizeof(dst)); | 973 dst, sizeof(dst)); |
961 } | 974 } |
962 | 975 |
963 *ip = g_strdup(dst); | 976 *ip = g_strdup(dst); |
964 purple_debug_info("network", "set IP address: %s\n", *ip); | 977 purple_debug_info("network", "set IP address: %s\n", *ip); |
976 purple_network_set_stun_server(const gchar *stun_server) | 989 purple_network_set_stun_server(const gchar *stun_server) |
977 { | 990 { |
978 if (stun_server && stun_server[0] != '\0') { | 991 if (stun_server && stun_server[0] != '\0') { |
979 if (purple_network_is_available()) { | 992 if (purple_network_is_available()) { |
980 purple_debug_info("network", "running DNS query for STUN server\n"); | 993 purple_debug_info("network", "running DNS query for STUN server\n"); |
981 purple_dnsquery_a(stun_server, 3478, purple_network_ip_lookup_cb, | 994 purple_dnsquery_a_account(NULL, stun_server, 3478, purple_network_ip_lookup_cb, |
982 &stun_ip); | 995 &stun_ip); |
983 } else { | 996 } else { |
984 purple_debug_info("network", | 997 purple_debug_info("network", |
985 "network is unavailable, don't try to update STUN IP"); | 998 "network is unavailable, don't try to update STUN IP"); |
986 } | 999 } |
987 } else if (stun_ip) { | 1000 } else if (stun_ip) { |
988 g_free(stun_ip); | 1001 g_free(stun_ip); |
989 stun_ip = NULL; | 1002 stun_ip = NULL; |
994 purple_network_set_turn_server(const gchar *turn_server) | 1007 purple_network_set_turn_server(const gchar *turn_server) |
995 { | 1008 { |
996 if (turn_server && turn_server[0] != '\0') { | 1009 if (turn_server && turn_server[0] != '\0') { |
997 if (purple_network_is_available()) { | 1010 if (purple_network_is_available()) { |
998 purple_debug_info("network", "running DNS query for TURN server\n"); | 1011 purple_debug_info("network", "running DNS query for TURN server\n"); |
999 purple_dnsquery_a(turn_server, | 1012 purple_dnsquery_a_account(NULL, turn_server, |
1000 purple_prefs_get_int("/purple/network/turn_port"), | 1013 purple_prefs_get_int("/purple/network/turn_port"), |
1001 purple_network_ip_lookup_cb, &turn_ip); | 1014 purple_network_ip_lookup_cb, &turn_ip); |
1002 } else { | 1015 } else { |
1003 purple_debug_info("network", | 1016 purple_debug_info("network", |
1004 "network is unavailable, don't try to update TURN IP"); | 1017 "network is unavailable, don't try to update TURN IP"); |
1005 } | 1018 } |
1006 } else if (turn_ip) { | 1019 } else if (turn_ip) { |
1007 g_free(turn_ip); | 1020 g_free(turn_ip); |
1008 turn_ip = NULL; | 1021 turn_ip = NULL; |