diff options
-rw-r--r-- | commands.c | 28 |
1 files changed, 26 insertions, 2 deletions
@@ -55,14 +55,38 @@ static void commands_get_raw(GSocketConnection *connection, const gchar *cmd) { g_error(error->message); } + GFileInfo *fi = g_file_query_info(file, G_FILE_ATTRIBUTE_STANDARD_SIZE, + G_FILE_QUERY_INFO_NONE, NULL, &error); + + if(fi == NULL) { + g_error(error->message); + } + + goffset filesize = g_file_info_get_size(fi); + g_object_unref(fi); + + GString *string = g_string_new(NULL); + g_string_append(string, "HTTP/1.1 200 OK\r\n"); + g_string_append(string, "content-type: octet-stream\r\n"); + g_string_append_printf(string, "content-length: %lu\r\n", filesize); + g_string_append(string, "\r\n"); + + if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL, + &error) == FALSE) { + g_error(error->message); + } + + g_string_free(string, TRUE); + gssize size = g_output_stream_splice(os, (GInputStream*)is, G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE || G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET, NULL, &error); if(size == -1) { - g_error(error->message); + g_warning(error->message); + } else { + g_debug("wrote %lu bytes of file data", size); } - g_debug("wrote %lu bytes of file data", size); g_object_unref(is); g_object_unref(file); |