Re: SoupInputStream / trying out gio
- From: Alexander Larsson <alexl redhat com>
- To: Dan Winship <danw gnome org>
- Cc: "gtk-devel-list gnome org" <gtk-devel-list gnome org>, gicmo gnome org
- Subject: Re: SoupInputStream / trying out gio
- Date: Fri, 30 Nov 2007 09:57:39 +0100
On Thu, 2007-11-29 at 13:18 -0500, Dan Winship wrote:
> OK, I've written a GInputStream subclass using libsoup to download HTTP
> responses. It's not beautiful (because it has to convert between
> libsoup's push API and gio's pull API), but it shows that it can work
> for gvfs. The biggest problem with it right now is that there's no way
> to make libsoup use caller-provided buffers for I/O, so we end up having
> to do extra copies (sometimes twice). I can add more API later to fix
> that though. (The current code works with plain libsoup 2.2.104, though
> not with anything earlier.)
Sweet!
> GInputStream was mostly unproblematic to work with. The problems I did
> have came when I wanted to implement a new pair of operations on my
> subclass (soup_input_stream_send/send_async, which you can use if you
> want to examine the status code/response headers before you start
> reading the body). GInputStream provides g_input_stream_get_pending()
> and g_input_stream_set_pending(), but I ended up needing to duplicate the
>
> g_set_error (error, G_IO_ERROR, G_IO_ERROR_PENDING,
> _("Stream has outstanding operation"));
>
> part myself, which would in turn require duplicating the translations of
> that message. It would be cleaner if I could just do:
>
> if (!g_input_stream_set_pending (stream, TRUE, error))
> return FALSE;
Yeah, that would remove some duplication in other in-tree streams too.
Care to hack up a patch for this?
Not that verifying that there are no pending ops is deadly important,
its more or less a way to find bugs early.
> A related issue was that with soup_input_stream_send_async, I ended up
> needing to have a wrapper callback to clear the pending flag before
> calling the real callback, just like GInputStream does for its async
> ops. Maybe GSimpleAsyncResult could support that idiom directly, by
> providing an "implementation_callback" or whatever in addition to the
> caller-provided callback.
Yeah, that would be nice... Wanna hack? :)
[
Date Prev][
Date Next] [
Thread Prev][Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]