--- a/libpurple/network.c Sun Oct 13 00:16:37 2019 +0000
+++ b/libpurple/network.c Sun Oct 13 00:54:24 2019 +0000
@@ -779,4 +779,6 @@
/* TODO: clean up remaining port mappings, note calling
purple_upnp_remove_port_mapping from here doesn't quite work... */
--- a/libpurple/upnp.c Sun Oct 13 00:16:37 2019 +0000
+++ b/libpurple/upnp.c Sun Oct 13 00:54:24 2019 +0000
@@ -19,6 +19,7 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
+#include <libsoup/soup.h> @@ -135,13 +136,14 @@
guint tima; /* g_timeout_add handle */
- PurpleHttpConnection *hc;
static PurpleUPnPControlInfo control_info = {
PURPLE_UPNP_STATUS_UNDISCOVERED,
NULL, "\0", "\0", "\0", 0};
+static SoupSession *session = NULL; static GSList *discovery_callbacks = NULL;
static void purple_upnp_discover_send_broadcast(UPnPDiscoveryData *dd);
@@ -364,19 +366,16 @@
-upnp_parse_description_cb(PurpleHttpConnection *http_conn,
- PurpleHttpResponse *response, gpointer _dd)
+upnp_parse_description_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg, UPnPDiscoveryData *dd = _dd;
gchar *control_url = NULL;
- if (response && purple_http_response_is_successful(response)) {
- got_data = purple_http_response_get_data(response, &got_len);
+ if (msg && SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) { control_url = purple_upnp_parse_description_response(
- got_data, got_len, dd->full_url, dd->service_type);
+ msg->response_body->data, msg->response_body->length, + dd->full_url, dd->service_type); @@ -412,8 +411,8 @@
purple_upnp_parse_description(const gchar* descriptionURL, UPnPDiscoveryData *dd)
- PurpleHttpRequest *req;
/* Remove the timeout because everything it is waiting for has
* successfully completed */
@@ -423,20 +422,17 @@
/* Extract base url out of the descriptionURL.
* Example description URL: http://192.168.1.1:5678/rootDesc.xml
- url = purple_http_url_parse(descriptionURL);
+ uri = soup_uri_new(descriptionURL); upnp_parse_description_cb(NULL, NULL, dd);
- dd->full_url = g_strdup_printf("http://%s:%d",
- purple_http_url_get_host(url),
- purple_http_url_get_port(url));
- purple_http_url_free(url);
+ dd->full_url = g_strdup_printf("http://%s:%d", uri->host, uri->port); - req = purple_http_request_new(descriptionURL);
- purple_http_request_set_max_len(req, MAX_UPNP_DOWNLOAD);
- purple_http_request(NULL, req, upnp_parse_description_cb, dd);
- purple_http_request_unref(req);
+ msg = soup_message_new("GET", descriptionURL); + // purple_http_request_set_max_len(msg, MAX_UPNP_DOWNLOAD); + soup_session_queue_message(session, msg, upnp_parse_description_cb, dd); @@ -660,34 +656,31 @@
purple_upnp_discover_send_broadcast(dd);
-static PurpleHttpConnection*
-purple_upnp_generate_action_message_and_send(const gchar* actionName,
- const gchar* actionParams, PurpleHttpCallback cb,
+purple_upnp_generate_action_message_and_send(const gchar *actionName, + const gchar *actionParams, + SoupSessionCallback cb, - PurpleHttpConnection *hc;
- PurpleHttpRequest *req;
/* set the soap message */
soapMessage = g_strdup_printf(SOAP_ACTION, actionName,
control_info.service_type, actionParams, actionName);
- req = purple_http_request_new(control_info.control_url);
- purple_http_request_set_max_len(req, MAX_UPNP_DOWNLOAD);
- purple_http_request_set_method(req, "POST");
- purple_http_request_header_set_printf(req, "SOAPAction",
- "\"urn:schemas-upnp-org:service:%s#%s\"",
- control_info.service_type, actionName);
- purple_http_request_header_set(req, "Content-Type",
- "text/xml; charset=utf-8");
- purple_http_request_set_contents(req, soapMessage, -1);
- hc = purple_http_request(NULL, req, cb, cb_data);
- purple_http_request_unref(req);
+ msg = soup_message_new("POST", control_info.control_url); + // purple_http_request_set_max_len(msg, MAX_UPNP_DOWNLOAD); + action = g_strdup_printf("\"urn:schemas-upnp-org:service:%s#%s\"", + control_info.service_type, actionName); + soup_message_headers_replace(msg->request_headers, "SOAPAction", action); + soup_message_set_request(msg, "text/xml; charset=utf-8", SOUP_MEMORY_TAKE, + soapMessage, strlen(soapMessage)); + soup_session_queue_message(session, msg, cb, cb_data);
@@ -707,18 +700,20 @@
-looked_up_public_ip_cb(PurpleHttpConnection *http_conn,
- PurpleHttpResponse *response, gpointer user_data)
+looked_up_public_ip_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg, - if (!purple_http_response_is_successful(response))
+ if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) { /* extract the ip, or see if there is an error */
- got_data = purple_http_response_get_data(response, &got_len);
+ got_data = msg->response_body->data; + got_len = msg->response_body->length; if((temp = g_strstr_len(got_data, got_len,
"<NewExternalIPAddress")) == NULL) {
purple_debug_error("upnp",
@@ -785,45 +780,43 @@
- url = purple_http_url_parse(control_info.control_url);
+ uri = soup_uri_new(control_info.control_url); purple_debug_error("upnp",
"lookup_internal_ip(): Failed In Parse URL\n");
- if(purple_proxy_connect(NULL, NULL, purple_http_url_get_host(url),
- purple_http_url_get_port(url), looked_up_internal_ip_cb,
- purple_debug_error("upnp", "Get Local IP Connect Failed: "
- "Address: %s @@@ Port %d\n",
- purple_http_url_get_host(url),
- purple_http_url_get_port(url));
+ if (purple_proxy_connect(NULL, NULL, uri->host, uri->port, + looked_up_internal_ip_cb, NULL) == NULL) { + "upnp", "Get Local IP Connect Failed: Address: %s @@@ Port %d", - purple_http_url_free(url);
-done_port_mapping_cb(PurpleHttpConnection *http_conn,
- PurpleHttpResponse *response, gpointer user_data)
+done_port_mapping_cb(G_GNUC_UNUSED SoupSession *session, SoupMessage *msg, PurpleUPnPMappingAddRemove *ar = user_data;
/* determine if port mapping was a success */
- if (!purple_http_response_is_successful(response))
+ if (!SOUP_STATUS_IS_SUCCESSFUL(msg->status_code)) { purple_debug_error("upnp",
- "purple_upnp_set_port_mapping(): Failed HTTP_OK\n%s\n",
- purple_http_response_get_error(response));
+ "purple_upnp_set_port_mapping(): Failed HTTP_OK: %s",
- purple_debug_info("upnp", "Successfully completed port mapping operation\n");
+ purple_debug_info("upnp", + "Successfully completed port mapping operation"); ar->tima = g_timeout_add(0, fire_ar_cb_async_and_free, ar);
@@ -860,8 +853,8 @@
ar->portmap, ar->protocol);
- ar->hc = purple_upnp_generate_action_message_and_send(
- action_name, action_params, done_port_mapping_cb, ar);
+ ar->msg = purple_upnp_generate_action_message_and_send( + action_name, action_params, done_port_mapping_cb, ar); @@ -905,7 +898,7 @@
g_source_remove(ar->tima);
- purple_http_conn_cancel(ar->hc);
+ soup_session_cancel_message(session, ar->msg, SOUP_STATUS_CANCELLED); @@ -1018,8 +1011,17 @@
+ session = soup_session_new(); g_signal_connect(g_network_monitor_get_default(),
G_CALLBACK(purple_upnp_network_config_changed_cb),
+purple_upnp_uninit(void) + soup_session_abort(session); + g_clear_object(&session); --- a/pidgin/plugins/imgupload.c Sun Oct 13 00:16:37 2019 +0000
+++ b/pidgin/plugins/imgupload.c Sun Oct 13 00:54:24 2019 +0000
@@ -126,7 +126,7 @@
soup_message_set_request(msg, "application/x-www-form-urlencoded",
- SOUP_MESSAGE_TAKE, req_data, -1);
+ SOUP_MESSAGE_TAKE, req_data, strlen(req_data)); g_object_set_data_full(G_OBJECT(msg), "imgupload-imgur-name",
g_strdup(purple_image_get_friendly_filename(image)),