summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-04-21 05:08:48 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-04-21 05:08:48 +0100
commit90406cff092e149ef835d684e5d4d445687a2e01 (patch)
tree8355f7d87b5b28fdcc19a7d83cde898bd568a5b1
parent87c4130bdb16e8ce0b033708e219d22b19e29a04 (diff)
downloadconnman-90406cff092e149ef835d684e5d4d445687a2e01.tar.gz
connman-90406cff092e149ef835d684e5d4d445687a2e01.tar.bz2
connman-90406cff092e149ef835d684e5d4d445687a2e01.zip
Add support for carrier service state
-rw-r--r--include/service.h11
-rw-r--r--src/connman.h3
-rw-r--r--src/profile.c2
-rw-r--r--src/service.c22
4 files changed, 32 insertions, 6 deletions
diff --git a/include/service.h b/include/service.h
index f85c3b39..fb7d5e7f 100644
--- a/include/service.h
+++ b/include/service.h
@@ -56,11 +56,12 @@ enum connman_service_security {
enum connman_service_state {
CONNMAN_SERVICE_STATE_UNKNOWN = 0,
CONNMAN_SERVICE_STATE_IDLE = 1,
- CONNMAN_SERVICE_STATE_ASSOCIATION = 2,
- CONNMAN_SERVICE_STATE_CONFIGURATION = 3,
- CONNMAN_SERVICE_STATE_READY = 4,
- CONNMAN_SERVICE_STATE_DISCONNECT = 5,
- CONNMAN_SERVICE_STATE_FAILURE = 6,
+ CONNMAN_SERVICE_STATE_CARRIER = 2,
+ CONNMAN_SERVICE_STATE_ASSOCIATION = 3,
+ CONNMAN_SERVICE_STATE_CONFIGURATION = 4,
+ CONNMAN_SERVICE_STATE_READY = 5,
+ CONNMAN_SERVICE_STATE_DISCONNECT = 6,
+ CONNMAN_SERVICE_STATE_FAILURE = 7,
};
struct connman_service;
diff --git a/src/connman.h b/src/connman.h
index 102b334c..d66e0cf7 100644
--- a/src/connman.h
+++ b/src/connman.h
@@ -224,6 +224,9 @@ struct connman_service *__connman_service_create_from_device(struct connman_devi
struct connman_service *__connman_service_lookup_from_network(struct connman_network *network);
struct connman_service *__connman_service_create_from_network(struct connman_network *network);
+int __connman_service_set_carrier(struct connman_service *service,
+ connman_bool_t carrier);
+
#include <connman/notifier.h>
int __connman_notifier_init(void);
diff --git a/src/profile.c b/src/profile.c
index eeb777f1..cad8a359 100644
--- a/src/profile.c
+++ b/src/profile.c
@@ -122,7 +122,7 @@ int __connman_profile_set_carrier(struct connman_device *device,
if (service == NULL)
return -EINVAL;
- return connman_service_set_favorite(service, carrier);
+ return __connman_service_set_carrier(service, carrier);
}
int __connman_profile_add_network(struct connman_network *network)
diff --git a/src/service.c b/src/service.c
index 4c55555f..084ffb03 100644
--- a/src/service.c
+++ b/src/service.c
@@ -121,6 +121,8 @@ static const char *state2string(enum connman_service_state state)
break;
case CONNMAN_SERVICE_STATE_IDLE:
return "idle";
+ case CONNMAN_SERVICE_STATE_CARRIER:
+ return "carrier";
case CONNMAN_SERVICE_STATE_ASSOCIATION:
return "association";
case CONNMAN_SERVICE_STATE_CONFIGURATION:
@@ -429,6 +431,26 @@ int connman_service_set_favorite(struct connman_service *service,
return 0;
}
+int __connman_service_set_carrier(struct connman_service *service,
+ connman_bool_t carrier)
+{
+ switch (service->type) {
+ case CONNMAN_SERVICE_TYPE_UNKNOWN:
+ case CONNMAN_SERVICE_TYPE_WIFI:
+ case CONNMAN_SERVICE_TYPE_WIMAX:
+ return -EINVAL;
+ case CONNMAN_SERVICE_TYPE_ETHERNET:
+ break;
+ }
+
+ if (carrier == TRUE)
+ service->state = CONNMAN_SERVICE_STATE_CARRIER;
+ else
+ service->state = CONNMAN_SERVICE_STATE_IDLE;
+
+ return connman_service_set_favorite(service, carrier);
+}
+
/**
* connman_service_lookup:
* @identifier: service identifier