diff options
author | Zhang zhengguang <zhengguang.zhang@intel.com> | 2014-07-17 10:37:39 +0800 |
---|---|---|
committer | Zhang zhengguang <zhengguang.zhang@intel.com> | 2014-07-17 10:37:39 +0800 |
commit | 1b9d0a62f59bb48c8deb2f0b98d9acdffdd9abe7 (patch) | |
tree | 6e991827d28537f7f40f20786c2354fd04a9fdad /gweb | |
parent | fbe905ab58ecc31fe64c410c5f580cadc30e7f04 (diff) | |
download | connman-1b9d0a62f59bb48c8deb2f0b98d9acdffdd9abe7.tar.gz connman-1b9d0a62f59bb48c8deb2f0b98d9acdffdd9abe7.tar.bz2 connman-1b9d0a62f59bb48c8deb2f0b98d9acdffdd9abe7.zip |
Imported Upstream version 1.24upstream/1.24
Diffstat (limited to 'gweb')
-rw-r--r-- | gweb/giognutls.c | 36 | ||||
-rw-r--r-- | gweb/giognutls.h | 4 | ||||
-rw-r--r-- | gweb/gionotls.c | 4 | ||||
-rw-r--r-- | gweb/gresolv.c | 109 | ||||
-rw-r--r-- | gweb/gresolv.h | 7 | ||||
-rw-r--r-- | gweb/gweb.c | 456 | ||||
-rw-r--r-- | gweb/gweb.h | 33 |
7 files changed, 336 insertions, 313 deletions
diff --git a/gweb/giognutls.c b/gweb/giognutls.c index 47ff8c4f..09dc9e72 100644 --- a/gweb/giognutls.c +++ b/gweb/giognutls.c @@ -43,8 +43,8 @@ struct _GIOGnuTLSChannel { gint fd; gnutls_certificate_credentials_t cred; gnutls_session_t session; - gboolean established; - gboolean again; + bool established; + bool again; }; struct _GIOGnuTLSWatch { @@ -58,7 +58,7 @@ static volatile int global_init_done = 0; static inline void g_io_gnutls_global_init(void) { - if (__sync_bool_compare_and_swap(&global_init_done, 0, 1) == TRUE) + if (__sync_bool_compare_and_swap(&global_init_done, 0, 1)) gnutls_global_init(); } @@ -69,7 +69,7 @@ static GIOStatus check_handshake(GIOChannel *channel, GError **err) DBG("channel %p", channel); - if (gnutls_channel->established == TRUE) + if (gnutls_channel->established) return G_IO_STATUS_NORMAL; again: @@ -78,7 +78,7 @@ again: if (result == GNUTLS_E_INTERRUPTED || result == GNUTLS_E_AGAIN) { GIOFlags flags = g_io_channel_get_flags(channel); - if (gnutls_channel->again == TRUE) + if (gnutls_channel->again) return G_IO_STATUS_AGAIN; if (flags & G_IO_FLAG_NONBLOCK) @@ -93,7 +93,7 @@ again: return G_IO_STATUS_ERROR; } - gnutls_channel->established = TRUE; + gnutls_channel->established = true; DBG("handshake done"); @@ -121,14 +121,14 @@ again: DBG("result %zd", result); if (result == GNUTLS_E_REHANDSHAKE) { - gnutls_channel->established = FALSE; + gnutls_channel->established = false; goto again; } if (result == GNUTLS_E_INTERRUPTED || result == GNUTLS_E_AGAIN) { GIOFlags flags = g_io_channel_get_flags(channel); - if (gnutls_channel->again == TRUE) + if (gnutls_channel->again) return G_IO_STATUS_AGAIN; if (flags & G_IO_FLAG_NONBLOCK) @@ -172,14 +172,14 @@ again: DBG("result %zd", result); if (result == GNUTLS_E_REHANDSHAKE) { - gnutls_channel->established = FALSE; + gnutls_channel->established = false; goto again; } if (result == GNUTLS_E_INTERRUPTED || result == GNUTLS_E_AGAIN) { GIOFlags flags = g_io_channel_get_flags(channel); - if (gnutls_channel->again == TRUE) + if (gnutls_channel->again) return G_IO_STATUS_AGAIN; if (flags & G_IO_FLAG_NONBLOCK) @@ -215,7 +215,7 @@ static GIOStatus g_io_gnutls_close(GIOChannel *channel, GError **err) DBG("channel %p", channel); - if (gnutls_channel->established == TRUE) + if (gnutls_channel->established) gnutls_bye(gnutls_channel->session, GNUTLS_SHUT_RDWR); if (close(gnutls_channel->fd) < 0) { @@ -309,7 +309,7 @@ static gboolean g_io_gnutls_dispatch(GSource *source, GSourceFunc callback, DBG("source %p condition %u", source, condition); - if (func == NULL) + if (!func) return FALSE; return func(watch->channel, condition & watch->condition, user_data); @@ -379,9 +379,9 @@ static ssize_t g_io_gnutls_push_func(gnutls_transport_ptr_t transport_data, result = write(gnutls_channel->fd, buf, count); if (result < 0 && errno == EAGAIN) - gnutls_channel->again = TRUE; + gnutls_channel->again = true; else - gnutls_channel->again = FALSE; + gnutls_channel->again = false; DBG("result %zd", result); @@ -399,18 +399,18 @@ static ssize_t g_io_gnutls_pull_func(gnutls_transport_ptr_t transport_data, result = read(gnutls_channel->fd, buf, count); if (result < 0 && errno == EAGAIN) - gnutls_channel->again = TRUE; + gnutls_channel->again = true; else - gnutls_channel->again = FALSE; + gnutls_channel->again = false; DBG("result %zd", result); return result; } -gboolean g_io_channel_supports_tls(void) +bool g_io_channel_supports_tls(void) { - return TRUE; + return true; } GIOChannel *g_io_channel_gnutls_new(int fd) diff --git a/gweb/giognutls.h b/gweb/giognutls.h index f16c75dc..ea0df8ff 100644 --- a/gweb/giognutls.h +++ b/gweb/giognutls.h @@ -19,8 +19,10 @@ * */ +#include <stdbool.h> + #include <glib.h> -gboolean g_io_channel_supports_tls(void); +bool g_io_channel_supports_tls(void); GIOChannel *g_io_channel_gnutls_new(int fd); diff --git a/gweb/gionotls.c b/gweb/gionotls.c index 88db3e44..29988954 100644 --- a/gweb/gionotls.c +++ b/gweb/gionotls.c @@ -25,9 +25,9 @@ #include "giognutls.h" -gboolean g_io_channel_supports_tls(void) +bool g_io_channel_supports_tls(void) { - return FALSE; + return false; } GIOChannel *g_io_channel_gnutls_new(int fd) diff --git a/gweb/gresolv.c b/gweb/gresolv.c index 864d2adb..5cf7a9a6 100644 --- a/gweb/gresolv.c +++ b/gweb/gresolv.c @@ -2,7 +2,7 @@ * * Resolver library with GLib integration * - * Copyright (C) 2009-2012 Intel Corporation. All rights reserved. + * Copyright (C) 2009-2013 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 @@ -44,7 +44,7 @@ struct sort_result { int dst_scope; int src_label; int dst_label; - gboolean reachable; + bool reachable; union { struct sockaddr sa; struct sockaddr_in sin; @@ -126,7 +126,7 @@ static void _debug(GResolv *resolv, const char *file, const char *caller, va_list ap; int len; - if (resolv->debug_func == NULL) + if (!resolv->debug_func) return; va_start(ap, format); @@ -155,13 +155,13 @@ static void destroy_lookup(struct resolv_lookup *lookup) debug(lookup->resolv, "lookup %p id %d ipv4 %p ipv6 %p", lookup, lookup->id, lookup->ipv4_query, lookup->ipv6_query); - if (lookup->ipv4_query != NULL) { + if (lookup->ipv4_query) { g_queue_remove(lookup->resolv->query_queue, lookup->ipv4_query); destroy_query(lookup->ipv4_query); } - if (lookup->ipv6_query != NULL) { + if (lookup->ipv6_query) { g_queue_remove(lookup->resolv->query_queue, lookup->ipv6_query); destroy_query(lookup->ipv6_query); @@ -191,7 +191,7 @@ static void find_srcaddr(struct sort_result *res) return; } - res->reachable = TRUE; + res->reachable = true; close(fd); } @@ -280,21 +280,21 @@ static const struct gai_table gai_precedences[] = { static unsigned char v4mapped[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00 }; -static gboolean mask_compare(const unsigned char *one, +static bool mask_compare(const unsigned char *one, const unsigned char *two, int mask) { if (mask > 8) { if (memcmp(one, two, mask / 8)) - return FALSE; + return false; one += mask / 8; two += mask / 8; mask %= 8; } if (mask && ((*one ^ *two) >> (8 - mask))) - return FALSE; + return false; - return TRUE; + return true; } static int match_gai_table(struct sockaddr *sa, const struct gai_table *tbl) @@ -485,14 +485,14 @@ static void sort_and_return_results(struct resolv_lookup *lookup) for (i = 0; i < lookup->nr_results; i++) { if (lookup->results[i].dst.sa.sa_family == AF_INET) { - if (inet_ntop(AF_INET, + if (!inet_ntop(AF_INET, &lookup->results[i].dst.sin.sin_addr, - buf, sizeof(buf) - 1) == NULL) + buf, sizeof(buf) - 1)) continue; } else if (lookup->results[i].dst.sa.sa_family == AF_INET6) { - if (inet_ntop(AF_INET6, + if (!inet_ntop(AF_INET6, &lookup->results[i].dst.sin6.sin6_addr, - buf, sizeof(buf) - 1) == NULL) + buf, sizeof(buf) - 1)) continue; } else continue; @@ -542,7 +542,7 @@ static gboolean query_timeout(gpointer user_data) g_queue_remove(resolv->query_queue, query); destroy_query(query); - if (lookup->ipv4_query == NULL && lookup->ipv6_query == NULL) + if (!lookup->ipv4_query && !lookup->ipv6_query) sort_and_return_results(lookup); return FALSE; @@ -550,13 +550,13 @@ static gboolean query_timeout(gpointer user_data) static void free_nameserver(struct resolv_nameserver *nameserver) { - if (nameserver == NULL) + if (!nameserver) return; if (nameserver->udp_watch > 0) g_source_remove(nameserver->udp_watch); - if (nameserver->udp_channel != NULL) { + if (nameserver->udp_channel) { g_io_channel_shutdown(nameserver->udp_channel, TRUE, NULL); g_io_channel_unref(nameserver->udp_channel); } @@ -582,7 +582,7 @@ static int send_query(GResolv *resolv, const unsigned char *buf, int len) GList *list; int nr_ns; - if (resolv->nameserver_list == NULL) + if (!resolv->nameserver_list) return -ENOENT; for (list = g_list_first(resolv->nameserver_list), nr_ns = 0; @@ -590,7 +590,7 @@ static int send_query(GResolv *resolv, const unsigned char *buf, int len) struct resolv_nameserver *nameserver = list->data; int sk, sent; - if (nameserver->udp_channel == NULL) + if (!nameserver->udp_channel) continue; sk = g_io_channel_unix_get_fd(nameserver->udp_channel); @@ -637,7 +637,7 @@ static void add_result(struct resolv_lookup *lookup, int family, int n = lookup->nr_results++; lookup->results = g_try_realloc(lookup->results, sizeof(struct sort_result) * (n + 1)); - if (lookup->results == NULL) + if (!lookup->results) return; memset(&lookup->results[n], 0, sizeof(struct sort_result)); @@ -665,7 +665,8 @@ static void parse_response(struct resolv_nameserver *nameserver, debug(resolv, "response from %s", nameserver->address); - ns_initparse(buf, len, &msg); + if (ns_initparse(buf, len, &msg) < 0) + return; list = g_queue_find_custom(resolv->query_queue, GUINT_TO_POINTER(ns_msg_id(msg)), compare_query_msgid); @@ -713,7 +714,8 @@ static void parse_response(struct resolv_nameserver *nameserver, lookup->ipv4_status = status; for (i = 0; i < count; i++) { - ns_parserr(&msg, ns_s_an, i, &rr); + if (ns_parserr(&msg, ns_s_an, i, &rr) < 0) + continue; if (ns_rr_class(rr) != ns_c_in) continue; @@ -741,7 +743,7 @@ static void parse_response(struct resolv_nameserver *nameserver, g_queue_remove(resolv->query_queue, query); destroy_query(query); - if (lookup->ipv4_query == NULL && lookup->ipv6_query == NULL) + if (!lookup->ipv4_query && !lookup->ipv6_query) sort_and_return_results(lookup); } @@ -807,8 +809,7 @@ static int connect_udp_channel(struct resolv_nameserver *nameserver) char interface[IF_NAMESIZE]; memset(interface, 0, IF_NAMESIZE); - if (if_indextoname(nameserver->resolv->index, - interface) != NULL) { + if (if_indextoname(nameserver->resolv->index, interface)) { if (setsockopt(sk, SOL_SOCKET, SO_BINDTODEVICE, interface, IF_NAMESIZE) < 0) { close(sk); @@ -827,7 +828,7 @@ static int connect_udp_channel(struct resolv_nameserver *nameserver) freeaddrinfo(rp); nameserver->udp_channel = g_io_channel_unix_new(sk); - if (nameserver->udp_channel == NULL) { + if (!nameserver->udp_channel) { close(sk); return -ENOMEM; } @@ -849,7 +850,7 @@ GResolv *g_resolv_new(int index) return NULL; resolv = g_try_new0(GResolv, 1); - if (resolv == NULL) + if (!resolv) return NULL; resolv->ref_count = 1; @@ -859,13 +860,13 @@ GResolv *g_resolv_new(int index) resolv->next_lookup_id = 1; resolv->query_queue = g_queue_new(); - if (resolv->query_queue == NULL) { + if (!resolv->query_queue) { g_free(resolv); return NULL; } resolv->lookup_queue = g_queue_new(); - if (resolv->lookup_queue == NULL) { + if (!resolv->lookup_queue) { g_queue_free(resolv->query_queue); g_free(resolv); return NULL; @@ -881,7 +882,7 @@ GResolv *g_resolv_new(int index) GResolv *g_resolv_ref(GResolv *resolv) { - if (resolv == NULL) + if (!resolv) return NULL; __sync_fetch_and_add(&resolv->ref_count, 1); @@ -894,7 +895,7 @@ void g_resolv_unref(GResolv *resolv) struct resolv_query *query; struct resolv_lookup *lookup; - if (resolv == NULL) + if (!resolv) return; if (__sync_fetch_and_sub(&resolv->ref_count, 1) != 1) @@ -923,24 +924,24 @@ void g_resolv_unref(GResolv *resolv) void g_resolv_set_debug(GResolv *resolv, GResolvDebugFunc func, gpointer user_data) { - if (resolv == NULL) + if (!resolv) return; resolv->debug_func = func; resolv->debug_data = user_data; } -gboolean g_resolv_add_nameserver(GResolv *resolv, const char *address, +bool g_resolv_add_nameserver(GResolv *resolv, const char *address, uint16_t port, unsigned long flags) { struct resolv_nameserver *nameserver; - if (resolv == NULL) - return FALSE; + if (!resolv) + return false; nameserver = g_try_new0(struct resolv_nameserver, 1); - if (nameserver == NULL) - return FALSE; + if (!nameserver) + return false; nameserver->address = g_strdup(address); nameserver->port = port; @@ -949,7 +950,7 @@ gboolean g_resolv_add_nameserver(GResolv *resolv, const char *address, if (connect_udp_channel(nameserver) < 0) { free_nameserver(nameserver); - return FALSE; + return false; } resolv->nameserver_list = g_list_append(resolv->nameserver_list, @@ -957,12 +958,12 @@ gboolean g_resolv_add_nameserver(GResolv *resolv, const char *address, debug(resolv, "setting nameserver %s", address); - return TRUE; + return true; } void g_resolv_flush_nameservers(GResolv *resolv) { - if (resolv == NULL) + if (!resolv) return; flush_nameservers(resolv); @@ -974,7 +975,7 @@ static gint add_query(struct resolv_lookup *lookup, const char *hostname, int ty unsigned char buf[4096]; int len; - if (query == NULL) + if (!query) return -ENOMEM; len = res_mkquery(ns_o_query, hostname, ns_c_in, type, @@ -1013,12 +1014,12 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname, { struct resolv_lookup *lookup; - if (resolv == NULL) + if (!resolv) return 0; debug(resolv, "hostname %s", hostname); - if (resolv->nameserver_list == NULL) { + if (!resolv->nameserver_list) { int i; for (i = 0; i < resolv->res.nscount; i++) { @@ -1039,12 +1040,12 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname, g_resolv_add_nameserver(resolv, buf, 53, 0); } - if (resolv->nameserver_list == NULL) + if (!resolv->nameserver_list) g_resolv_add_nameserver(resolv, "127.0.0.1", 53, 0); } lookup = g_try_new0(struct resolv_lookup, 1); - if (lookup == NULL) + if (!lookup) return 0; lookup->resolv = resolv; @@ -1079,7 +1080,7 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname, return lookup->id; } -gboolean g_resolv_cancel_lookup(GResolv *resolv, guint id) +bool g_resolv_cancel_lookup(GResolv *resolv, guint id) { struct resolv_lookup *lookup; GList *list; @@ -1089,8 +1090,8 @@ gboolean g_resolv_cancel_lookup(GResolv *resolv, guint id) list = g_queue_find_custom(resolv->lookup_queue, GUINT_TO_POINTER(id), compare_lookup_id); - if (list == NULL) - return FALSE; + if (!list) + return false; lookup = list->data; @@ -1099,18 +1100,18 @@ gboolean g_resolv_cancel_lookup(GResolv *resolv, guint id) g_queue_remove(resolv->lookup_queue, lookup); destroy_lookup(lookup); - return TRUE; + return true; } -gboolean g_resolv_set_address_family(GResolv *resolv, int family) +bool g_resolv_set_address_family(GResolv *resolv, int family) { - if (resolv == NULL) - return FALSE; + if (!resolv) + return false; if (family != AF_UNSPEC && family != AF_INET && family != AF_INET6) - return FALSE; + return false; resolv->result_family = family; - return TRUE; + return true; } diff --git a/gweb/gresolv.h b/gweb/gresolv.h index 3402df96..fac14f54 100644 --- a/gweb/gresolv.h +++ b/gweb/gresolv.h @@ -22,6 +22,7 @@ #ifndef __G_RESOLV_H #define __G_RESOLV_H +#include <stdbool.h> #include <stdint.h> #include <glib.h> @@ -58,16 +59,16 @@ void g_resolv_unref(GResolv *resolv); void g_resolv_set_debug(GResolv *resolv, GResolvDebugFunc func, gpointer user_data); -gboolean g_resolv_add_nameserver(GResolv *resolv, const char *address, +bool g_resolv_add_nameserver(GResolv *resolv, const char *address, uint16_t port, unsigned long flags); void g_resolv_flush_nameservers(GResolv *resolv); guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname, GResolvResultFunc func, gpointer user_data); -gboolean g_resolv_cancel_lookup(GResolv *resolv, guint id); +bool g_resolv_cancel_lookup(GResolv *resolv, guint id); -gboolean g_resolv_set_address_family(GResolv *resolv, int family); +bool g_resolv_set_address_family(GResolv *resolv, int family); #ifdef __cplusplus } diff --git a/gweb/gweb.c b/gweb/gweb.c index d35179ac..f6828cf2 100644 --- a/gweb/gweb.c +++ b/gweb/gweb.c @@ -2,7 +2,7 @@ * * Web service library with GLib integration * - * Copyright (C) 2009-2012 Intel Corporation. All rights reserved. + * Copyright (C) 2009-2013 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 @@ -58,7 +58,7 @@ struct _GWebResult { guint16 status; const guint8 *buffer; gsize length; - gboolean use_chunk; + bool use_chunk; gchar *last_key; GHashTable *headers; }; @@ -79,16 +79,17 @@ struct web_session { guint send_watch; guint resolv_action; + guint address_action; char *request; guint8 *receive_buffer; gsize receive_space; GString *send_buffer; GString *current_header; - gboolean header_done; - gboolean body_done; - gboolean more_data; - gboolean request_started; + bool header_done; + bool body_done; + bool more_data; + bool request_started; enum chunk_state chunck_state; gsize chunk_size; @@ -122,7 +123,7 @@ struct _GWeb { char *user_agent; char *user_agent_profile; char *http_version; - gboolean close_connection; + bool close_connection; GWebDebugFunc debug_func; gpointer debug_data; @@ -138,7 +139,7 @@ static void _debug(GWeb *web, const char *file, const char *caller, va_list ap; int len; - if (web->debug_func == NULL) + if (!web->debug_func) return; va_start(ap, format); @@ -156,12 +157,16 @@ static void free_session(struct web_session *session) { GWeb *web; - if (session == NULL) + if (!session) return; g_free(session->request); web = session->web; + + if (session->address_action > 0) + g_source_remove(session->address_action); + if (session->resolv_action > 0) g_resolv_cancel_lookup(web->resolv, session->resolv_action); @@ -171,18 +176,18 @@ static void free_session(struct web_session *session) if (session->send_watch > 0) g_source_remove(session->send_watch); - if (session->transport_channel != NULL) + if (session->transport_channel) g_io_channel_unref(session->transport_channel); g_free(session->result.last_key); - if (session->result.headers != NULL) + if (session->result.headers) g_hash_table_destroy(session->result.headers); - if (session->send_buffer != NULL) + if (session->send_buffer) g_string_free(session->send_buffer, TRUE); - if (session->current_header != NULL) + if (session->current_header) g_string_free(session->current_header, TRUE); g_free(session->receive_buffer); @@ -191,7 +196,7 @@ static void free_session(struct web_session *session) g_free(session->host); g_free(session->address); - if (session->addr != NULL) + if (session->addr) freeaddrinfo(session->addr); g_free(session); @@ -217,7 +222,7 @@ GWeb *g_web_new(int index) return NULL; web = g_try_new0(GWeb, 1); - if (web == NULL) + if (!web) return NULL; web->ref_count = 1; @@ -230,21 +235,21 @@ GWeb *g_web_new(int index) web->session_list = NULL; web->resolv = g_resolv_new(index); - if (web->resolv == NULL) { + if (!web->resolv) { g_free(web); return NULL; } web->accept_option = g_strdup("*/*"); web->user_agent = g_strdup_printf("GWeb/%s", VERSION); - web->close_connection = FALSE; + web->close_connection = false; return web; } GWeb *g_web_ref(GWeb *web) { - if (web == NULL) + if (!web) return NULL; __sync_fetch_and_add(&web->ref_count, 1); @@ -254,7 +259,7 @@ GWeb *g_web_ref(GWeb *web) void g_web_unref(GWeb *web) { - if (web == NULL) + if (!web) return; if (__sync_fetch_and_sub(&web->ref_count, 1) != 1) @@ -274,14 +279,14 @@ void g_web_unref(GWeb *web) g_free(web); } -gboolean g_web_supports_tls(void) +bool 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) + if (!web) return; web->debug_func = func; @@ -290,14 +295,14 @@ void g_web_set_debug(GWeb *web, GWebDebugFunc func, gpointer user_data) g_resolv_set_debug(web->resolv, func, user_data); } -gboolean g_web_set_proxy(GWeb *web, const char *proxy) +bool g_web_set_proxy(GWeb *web, const char *proxy) { - if (web == NULL) - return FALSE; + if (!web) + return false; g_free(web->proxy); - if (proxy == NULL) { + if (!proxy) { web->proxy = NULL; debug(web, "clearing proxy"); } else { @@ -305,39 +310,39 @@ gboolean g_web_set_proxy(GWeb *web, const char *proxy) debug(web, "setting proxy %s", web->proxy); } - return TRUE; + return true; } -gboolean g_web_set_address_family(GWeb *web, int family) +bool g_web_set_address_family(GWeb *web, int family) { - if (web == NULL) - return FALSE; + if (!web) + return false; if (family != AF_UNSPEC && family != AF_INET && family != AF_INET6) - return FALSE; + return false; web->family = family; g_resolv_set_address_family(web->resolv, family); - return TRUE; + return true; } -gboolean g_web_add_nameserver(GWeb *web, const char *address) +bool g_web_add_nameserver(GWeb *web, const char *address) { - if (web == NULL) - return FALSE; + if (!web) + return false; g_resolv_add_nameserver(web->resolv, address, 53, 0); - return TRUE; + return true; } -static gboolean set_accept_option(GWeb *web, const char *format, va_list args) +static bool set_accept_option(GWeb *web, const char *format, va_list args) { g_free(web->accept_option); - if (format == NULL) { + if (!format) { web->accept_option = NULL; debug(web, "clearing accept option"); } else { @@ -345,16 +350,16 @@ static gboolean set_accept_option(GWeb *web, const char *format, va_list args) debug(web, "setting accept %s", web->accept_option); } - return TRUE; + return true; } -gboolean g_web_set_accept(GWeb *web, const char *format, ...) +bool g_web_set_accept(GWeb *web, const char *format, ...) { va_list args; - gboolean result; + bool result; - if (web == NULL) - return FALSE; + if (!web) + return false; va_start(args, format); result = set_accept_option(web, format, args); @@ -363,11 +368,11 @@ gboolean g_web_set_accept(GWeb *web, const char *format, ...) return result; } -static gboolean set_user_agent(GWeb *web, const char *format, va_list args) +static bool set_user_agent(GWeb *web, const char *format, va_list args) { g_free(web->user_agent); - if (format == NULL) { + if (!format) { web->user_agent = NULL; debug(web, "clearing user agent"); } else { @@ -375,16 +380,16 @@ static gboolean set_user_agent(GWeb *web, const char *format, va_list args) debug(web, "setting user agent %s", web->user_agent); } - return TRUE; + return true; } -gboolean g_web_set_user_agent(GWeb *web, const char *format, ...) +bool g_web_set_user_agent(GWeb *web, const char *format, ...) { va_list args; - gboolean result; + bool result; - if (web == NULL) - return FALSE; + if (!web) + return false; va_start(args, format); result = set_user_agent(web, format, args); @@ -393,27 +398,27 @@ gboolean g_web_set_user_agent(GWeb *web, const char *format, ...) return result; } -gboolean g_web_set_ua_profile(GWeb *web, const char *profile) +bool g_web_set_ua_profile(GWeb *web, const char *profile) { - if (web == NULL) - return FALSE; + if (!web) + return false; g_free(web->user_agent_profile); web->user_agent_profile = g_strdup(profile); debug(web, "setting user agent profile %s", web->user_agent); - return TRUE; + return true; } -gboolean g_web_set_http_version(GWeb *web, const char *version) +bool g_web_set_http_version(GWeb *web, const char *version) { - if (web == NULL) - return FALSE; + if (!web) + return false; g_free(web->http_version); - if (version == NULL) { + if (!version) { web->http_version = NULL; debug(web, "clearing HTTP version"); } else { @@ -421,21 +426,21 @@ gboolean g_web_set_http_version(GWeb *web, const char *version) debug(web, "setting HTTP version %s", web->http_version); } - return TRUE; + return true; } -void g_web_set_close_connection(GWeb *web, gboolean enabled) +void g_web_set_close_connection(GWeb *web, bool enabled) { - if (web == NULL) + if (!web) return; web->close_connection = enabled; } -gboolean g_web_get_close_connection(GWeb *web) +bool g_web_get_close_connection(GWeb *web) { - if (web == NULL) - return FALSE; + if (!web) + return false; return web->close_connection; } @@ -443,7 +448,7 @@ gboolean g_web_get_close_connection(GWeb *web) static inline void call_result_func(struct web_session *session, guint16 status) { - if (session->result_func == NULL) + if (!session->result_func) return; if (status != 0) @@ -455,30 +460,30 @@ static inline void call_result_func(struct web_session *session, guint16 status) static inline void call_route_func(struct web_session *session) { - if (session->route_func != NULL) + if (session->route_func) session->route_func(session->address, session->addr->ai_family, session->web->index, session->user_data); } -static gboolean process_send_buffer(struct web_session *session) +static bool process_send_buffer(struct web_session *session) { GString *buf; gsize count, bytes_written; GIOStatus status; - if (session == NULL) - return FALSE; + if (!session) + return false; buf = session->send_buffer; count = buf->len; if (count == 0) { - if (session->request_started == TRUE && - session->more_data == FALSE && + if (session->request_started && + !session->more_data && session->fd == -1) - session->body_done = TRUE; + session->body_done = true; - return FALSE; + return false; } status = g_io_channel_write_chars(session->transport_channel, @@ -488,28 +493,28 @@ static gboolean process_send_buffer(struct web_session *session) status, count, bytes_written); if (status != G_IO_STATUS_NORMAL && status != G_IO_STATUS_AGAIN) - return FALSE; + return false; g_string_erase(buf, 0, bytes_written); - return TRUE; + return true; } -static gboolean process_send_file(struct web_session *session) +static bool process_send_file(struct web_session *session) { int sk; off_t offset; ssize_t bytes_sent; if (session->fd == -1) - return FALSE; + return false; - if (session->request_started == FALSE || session->more_data == TRUE) - return FALSE; + if (!session->request_started || session->more_data) + return false; sk = g_io_channel_unix_get_fd(session->transport_channel); if (sk < 0) - return FALSE; + return false; offset = session->offset; @@ -519,17 +524,17 @@ static gboolean process_send_file(struct web_session *session) errno, session->length, bytes_sent); if (bytes_sent < 0 && errno != EAGAIN) - return FALSE; + return false; session->offset = offset; session->length -= bytes_sent; if (session->length == 0) { - session->body_done = TRUE; - return FALSE; + session->body_done = true; + return false; } - return TRUE; + return true; } static void process_next_chunk(struct web_session *session) @@ -538,8 +543,8 @@ static void process_next_chunk(struct web_session *session) const guint8 *body; gsize length; - if (session->input_func == NULL) { - session->more_data = FALSE; + if (!session->input_func) { + session->more_data = false; return; } @@ -552,7 +557,7 @@ static void process_next_chunk(struct web_session *session) g_string_append(buf, "\r\n"); } - if (session->more_data == FALSE) + if (!session->more_data) g_string_append(buf, "0\r\n\r\n"); } @@ -568,12 +573,12 @@ static void start_request(struct web_session *session) g_string_truncate(buf, 0); - if (session->web->http_version == NULL) + if (!session->web->http_version) version = "1.1"; else version = session->web->http_version; - if (session->content_type == NULL) + if (!session->content_type) g_string_append_printf(buf, "GET %s HTTP/%s\r\n", session->request, version); else @@ -582,42 +587,42 @@ static void start_request(struct web_session *session) g_string_append_printf(buf, "Host: %s\r\n", session->host); - if (session->web->user_agent != NULL) + if (session->web->user_agent) g_string_append_printf(buf, "User-Agent: %s\r\n", session->web->user_agent); - if (session->web->user_agent_profile != NULL) { + if (session->web->user_agent_profile) { g_string_append_printf(buf, "x-wap-profile: %s\r\n", session->web->user_agent_profile); } - if (session->web->accept_option != NULL) + if (session->web->accept_option) g_string_append_printf(buf, "Accept: %s\r\n", session->web->accept_option); - if (session->content_type != NULL) { + if (session->content_type) { g_string_append_printf(buf, "Content-Type: %s\r\n", session->content_type); - if (session->input_func == NULL) { - session->more_data = FALSE; + if (!session->input_func) { + session->more_data = false; length = session->length; } else session->more_data = session->input_func(&body, &length, session->user_data); - if (session->more_data == FALSE) + if (!session->more_data) g_string_append_printf(buf, "Content-Length: %zu\r\n", length); else g_string_append(buf, "Transfer-Encoding: chunked\r\n"); } - if (session->web->close_connection == TRUE) + if (session->web->close_connection) g_string_append(buf, "Connection: close\r\n"); g_string_append(buf, "\r\n"); - if (session->content_type != NULL && length > 0) { - if (session->more_data == TRUE) { + if (session->content_type && length > 0) { + if (session->more_data) { g_string_append_printf(buf, "%zx\r\n", length); g_string_append_len(buf, (char *) body, length); g_string_append(buf, "\r\n"); @@ -636,21 +641,21 @@ static gboolean send_data(GIOChannel *channel, GIOCondition cond, return FALSE; } - if (process_send_buffer(session) == TRUE) + if (process_send_buffer(session)) return TRUE; - if (process_send_file(session) == TRUE) + if (process_send_file(session)) return TRUE; - if (session->request_started == FALSE) { - session->request_started = TRUE; + if (!session->request_started) { + session->request_started = true; start_request(session); - } else if (session->more_data == TRUE) + } else if (session->more_data) process_next_chunk(session); process_send_buffer(session); - if (session->body_done == TRUE) { + if (session->body_done) { session->send_watch = 0; return FALSE; } @@ -672,7 +677,7 @@ static int decode_chunked(struct web_session *session, switch (session->chunck_state) { case CHUNK_SIZE: pos = memchr(ptr, '\n', len); - if (pos == NULL) { + if (!pos) { g_string_append_len(session->current_header, (gchar *) ptr, len); return 0; @@ -760,7 +765,7 @@ static int handle_body(struct web_session *session, debug(session->web, "[body] length %zu", len); - if (session->result.use_chunk == FALSE) { + if (!session->result.use_chunk) { if (len > 0) { session->result.buffer = buf; session->result.length = len; @@ -803,7 +808,7 @@ static void handle_multi_line(struct web_session *session) value = g_hash_table_lookup(session->result.headers, session->result.last_key); - if (value != NULL) { + if (value) { g_string_insert(session->current_header, 0, value); str = session->current_header->str; @@ -825,7 +830,7 @@ static void add_header_field(struct web_session *session) str = session->current_header->str; pos = memchr(str, ':', session->current_header->len); - if (pos != NULL) { + if (pos) { *pos = '\0'; pos++; @@ -840,7 +845,7 @@ static void add_header_field(struct web_session *session) g_string_erase(session->current_header, 0, count); value = g_hash_table_lookup(session->result.headers, key); - if (value != NULL) { + if (value) { g_string_insert_c(session->current_header, 0, ' '); g_string_insert_c(session->current_header, 0, ';'); @@ -888,7 +893,7 @@ static gboolean received_data(GIOChannel *channel, GIOCondition cond, session->receive_buffer[bytes_read] = '\0'; - if (session->header_done == TRUE) { + if (session->header_done) { if (handle_body(session, session->receive_buffer, bytes_read) < 0) { session->transport_watch = 0; @@ -903,7 +908,7 @@ static gboolean received_data(GIOChannel *channel, GIOCondition cond, char *str; pos = memchr(ptr, '\n', bytes_read); - if (pos == NULL) { + if (!pos) { g_string_append_len(session->current_header, (gchar *) ptr, bytes_read); return TRUE; @@ -928,14 +933,14 @@ static gboolean received_data(GIOChannel *channel, GIOCondition cond, if (session->current_header->len == 0) { char *val; - session->header_done = TRUE; + session->header_done = true; val = g_hash_table_lookup(session->result.headers, "Transfer-Encoding"); - if (val != NULL) { + if (val) { val = g_strrstr(val, "chunked"); - if (val != NULL) { - session->result.use_chunk = TRUE; + if (val) { + session->result.use_chunk = true; session->chunck_state = CHUNK_SIZE; session->chunk_left = 0; @@ -981,11 +986,11 @@ static int bind_to_address(int sk, const char *interface, int family) if (getifaddrs(&ifaddr_list) < 0) return err; - for (ifaddr = ifaddr_list; ifaddr != NULL; ifaddr = ifaddr->ifa_next) { + for (ifaddr = ifaddr_list; ifaddr; ifaddr = ifaddr->ifa_next) { if (g_strcmp0(ifaddr->ifa_name, interface) != 0) continue; - if (ifaddr->ifa_addr == NULL || + if (!ifaddr->ifa_addr || ifaddr->ifa_addr->sa_family != family) continue; @@ -1013,7 +1018,7 @@ static inline int bind_socket(int sk, int index, int family) char interface[IF_NAMESIZE]; int err; - if (if_indextoname(index, interface) == NULL) + if (!if_indextoname(index, interface)) return -1; err = setsockopt(sk, SOL_SOCKET, SO_BINDTODEVICE, @@ -1051,7 +1056,7 @@ static int connect_session_transport(struct web_session *session) session->transport_channel = g_io_channel_unix_new(sk); } - if (session->transport_channel == NULL) { + if (!session->transport_channel) { debug(session->web, "channel missing"); close(sk); return -ENOMEM; @@ -1106,11 +1111,11 @@ static int parse_url(struct web_session *session, char *scheme, *host, *port, *path; scheme = g_strdup(url); - if (scheme == NULL) + if (!scheme) return -EINVAL; host = strstr(scheme, "://"); - if (host != NULL) { + if (host) { *host = '\0'; host += 3; @@ -1129,16 +1134,16 @@ static int parse_url(struct web_session *session, } path = strchr(host, '/'); - if (path != NULL) + if (path) *(path++) = '\0'; - if (proxy == NULL) + if (!proxy) session->request = g_strdup_printf("/%s", path ? path : ""); else session->request = g_strdup(url); port = strrchr(host, ':'); - if (port != NULL) { + if (port) { char *end; int tmp = strtol(port + 1, &end, 10); @@ -1147,7 +1152,7 @@ static int parse_url(struct web_session *session, session->port = tmp; } - if (proxy == NULL) + if (!proxy) session->host = g_strdup(host); else session->host = g_strdup_printf("%s:%u", host, tmp); @@ -1156,15 +1161,15 @@ static int parse_url(struct web_session *session, g_free(scheme); - if (proxy == NULL) + if (!proxy) return 0; scheme = g_strdup(proxy); - if (scheme == NULL) + if (!scheme) return -EINVAL; host = strstr(proxy, "://"); - if (host != NULL) { + if (host) { *host = '\0'; host += 3; @@ -1176,11 +1181,11 @@ static int parse_url(struct web_session *session, host = scheme; path = strchr(host, '/'); - if (path != NULL) + if (path) *(path++) = '\0'; port = strrchr(host, ':'); - if (port != NULL) { + if (port) { char *end; int tmp = strtol(port + 1, &end, 10); @@ -1197,39 +1202,31 @@ static int parse_url(struct web_session *session, return 0; } -static void resolv_result(GResolvResultStatus status, - char **results, gpointer user_data) +static void handle_resolved_address(struct web_session *session) { - struct web_session *session = user_data; struct addrinfo hints; char *port; int ret; - if (results == NULL || results[0] == NULL) { - call_result_func(session, 404); - return; - } - - debug(session->web, "address %s", results[0]); + debug(session->web, "address %s", session->address); memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_flags = AI_NUMERICHOST; hints.ai_family = session->web->family; - if (session->addr != NULL) { + if (session->addr) { freeaddrinfo(session->addr); session->addr = NULL; } port = g_strdup_printf("%u", session->port); - ret = getaddrinfo(results[0], port, &hints, &session->addr); + ret = getaddrinfo(session->address, port, &hints, &session->addr); g_free(port); - if (ret != 0 || session->addr == NULL) { + if (ret != 0 || !session->addr) { call_result_func(session, 400); return; } - session->address = g_strdup(results[0]); call_route_func(session); if (create_transport(session) < 0) { @@ -1238,20 +1235,63 @@ static void resolv_result(GResolvResultStatus status, } } +static gboolean already_resolved(gpointer data) +{ + struct web_session *session = data; + + session->address_action = 0; + handle_resolved_address(session); + + return FALSE; +} + +static void resolv_result(GResolvResultStatus status, + char **results, gpointer user_data) +{ + struct web_session *session = user_data; + + if (!results || !results[0]) { + call_result_func(session, 404); + return; + } + + g_free(session->address); + session->address = g_strdup(results[0]); + + handle_resolved_address(session); +} + +static bool is_ip_address(const char *host) +{ + struct addrinfo hints; + struct addrinfo *addr; + int result; + + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_flags = AI_NUMERICHOST; + addr = NULL; + + result = getaddrinfo(host, NULL, &hints, &addr); + freeaddrinfo(addr); + + return result == 0; +} + static guint do_request(GWeb *web, const char *url, const char *type, GWebInputFunc input, int fd, gsize length, GWebResultFunc func, GWebRouteFunc route, gpointer user_data) { struct web_session *session; + const gchar *host; - if (web == NULL || url == NULL) + if (!web || !url) return 0; debug(web, "request %s", url); session = g_try_new0(struct web_session, 1); - if (session == NULL) + if (!session) return 0; if (parse_url(session, url, web->proxy) < 0) { @@ -1259,13 +1299,13 @@ static guint do_request(GWeb *web, const char *url, return 0; } - debug(web, "address %s", session->address); + debug(web, "proxy host %s", session->address); debug(web, "port %u", session->port); debug(web, "host %s", session->host); debug(web, "flags %lu", session->flags); debug(web, "request %s", session->request); - if (type != NULL) { + if (type) { session->content_type = g_strdup(type); debug(web, "content-type %s", session->content_type); @@ -1282,14 +1322,14 @@ static guint do_request(GWeb *web, const char *url, session->user_data = user_data; session->receive_buffer = g_try_malloc(DEFAULT_BUFFER_SIZE); - if (session->receive_buffer == NULL) { + if (!session->receive_buffer) { free_session(session); return 0; } session->result.headers = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - if (session->result.headers == NULL) { + if (!session->result.headers) { free_session(session); return 0; } @@ -1297,43 +1337,21 @@ static guint do_request(GWeb *web, const char *url, session->receive_space = DEFAULT_BUFFER_SIZE; session->send_buffer = g_string_sized_new(0); session->current_header = g_string_sized_new(0); - session->header_done = FALSE; - session->body_done = FALSE; - - if (session->address == NULL && inet_aton(session->host, NULL) == 0) { - session->resolv_action = g_resolv_lookup_hostname(web->resolv, - session->host, resolv_result, session); - if (session->resolv_action == 0) { - free_session(session); - return 0; + session->header_done = false; + session->body_done = false; + + host = session->address ? session->address : session->host; + if (is_ip_address(host)) { + if (session->address != host) { + g_free(session->address); + session->address = g_strdup(host); } + session->address_action = g_timeout_add(0, already_resolved, + session); } else { - struct addrinfo hints; - char *port; - int ret; - - if (session->address == NULL) - session->address = g_strdup(session->host); - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_flags = AI_NUMERICHOST; - hints.ai_family = session->web->family; - - if (session->addr != NULL) { - freeaddrinfo(session->addr); - session->addr = NULL; - } - - port = g_strdup_printf("%u", session->port); - ret = getaddrinfo(session->address, port, &hints, - &session->addr); - g_free(port); - if (ret != 0 || session->addr == NULL) { - free_session(session); - return 0; - } - - if (create_transport(session) < 0) { + session->resolv_action = g_resolv_lookup_hostname(web->resolv, + host, resolv_result, session); + if (session->resolv_action == 0) { free_session(session); return 0; } @@ -1380,54 +1398,54 @@ guint g_web_request_post_file(GWeb *web, const char *url, return ret; } -gboolean g_web_cancel_request(GWeb *web, guint id) +bool g_web_cancel_request(GWeb *web, guint id) { - if (web == NULL) - return FALSE; + if (!web) + return false; - return TRUE; + return true; } guint16 g_web_result_get_status(GWebResult *result) { - if (result == NULL) + if (!result) return 0; return result->status; } -gboolean g_web_result_get_chunk(GWebResult *result, +bool g_web_result_get_chunk(GWebResult *result, const guint8 **chunk, gsize *length) { - if (result == NULL) - return FALSE; + if (!result) + return false; - if (chunk == NULL) - return FALSE; + if (!chunk) + return false; *chunk = result->buffer; - if (length != NULL) + if (length) *length = result->length; - return TRUE; + return true; } -gboolean g_web_result_get_header(GWebResult *result, +bool g_web_result_get_header(GWebResult *result, const char *header, const char **value) { - if (result == NULL) - return FALSE; + if (!result) + return false; - if (value == NULL) - return FALSE; + if (!value) + return false; *value = g_hash_table_lookup(result->headers, header); - if (*value == NULL) - return FALSE; + if (!*value) + return false; - return TRUE; + return true; } struct _GWebParser { @@ -1437,7 +1455,7 @@ struct _GWebParser { const char *token_str; size_t token_len; size_t token_pos; - gboolean intoken; + bool intoken; GString *content; GWebParserFunc func; gpointer user_data; @@ -1449,7 +1467,7 @@ GWebParser *g_web_parser_new(const char *begin, const char *end, GWebParser *parser; parser = g_try_new0(GWebParser, 1); - if (parser == NULL) + if (!parser) return NULL; parser->ref_count = 1; @@ -1457,7 +1475,7 @@ GWebParser *g_web_parser_new(const char *begin, const char *end, parser->begin_token = g_strdup(begin); parser->end_token = g_strdup(end); - if (parser->begin_token == NULL) { + if (!parser->begin_token) { g_free(parser); return NULL; } @@ -1469,7 +1487,7 @@ GWebParser *g_web_parser_new(const char *begin, const char *end, parser->token_len = strlen(parser->token_str); parser->token_pos = 0; - parser->intoken = FALSE; + parser->intoken = false; parser->content = g_string_sized_new(0); return parser; @@ -1477,7 +1495,7 @@ GWebParser *g_web_parser_new(const char *begin, const char *end, GWebParser *g_web_parser_ref(GWebParser *parser) { - if (parser == NULL) + if (!parser) return NULL; __sync_fetch_and_add(&parser->ref_count, 1); @@ -1487,7 +1505,7 @@ GWebParser *g_web_parser_ref(GWebParser *parser) void g_web_parser_unref(GWebParser *parser) { - if (parser == NULL) + if (!parser) return; if (__sync_fetch_and_sub(&parser->ref_count, 1) != 1) @@ -1505,7 +1523,7 @@ void g_web_parser_feed_data(GWebParser *parser, { const guint8 *ptr = data; - if (parser == NULL) + if (!parser) return; while (length > 0) { @@ -1515,14 +1533,14 @@ void g_web_parser_feed_data(GWebParser *parser, guint8 *pos; pos = memchr(ptr, chr, length); - if (pos == NULL) { - if (parser->intoken == TRUE) + if (!pos) { + if (parser->intoken) g_string_append_len(parser->content, (gchar *) ptr, length); break; } - if (parser->intoken == TRUE) + if (parser->intoken) g_string_append_len(parser->content, (gchar *) ptr, (pos - ptr) + 1); @@ -1533,7 +1551,7 @@ void g_web_parser_feed_data(GWebParser *parser, continue; } - if (parser->intoken == TRUE) + if (parser->intoken) g_string_append_c(parser->content, ptr[0]); if (ptr[0] != chr) { @@ -1550,11 +1568,11 @@ void g_web_parser_feed_data(GWebParser *parser, parser->token_pos++; if (parser->token_pos == parser->token_len) { - if (parser->intoken == FALSE) { + if (!parser->intoken) { g_string_append(parser->content, parser->token_str); - parser->intoken = TRUE; + parser->intoken = true; parser->token_str = parser->end_token; parser->token_len = strlen(parser->end_token); parser->token_pos = 0; @@ -1566,7 +1584,7 @@ void g_web_parser_feed_data(GWebParser *parser, parser->func(str, parser->user_data); g_free(str); - parser->intoken = FALSE; + parser->intoken = false; parser->token_str = parser->begin_token; parser->token_len = strlen(parser->begin_token); parser->token_pos = 0; @@ -1577,6 +1595,6 @@ void g_web_parser_feed_data(GWebParser *parser, void g_web_parser_end_data(GWebParser *parser) { - if (parser == NULL) + if (!parser) return; } diff --git a/gweb/gweb.h b/gweb/gweb.h index 104345e8..6c28542a 100644 --- a/gweb/gweb.h +++ b/gweb/gweb.h @@ -22,6 +22,7 @@ #ifndef __G_WEB_H #define __G_WEB_H +#include <stdbool.h> #include <stdint.h> #include <glib.h> @@ -38,12 +39,12 @@ typedef struct _GWeb GWeb; typedef struct _GWebResult GWebResult; typedef struct _GWebParser GWebParser; -typedef gboolean (*GWebResultFunc)(GWebResult *result, gpointer user_data); +typedef bool (*GWebResultFunc)(GWebResult *result, gpointer user_data); -typedef gboolean (*GWebRouteFunc)(const char *addr, int ai_family, +typedef bool (*GWebRouteFunc)(const char *addr, int ai_family, int if_index, gpointer user_data); -typedef gboolean (*GWebInputFunc)(const guint8 **data, gsize *length, +typedef bool (*GWebInputFunc)(const guint8 **data, gsize *length, gpointer user_data); typedef void (*GWebDebugFunc)(const char *str, gpointer user_data); @@ -55,24 +56,24 @@ void g_web_unref(GWeb *web); void g_web_set_debug(GWeb *web, GWebDebugFunc func, gpointer user_data); -gboolean g_web_supports_tls(void); +bool g_web_supports_tls(void); -gboolean g_web_set_proxy(GWeb *web, const char *proxy); +bool g_web_set_proxy(GWeb *web, const char *proxy); -gboolean g_web_set_address_family(GWeb *web, int family); +bool g_web_set_address_family(GWeb *web, int family); -gboolean g_web_add_nameserver(GWeb *web, const char *address); +bool g_web_add_nameserver(GWeb *web, const char *address); -gboolean g_web_set_accept(GWeb *web, const char *format, ...) +bool g_web_set_accept(GWeb *web, const char *format, ...) __attribute__((format(printf, 2, 3))); -gboolean g_web_set_user_agent(GWeb *web, const char *format, ...) +bool g_web_set_user_agent(GWeb *web, const char *format, ...) __attribute__((format(printf, 2, 3))); -gboolean g_web_set_ua_profile(GWeb *web, const char *profile); +bool g_web_set_ua_profile(GWeb *web, const char *profile); -gboolean g_web_set_http_version(GWeb *web, const char *version); +bool g_web_set_http_version(GWeb *web, const char *version); -void g_web_set_close_connection(GWeb *web, gboolean enabled); -gboolean g_web_get_close_connection(GWeb *web); +void g_web_set_close_connection(GWeb *web, bool enabled); +bool g_web_get_close_connection(GWeb *web); guint g_web_request_get(GWeb *web, const char *url, GWebResultFunc func, GWebRouteFunc route, @@ -84,13 +85,13 @@ guint g_web_request_post_file(GWeb *web, const char *url, const char *type, const char *file, GWebResultFunc func, gpointer user_data); -gboolean g_web_cancel_request(GWeb *web, guint id); +bool g_web_cancel_request(GWeb *web, guint id); guint16 g_web_result_get_status(GWebResult *result); -gboolean g_web_result_get_header(GWebResult *result, +bool g_web_result_get_header(GWebResult *result, const char *header, const char **value); -gboolean g_web_result_get_chunk(GWebResult *result, +bool g_web_result_get_chunk(GWebResult *result, const guint8 **chunk, gsize *length); typedef void (*GWebParserFunc)(const char *str, gpointer user_data); |