Change discoverd_cb for ble support 74/260574/2
authorCheoleun Moon <chleun.moon@samsung.com>
Tue, 29 Jun 2021 07:47:46 +0000 (16:47 +0900)
committercheoleun moon <chleun.moon@samsung.com>
Fri, 2 Jul 2021 02:46:19 +0000 (02:46 +0000)
Change-Id: Ie9750efb9662929d51f6660ac15bc25f5b9d08e8
Signed-off-by: Cheoleun Moon <chleun.moon@samsung.com>
packaging/capi-network-vine.spec
plugins/ble/ble-plugin.cpp
src/include/vine-constants.h
src/include/vine-disc-plugin.h
src/include/vine-disc.h
src/include/vine-service.h
src/vine-disc.cpp
src/vine-dp.cpp
src/vine-service.cpp
src/vine-session.cpp

index 34cf751..8fcd8ba 100755 (executable)
@@ -3,7 +3,7 @@
 %bcond_without use_glib_event_loop
 Name:    capi-network-vine
 Summary: An service discovery framework
-Version: 1.1.1
+Version: 1.1.2
 Release: 0
 Group:   Network & Connectivity/API
 License: Apache-2.0
index 97adf93..b289a61 100755 (executable)
@@ -246,16 +246,19 @@ static void __le_scan_result_cb(int result, bt_adapter_le_device_scan_result_inf
 
        vine_ble_s *ble_handle = (vine_ble_s *)user_data;
        int service_type_len = strlen(ble_handle->service_type);
+
        if (manufacturer_len > service_type_len &&
                strncmp(manufacturer_data, ble_handle->service_type, service_type_len) == 0) {
                char service_name[VINE_MAX_BLE_SERVICE_NAME_LEN + 1];
                int service_name_len = manufacturer_len - 1 - service_type_len;
                strncpy(service_name, manufacturer_data + service_type_len + 1, service_name_len);
-               if (event_callbacks.discovered_cb) {
+               char mac[VINE_MAC_LEN + 1];
+               strncpy(mac, info->remote_address, VINE_MAC_LEN);
+
+               if (event_callbacks.ble_discovered_cb) {
                        std::map<string, string> empty_map;
-                               event_callbacks.discovered_cb(ble_handle, true,
-                                       ble_handle->service_type, service_name, NULL, 0, empty_map,
-                                       NULL, 0, ble_handle->disc_handle);
+                               event_callbacks.ble_discovered_cb(ble_handle, true,
+                                       ble_handle->service_type, service_name, mac, ble_handle->disc_handle);
                }
        }
 
@@ -324,10 +327,11 @@ vine_disc_error ble_process_event(void *plugin_handle, int fd)
 void ble_register_callbacks(vine_disc_plugin_callbacks callbacks)
 {
        event_callbacks.published_cb = callbacks.published_cb;
-       event_callbacks.discovered_cb = callbacks.discovered_cb;
-       event_callbacks.ip_resolved_cb = callbacks.ip_resolved_cb;
-       event_callbacks.fd_added_cb = callbacks.fd_added_cb;
-       event_callbacks.fd_removed_cb = callbacks.fd_removed_cb;
+       event_callbacks.discovered_cb = NULL;
+       event_callbacks.ip_resolved_cb = NULL;
+       event_callbacks.fd_added_cb = NULL;
+       event_callbacks.fd_removed_cb = NULL;
+       event_callbacks.ble_discovered_cb = callbacks.ble_discovered_cb;
 }
 
 void vine_disc_plugin_init(vine_disc_plugin_fn *fn)
index 0082fab..0f570eb 100644 (file)
@@ -33,5 +33,6 @@
 // Even though the constraits is met, the operation can be failed.
 #define VINE_MAX_BLE_SERVICE_TYPE_LEN 15
 #define VINE_MAX_BLE_SERVICE_NAME_LEN 15
+#define VINE_MAC_LEN 17
 
 #endif /* __VINE_SERV__VINE_CONSTANTS_H__ICE_H__ */
index 79178b0..fd8330e 100755 (executable)
@@ -59,6 +59,10 @@ typedef struct {
                const char *ip, sa_family_t address_family, void *disc_handle);
        void (*fd_added_cb)(int fd, void *disc_handle);
        void (*fd_removed_cb)(int fd, void *disc_handle);
+
+       void (*ble_discovered_cb)(void *plugin_handle, bool available,
+               const char *service_type, const char *service_name, const char *mac,
+               void *disc_handle);
 } vine_disc_plugin_callbacks;
 
 typedef struct {
index c499cde..42faa43 100755 (executable)
@@ -32,7 +32,7 @@ typedef void (*vine_disc_published_cb)(vine_disc_h disc,
 typedef void (*vine_disc_discovered_cb)(vine_disc_h disc, bool available,
                                const char *service_type, const char *service_name,
                                const char *host_name, int port, const map<string, string> &attr,
-                               const char *iface_name, int more_coming, void *user_data);
+                               const char *iface_name, int more_coming, const char *mac, void *user_data);
 typedef void (*vine_disc_ip_resolved_cb)(vine_disc_h disc, vine_service_h service, bool add,
                                const char *ip, vine_address_family_e address_family, void *user_data);
 
index 302a491..250be01 100755 (executable)
@@ -54,6 +54,9 @@ int _vine_service_get_attributes_as_arrays(vine_service_h service,
 int _vine_service_set_iface_name(vine_service_h service, const char *iface_name);
 const char *_vine_service_get_iface_name(vine_service_h service);
 
+int _vine_service_set_mac(vine_service_h service, const char *mac);
+const char *_vine_service_get_mac(vine_service_h service);
+
 int _vine_service_get_disc_handle(vine_service_h service,
        vine_discovery_method_e disc_method, void **disc_handle);
 int _vine_service_set_ip_resolved_cb(vine_service_h service, vine_session_h session,
index 0f983c7..f967c59 100755 (executable)
@@ -49,6 +49,7 @@ static struct {
 };
 
 typedef struct {
+       vine_discovery_method_e method;
        vine_disc_plugin_fn *plugin_fn;
 
        vine_disc_published_cb published_cb;
@@ -77,6 +78,7 @@ typedef struct {
        map<string, string> attributes;
        char iface_name[IF_NAMESIZE + 1];
        int more_coming;
+       char mac[VINE_MAC_LEN + 1];
 } vine_discovered_event;
 
 typedef struct {
@@ -141,6 +143,7 @@ static void __invoke_discovered_user_cb(void *event, void *user_data)
                        discovered_event->attributes,
                        discovered_event->iface_name,
                        discovered_event->more_coming,
+                       discovered_event->mac,
                        disc_handle->discovered_cb_data);
 }
 
@@ -237,6 +240,30 @@ static void __discovered_cb(void *plugin_handle, bool available,
                        user_data);
 }
 
+static void __ble_discovered_cb(void *plugin_handle, bool available,
+               const char *service_type, const char *service_name, const char *mac,
+               void *user_data)
+{
+       VINE_LOGD("Discovered callback from plugin available[%d]", available);
+       VINE_LOGD("service type[%s] service_name[%s] mac[%s] user_data[%p]",
+                       service_type, service_name, mac, user_data);
+
+       vine_discovered_event *discovered_event = new vine_discovered_event;
+
+       discovered_event->available = available;
+       strncpy(discovered_event->service_type, service_type, VINE_MAX_SERVICE_TYPE_LEN);
+       strncpy(discovered_event->service_name, service_name, VINE_MAX_SERVICE_NAME_LEN);
+       strncpy(discovered_event->mac, mac, VINE_MAC_LEN);
+
+       VINE_LOGD("Create a discovered_event[%p]", discovered_event);
+
+       vine_disc_s *disc_handle = (vine_disc_s *)user_data;
+       if (disc_handle)
+               vine_event_loop_add_event(disc_handle->event_queue, discovered_event,
+                       __invoke_discovered_user_cb, __free_discovered_event,
+                       user_data);
+}
+
 static void __ip_resolved_cb(void *plugin_handle, bool add,
                const char *ip, sa_family_t address_family, void *user_data)
 {
@@ -330,6 +357,7 @@ static void __init_plugins()
                __vine_disc_plugins[i].callbacks.ip_resolved_cb = __ip_resolved_cb;
                __vine_disc_plugins[i].callbacks.fd_added_cb = __fd_added_cb;
                __vine_disc_plugins[i].callbacks.fd_removed_cb = __fd_removed_cb;
+               __vine_disc_plugins[i].callbacks.ble_discovered_cb = __ble_discovered_cb;
                __vine_disc_plugins[i].fn.register_callbacks(__vine_disc_plugins[i].callbacks);
        }
 }
@@ -357,6 +385,7 @@ int vine_disc_create(vine_discovery_method_e disc_method, vine_disc_h *disc)
        RET_VAL_IF(disc_handle == NULL, VINE_ERROR_OUT_OF_MEMORY, "Out of Memory");
 
        *disc = disc_handle;
+       disc_handle->method = disc_method;
        disc_handle->plugin_fn = &__vine_disc_plugins[disc_method].fn;
        VINE_LOGD("New Discovery handle[%p] disc_method[%d]", disc_handle, disc_method);
 
index 2c435dc..29a640f 100644 (file)
@@ -310,7 +310,7 @@ static void _ip_resolved_cb(vine_disc_h disc, vine_service_h service, bool add,
 static void _service_discovered_cb(vine_disc_h disc, bool available,
                const char *service_type, const char *service_name,
                const char *host_name, int port, const map<string, string> &attr,
-               const char *iface_name, int more_coming, void *user_data)
+               const char *iface_name, int more_coming, const char *mac, void *user_data)
 {
        VINE_LOGD("%s is discovered. %s",
                        service_name, available ? "available" : "not available");
index 7fa39ce..cf7832c 100755 (executable)
@@ -40,6 +40,7 @@ typedef struct {
        map<string, string> attributes;
        char iface_name[IF_NAMESIZE + 1];
        vine_service_state_e state;
+       char mac[VINE_MAC_LEN + 1];             // Only for ble discovery
 
        // For IP resolving
        void *disc_handle;      // Used to resolve IP address
@@ -78,6 +79,7 @@ int _vine_service_create(vine_service_h *service, bool published)
        memset(s->service_name, 0, VINE_MAX_SERVICE_NAME_LEN + 1);
        memset(s->host_name, 0, VINE_MAX_HOST_NAME_LEN + 1);
        memset(s->iface_name, 0, IF_NAMESIZE + 1);
+       memset(s->mac, 0, VINE_MAC_LEN + 1);
        s->port = -1;
        s->state = VINE_SERVICE_UNAVAILABLE;
        s->family = VINE_ADDRESS_FAMILY_DEFAULT;
@@ -122,6 +124,7 @@ int _vine_service_clone(vine_service_h origin, vine_service_h *cloned)
        cloned_service->port = origin_service->port;
        cloned_service->attributes = origin_service->attributes;
        strncpy(cloned_service->iface_name, origin_service->iface_name, IF_NAMESIZE);
+       strncpy(cloned_service->mac, origin_service->mac, VINE_MAC_LEN);
        cloned_service->state = origin_service->state;
 
        cloned_service->disc_handle = NULL;
@@ -303,6 +306,24 @@ const char *_vine_service_get_iface_name(vine_service_h service)
        return s->iface_name;
 }
 
+int _vine_service_set_mac(vine_service_h service, const char *mac)
+{
+       RET_VAL_IF(service == NULL, VINE_ERROR_INVALID_PARAMETER, "service is NULL");
+
+       vine_service_s *s = (vine_service_s *)service;
+       strncpy(s->mac, mac, VINE_MAC_LEN);
+
+       return VINE_ERROR_NONE;
+}
+
+const char *_vine_service_get_mac(vine_service_h service)
+{
+       RET_VAL_IF(service == NULL, NULL, "service is NULL");
+
+       vine_service_s *s = (vine_service_s *)service;
+       return s->mac;
+}
+
 int _vine_service_get_disc_handle(vine_service_h service,
        vine_discovery_method_e disc_method, void **disc_handle)
 {
index 817536b..6e91fc2 100755 (executable)
@@ -256,7 +256,7 @@ int _vine_session_unregister(vine_session_h session)
 static int __vine_set_discovered_service(vine_service_h service,
                const char *service_type, const char *service_name,
                const char *host_name, int port, const map<string, string> &attr,
-               const char *iface_name)
+               const char *iface_name, const char *mac)
 {
        int ret = VINE_ERROR_NONE;
        ret = _vine_service_set_type(service, service_type);
@@ -274,13 +274,15 @@ static int __vine_set_discovered_service(vine_service_h service,
        ret = _vine_service_set_iface_name(service, iface_name);
        RET_VAL_IF(ret != VINE_ERROR_NONE, ret, "Fail to set iface_name");
 
+       ret = _vine_service_set_mac(service, mac);
+       RET_VAL_IF(ret != VINE_ERROR_NONE, ret, "Fail to set mac");
        return VINE_ERROR_NONE;
 }
 
 static void __discovered_cb(vine_disc_h disc, bool available,
                const char *service_type, const char *service_name,
                const char *host_name, int port, const map<string, string> &attr,
-               const char *iface_name, int more_coming, void *user_data)
+               const char *iface_name, int more_coming, const char *mac, void *user_data)
 {
        VINE_LOGD("Service is discovered. Available[%d]", available);
        int ret = VINE_ERROR_NONE;
@@ -294,7 +296,7 @@ static void __discovered_cb(vine_disc_h disc, bool available,
        RET_IF(ret != VINE_ERROR_NONE, "Fail to create a service");
 
        ret = __vine_set_discovered_service(discovered_service,
-                       service_type, service_name, host_name, port, attr, iface_name);
+                       service_type, service_name, host_name, port, attr, iface_name, mac);
        if (ret != VINE_ERROR_NONE) {
                VINE_LOGE("Fail to set a service. error(%d)", ret);
                _vine_service_destroy(discovered_service);