void on_entry_config_proxy_hostname_activate(GtkEditable *editable, gpointer unused_udata) { gchar *text = g_strstrip(STRTRACK(gtk_editable_get_chars(editable, 0, -1))); (void) unused_udata; gnet_prop_set_string(PROP_PROXY_HOSTNAME, text); if (text[0] != '\0') { guc_adns_resolve(text, on_entry_config_proxy_hostname_activate_helper, NULL); } G_FREE_NULL(text); }
/** * Try to connect to the list of nodes given by in following form: * * list = <node> | <node>, 1*<node> * port = 1..65535 * hostname = 1*[a-zA-Z0-9.-] * node = hostname [":" <port>] * | <IPv4 address>[":" <port>] * | <IPv6 address> * | "[" <IPv6 address> "]:" <port> * peer = ["tls:"]["g2:"]<node> * * If the port is omitted, the default port (GTA_PORT: 6346) is used. * The case-insensitive prefix "tls:" requests a TLS (encrypted) connection. */ void nodes_gui_common_connect_by_name(const gchar *line) { const gchar *q; g_assert(line); q = line; while ('\0' != *q) { const gchar *endptr, *hostname; size_t hostname_len; host_addr_t addr; guint32 flags; guint16 port; bool g2; q = skip_ascii_spaces(q); if (',' == *q) { q++; continue; } addr = zero_host_addr; port = GTA_PORT; flags = SOCK_F_FORCE; endptr = NULL; hostname = NULL; hostname_len = 0; endptr = is_strcaseprefix(q, "tls:"); if (endptr) { flags |= SOCK_F_TLS; q = endptr; } endptr = is_strcaseprefix(q, "g2:"); if (endptr) { g2 = TRUE; q = endptr; } else { g2 = FALSE; } if (!string_to_host_or_addr(q, &endptr, &addr)) { g_message("expected hostname or IP address"); break; } if (!is_host_addr(addr)) { hostname = q; hostname_len = endptr - q; } q = endptr; if (':' == *q) { gint error; port = parse_uint16(&q[1], &endptr, 10, &error); if (error || 0 == port) { g_message("cannot parse port"); break; } q = skip_ascii_spaces(endptr); } else { q = skip_ascii_spaces(endptr); if ('\0' != *q && ',' != *q) { g_message("expected \",\" or \":\""); break; } } if (!hostname) { if (g2) { guc_node_g2_add(addr, port, flags); } else { guc_node_add(addr, port, flags); } } else { struct add_node_context *ctx; gchar *p; if ('\0' == hostname[hostname_len]) { p = NULL; } else { size_t n = 1 + hostname_len; g_assert(n > hostname_len); p = halloc(n); g_strlcpy(p, hostname, n); hostname = p; } WALLOC(ctx); ctx->port = port; ctx->flags = flags; ctx->g2 = g2; guc_adns_resolve(hostname, add_node_helper, ctx); HFREE_NULL(p); } } }