To identify peer device, host name or MAC address may be used.
DNS-SD uses host name while BLE and NAN use MAC address.
Change-Id: I4ac6deaea26ed4551c3b7dd1de65a3d5719d0a8f
Signed-off-by: Cheoleun Moon <chleun.moon@samsung.com>
vine_disc_error ble_resolve_ip(void *plugin_handle,
const char *service_type, const char *service_name,
- const char *host_name, const char *iface_name, int family)
+ const char *host_name, const char *mac, const char *iface_name, int family)
{
VINE_LOGE("Not supported function");
return VINE_DISC_ERROR_NOT_SUPPORTED;
char mac[VINE_MAC_LEN + 1] = {0, };
strncpy(mac, info->remote_address, VINE_MAC_LEN);
- if (event_callbacks.ble_discovered_cb) {
+ if (event_callbacks.discovered_cb) {
std::map<string, string> empty_map;
- event_callbacks.ble_discovered_cb(ble_handle, true,
- ble_handle->service_type, service_name, mac, ble_handle->disc_handle);
+ event_callbacks.discovered_cb(ble_handle, true,
+ ble_handle->service_type, service_name,
+ nullptr, mac, -1, empty_map,
+ nullptr, 0, ble_handle->disc_handle);
}
}
void ble_register_callbacks(vine_disc_plugin_callbacks callbacks)
{
event_callbacks.published_cb = callbacks.published_cb;
- event_callbacks.discovered_cb = NULL;
+ event_callbacks.discovered_cb = callbacks.discovered_cb;
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)
vine_disc_error dns_sd_resolve_ip(void *plugin_handle,
const char *service_type, const char *service_name,
- const char *host_name, const char *iface_name, int family)
+ const char *host_name, const char *mac, const char *iface_name, int family)
{
RET_VAL_IF(!plugin_handle, VINE_DISC_ERROR_INVALID_PARAMETER, "plugin_handle is NULL");
RET_VAL_IF(!service_type, VINE_DISC_ERROR_INVALID_PARAMETER, "service_type is NULL");
char iface_name[IF_NAMESIZE + 1] = {0, };
if (if_indextoname(if_index, iface_name))
event_callbacks.discovered_cb(dns_sd_handle, true,
- service->service_type, service->service_name, host_name,
+ service->service_type, service->service_name, host_name, nullptr,
service->port, service->attributes, iface_name,
flags & kDNSServiceFlagsMoreComing, dns_sd_handle->user_data);
else
map<string, string> empty_map;
if (event_callbacks.discovered_cb)
event_callbacks.discovered_cb(dns_sd_handle, false,
- dns_sd_handle->service_type, service_name, NULL,
+ dns_sd_handle->service_type, service_name, nullptr, nullptr,
0, empty_map, iface_name,
flags & kDNSServiceFlagsMoreComing,
dns_sd_handle->user_data);
vine_disc_error nan_resolve_ip(void *plugin_handle,
const char *service_type, const char *service_name,
- const char *host_name, const char *iface_name, int family)
+ const char *host_name, const char *mac, const char *iface_name, int family)
{
RET_VAL_IF(!plugin_handle, VINE_DISC_ERROR_INVALID_PARAMETER, "plugin_handle is NULL");
RET_VAL_IF(!service_type, VINE_DISC_ERROR_INVALID_PARAMETER, "service_type is NULL");
if (event_callbacks.discovered_cb) {
std::map<string, string> empty_map;
event_callbacks.discovered_cb(nan_handle, false,
- nullptr, nullptr, nullptr, -1, empty_map, nullptr, 0, nan_handle->disc_handle);
+ nullptr, nullptr, nullptr, nullptr, -1, empty_map, nullptr, 0, nan_handle->disc_handle);
}
}
event_callbacks.ip_resolved_cb = callbacks.ip_resolved_cb;
event_callbacks.fd_added_cb = nullptr;
event_callbacks.fd_removed_cb = nullptr;
- event_callbacks.ble_discovered_cb = nullptr;
}
vine_disc_error nan_process_event(void *plugin_handle, int fd)
const char *service_name, vine_disc_error error, void *disc_handle);
void (*discovered_cb)(void *plugin_handle, bool available,
const char *service_type, const char *service_name,
- const char *host_name, int port, const map<string, string> &attr,
+ const char *host_name, const char *mac, int port, const map<string, string> &attr,
const char *iface_name, int more_coming, void *disc_handle);
void (*ip_resolved_cb)(void *plugin_handle, bool add,
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 {
vine_disc_error (*stop_subscribe)(void *plugin_handle);
vine_disc_error (*resolve_ip)(void *plugin_handle,
const char *service_type, const char *service_name,
- const char *host_name, const char *iface_name, int family);
+ const char *host_name, const char *mac, const char *iface_name, int family);
vine_disc_error (*cancel_resolve_ip)(void *plugin_handle);
vine_disc_error (*process_event)(void *plugin_handle, int fd);
const char *service_name, vine_error_e error, void *user_data);
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, const char *mac, void *user_data);
+ const char *host_name, const char *mac, int port, const map<string, string> &attr,
+ const char *iface_name, int more_coming, 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);
discovered_event->service_type,
discovered_event->service_name,
discovered_event->host_name,
+ discovered_event->mac,
discovered_event->port,
discovered_event->attributes,
discovered_event->iface_name,
discovered_event->more_coming,
- discovered_event->mac,
disc_handle->discovered_cb_data);
}
static void __discovered_cb(void *plugin_handle, bool available,
const char *service_type, const char *service_name,
- const char *host_name, int port, const map<string, string> &attr,
+ const char *host_name, const char *mac, int port, const map<string, string> &attr,
const char *iface_name, int more_coming, void *user_data)
{
RET_IF(service_type == NULL, "service type is NULL");
RET_IF(service_name == NULL, "service_name type is NULL");
VINE_LOGD("Discovered callback from plugin available[%d]", available);
- VINE_LOGD("service type[%s] service_name[%s] host_name[%s] port[%d] iface[%s] user_data[%p]",
- service_type, service_name, host_name, port, iface_name, user_data);
+ VINE_LOGD("service type[%s] service_name[%s] host_name[%s] mac[%s] port[%d] iface[%s] user_data[%p]",
+ service_type, service_name, host_name, mac, port, iface_name, user_data);
vine_discovered_event *discovered_event = new vine_discovered_event;
strncpy(discovered_event->iface_name, iface_name, IF_NAMESIZE);
if (host_name != NULL)
strncpy(discovered_event->host_name, host_name, VINE_MAX_HOST_NAME_LEN);
+ else
+ memset(discovered_event->host_name, 0, VINE_MAX_HOST_NAME_LEN + 1);
+ if (mac != NULL)
+ strncpy(discovered_event->mac, mac, VINE_MAC_LEN);
+ else
+ memset(discovered_event->mac, 0, VINE_MAC_LEN + 1);
discovered_event->port = port;
discovered_event->attributes = attr;
__free_discovered_event(discovered_event);
}
-static void __ble_discovered_cb(void *plugin_handle, bool available,
- const char *service_type, const char *service_name, const char *mac,
- void *user_data)
-{
- RET_IF(service_type == NULL, "service type is NULL");
- RET_IF(service_name == NULL, "service_name type is NULL");
- RET_IF(mac == NULL, "service mac is NULL");
-
- 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);
- discovered_event->port = -1;
-
- VINE_LOGD("Create a discovered_event[%p]", discovered_event);
-
- vine_disc_s *disc_handle = (vine_disc_s *)user_data;
- if (disc_handle) {
- if (vine_event_loop_add_event(disc_handle->event_queue, discovered_event,
- __invoke_discovered_user_cb, __free_discovered_event, user_data) == VINE_ERROR_NONE)
- return;
- }
- __free_discovered_event(discovered_event);
-}
-
static void __ip_resolved_cb(void *plugin_handle, bool add,
const char *ip, sa_family_t address_family, void *user_data)
{
__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);
}
}
}
error = disc_handle->plugin_fn->resolve_ip(plugin_handle,
_vine_service_get_type(service), _vine_service_get_name(service),
- _vine_service_get_host_name(service), _vine_service_get_iface_name(service),
+ _vine_service_get_host_name(service), nullptr, _vine_service_get_iface_name(service),
(int)_vine_service_get_address_family(service));
if (error != VINE_DISC_ERROR_NONE) {
VINE_LOGE("Fail to resolve ip %d", error);
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, const char *mac, void *user_data)
+ const char *host_name, const char *mac, int port, const map<string, string> &attr,
+ const char *iface_name, int more_coming, void *user_data)
{
VINE_LOGD("%s is discovered. %s",
service_name, available ? "available" : "not available");
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 *mac)
+ const char *host_name, const char *mac, int port, const map<string, string> &attr,
+ const char *iface_name)
{
int ret = VINE_ERROR_NONE;
ret = _vine_service_set_type(service, service_type);
RET_VAL_IF(ret != VINE_ERROR_NONE, ret, "Fail to set service name");
ret = _vine_service_set_host_name(service, host_name);
RET_VAL_IF(ret != VINE_ERROR_NONE, ret, "Fail to set host name");
+ ret = _vine_service_set_mac(service, mac);
+ RET_VAL_IF(ret != VINE_ERROR_NONE, ret, "Fail to set mac");
if (port >= 0) {
ret = _vine_service_set_port(service, port);
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, const char *mac, void *user_data)
+ const char *host_name, const char *mac, int port, const map<string, string> &attr,
+ const char *iface_name, int more_coming, void *user_data)
{
VINE_LOGD("Service is discovered. Available[%d]", available);
int ret = VINE_ERROR_NONE;
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, mac);
+ service_type, service_name, host_name, mac, port, attr, iface_name);
if (ret != VINE_ERROR_NONE) {
VINE_LOGE("Fail to set a service. error(%d)", ret);
_vine_service_destroy(discovered_service);
vine_disc_error __mock_disc_plugin_resolve_ip(void *plugin_handle,
const char *service_type, const char *service_name,
- const char *host_name, const char *iface_name, int family)
+ const char *host_name, const char *mac, const char *iface_name, int family)
{
return VINE_DISC_ERROR_NONE;
}