8 #include <wifi-direct.h>
10 #include "wifi-direct-ipc.h"
11 #include "wifi-direct-manager.h"
12 #include "wifi-direct-oem.h"
13 #include "wifi-direct-service.h"
14 #include "wifi-direct-util.h"
15 #include "wifi-direct-log.h"
18 int wfd_service_add(int type, char *info_str, int *service_id)
20 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
21 wfd_manager_s *manager = wfd_get_manager();
22 wfd_service_s *service = NULL;
29 WDS_LOGE("Invalid parameter");//LCOV_EXCL_LINE
33 if (type < WIFI_DIRECT_SERVICE_TYPE_BONJOUR ||
34 type > WIFI_DIRECT_SERVICE_TYPE_VENDOR) {
35 WDS_LOGE("Invalid service type");//LCOV_EXCL_LINE
39 service = (wfd_service_s*) g_try_malloc0(sizeof(wfd_service_s));
41 WDS_LOGE("Failed to allocate memory for service");//LCOV_EXCL_LINE
46 service->id = (intptr_t) service;
47 info1 = g_strndup(info_str, strlen(info_str));
49 WDS_LOGE("Failed to allocate memory for service");//LCOV_EXCL_LINE
53 sep = strchr(info1, '|');
55 WDS_LOGE("Failed to find delimiter");//LCOV_EXCL_LINE
64 switch (service->type) {
65 case WIFI_DIRECT_SERVICE_TYPE_BONJOUR:
66 service->data.bonjour.query = info1;
67 if (strstr(info2, "ptr"))
68 service->data.bonjour.rdata_type = WFD_BONJOUR_RDATA_PTR;
70 service->data.bonjour.rdata_type = WFD_BONJOUR_RDATA_TXT;
72 service->data.bonjour.rdata = info2 +3;
74 case WIFI_DIRECT_SERVICE_TYPE_UPNP:
75 service->data.upnp.version = info1;
76 service->data.upnp.service = info2;
78 case WIFI_DIRECT_SERVICE_TYPE_WS_DISCOVERY:
79 case WIFI_DIRECT_SERVICE_TYPE_WIFI_DISPLAY:
80 WDS_LOGE("Not supported yet");//LCOV_EXCL_LINE
85 case WIFI_DIRECT_SERVICE_TYPE_VENDOR:
86 service->data.vendor.info1 = info1;
87 service->data.vendor.info2 = info2;
90 WDS_LOGE("Invalid service type");//LCOV_EXCL_LINE
96 res = wfd_oem_serv_add(manager->oem_ops, (wfd_oem_new_service_s*) service);
98 WDS_LOGE("Failed to add service");//LCOV_EXCL_LINE
104 #if defined(BUILD_GTESTS)
106 #endif /* BUILD_GTESTS */
107 service->str_ptr = info1;
108 manager->local->services = g_list_prepend(manager->local->services, service);
109 *service_id = service->id;
111 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
115 int wfd_service_del(int service_id)
117 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
118 wfd_manager_s *manager = wfd_get_manager();
120 wfd_service_s *service = NULL;
123 if (!manager->local->services) {
124 WDS_LOGE("No services to delete");//LCOV_EXCL_LINE
128 temp = g_list_first(manager->local->services);
130 service = (wfd_service_s*) temp->data;
131 if (service->id == service_id) {
132 WDS_LOGD("Service found");//LCOV_EXCL_LINE
136 temp = g_list_next(temp);
140 WDS_LOGE("Service not found");//LCOV_EXCL_LINE
144 res = wfd_oem_serv_del(manager->oem_ops, (wfd_oem_new_service_s*) service);
146 WDS_LOGE("Failed to add service");//LCOV_EXCL_LINE
150 manager->local->services = g_list_remove(manager->local->services, service);
152 g_free(service->str_ptr);
155 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
160 int wfd_service_disc_req(unsigned char *addr, int type, char *data)
162 __WDS_LOG_FUNC_ENTER__;//LCOV_EXCL_LINE
164 /* TODO: return identifier(handle) for the pending query */
167 WDS_LOGE("Invalid parameter");
171 if (type < WFD_SERVICE_TYPE_ALL ||
172 type > WFD_SERVICE_TYPE_VENDOR) {
173 WDS_LOGE("Invalid service type");
177 /* TODO: call oem function */
178 /* TODO: add service information into service list */
180 __WDS_LOG_FUNC_EXIT__;//LCOV_EXCL_LINE
184 int wfd_service_disc_cancel(int handle)