+ if (!num_bytes) {
+ *bytes_read = 0;
+ return GNOME_VFS_OK;
+ }
+
+ if (1
+ && handle->offset > handle->socket_buffer_offset
+ && handle->offset <= handle->socket_buffer_offset+MAX_BUFFER_SEEK_SKIP_READ) {
+static char drop_buffer[0x1000];
+GnomeVFSFileSize bytes, bytes_read;
+GnomeVFSResult result;
+
+ while ((bytes=MIN(sizeof(drop_buffer), handle->offset - handle->socket_buffer_offset))) {
+ result = gnome_vfs_socket_buffer_read (handle->socket_buffer, drop_buffer,
+ bytes, &bytes_read);
+ if (result != GNOME_VFS_OK)
+ return result;
+ handle->socket_buffer_offset += bytes_read;
+ }
+ }
+
+ if (handle->offset != handle->socket_buffer_offset) {
+ GnomeVFSURI *uri = handle->uri;
+ gchar *extra_headers;
+
+ gnome_vfs_uri_ref(uri);
+ http_handle_close (handle, context);
+ extra_headers = g_strdup_printf("Range: bytes=%" G_GINT64_FORMAT "-\r\n",(gint64)handle->offset);
+ result = make_request (handle, uri, "GET", NULL, extra_headers,
+ context);
+ g_free (extra_headers);
+ gnome_vfs_uri_unref(uri);
+ if (result != GNOME_VFS_OK) {
+ /* FIXME: 'method_handle' is now broken! */
+ memset(handle, 0, sizeof (*handle));
+ return result;
+ }
+ handle->socket_buffer_offset = handle->offset;
+ }
+