Mercurial > pidgin
comparison libpurple/network.c @ 32819:2c6510167895 default tip
propagate from branch 'im.pidgin.pidgin.2.x.y' (head 3315c5dfbd0ad16511bdcf865e5b07c02d07df24)
to branch 'im.pidgin.pidgin' (head cbd1eda6bcbf0565ae7766396bb8f6f419cb6a9a)
| author | Elliott Sales de Andrade <qulogic@pidgin.im> |
|---|---|
| date | Sat, 02 Jun 2012 02:30:49 +0000 |
| parents | 0c2efa69492b |
| children |
comparison
equal
deleted
inserted
replaced
| 32818:01ff09d4a463 | 32819:2c6510167895 |
|---|---|
| 389 purple_network_listen_cancel(listen_data); | 389 purple_network_listen_cancel(listen_data); |
| 390 | 390 |
| 391 return FALSE; | 391 return FALSE; |
| 392 } | 392 } |
| 393 | 393 |
| 394 static gboolean listen_map_external = TRUE; | |
| 395 void purple_network_listen_map_external(gboolean map_external) | |
| 396 { | |
| 397 listen_map_external = map_external; | |
| 398 } | |
| 399 | |
| 400 static PurpleNetworkListenData * | 394 static PurpleNetworkListenData * |
| 401 purple_network_do_listen(unsigned short port, int socket_family, int socket_type, PurpleNetworkListenCallback cb, gpointer cb_data) | 395 purple_network_do_listen(unsigned short port, int socket_family, int socket_type, gboolean map_external, |
| 396 PurpleNetworkListenCallback cb, gpointer cb_data) | |
| 402 { | 397 { |
| 403 int listenfd = -1; | 398 int listenfd = -1; |
| 404 int flags; | 399 int flags; |
| 405 const int on = 1; | 400 const int on = 1; |
| 406 PurpleNetworkListenData *listen_data; | 401 PurpleNetworkListenData *listen_data; |
| 501 listen_data->retry = TRUE; | 496 listen_data->retry = TRUE; |
| 502 listen_data->cb = cb; | 497 listen_data->cb = cb; |
| 503 listen_data->cb_data = cb_data; | 498 listen_data->cb_data = cb_data; |
| 504 listen_data->socket_type = socket_type; | 499 listen_data->socket_type = socket_type; |
| 505 | 500 |
| 506 if (!purple_socket_speaks_ipv4(listenfd) || !listen_map_external || | 501 if (!purple_socket_speaks_ipv4(listenfd) || !map_external || |
| 507 !purple_prefs_get_bool("/purple/network/map_ports")) | 502 !purple_prefs_get_bool("/purple/network/map_ports")) |
| 508 { | 503 { |
| 509 purple_debug_info("network", "Skipping external port mapping.\n"); | 504 purple_debug_info("network", "Skipping external port mapping.\n"); |
| 510 /* The pmp_map_cb does what we want to do */ | 505 /* The pmp_map_cb does what we want to do */ |
| 511 listen_data->timer = purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data); | 506 listen_data->timer = purple_timeout_add(0, purple_network_finish_pmp_map_cb, listen_data); |
| 529 | 524 |
| 530 return listen_data; | 525 return listen_data; |
| 531 } | 526 } |
| 532 | 527 |
| 533 PurpleNetworkListenData * | 528 PurpleNetworkListenData * |
| 534 purple_network_listen_family(unsigned short port, int socket_family, | 529 purple_network_listen(unsigned short port, int socket_family, int socket_type, |
| 535 int socket_type, PurpleNetworkListenCallback cb, | 530 gboolean map_external, PurpleNetworkListenCallback cb, |
| 536 gpointer cb_data) | 531 gpointer cb_data) |
| 537 { | 532 { |
| 538 g_return_val_if_fail(port != 0, NULL); | 533 g_return_val_if_fail(port != 0, NULL); |
| 539 | 534 |
| 540 return purple_network_do_listen(port, socket_family, socket_type, | 535 return purple_network_do_listen(port, socket_family, socket_type, map_external, |
| 541 cb, cb_data); | 536 cb, cb_data); |
| 542 } | 537 } |
| 543 | 538 |
| 544 PurpleNetworkListenData * | 539 PurpleNetworkListenData * |
| 545 purple_network_listen(unsigned short port, int socket_type, | 540 purple_network_listen_range(unsigned short start, unsigned short end, |
| 546 PurpleNetworkListenCallback cb, gpointer cb_data) | 541 int socket_family, int socket_type, gboolean map_external, |
| 547 { | |
| 548 return purple_network_listen_family(port, AF_UNSPEC, socket_type, | |
| 549 cb, cb_data); | |
| 550 } | |
| 551 | |
| 552 PurpleNetworkListenData * | |
| 553 purple_network_listen_range_family(unsigned short start, unsigned short end, | |
| 554 int socket_family, int socket_type, | |
| 555 PurpleNetworkListenCallback cb, | 542 PurpleNetworkListenCallback cb, |
| 556 gpointer cb_data) | 543 gpointer cb_data) |
| 557 { | 544 { |
| 558 PurpleNetworkListenData *ret = NULL; | 545 PurpleNetworkListenData *ret = NULL; |
| 559 | 546 |
| 564 if (end < start) | 551 if (end < start) |
| 565 end = start; | 552 end = start; |
| 566 } | 553 } |
| 567 | 554 |
| 568 for (; start <= end; start++) { | 555 for (; start <= end; start++) { |
| 569 ret = purple_network_do_listen(start, AF_UNSPEC, socket_type, cb, cb_data); | 556 ret = purple_network_do_listen(start, AF_UNSPEC, socket_type, map_external, cb, cb_data); |
| 570 if (ret != NULL) | 557 if (ret != NULL) |
| 571 break; | 558 break; |
| 572 } | 559 } |
| 573 | 560 |
| 574 return ret; | 561 return ret; |
| 575 } | |
| 576 | |
| 577 PurpleNetworkListenData * | |
| 578 purple_network_listen_range(unsigned short start, unsigned short end, | |
| 579 int socket_type, PurpleNetworkListenCallback cb, | |
| 580 gpointer cb_data) | |
| 581 { | |
| 582 return purple_network_listen_range_family(start, end, AF_UNSPEC, | |
| 583 socket_type, cb, cb_data); | |
| 584 } | 562 } |
| 585 | 563 |
| 586 void purple_network_listen_cancel(PurpleNetworkListenData *listen_data) | 564 void purple_network_listen_cancel(PurpleNetworkListenData *listen_data) |
| 587 { | 565 { |
| 588 if (listen_data->mapping_data != NULL) | 566 if (listen_data->mapping_data != NULL) |
| 1001 purple_network_set_stun_server(const gchar *stun_server) | 979 purple_network_set_stun_server(const gchar *stun_server) |
| 1002 { | 980 { |
| 1003 if (stun_server && stun_server[0] != '\0') { | 981 if (stun_server && stun_server[0] != '\0') { |
| 1004 if (purple_network_is_available()) { | 982 if (purple_network_is_available()) { |
| 1005 purple_debug_info("network", "running DNS query for STUN server\n"); | 983 purple_debug_info("network", "running DNS query for STUN server\n"); |
| 1006 purple_dnsquery_a_account(NULL, stun_server, 3478, purple_network_ip_lookup_cb, | 984 purple_dnsquery_a(NULL, stun_server, 3478, purple_network_ip_lookup_cb, |
| 1007 &stun_ip); | 985 &stun_ip); |
| 1008 } else { | 986 } else { |
| 1009 purple_debug_info("network", | 987 purple_debug_info("network", |
| 1010 "network is unavailable, don't try to update STUN IP"); | 988 "network is unavailable, don't try to update STUN IP"); |
| 1011 } | 989 } |
| 1019 purple_network_set_turn_server(const gchar *turn_server) | 997 purple_network_set_turn_server(const gchar *turn_server) |
| 1020 { | 998 { |
| 1021 if (turn_server && turn_server[0] != '\0') { | 999 if (turn_server && turn_server[0] != '\0') { |
| 1022 if (purple_network_is_available()) { | 1000 if (purple_network_is_available()) { |
| 1023 purple_debug_info("network", "running DNS query for TURN server\n"); | 1001 purple_debug_info("network", "running DNS query for TURN server\n"); |
| 1024 purple_dnsquery_a_account(NULL, turn_server, | 1002 purple_dnsquery_a(NULL, turn_server, |
| 1025 purple_prefs_get_int("/purple/network/turn_port"), | 1003 purple_prefs_get_int("/purple/network/turn_port"), |
| 1026 purple_network_ip_lookup_cb, &turn_ip); | 1004 purple_network_ip_lookup_cb, &turn_ip); |
| 1027 } else { | 1005 } else { |
| 1028 purple_debug_info("network", | 1006 purple_debug_info("network", |
| 1029 "network is unavailable, don't try to update TURN IP"); | 1007 "network is unavailable, don't try to update TURN IP"); |
