Don't write the Content-Length header ourselves, WinHttpSendRequest()
authorTor Lillqvist <tml@novell.com>
Tue, 12 Aug 2008 23:40:39 +0000 (23:40 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Tue, 12 Aug 2008 23:40:39 +0000 (23:40 +0000)
2008-08-13  Tor Lillqvist  <tml@novell.com>

* win32/gwinhttpfileoutputstream.c
(g_winhttp_file_output_stream_write): Don't write the
Content-Length header ourselves, WinHttpSendRequest() takes care
of that when the dwTotalLength parameter is non-zero. Increment
offset by the number of actual bytes sent, although I wonder if
such a scenario is possible where less than requested would be
sent and accepted by the server without errors.

svn path=/trunk/; revision=7345

gio/ChangeLog
gio/win32/gwinhttpfileoutputstream.c

index 1ea03f047916f9f05517f7c60b1ba3e31d954259..58300f154332f35d885775808d2361ece102496f 100644 (file)
@@ -1,3 +1,13 @@
+2008-08-13  Tor Lillqvist  <tml@novell.com>
+
+       * win32/gwinhttpfileoutputstream.c
+       (g_winhttp_file_output_stream_write): Don't write the
+       Content-Length header ourselves, WinHttpSendRequest() takes care
+       of that when the dwTotalLength parameter is non-zero. Increment
+       offset by the number of actual bytes sent, although I wonder if
+       such a scenario is possible where less than requested would be
+       sent and accepted by the server without errors.
+
 2008-08-13  Tor Lillqvist  <tml@novell.com>
 
        * win32/gwinhttpvfs.c
index 19b6e8538256c80a94ad7099adec638fa0898e68..898a72993ac58d43f7e20b246b374ae04f783652 100644 (file)
@@ -142,9 +142,8 @@ g_winhttp_file_output_stream_write (GOutputStream  *stream,
       return -1;
     }
 
-  headers = g_strdup_printf ("Content-Range: bytes %" G_GINT64_FORMAT "-%" G_GINT64_FORMAT "/*\r\n"
-                             "Content-Length: %" G_GSIZE_FORMAT "\r\n",
-                             winhttp_stream->offset, winhttp_stream->offset + count, count);
+  headers = g_strdup_printf ("Content-Range: bytes %" G_GINT64_FORMAT "-%" G_GINT64_FORMAT "/*\r\n",
+                             winhttp_stream->offset, winhttp_stream->offset + count);
   wheaders = g_utf8_to_utf16 (headers, -1, NULL, NULL, NULL);
   g_free (headers);
 
@@ -152,7 +151,7 @@ g_winhttp_file_output_stream_write (GOutputStream  *stream,
       (request,
        wheaders, -1,
        NULL, 0,
-       0,
+       count,
        0))
     {
       char *emsg = _g_winhttp_error_message (GetLastError ());
@@ -168,7 +167,6 @@ g_winhttp_file_output_stream_write (GOutputStream  *stream,
       return -1;
     }
   
-  winhttp_stream->offset += count;
   g_free (wheaders);
 
   if (!G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->pWinHttpWriteData
@@ -185,6 +183,8 @@ g_winhttp_file_output_stream_write (GOutputStream  *stream,
       return -1;
     }
   
+  winhttp_stream->offset += bytes_written;
+
   if (!G_WINHTTP_VFS_GET_CLASS (winhttp_stream->file->vfs)->pWinHttpReceiveResponse
       (request, NULL))
     {