Hi Mohamed, > Add new API to support http download. > --- > gweb/gweb.h | 12 ++++++++++++ > 1 files changed, 12 insertions(+), 0 deletions(-) > > diff --git a/gweb/gweb.h b/gweb/gweb.h > index 1ab2a9f..61e488c 100644 > --- a/gweb/gweb.h > +++ b/gweb/gweb.h > @@ -38,10 +38,19 @@ typedef enum { > G_WEB_METHOD_GET, > } GWebMethod; > > +typedef enum { > + G_WEB_DATA_HEADER, > + G_WEB_DATA_BODY, > +} GWebDataType; > + > typedef void (*GWebResultFunc)(uint16_t status, gpointer user_data); > > typedef void (*GWebDebugFunc)(const char *str, gpointer user_data); > > +typedef gboolean (*GWebReceivedFunc)(const guint8 *str, int len, > + GWebDataType data_type, > + gpointer user_data); > +
so I am thinking this becomes a little bit too complicated and we are overloading this. Here is my idea on how to make this simpler. struct _GWebResult; typedef struct _GWebResult GWebResult; typedef gboolean (*GWebResultFunc) (guint16 status, GWebResult *result, gpointer user_data); guint g_web_request(GWeb, GWebMethod method, const char *url, GWebResultFunc, gpointer user_data); So essentially we are creating a new GWebResult object that represents our transaction/request. Then we can have these functions to be used inside the result callback. gboolean g_web_result_get_header(GWebResult *result, const char *header, const char **value); gboolean g_web_result_get_fragment(GWebResult *result, const guint8 **fragment, gsize *length); The get_header function will be always valid since we keep all headers in the GWebResult object for the time of the transaction. And the get_fragment returns the current buffer value. And of course the result function has a return value. If returning FALSE then we just stop the transaction right away. So after we received the headers we can call this once with empty fragment buffer and when we have all details we just stop it. If we return TRUE then the transaction continues until we have received the full body. Also the status will indicate if we are done or not. A status of 100 indicates that there is more to come. And every other status is either 200 for success or an error code. Of course the return value only matters if the status is 100 since otherwise the transaction is over anyway. What do you think? Regards Marcel _______________________________________________ connman mailing list connman@connman.net http://lists.connman.net/listinfo/connman