PurpleBOSHConnection* jabber_bosh_connection_init(JabberStream *js, const char *url) { PurpleBOSHConnection *conn; char *host, *path, *user, *passwd; int port; if (!purple_url_parse(url, &host, &port, &path, &user, &passwd)) { purple_debug_info("jabber", "Unable to parse given URL.\n"); return NULL; } conn = g_new0(PurpleBOSHConnection, 1); conn->host = host; conn->port = port; conn->path = g_strdup_printf("/%s", path); g_free(path); conn->pipelining = TRUE; if (purple_ip_address_is_valid(host)) js->serverFQDN = g_strdup(js->user->domain); else js->serverFQDN = g_strdup(host); if ((user && user[0] != '\0') || (passwd && passwd[0] != '\0')) { purple_debug_info("jabber", "Ignoring unexpected username and password " "in BOSH URL.\n"); } g_free(user); g_free(passwd); conn->js = js; /* * Random 64-bit integer masked off by 2^52 - 1. * * This should produce a random integer in the range [0, 2^52). It's * unlikely we'll send enough packets in one session to overflow the rid. */ conn->rid = ((guint64)g_random_int() << 32) | g_random_int(); conn->rid &= 0xFFFFFFFFFFFFFLL; conn->pending = purple_circ_buffer_new(0 /* default grow size */); conn->state = BOSH_CONN_OFFLINE; if (purple_strcasestr(url, "https://") != NULL) conn->ssl = TRUE; else conn->ssl = FALSE; conn->connections[0] = jabber_bosh_http_connection_init(conn); return conn; }
PurpleJabberBOSHConnection* jabber_bosh_connection_new(JabberStream *js, const gchar *url) { PurpleJabberBOSHConnection *conn; PurpleHttpURL *url_p; url_p = purple_http_url_parse(url); if (!url_p) { purple_debug_error("jabber-bosh", "Unable to parse given URL.\n"); return NULL; } conn = g_new0(PurpleJabberBOSHConnection, 1); conn->kapool = purple_http_keepalive_pool_new(); conn->payload_reqs = purple_http_connection_set_new(); purple_http_keepalive_pool_set_limit_per_host(conn->kapool, 2); conn->url = g_strdup(url); conn->js = js; conn->is_ssl = (g_ascii_strcasecmp("https", purple_http_url_get_protocol(url_p)) == 0); conn->send_buff = g_string_new(NULL); /* * Random 64-bit integer masked off by 2^52 - 1. * * This should produce a random integer in the range [0, 2^52). It's * unlikely we'll send enough packets in one session to overflow the * rid. */ conn->rid = (((guint64)g_random_int() << 32) | g_random_int()); conn->rid &= 0xFFFFFFFFFFFFFLL; if (purple_ip_address_is_valid(purple_http_url_get_host(url_p))) js->serverFQDN = g_strdup(js->user->domain); else js->serverFQDN = g_strdup(purple_http_url_get_host(url_p)); purple_http_url_free(url_p); jabber_bosh_connection_session_create(conn); return conn; }