In order to differentiate P2P technology and wifi by their types, let's
add a new service type.
This is not very clean since P2P technology is never ever going to
generate any service (as struct connman_service), but there is currently
no other way since technology type is tight to a CONNMAN_SERVICE_TYPE_
value. This is due to an old design issue where technologies were meant
to produce services, but which does not work with P2P technology
anymore.
This could be properly fixed with a CONNMAN_TECHNOLOGY_TYPE_ but it will
demand quite much refactoring and rewrite here and there.
---
include/service.h | 3 ++-
plugins/iospm.c | 1 +
src/device.c | 1 +
src/notifier.c | 2 ++
src/rfkill.c | 1 +
src/service.c | 11 +++++++++++
src/session.c | 1 +
src/technology.c | 4 ++++
src/wispr.c | 1 +
9 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/include/service.h b/include/service.h
index 4dbfc10..31dfce7 100644
--- a/include/service.h
+++ b/include/service.h
@@ -44,8 +44,9 @@ enum connman_service_type {
CONNMAN_SERVICE_TYPE_GPS = 6,
CONNMAN_SERVICE_TYPE_VPN = 7,
CONNMAN_SERVICE_TYPE_GADGET = 8,
+ CONNMAN_SERVICE_TYPE_P2P = 9,
};
-#define MAX_CONNMAN_SERVICE_TYPES 9
+#define MAX_CONNMAN_SERVICE_TYPES 10
enum connman_service_security {
diff --git a/plugins/iospm.c b/plugins/iospm.c
index 77808df..fcb4cea 100644
--- a/plugins/iospm.c
+++ b/plugins/iospm.c
@@ -73,6 +73,7 @@ static void iospm_service_enabled(enum connman_service_type
type,
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
case CONNMAN_SERVICE_TYPE_GADGET:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
case CONNMAN_SERVICE_TYPE_BLUETOOTH:
send_indication(IOSPM_BLUETOOTH, enabled);
diff --git a/src/device.c b/src/device.c
index 28e10ed..bc835be 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1113,6 +1113,7 @@ int __connman_device_request_scan(enum
connman_service_type type)
case CONNMAN_SERVICE_TYPE_GADGET:
return -EOPNOTSUPP;
case CONNMAN_SERVICE_TYPE_WIFI:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
}
diff --git a/src/notifier.c b/src/notifier.c
index 54c7474..5ba5324 100644
--- a/src/notifier.c
+++ b/src/notifier.c
@@ -152,6 +152,7 @@ void __connman_notifier_connect(enum connman_service_type
type)
case CONNMAN_SERVICE_TYPE_WIFI:
case CONNMAN_SERVICE_TYPE_BLUETOOTH:
case CONNMAN_SERVICE_TYPE_CELLULAR:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
}
@@ -198,6 +199,7 @@ void __connman_notifier_disconnect(enum
connman_service_type type)
case CONNMAN_SERVICE_TYPE_WIFI:
case CONNMAN_SERVICE_TYPE_BLUETOOTH:
case CONNMAN_SERVICE_TYPE_CELLULAR:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
}
diff --git a/src/rfkill.c b/src/rfkill.c
index 25268d8..960cfea 100644
--- a/src/rfkill.c
+++ b/src/rfkill.c
@@ -88,6 +88,7 @@ static enum rfkill_type convert_service_type(enum
connman_service_type type)
case CONNMAN_SERVICE_TYPE_ETHERNET:
case CONNMAN_SERVICE_TYPE_VPN:
case CONNMAN_SERVICE_TYPE_GADGET:
+ case CONNMAN_SERVICE_TYPE_P2P:
case CONNMAN_SERVICE_TYPE_UNKNOWN:
return NUM_RFKILL_TYPES;
}
diff --git a/src/service.c b/src/service.c
index b215bfd..2bdfc61 100644
--- a/src/service.c
+++ b/src/service.c
@@ -200,6 +200,8 @@ const char *__connman_service_type2string(enum
connman_service_type type)
return "vpn";
case CONNMAN_SERVICE_TYPE_GADGET:
return "gadget";
+ case CONNMAN_SERVICE_TYPE_P2P:
+ return "p2p";
}
return NULL;
@@ -226,6 +228,8 @@ enum connman_service_type
__connman_service_string2type(const char *str)
return CONNMAN_SERVICE_TYPE_GPS;
if (strcmp(str, "system") == 0)
return CONNMAN_SERVICE_TYPE_SYSTEM;
+ if (strcmp(str, "p2p") == 0)
+ return CONNMAN_SERVICE_TYPE_P2P;
return CONNMAN_SERVICE_TYPE_UNKNOWN;
}
@@ -361,6 +365,7 @@ static int service_load(struct connman_service *service)
case CONNMAN_SERVICE_TYPE_UNKNOWN:
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
case CONNMAN_SERVICE_TYPE_VPN:
service->do_split_routing = g_key_file_get_boolean(keyfile,
@@ -552,6 +557,7 @@ static int service_save(struct connman_service *service)
case CONNMAN_SERVICE_TYPE_UNKNOWN:
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
case CONNMAN_SERVICE_TYPE_VPN:
g_key_file_set_boolean(keyfile, service->identifier,
@@ -2277,6 +2283,7 @@ static void append_properties(DBusMessageIter *dict,
dbus_bool_t limited,
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
case CONNMAN_SERVICE_TYPE_CELLULAR:
val = service->roaming;
@@ -3532,6 +3539,7 @@ void __connman_service_set_active_session(bool enable,
GSList *list)
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
}
@@ -5860,6 +5868,7 @@ static int service_connect(struct connman_service
*service)
case CONNMAN_SERVICE_TYPE_UNKNOWN:
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_P2P:
return -EINVAL;
case CONNMAN_SERVICE_TYPE_ETHERNET:
case CONNMAN_SERVICE_TYPE_GADGET:
@@ -5980,6 +5989,7 @@ int __connman_service_connect(struct connman_service
*service,
case CONNMAN_SERVICE_TYPE_UNKNOWN:
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_P2P:
return -EINVAL;
default:
if (!is_ipconfig_usable(service))
@@ -6742,6 +6752,7 @@ struct connman_service *
__connman_service_create_from_network(struct connman_ne
case CONNMAN_SERVICE_TYPE_GADGET:
case CONNMAN_SERVICE_TYPE_WIFI:
case CONNMAN_SERVICE_TYPE_CELLULAR:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
case CONNMAN_SERVICE_TYPE_ETHERNET:
service->favorite = true;
diff --git a/src/session.c b/src/session.c
index d15752f..00ef369 100644
--- a/src/session.c
+++ b/src/session.c
@@ -188,6 +188,7 @@ static char *service2bearer(enum connman_service_type type)
return "vpn";
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
+ case CONNMAN_SERVICE_TYPE_P2P:
case CONNMAN_SERVICE_TYPE_UNKNOWN:
return "";
}
diff --git a/src/technology.c b/src/technology.c
index 36f69d8..76f936a 100644
--- a/src/technology.c
+++ b/src/technology.c
@@ -226,6 +226,8 @@ static const char *get_name(enum connman_service_type type)
return "Bluetooth";
case CONNMAN_SERVICE_TYPE_CELLULAR:
return "Cellular";
+ case CONNMAN_SERVICE_TYPE_P2P:
+ return "P2P";
}
return NULL;
@@ -1227,6 +1229,7 @@ void __connman_technology_add_interface(enum
connman_service_type type,
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
case CONNMAN_SERVICE_TYPE_GADGET:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
}
@@ -1277,6 +1280,7 @@ void __connman_technology_remove_interface(enum
connman_service_type type,
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
case CONNMAN_SERVICE_TYPE_GADGET:
+ case CONNMAN_SERVICE_TYPE_P2P:
break;
}
diff --git a/src/wispr.c b/src/wispr.c
index 9d1ae8e..dcce93c 100644
--- a/src/wispr.c
+++ b/src/wispr.c
@@ -836,6 +836,7 @@ static int wispr_portal_detect(struct
connman_wispr_portal_context *wp_context)
case CONNMAN_SERVICE_TYPE_SYSTEM:
case CONNMAN_SERVICE_TYPE_GPS:
case CONNMAN_SERVICE_TYPE_VPN:
+ case CONNMAN_SERVICE_TYPE_P2P:
return -EOPNOTSUPP;
}
--
1.8.3.2
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman