aboutsummaryrefslogtreecommitdiff
path: root/plugins/http-files/src/file_sender.vala
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2022-04-09 00:28:42 +0200
committerMarvin W <git@larma.de>2022-04-09 00:28:42 +0200
commitbaa4a6a1eb4e98558acfef6e2a24c2c13d42db5c (patch)
treefd5189f181a4a957cd651331bb928b3d68c90754 /plugins/http-files/src/file_sender.vala
parenta0eac798cd1a1abf20772db9f89c54e945ded3ea (diff)
downloaddino-baa4a6a1eb4e98558acfef6e2a24c2c13d42db5c.tar.gz
dino-baa4a6a1eb4e98558acfef6e2a24c2c13d42db5c.zip
Prepare http-files plugin for libsoup-3 support
Note: ice plugin still depends on libsoup-2.4 and one can't have both in the same process, so this remains disabled by default
Diffstat (limited to 'plugins/http-files/src/file_sender.vala')
-rw-r--r--plugins/http-files/src/file_sender.vala34
1 files changed, 22 insertions, 12 deletions
diff --git a/plugins/http-files/src/file_sender.vala b/plugins/http-files/src/file_sender.vala
index 8a22ffe1..ab81ffce 100644
--- a/plugins/http-files/src/file_sender.vala
+++ b/plugins/http-files/src/file_sender.vala
@@ -73,6 +73,7 @@ public class HttpFileSender : FileSender, Object {
}
}
+#if !SOUP_3
private static void transfer_more_bytes(InputStream stream, Soup.MessageBody body) {
uint8[] bytes = new uint8[4096];
ssize_t read = stream.read(bytes);
@@ -83,26 +84,35 @@ public class HttpFileSender : FileSender, Object {
bytes.length = (int)read;
body.append_buffer(new Soup.Buffer.take(bytes));
}
+#endif
private async void upload(FileTransfer file_transfer, HttpFileSendData file_send_data, FileMeta file_meta) throws FileSendError {
Xmpp.XmppStream? stream = stream_interactor.get_stream(file_transfer.account);
if (stream == null) return;
- Soup.Message message = new Soup.Message("PUT", file_send_data.url_up);
- message.request_headers.set_content_type(file_meta.mime_type, null);
- message.request_headers.set_content_length(file_meta.size);
+ var session = new Soup.Session();
+ session.user_agent = @"Dino/$(Dino.get_short_version()) ";
+ var put_message = new Soup.Message("PUT", file_send_data.url_up);
+#if SOUP_3
+ put_message.set_request_body(file_meta.mime_type, file_transfer.input_stream, (ssize_t) file_meta.size);
+#else
+ put_message.request_headers.set_content_type(file_meta.mime_type, null);
+ put_message.request_headers.set_content_length(file_meta.size);
+ put_message.request_body.set_accumulate(false);
+ put_message.wrote_headers.connect(() => transfer_more_bytes(file_transfer.input_stream, put_message.request_body));
+ put_message.wrote_chunk.connect(() => transfer_more_bytes(file_transfer.input_stream, put_message.request_body));
+#endif
foreach (var entry in file_send_data.headers.entries) {
- message.request_headers.append(entry.key, entry.value);
+ put_message.request_headers.append(entry.key, entry.value);
}
- message.request_body.set_accumulate(false);
- message.wrote_headers.connect(() => transfer_more_bytes(file_transfer.input_stream, message.request_body));
- message.wrote_chunk.connect(() => transfer_more_bytes(file_transfer.input_stream, message.request_body));
- Soup.Session session = new Soup.Session();
- session.user_agent = @"Dino/$(Dino.get_short_version()) ";
try {
- yield session.send_async(message, file_transfer.cancellable);
- if (message.status_code < 200 || message.status_code >= 300) {
- throw new FileSendError.UPLOAD_FAILED("HTTP status code %s".printf(message.status_code.to_string()));
+#if SOUP_3
+ yield session.send_async(put_message, GLib.Priority.LOW, file_transfer.cancellable);
+#else
+ yield session.send_async(put_message, file_transfer.cancellable);
+#endif
+ if (put_message.status_code < 200 || put_message.status_code >= 300) {
+ throw new FileSendError.UPLOAD_FAILED("HTTP status code %s".printf(put_message.status_code.to_string()));
}
} catch (Error e) {
throw new FileSendError.UPLOAD_FAILED("HTTP upload error: %s".printf(e.message));