diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2010-07-23 17:09:50 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2010-07-26 12:21:01 +0200 |
commit | 06cf2e1b5bd7368b6dbcd7708c066a892a1c2114 (patch) | |
tree | e21c9f10267ab1ce61b2b36bd3715ea0e157a5d7 /src/ondemand.c | |
parent | 14dea5e18d8a9d06424b74fa30f69316c965b0eb (diff) | |
download | connman-06cf2e1b5bd7368b6dbcd7708c066a892a1c2114.tar.gz connman-06cf2e1b5bd7368b6dbcd7708c066a892a1c2114.tar.bz2 connman-06cf2e1b5bd7368b6dbcd7708c066a892a1c2114.zip |
Initial on-demand connection implementation
This first implementation tracks the connection status, and provides
a simple API for starting the on-demand session.
Diffstat (limited to 'src/ondemand.c')
-rw-r--r-- | src/ondemand.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/ondemand.c b/src/ondemand.c new file mode 100644 index 00000000..64d7d0f9 --- /dev/null +++ b/src/ondemand.c @@ -0,0 +1,89 @@ +/* + * + * 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 <connman/service.h> +#include <connman/ondemand.h> +#include <connman/notifier.h> +#include <connman/log.h> + +#include "connman.h" + +static volatile gint started; +static gboolean connected; +struct connman_service *ondemand_service; + +static void ondemand_default_changed(struct connman_service *service) +{ + DBG("service %p", service); + + if (service == NULL) { + connected = FALSE; + return; + } + + connected = TRUE; +} + +static struct connman_notifier ondemand_notifier = { + .name = "ondemand", + .default_changed = ondemand_default_changed, +}; + +gboolean connman_ondemand_connected(void) +{ + DBG("connected %d", connected); + + return connected; +} + +int connman_ondemand_start(const char *bearer, unsigned int idle_timeout) +{ + DBG(""); + + if (g_atomic_int_get(&started) > 0) + return 0; + + g_atomic_int_inc(&started); + + ondemand_service = __connman_session_request(bearer, "__ondemand__"); + + /* TODO: + * 1) Set IDLETIMER target. + * 2) Listen for the sysfs/netlink event. + * 3) Stop the session. + */ + + return 0; +} + +int __connman_ondemand_init(void) +{ + return connman_notifier_register(&ondemand_notifier); +} + +void __connman_ondemand_cleanup(void) +{ + connman_notifier_unregister(&ondemand_notifier); +} |