*
* Web service library with GLib integration
*
- * Copyright (C) 2009-2010 Intel Corporation. All rights reserved.
+ * Copyright (C) 2009-2012 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
GWebResult result;
GWebResultFunc result_func;
+ GWebRouteFunc route_func;
GWebInputFunc input_func;
int fd;
gsize length;
g_free(web);
}
+gboolean g_web_supports_tls(void)
+{
+ return g_io_channel_supports_tls();
+}
+
void g_web_set_debug(GWeb *web, GWebDebugFunc func, gpointer user_data)
{
if (web == NULL)
result == TRUE ? "continue" : "stop");
}
+static inline void call_route_func(struct web_session *session)
+{
+ if (session->route_func != NULL)
+ session->route_func(session->address, session->addr->ai_family,
+ session->web->index, session->user_data);
+}
+
static gboolean process_send_buffer(struct web_session *session)
{
GString *buf;
if (session->web->index > 0) {
if (bind_socket(sk, session->web->index,
session->addr->ai_family) < 0) {
+ debug(session->web, "bind() %s", strerror(errno));
close(sk);
return -EIO;
}
}
if (session->transport_channel == NULL) {
+ debug(session->web, "channel missing");
close(sk);
return -ENOMEM;
}
if (connect(sk, session->addr->ai_addr,
session->addr->ai_addrlen) < 0) {
if (errno != EINPROGRESS) {
+ debug(session->web, "connect() %s", strerror(errno));
close(sk);
return -EIO;
}
}
session->address = g_strdup(results[0]);
+ call_route_func(session);
if (create_transport(session) < 0) {
call_result_func(session, 409);
static guint do_request(GWeb *web, const char *url,
const char *type, GWebInputFunc input,
int fd, gsize length, GWebResultFunc func,
- gpointer user_data)
+ GWebRouteFunc route, gpointer user_data)
{
struct web_session *session;
session->web = web;
session->result_func = func;
+ session->route_func = route;
session->input_func = input;
session->fd = fd;
session->length = length;
return web->next_query_id++;
}
-guint g_web_request_get(GWeb *web, const char *url,
- GWebResultFunc func, gpointer user_data)
+guint g_web_request_get(GWeb *web, const char *url, GWebResultFunc func,
+ GWebRouteFunc route, gpointer user_data)
{
- return do_request(web, url, NULL, NULL, -1, 0, func, user_data);
+ return do_request(web, url, NULL, NULL, -1, 0, func, route, user_data);
}
guint g_web_request_post(GWeb *web, const char *url,
const char *type, GWebInputFunc input,
GWebResultFunc func, gpointer user_data)
{
- return do_request(web, url, type, input, -1, 0, func, user_data);
+ return do_request(web, url, type, input, -1, 0, func, NULL, user_data);
}
guint g_web_request_post_file(GWeb *web, const char *url,
if (fd < 0)
return 0;
- ret = do_request(web, url, type, NULL, fd, st.st_size, func, user_data);
+ ret = do_request(web, url, type, NULL, fd, st.st_size, func, NULL,
+ user_data);
if (ret == 0)
close(fd);