comparison libpurple/network.c @ 26055:c56e8826fed0

Added support to generate relayed candidates (TURN). Added prefs setting for relay server in Pidgin
author Marcus Lundblad <ml@update.uu.se>
date Thu, 22 Jan 2009 23:04:52 +0000
parents ae3d25465d0f
children 4f0aec6d4ad7
comparison
equal deleted inserted replaced
26054:d68924f1265f 26055:c56e8826fed0
91 91
92 #ifdef HAVE_NETWORKMANAGER 92 #ifdef HAVE_NETWORKMANAGER
93 static NMState nm_get_network_state(void); 93 static NMState nm_get_network_state(void);
94 #endif 94 #endif
95 95
96 /* Cached IP address for STUN server */ 96 /* Cached IP addresses for STUN and TURN servers (set globally in prefs) */
97 static gchar *stun_ip = NULL; 97 static gchar *stun_ip = NULL;
98 static gchar *turn_ip = NULL;
98 99
99 const unsigned char * 100 const unsigned char *
100 purple_network_ip_atoi(const char *ip) 101 purple_network_ip_atoi(const char *ip)
101 { 102 {
102 static unsigned char ret[4]; 103 static unsigned char ret[4];
692 /* update STUN IP in case we it changed (theoretically we could 693 /* update STUN IP in case we it changed (theoretically we could
693 have gone from IPv4 to IPv6, f.ex. or we were previously 694 have gone from IPv4 to IPv6, f.ex. or we were previously
694 offline */ 695 offline */
695 purple_network_set_stun_server( 696 purple_network_set_stun_server(
696 purple_prefs_get_string("/purple/network/stun_server")); 697 purple_prefs_get_string("/purple/network/stun_server"));
698 purple_network_set_turn_server(
699 purple_prefs_get_string("/purple/network/turn_server"));
697 700
698 if (ui_ops != NULL && ui_ops->network_connected != NULL) 701 if (ui_ops != NULL && ui_ops->network_connected != NULL)
699 ui_ops->network_connected(); 702 ui_ops->network_connected();
700 break; 703 break;
701 case NM_STATE_ASLEEP: 704 case NM_STATE_ASLEEP:
755 } 758 }
756 759
757 #endif 760 #endif
758 761
759 static void 762 static void
760 purple_network_stun_lookup_cb(GSList *hosts, gpointer data, 763 purple_network_ip_lookup_cb(GSList *hosts, gpointer data,
761 const char *error_message) 764 const char *error_message)
762 { 765 {
766 const gchar **ip = (const gchar **) data;
767
763 if (error_message) { 768 if (error_message) {
764 purple_debug_error("network", "lookup of STUN server IP failed: %s\n", 769 purple_debug_error("network", "lookup of IP address failed: %s\n",
765 error_message); 770 error_message);
766 g_slist_free(hosts); 771 g_slist_free(hosts);
767 return; 772 return;
768 } 773 }
769 774
778 } else { 783 } else {
779 inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr, 784 inet_ntop(addr->sa_family, &((struct sockaddr_in *) addr)->sin_addr,
780 dst, sizeof(dst)); 785 dst, sizeof(dst));
781 } 786 }
782 787
783 stun_ip = g_strdup(dst); 788 *ip = g_strdup(dst);
784 purple_debug_info("network", "set STUN IP: %s\n", stun_ip); 789 purple_debug_info("network", "set IP address: %s\n", *ip);
785 } 790 }
786 791
787 g_slist_free(hosts); 792 g_slist_free(hosts);
788 } 793 }
789 794
791 purple_network_set_stun_server(const gchar *stun_server) 796 purple_network_set_stun_server(const gchar *stun_server)
792 { 797 {
793 if (stun_server && stun_server[0] != '\0') { 798 if (stun_server && stun_server[0] != '\0') {
794 if (purple_network_is_available()) { 799 if (purple_network_is_available()) {
795 purple_debug_info("network", "running DNS query for STUN server\n"); 800 purple_debug_info("network", "running DNS query for STUN server\n");
796 purple_dnsquery_a(stun_server, 3478, purple_network_stun_lookup_cb, 801 purple_dnsquery_a(stun_server, 3478, purple_network_ip_lookup_cb,
797 NULL); 802 &stun_ip);
798 } else { 803 } else {
799 purple_debug_info("network", 804 purple_debug_info("network",
800 "network is unavailable, don't try to update STUN IP"); 805 "network is unavailable, don't try to update STUN IP");
801 } 806 }
802 } else if (stun_ip) { 807 } else if (stun_ip) {
803 g_free(stun_ip); 808 g_free(stun_ip);
804 stun_ip = NULL; 809 stun_ip = NULL;
805 } 810 }
806 } 811 }
807 812
813 void
814 purple_network_set_turn_server(const gchar *turn_server)
815 {
816 if (turn_server && turn_server[0] != '\0') {
817 if (purple_network_is_available()) {
818 purple_debug_info("network", "running DNS query for TURN server\n");
819 purple_dnsquery_a(turn_server,
820 purple_prefs_get_int("/purple/network/turn_port"),
821 purple_network_ip_lookup_cb, &turn_ip);
822 } else {
823 purple_debug_info("network",
824 "network is unavailable, don't try to update TURN IP");
825 }
826 } else if (turn_ip) {
827 g_free(turn_ip);
828 turn_ip = NULL;
829 }
830 }
831
832
808 const gchar * 833 const gchar *
809 purple_network_get_stun_ip(void) 834 purple_network_get_stun_ip(void)
810 { 835 {
811 return stun_ip; 836 return stun_ip;
837 }
838
839 const gchar *
840 purple_network_get_turn_ip(void)
841 {
842 return turn_ip;
812 } 843 }
813 844
814 void * 845 void *
815 purple_network_get_handle(void) 846 purple_network_get_handle(void)
816 { 847 {
841 } 872 }
842 #endif 873 #endif
843 874
844 purple_prefs_add_none ("/purple/network"); 875 purple_prefs_add_none ("/purple/network");
845 purple_prefs_add_string("/purple/network/stun_server", ""); 876 purple_prefs_add_string("/purple/network/stun_server", "");
877 purple_prefs_add_string("/purple/network/turn_server", "");
878 purple_prefs_add_int ("/purple/network/turn_port", 3478);
879 purple_prefs_add_string("/purple/network/turn_username", "");
880 purple_prefs_add_string("/purple/network/turn_password", "");
846 purple_prefs_add_bool ("/purple/network/auto_ip", TRUE); 881 purple_prefs_add_bool ("/purple/network/auto_ip", TRUE);
847 purple_prefs_add_string("/purple/network/public_ip", ""); 882 purple_prefs_add_string("/purple/network/public_ip", "");
848 purple_prefs_add_bool ("/purple/network/map_ports", TRUE); 883 purple_prefs_add_bool ("/purple/network/map_ports", TRUE);
849 purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE); 884 purple_prefs_add_bool ("/purple/network/ports_range_use", FALSE);
850 purple_prefs_add_int ("/purple/network/ports_range_start", 1024); 885 purple_prefs_add_int ("/purple/network/ports_range_start", 1024);
882 purple_pmp_init(); 917 purple_pmp_init();
883 purple_upnp_init(); 918 purple_upnp_init();
884 919
885 purple_network_set_stun_server( 920 purple_network_set_stun_server(
886 purple_prefs_get_string("/purple/network/stun_server")); 921 purple_prefs_get_string("/purple/network/stun_server"));
922 purple_network_set_turn_server(
923 purple_prefs_get_string("/purple/network/turn_server"));
887 } 924 }
888 925
889 void 926 void
890 purple_network_uninit(void) 927 purple_network_uninit(void)
891 { 928 {