return CONNMAN_SESSION_TYPE_UNKNOWN;
}
-static enum connman_service_type bearer2service(const char *bearer)
+static int bearer2service(const char *bearer, enum connman_service_type *type)
{
- if (bearer == NULL)
- return CONNMAN_SERVICE_TYPE_UNKNOWN;
-
if (g_strcmp0(bearer, "ethernet") == 0)
- return CONNMAN_SERVICE_TYPE_ETHERNET;
+ *type = CONNMAN_SERVICE_TYPE_ETHERNET;
else if (g_strcmp0(bearer, "wifi") == 0)
- return CONNMAN_SERVICE_TYPE_WIFI;
+ *type = CONNMAN_SERVICE_TYPE_WIFI;
else if (g_strcmp0(bearer, "wimax") == 0)
- return CONNMAN_SERVICE_TYPE_WIMAX;
+ *type = CONNMAN_SERVICE_TYPE_WIMAX;
else if (g_strcmp0(bearer, "bluetooth") == 0)
- return CONNMAN_SERVICE_TYPE_BLUETOOTH;
+ *type = CONNMAN_SERVICE_TYPE_BLUETOOTH;
else if (g_strcmp0(bearer, "cellular") == 0)
- return CONNMAN_SERVICE_TYPE_CELLULAR;
+ *type = CONNMAN_SERVICE_TYPE_CELLULAR;
else if (g_strcmp0(bearer, "vpn") == 0)
- return CONNMAN_SERVICE_TYPE_VPN;
+ *type = CONNMAN_SERVICE_TYPE_VPN;
+ else if (g_strcmp0(bearer, "*") == 0)
+ *type = CONNMAN_SERVICE_TYPE_UNKNOWN;
else
- return CONNMAN_SERVICE_TYPE_UNKNOWN;
+ return -EINVAL;
+
+ return 0;
}
static char *service2bearer(enum connman_service_type type)
{
struct connman_session_bearer *bearer;
DBusMessageIter array;
+ int err;
dbus_message_iter_recurse(iter, &array);
return -ENOMEM;
}
- bearer->service_type = bearer2service(bearer_name);
-
- if (bearer->service_type == CONNMAN_SERVICE_TYPE_UNKNOWN &&
- g_strcmp0(bearer_name, "*") == 0) {
- bearer->match_all = TRUE;
- } else {
- bearer->match_all = FALSE;
+ err = bearer2service(bearer_name, &bearer->service_type);
+ if (err < 0) {
+ connman_session_free_bearers(*list);
+ *list = NULL;
+ return err;
}
*list = g_slist_append(*list, bearer);
if (bearer == NULL)
return NULL;
- bearer->match_all = orig->match_all;
bearer->service_type = orig->service_type;
return bearer;
for (it = policy_bearers; it != NULL; it = it->next) {
policy = it->data;
- if (policy->match_all == FALSE &&
+ if (policy->service_type != CONNMAN_SERVICE_TYPE_UNKNOWN &&
bearer->service_type != policy->service_type)
continue;
return 0;
}
-static connman_bool_t is_bearer_valid(struct connman_session_bearer *bearer)
-{
- if (bearer->match_all == FALSE &&
- bearer->service_type == CONNMAN_SERVICE_TYPE_UNKNOWN)
- return FALSE;
-
- return TRUE;
-}
-
static int apply_policy_on_bearers(GSList *policy_bearers, GSList *bearers,
GSList **list)
{
for (it = bearers; it != NULL; it = it->next) {
bearer = it->data;
- if (is_bearer_valid(bearer) == FALSE)
- continue;
-
err = filter_bearer(policy_bearers, bearer, list);
if (err < 0)
return err;
if (bearer == NULL)
return NULL;
- bearer->match_all = TRUE;
bearer->service_type = CONNMAN_SERVICE_TYPE_UNKNOWN;
list = g_slist_append(list, bearer);
struct connman_session_bearer *bearer = list->data;
enum connman_service_type service_type;
- if (bearer->match_all == TRUE)
+ if (bearer->service_type == CONNMAN_SERVICE_TYPE_UNKNOWN)
return TRUE;
service_type = connman_service_get_type(service);
list != NULL; list = list->next) {
struct connman_session_bearer *bearer = list->data;
- if (bearer->match_all == TRUE) {
+ if (bearer->service_type == CONNMAN_SERVICE_TYPE_UNKNOWN) {
if (type_a != type_b) {
weight_a = service_type_weight(type_a);
weight_b = service_type_weight(type_b);