From 2a3855c57fbe42e3f9f26bc6b08a09f6471370ea Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Sat, 31 Jul 2010 15:10:06 -0700 Subject: [PATCH] Add skeleton for web service library --- Makefile.am | 6 ++-- gweb/gweb.c | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ gweb/gweb.h | 48 +++++++++++++++++++++++++++++++ 3 files changed, 147 insertions(+), 2 deletions(-) create mode 100644 gweb/gweb.c create mode 100644 gweb/gweb.h diff --git a/Makefile.am b/Makefile.am index 9b46644..28a2b97 100644 --- a/Makefile.am +++ b/Makefile.am @@ -29,6 +29,8 @@ gdhcp_sources = gdhcp/gdhcp.h gdhcp/common.h gdhcp/common.c gdhcp/client.c gresolv_sources = gresolv/gresolv.h gresolv/gresolv.c +gweb_sources = gweb/gweb.h gweb/gweb.c + if DATAFILES dbusdir = @DBUS_DATADIR@ @@ -48,8 +50,8 @@ noinst_PROGRAMS = sbin_PROGRAMS = src/connmand -src_connmand_SOURCES = $(gdbus_sources) $(gdhcp_sources) \ - $(gresolv_sources) $(builtin_sources) \ +src_connmand_SOURCES = $(gdbus_sources) $(gdhcp_sources) $(gresolv_sources) \ + $(gweb_sources) $(builtin_sources) \ src/main.c src/connman.h src/log.c src/selftest.c \ src/error.c src/plugin.c src/task.c src/element.c \ src/device.c src/network.c src/connection.c \ diff --git a/gweb/gweb.c b/gweb/gweb.c new file mode 100644 index 0000000..2dda02b --- /dev/null +++ b/gweb/gweb.c @@ -0,0 +1,95 @@ +/* + * + * Web service library with GLib integration + * + * Copyright (C) 2009-2010 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 + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include + +#include "gweb.h" + +struct _GWeb { + gint ref_count; + + GWebDebugFunc debug_func; + gpointer debug_data; +}; + +static inline void debug(GWeb *web, const char *format, ...) +{ + char str[256]; + va_list ap; + + if (web->debug_func == NULL) + return; + + va_start(ap, format); + + if (vsnprintf(str, sizeof(str), format, ap) > 0) + web->debug_func(str, web->debug_data); + + va_end(ap); +} + +GWeb *g_web_new(void) +{ + GWeb *web; + + web = g_try_new0(GWeb, 1); + if (web == NULL) + return NULL; + + web->ref_count = 1; + + return web; +} + +GWeb *g_web_ref(GWeb *web) +{ + if (web == NULL) + return NULL; + + g_atomic_int_inc(&web->ref_count); + + return web; +} + +void g_web_unref(GWeb *web) +{ + if (web == NULL) + return; + + if (g_atomic_int_dec_and_test(&web->ref_count) == FALSE) + return; + + g_free(web); +} + +void g_web_set_debug(GWeb *web, GWebDebugFunc func, gpointer user_data) +{ + if (web == NULL) + return; + + web->debug_func = func; + web->debug_data = user_data; +} diff --git a/gweb/gweb.h b/gweb/gweb.h new file mode 100644 index 0000000..c081431 --- /dev/null +++ b/gweb/gweb.h @@ -0,0 +1,48 @@ +/* + * + * Web service library with GLib integration + * + * Copyright (C) 2009-2010 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 + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef __G_WEB_H +#define __G_WEB_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct _GWeb; + +typedef struct _GWeb GWeb; + +typedef void (*GWebDebugFunc)(const char *str, gpointer user_data); + +GWeb *g_web_new(void); + +GWeb *g_web_ref(GWeb *web); +void g_web_unref(GWeb *web); + +void g_web_set_debug(GWeb *web, GWebDebugFunc func, gpointer user_data); + +#ifdef __cplusplus +} +#endif + +#endif /* __G_WEB_H */ -- 2.7.4