diff options
-rw-r--r-- | Makefile.am | 6 | ||||
-rw-r--r-- | Makefile.plugins | 12 | ||||
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | include/location.h | 78 | ||||
-rw-r--r-- | plugins/portal.c | 239 | ||||
-rw-r--r-- | src/connman.h | 11 | ||||
-rw-r--r-- | src/location.c | 294 | ||||
-rw-r--r-- | src/main.c | 2 | ||||
-rw-r--r-- | src/service.c | 15 |
9 files changed, 2 insertions, 661 deletions
diff --git a/Makefile.am b/Makefile.am index 6c349ed4..b3849917 100644 --- a/Makefile.am +++ b/Makefile.am @@ -14,8 +14,7 @@ noinst_HEADERS = include/rtnl.h include/task.h \ include/dbus.h include/rfkill.h include/option.h \ include/provider.h \ include/utsname.h include/timeserver.h include/proxy.h \ - include/location.h include/technology.h \ - include/setting.h + include/technology.h include/setting.h local_headers = $(foreach file,$(include_HEADERS) $(nodist_include_HEADERS) \ $(noinst_HEADERS), include/connman/$(notdir $(file))) @@ -77,7 +76,7 @@ src_connmand_SOURCES = $(gdbus_sources) $(gdhcp_sources) \ src/dhcp.c src/rtnl.c src/proxy.c \ src/utsname.c src/timeserver.c src/rfkill.c \ src/storage.c src/dbus.c src/config.c \ - src/technology.c src/counter.c src/location.c \ + src/technology.c src/counter.c \ src/session.c src/tethering.c src/wpad.c src/wispr.c \ src/stats.c src/iptables.c src/dnsproxy.c src/6to4.c @@ -230,7 +229,6 @@ DISTCHECK_CONFIGURE_FLAGS = --disable-gtk-doc \ --enable-google \ --enable-meego \ --enable-client \ - --enable-portal \ --enable-hh2serial-gps \ --enable-ntpd \ --enable-openconnect \ diff --git a/Makefile.plugins b/Makefile.plugins index 23524dfd..bb3a90be 100644 --- a/Makefile.plugins +++ b/Makefile.plugins @@ -139,18 +139,6 @@ endif builtin_sources += $(builtin_vpn_sources) -if PORTAL -if PORTAL_BUILTIN -builtin_modules += portal -builtin_sources += plugins/portal.c -else -plugin_LTLIBRARIES += plugins/portal.la -plugin_objects += $(plugins_portal_la_OBJECTS) -plugins_portal_la_CFLAGS = $(plugin_cflags) -plugins_portal_la_LDFLAGS = $(plugin_ldflags) -endif -endif - if PACRUNNER if PACRUNNER_BUILTIN builtin_modules += pacrunner diff --git a/configure.ac b/configure.ac index 8d437c62..32b9d198 100644 --- a/configure.ac +++ b/configure.ac @@ -112,12 +112,6 @@ fi AM_CONDITIONAL(OPENCONNECT, test "${enable_openconnect}" != "no") AM_CONDITIONAL(OPENCONNECT_BUILTIN, test "${enable_openconnect}" = "builtin") -AC_ARG_ENABLE(portal, - AC_HELP_STRING([--enable-portal], [enable portal detection support]), - [enable_portal=${enableval}], [enable_portal="no"]) -AM_CONDITIONAL(PORTAL, test "${enable_portal}" != "no") -AM_CONDITIONAL(PORTAL_BUILTIN, test "${enable_portal}" = "builtin") - AC_ARG_WITH(openvpn, AC_HELP_STRING([--with-openvpn=PROGRAM], [specify location of openvpn binary]), [path_openvpn=${withval}]) diff --git a/include/location.h b/include/location.h deleted file mode 100644 index e4efaafa..00000000 --- a/include/location.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * - * Connection Manager - * - * Copyright (C) 2007-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 __CONNMAN_LOCATION_H -#define __CONNMAN_LOCATION_H - -#include <connman/service.h> - -#ifdef __cplusplus -extern "C" { -#endif - -#define CONNMAN_LOCATION_PRIORITY_LOW -100 -#define CONNMAN_LOCATION_PRIORITY_DEFAULT 0 -#define CONNMAN_LOCATION_PRIORITY_HIGH 100 - -/** - * SECTION:location - * @title: Location premitives - * @short_description: Functions for detecting locations - */ - -enum connman_location_result { - CONNMAN_LOCATION_RESULT_UNKNOWN = 0, - CONNMAN_LOCATION_RESULT_PORTAL = 1, - CONNMAN_LOCATION_RESULT_ONLINE = 2, -}; - -struct connman_location; - -struct connman_location *connman_location_ref(struct connman_location *location); -void connman_location_unref(struct connman_location *location); - -enum connman_service_type connman_location_get_type(struct connman_location *location); -char *connman_location_get_interface(struct connman_location *location); -void connman_location_report_result(struct connman_location *location, - enum connman_location_result result); - -void *connman_location_get_data(struct connman_location *location); -void connman_location_set_data(struct connman_location *location, void *data); - -struct connman_service *connman_location_get_service( - struct connman_location *location); - -struct connman_location_driver { - const char *name; - enum connman_service_type type; - int priority; - int (*detect) (struct connman_location *location); - int (*finish) (struct connman_location *location); -}; - -int connman_location_driver_register(struct connman_location_driver *driver); -void connman_location_driver_unregister(struct connman_location_driver *driver); - -#ifdef __cplusplus -} -#endif - -#endif /* __CONNMAN_LOCATION_H */ diff --git a/plugins/portal.c b/plugins/portal.c deleted file mode 100644 index a1d142a0..00000000 --- a/plugins/portal.c +++ /dev/null @@ -1,239 +0,0 @@ -/* - * - * Connection Manager - * - * Copyright (C) 2007-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 <config.h> -#endif - -#include <errno.h> -#include <stdlib.h> - -#include <glib.h> - -#define CONNMAN_API_SUBJECT_TO_CHANGE -#include <connman/plugin.h> -#include <connman/location.h> -#include <connman/proxy.h> -#include <connman/log.h> - -#include "gweb/gweb.h" - -#define STATUS_URL "http://www.connman.net/online/status.html" - -struct server_data { - unsigned int token; - GWeb *web; - guint request_id; -}; - -static void web_debug(const char *str, void *data) -{ - connman_info("%s: %s\n", (const char *) data, str); -} - -static gboolean web_result(GWebResult *result, gpointer user_data) -{ - struct connman_location *location = user_data; - struct server_data *data = connman_location_get_data(location); - const char *str; - guint16 status; - - if (data->request_id == 0) - return FALSE; - - status = g_web_result_get_status(result); - - /* If status header is not available, it is a portal */ - if (g_web_result_get_header(result, "X-ConnMan-Status", &str) == FALSE) - status = 302; - - DBG("status %u", status); - - switch (status) { - case 200: - if (g_web_result_get_header(result, "X-ConnMan-Client-IP", - &str) == TRUE) - connman_info("Client-IP: %s", str); - - if (g_web_result_get_header(result, "X-ConnMan-Client-Country", - &str) == TRUE) - connman_info("Client-Country: %s", str); - - if (g_web_result_get_header(result, "X-ConnMan-Client-Region", - &str) == TRUE) - connman_info("Client-Region: %s", str); - - connman_location_report_result(location, - CONNMAN_LOCATION_RESULT_ONLINE); - break; - case 302: - connman_location_report_result(location, - CONNMAN_LOCATION_RESULT_PORTAL); - break; - default: - connman_location_report_result(location, - CONNMAN_LOCATION_RESULT_UNKNOWN); - break; - } - - data->request_id = 0; - - return FALSE; -} - -static void proxy_callback(const char *proxy, void *user_data) -{ - struct connman_location *location = user_data; - struct server_data *data = connman_location_get_data(location); - - DBG("proxy %s", proxy); - - if (proxy == NULL) - proxy = getenv("http_proxy"); - - if (data != NULL) { - if (proxy != NULL && g_strcmp0(proxy, "DIRECT") != 0) - g_web_set_proxy(data->web, proxy); - - data->request_id = g_web_request_get(data->web, STATUS_URL, - web_result, location); - - data->token = 0; - } - - connman_location_unref(location); -} - -static int location_detect(struct connman_location *location) -{ - struct server_data *data; - struct connman_service *service; - enum connman_service_type service_type; - char *interface; - int err; - - DBG("location %p", location); - - service_type = connman_location_get_type(location); - - switch (service_type) { - case CONNMAN_SERVICE_TYPE_ETHERNET: - case CONNMAN_SERVICE_TYPE_WIFI: - case CONNMAN_SERVICE_TYPE_WIMAX: - case CONNMAN_SERVICE_TYPE_BLUETOOTH: - case CONNMAN_SERVICE_TYPE_CELLULAR: - break; - case CONNMAN_SERVICE_TYPE_UNKNOWN: - case CONNMAN_SERVICE_TYPE_SYSTEM: - case CONNMAN_SERVICE_TYPE_GPS: - case CONNMAN_SERVICE_TYPE_VPN: - case CONNMAN_SERVICE_TYPE_GADGET: - return -EOPNOTSUPP; - } - - interface = connman_location_get_interface(location); - if (interface == NULL) - return -EINVAL; - - DBG("interface %s", interface); - - data = g_try_new0(struct server_data, 1); - if (data == NULL) { - err = -ENOMEM; - goto done; - } - - connman_location_set_data(location, data); - - data->web = g_web_new(0); - if (data->web == NULL) { - g_free(data); - err = -ENOMEM; - goto done; - } - - if (getenv("CONNMAN_WEB_DEBUG")) - g_web_set_debug(data->web, web_debug, "WEB"); - - g_web_set_accept(data->web, NULL); - g_web_set_user_agent(data->web, "ConnMan/%s", VERSION); - g_web_set_close_connection(data->web, TRUE); - - connman_location_ref(location); - - service = connman_location_get_service(location); - data->token = connman_proxy_lookup(interface, STATUS_URL, - service, proxy_callback, location); - - if (data->token == 0) { - connman_location_unref(location); - err = -EINVAL; - } else - err = 0; - -done: - g_free(interface); - return err; -} - -static int location_finish(struct connman_location *location) -{ - struct server_data *data = connman_location_get_data(location); - - DBG("location %p", location); - - connman_location_set_data(location, NULL); - - if (data->request_id > 0) - g_web_cancel_request(data->web, data->request_id); - - if (data->token > 0) { - connman_proxy_lookup_cancel(data->token); - connman_location_unref(location); - } - - g_web_unref(data->web); - - g_free(data); - - return 0; -} - -static struct connman_location_driver location = { - .name = "portal", - .type = CONNMAN_SERVICE_TYPE_WIFI, - .priority = CONNMAN_LOCATION_PRIORITY_HIGH, - .detect = location_detect, - .finish = location_finish, -}; - -static int portal_init(void) -{ - return connman_location_driver_register(&location); -} - -static void portal_exit(void) -{ - connman_location_driver_unregister(&location); -} - -CONNMAN_PLUGIN_DEFINE(portal, "Portal detection plugin", VERSION, - CONNMAN_PLUGIN_PRIORITY_DEFAULT, portal_init, portal_exit) diff --git a/src/connman.h b/src/connman.h index 4a37b70d..d524df88 100644 --- a/src/connman.h +++ b/src/connman.h @@ -546,17 +546,6 @@ GSequence *__connman_service_get_list(struct connman_session *session, void __connman_service_session_inc(struct connman_service *service); connman_bool_t __connman_service_session_dec(struct connman_service *service); -#include <connman/location.h> - -int __connman_location_init(void); -void __connman_location_cleanup(void); - -struct connman_location *__connman_location_create(struct connman_service *service); -struct connman_location *__connman_service_get_location(struct connman_service *service); - -int __connman_location_detect(struct connman_service *service); -int __connman_location_finish(struct connman_service *service); - #include <connman/notifier.h> int __connman_technology_init(void); diff --git a/src/location.c b/src/location.c deleted file mode 100644 index 2afc640d..00000000 --- a/src/location.c +++ /dev/null @@ -1,294 +0,0 @@ -/* - * - * Connection Manager - * - * Copyright (C) 2007-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 <config.h> -#endif - -#include <errno.h> - -#include "connman.h" - -struct connman_location { - gint refcount; - struct connman_service *service; - enum connman_location_result result; - - struct connman_location_driver *driver; - void *driver_data; -}; - -/** - * connman_location_ref: - * @location: Location structure - * - * Increase reference counter of location - */ -struct connman_location *connman_location_ref(struct connman_location *location) -{ - g_atomic_int_inc(&location->refcount); - - return location; -} - -/** - * connman_location_unref: - * @location: Location structure - * - * Decrease reference counter of location - */ -void connman_location_unref(struct connman_location *location) -{ - if (g_atomic_int_dec_and_test(&location->refcount) == FALSE) - return; - - if (location->driver) { - location->driver->finish(location); - location->driver = NULL; - } - - g_free(location); -} - -/** - * connman_location_get_type: - * @location: Location structure - * - * Get the service type of location - */ -enum connman_service_type connman_location_get_type(struct connman_location *location) -{ - if (location == NULL) - return CONNMAN_SERVICE_TYPE_UNKNOWN; - - return connman_service_get_type(location->service); -} - -/** - * connman_location_get_interface: - * @location: location structure - * - * Get network interface of location - */ -char *connman_location_get_interface(struct connman_location *location) -{ - if (location == NULL) - return NULL; - - return connman_service_get_interface(location->service); -} - -struct connman_service *connman_location_get_service( - struct connman_location *location) -{ - return location->service; -} -/** - * connman_location_get_data: - * @location: Location structure - * - * Get private location data pointer - */ -void *connman_location_get_data(struct connman_location *location) -{ - return location->driver_data; -} - -/** - * connman_location_set_data: - * @location: Location structure - * @data: data pointer - * - * Set private location data pointer - */ -void connman_location_set_data(struct connman_location *location, void *data) -{ - location->driver_data = data; -} - -static GSList *driver_list = NULL; - -static gint compare_priority(gconstpointer a, gconstpointer b) -{ - const struct connman_location_driver *driver1 = a; - const struct connman_location_driver *driver2 = b; - - return driver2->priority - driver1->priority; -} - -/** - * connman_location_driver_register: - * @driver: Location driver definition - * - * Register a new Location driver - * - * Returns: %0 on success - */ -int connman_location_driver_register(struct connman_location_driver *driver) -{ - DBG("driver %p name %s", driver, driver->name); - - driver_list = g_slist_insert_sorted(driver_list, driver, - compare_priority); - - return 0; -} - -/** - * connman_location_driver_unregister: - * @driver: Location driver definition - * - * Remove a previously registered Location driver - */ -void connman_location_driver_unregister(struct connman_location_driver *driver) -{ - DBG("driver %p name %s", driver, driver->name); - - driver_list = g_slist_remove(driver_list, driver); -} - -/** - * connman_location_report_result: - * @location: location structure - * @result: result information - * - * Report result of a location detection - */ -void connman_location_report_result(struct connman_location *location, - enum connman_location_result result) -{ - DBG("location %p result %d", location, result); - - if (location == NULL) - return; - - if (location->result == result) - return; - - location->result = result; - - switch (location->result) { - case CONNMAN_LOCATION_RESULT_UNKNOWN: - return; - case CONNMAN_LOCATION_RESULT_PORTAL: - __connman_service_request_login(location->service); - break; - case CONNMAN_LOCATION_RESULT_ONLINE: - __connman_service_ipconfig_indicate_state(location->service, - CONNMAN_SERVICE_STATE_ONLINE, - CONNMAN_IPCONFIG_TYPE_IPV4); - break; - } -} - -struct connman_location *__connman_location_create(struct connman_service *service) -{ - struct connman_location *location; - - DBG("service %p", service); - - if (service == NULL) - return NULL; - - location = g_try_new0(struct connman_location, 1); - if (location == NULL) - return NULL; - - DBG("location %p", location); - - location->refcount = 1; - - location->service = service; - location->result = CONNMAN_LOCATION_RESULT_UNKNOWN; - - return location; -} - -int __connman_location_detect(struct connman_service *service) -{ - struct connman_location *location; - GSList *list; - - DBG("service %p", service); - - location = __connman_service_get_location(service); - if (location == NULL) - return -EINVAL; - - if (location->driver) { - location->result = CONNMAN_LOCATION_RESULT_UNKNOWN; - location->driver->finish(location); - - if (location->driver->detect(location) == 0) - return 0; - - location->driver = NULL; - } - - for (list = driver_list; list; list = list->next) { - struct connman_location_driver *driver = list->data; - - DBG("driver %p name %s", driver, driver->name); - - if (driver->detect(location) == 0) { - location->driver = driver; - break; - } - } - - if (location->driver == NULL) - connman_location_report_result(location, - CONNMAN_LOCATION_RESULT_ONLINE); - - return 0; -} - -int __connman_location_finish(struct connman_service *service) -{ - struct connman_location *location; - - DBG("service %p", service); - - location = __connman_service_get_location(service); - if (location == NULL) - return -EINVAL; - - location->result = CONNMAN_LOCATION_RESULT_UNKNOWN; - - if (location->driver) { - location->driver->finish(location); - location->driver = NULL; - } - - return 0; -} - -int __connman_location_init(void) -{ - DBG(""); - - return 0; -} - -void __connman_location_cleanup(void) -{ - DBG(""); -} @@ -331,7 +331,6 @@ int main(int argc, char *argv[]) __connman_storage_migrate(); __connman_technology_init(); __connman_notifier_init(); - __connman_location_init(); __connman_service_init(); __connman_provider_init(); __connman_network_init(); @@ -400,7 +399,6 @@ int main(int argc, char *argv[]) __connman_device_cleanup(); __connman_network_cleanup(); __connman_service_cleanup(); - __connman_location_cleanup(); __connman_notifier_cleanup(); __connman_technology_cleanup(); diff --git a/src/service.c b/src/service.c index 03afb39c..195b8e91 100644 --- a/src/service.c +++ b/src/service.c @@ -99,7 +99,6 @@ struct connman_service { char *phase2; DBusMessage *pending; guint timeout; - struct connman_location *location; struct connman_stats stats; struct connman_stats stats_roaming; GHashTable *counter_table; @@ -3418,9 +3417,6 @@ static void service_free(gpointer user_data) service->ipconfig_ipv6 = NULL; } - if (service->location != NULL) - connman_location_unref(service->location); - g_strfreev(service->nameservers); g_strfreev(service->nameservers_config); g_strfreev(service->domains); @@ -3563,16 +3559,9 @@ struct connman_service *connman_service_create(void) service_initialize(service); - service->location = __connman_location_create(service); - return service; } -struct connman_location *__connman_service_get_location(struct connman_service *service) -{ - return service->location; -} - /** * connman_service_ref: * @service: service structure @@ -4027,8 +4016,6 @@ static int service_indicate_state(struct connman_service *service) def_service->provider != NULL) __connman_provider_disconnect(def_service->provider); - __connman_location_finish(service); - default_changed(); __connman_wpad_stop(service); @@ -4126,8 +4113,6 @@ int __connman_service_indicate_default(struct connman_service *service) default_changed(); - __connman_location_detect(service); - return 0; } |