/pidgin/main: 4d2e2182f901: Adding new API for fetch_url with bi...
Youness Alaoui
kakaroto at kakaroto.homelinux.net
Thu Jun 16 16:23:51 EDT 2016
Changeset: 4d2e2182f9010107f402320dc37b059b4e2f5470
Author: Youness Alaoui <kakaroto at kakaroto.homelinux.net>
Date: 2016-06-14 17:48 -0400
Branch: release-2.x.y
URL: https://hg.pidgin.im/pidgin/main/rev/4d2e2182f901
Description:
Adding new API for fetch_url with binary request.
The current fetch API uses 'strlen' to check the length of the request.
This is changed to use a request_len argument which allows for POST
requests to be sent with binary data.
diffstat:
libpurple/util.c | 18 ++++++++++++++++--
libpurple/util.h | 26 ++++++++++++++++++++++++++
2 files changed, 42 insertions(+), 2 deletions(-)
diffs (92 lines):
diff --git a/libpurple/util.c b/libpurple/util.c
--- a/libpurple/util.c
+++ b/libpurple/util.c
@@ -60,6 +60,7 @@ struct _PurpleUtilFetchUrlData
char *user_agent;
gboolean http11;
char *request;
+ gsize request_len;
gsize request_written;
gboolean include_headers;
@@ -4082,6 +4083,7 @@ url_fetch_send_cb(gpointer data, gint so
g_string_append(request_str, "\r\n");
gfud->request = g_string_free(request_str, FALSE);
+ gfud->request_len = strlen(gfud->request);
}
if(purple_debug_is_unsafe())
@@ -4089,7 +4091,7 @@ url_fetch_send_cb(gpointer data, gint so
else
purple_debug_misc("util", "request constructed\n");
- total_len = strlen(gfud->request);
+ total_len = gfud->request_len;
if (gfud->is_ssl)
len = purple_ssl_write(gfud->ssl_connection, gfud->request + gfud->request_written,
@@ -4196,6 +4198,17 @@ purple_util_fetch_url_request_len_with_a
const char *request, gboolean include_headers, gssize max_len,
PurpleUtilFetchUrlCallback callback, void *user_data)
{
+ return purple_util_fetch_url_request_data_len_with_account(account, url, full,
+ user_agent, http11, request, request ? strlen (request) : 0, include_headers, max_len, callback,
+ user_data);
+}
+
+PurpleUtilFetchUrlData *
+purple_util_fetch_url_request_data_len_with_account(PurpleAccount *account,
+ const char *url, gboolean full, const char *user_agent, gboolean http11,
+ const char *request, gsize request_len, gboolean include_headers, gssize max_len,
+ PurpleUtilFetchUrlCallback callback, void *user_data)
+{
PurpleUtilFetchUrlData *gfud;
g_return_val_if_fail(url != NULL, NULL);
@@ -4216,7 +4229,8 @@ purple_util_fetch_url_request_len_with_a
gfud->user_agent = g_strdup(user_agent);
gfud->http11 = http11;
gfud->full = full;
- gfud->request = g_strdup(request);
+ gfud->request = request_len ? g_memdup(request, request_len) : NULL;
+ gfud->request_len = request_len;
gfud->include_headers = include_headers;
gfud->fd = -1;
if (max_len <= 0) {
diff --git a/libpurple/util.h b/libpurple/util.h
--- a/libpurple/util.h
+++ b/libpurple/util.h
@@ -1209,6 +1209,32 @@ PurpleUtilFetchUrlData *purple_util_fetc
PurpleUtilFetchUrlCallback callback, gpointer data);
/**
+ * Fetches the data from a URL, and passes it to a callback function.
+ *
+ * @param account The account for which the request is needed, or NULL.
+ * @param url The URL.
+ * @param full TRUE if this is the full URL, or FALSE if it's a
+ * partial URL.
+ * @param user_agent The user agent field to use, or NULL.
+ * @param http11 TRUE if HTTP/1.1 should be used to download the file.
+ * @param request A HTTP request to send to the server instead of the
+ * standard GET
+ * @param request_len
+ * Then length of the request being sent
+ * @param include_headers
+ * If TRUE, include the HTTP headers in the response.
+ * @param max_len The maximum number of bytes to retrieve, or a negative
+ * number to use the default max of 512 KiB.
+ * @param callback The callback function.
+ * @param data The user data to pass to the callback function.
+ * @deprecated In 3.0.0, we'll rename this to "purple_util_fetch_url_request" and get rid of the old one
+ */
+PurpleUtilFetchUrlData *
+purple_util_fetch_url_request_data_len_with_account(PurpleAccount *account,
+ const char *url, gboolean full, const char *user_agent, gboolean http11,
+ const char *request, gsize request_len, gboolean include_headers, gssize max_len,
+ PurpleUtilFetchUrlCallback callback, void *user_data);
+/**
* Cancel a pending URL request started with either
* purple_util_fetch_url_request() or purple_util_fetch_url().
*
More information about the Commits
mailing list