char tmpfile[PATH_MAX];
int tries;
+ // GET Query Arguments
+ char** queries;
+
// POST MIME Object
curl_mime* mime;
free(xfer->buffer.data);
#endif /* CURL_HAS_WEBSOCKETS */
+ // Query Arguments
+ if (xfer->queries)
+ pakfire_strings_free(xfer->queries);
+
// cURL stuff
if (xfer->handle)
curl_easy_cleanup(xfer->handle);
goto ERROR;
}
-
// Setup the xfer
r = pakfire_xfer_setup(x);
if (r)
return 0;
}
+int pakfire_xfer_add_query(struct pakfire_xfer* xfer,
+ const char* key, const char* format, ...) {
+ char* value = NULL;
+ va_list args;
+ int r;
+
+ // Format the value
+ va_start(args, format);
+ r = vasprintf(&value, format, args);
+ va_end(args);
+
+ // Break on error
+ if (r < 0)
+ return -errno;
+
+ // Append the argument
+ r = pakfire_strings_appendf(&xfer->queries, "%s=%s", key, value);
+ if (value)
+ free(value);
+
+ return r;
+}
+
int pakfire_xfer_add_param(struct pakfire_xfer* xfer,
const char* key, const char* format, ...) {
curl_mimepart* part = NULL;
}
#endif /* CURL_HAS_WEBSOCKETS */
+ // Append any query arguments
+ if (xfer->queries) {
+ for (char** query = xfer->queries; *query; query++) {
+ r = curl_url_set(xfer->fullurl, CURLUPART_QUERY,
+ *query, CURLU_APPENDQUERY|CURLU_URLENCODE);
+ if (r) {
+ ERROR(xfer->ctx, "Could not set query argument '%s': %s\n",
+ *query, curl_url_strerror(r));
+ goto ERROR;
+ }
+ }
+ }
+
// Set the URL
r = curl_easy_setopt(xfer->handle, CURLOPT_CURLU, xfer->fullurl);
if (r) {
int pakfire_xfer_verify_digest(struct pakfire_xfer* xfer, const enum pakfire_digest_types md,
const unsigned char* expected_digest, const size_t expected_digest_length);
+int pakfire_xfer_add_query(struct pakfire_xfer* xfer,
+ const char* key, const char* format, ...) __attribute__((format(printf, 3, 4)));
int pakfire_xfer_add_param(struct pakfire_xfer* xfer,
const char* key, const char* format, ...) __attribute__((format(printf, 3, 4)));