#define DBUS_PATH "/org/tizen/d2dconv"
#define DBUS_IFACE "org.tizen.d2dconv"
#define DBUS_TIMEOUT 3000000
+#define DBUS_TIMEOUT_CALL 3000
#define METHOD_REQUEST "Request"
#define METHOD_RESPOND "Respond"
#define CONV_SUBJECT_COMMUNICATION_STOP "conv/communication/stop"
#define CONV_SUBJECT_COMMUNICATION_GET "conv/communication/get"
#define CONV_SUBJECT_COMMUNICATION_SET "conv/communication/set"
+#define CONV_SUBJECT_COMMUNICATION_CHECK_STATE "conv/communication/check_state"
#define CONV_SUBJECT_COMMUNICATION_WRITE "conv/communication/write"
#define CONV_SUBJECT_COMMUNICATION_READ "conv/communication/read"
_D("before g_dbusConnection_call..");
GError *err = NULL;
g_dbus_connection_call(dbusConnection, dest, DBUS_PATH, DBUS_IFACE,
- METHOD_RESPOND, param, NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT, NULL, NULL, &err);
+ METHOD_RESPOND, param, NULL, G_DBUS_CALL_FLAGS_NONE, DBUS_TIMEOUT_CALL, NULL, NULL, &err);
if (err != NULL) {
_D("dbusConnection_call Error msg : %s", err->message);
virtual int readRequest(Request* requestObj) = 0;
virtual int publishRequest(Request* requestObj) = 0;
virtual int registerRequest(Request* requestObj) = 0;
+ virtual int checkStateRequest(Request* requestObj) = 0;
virtual int loadServiceInfo(Request* requestObj) = 0;
virtual int getServiceInfoForDiscovery(Json* jsonObj) = 0;
int checkActivationState() {
if (!strcmp(requestObj->getSubject(), CONV_SUBJECT_DISCOVERY_START) || !strcmp(requestObj->getSubject(), CONV_SUBJECT_DISCOVERY_STOP))
return discovery_manager::handleRequest (requestObj);
else if ( !strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_START) || !strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_STOP)
- || !strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_SET) || !strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_GET) )
+ || !strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_SET) || !strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_GET)
+ || !strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_CHECK_STATE))
result = service_manager::handleRequest(requestObj);
else if ( !strcmp(requestObj->getSubject(), CONV_SUBJECT_CONNECTION_START) || !strcmp(requestObj->getSubject(), CONV_SUBJECT_CONNECTION_STOP) )
result = connection_manager::handleRequest(requestObj);
error = (*it)->publishRequest(requestObj);
} else if (!strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_RECV)) {
return (*it)->registerRequest(requestObj);
+ } else if (!strcmp(requestObj->getSubject(), CONV_SUBJECT_COMMUNICATION_CHECK_STATE)) {
+ error = (*it)->checkStateRequest(requestObj);
}
IF_FAIL_CATCH_TAG(error == CONV_ERROR_NONE, _E, "service manager request handle error");
}
if ( !strcmp(CONV_SMART_TV, smartview_service->getType().c_str()) ) {
device_info->setType(CONV_DEVICE_TYPE_TV);
} else {
- device_info->setType(CONV_DEVICE_TYPE_MOBILE);
+ device_info->setType(smartview_service->getType().c_str());
}
return device_info;
for (ApplicationInstanceList::iterator iter = svcInfo->applicationInstanceList.begin(); iter != svcInfo->applicationInstanceList.end(); ++iter) {
_D("iteration");
if ( (*iter) != NULL && !(*iter)->uri.compare(uri) && !(*iter)->channelId.compare(channelId) ) {
- if ( (*iter)->state == APP_COMM_STATE_STARTED || (*iter)->state == APP_COMM_STATE_STARTING ) {
- _D("already started or now starting");
+ if ( (*iter)->state == APP_COMM_STATE_STARTED ) {
+ _D("already started");
return CONV_ERROR_INVALID_OPERATION;
} else {
_D("appInfo exists but no application instance");
_D("subscribe requested");
break;
case REQ_UNSUBSCRIBE:
+ delete svcInfo->registeredRequest;
svcInfo->registeredRequest = NULL;
requestObj->reply(CONV_ERROR_NONE);
delete requestObj;
return CONV_ERROR_NONE;
}
+int conv::AppCommServiceProvider::checkStateRequest(Request* requestObj)
+{
+ _D("communcation/check_state requested");
+ AppCommServiceInfo *svcInfo = reinterpret_cast<AppCommServiceInfo*>(requestObj->getServiceInfo());
+
+ Json channel;
+ requestObj->getChannelFromDescription(&channel);
+
+ string uri, channelId;
+
+ channel.get(NULL, CONV_JSON_URI, &uri);
+ channel.get(NULL, CONV_JSON_CHANNEL_ID, &channelId);
+
+ IF_FAIL_RETURN_TAG(!uri.empty() || svcInfo->isLocal, CONV_ERROR_INVALID_PARAMETER, _E, "uri is empty");
+ IF_FAIL_RETURN_TAG(!channelId.empty(), CONV_ERROR_INVALID_PARAMETER, _E, "channelId is empty");
+
+ for (ApplicationInstanceList::iterator iter = svcInfo->applicationInstanceList.begin(); iter != svcInfo->applicationInstanceList.end(); ++iter) {
+ _D("%s, %s", (*iter)->uri.c_str(), (*iter)->channelId.c_str());
+ if ( (*iter) != NULL && !(*iter)->uri.compare(uri) && !(*iter)->channelId.compare(channelId) ) {
+ if ( (*iter)->state == APP_COMM_STATE_STARTED ) {
+ _D("service is started");
+ return CONV_ERROR_NONE;
+ } else {
+ _D("service is not started");
+ return CONV_ERROR_INVALID_OPERATION;
+ }
+ }
+ }
+
+ _D("no service found");
+ return CONV_ERROR_INVALID_OPERATION;
+}
+
int conv::AppCommServiceProvider::getServiceInfoForDiscovery(Json* jsonObj)
{
jsonObj->set(NULL, CONV_JSON_DISCOVERY_SERVICE_TYPE, CONV_SERVICE_APP_TO_APP_COMMUNICATION);
int readRequest(Request* requestObj);
int publishRequest(Request* requestObj);
int registerRequest(Request* requestObj);
+ int checkStateRequest(Request* requestObj);
int loadServiceInfo(Request* requestObj);
int getServiceInfoForDiscovery(Json* jsonObj);
int handleVconfUpdate(keynode_t *node);
if (!strcmp(CONV_ACCESS_CONTROL_REQUEST, access_request_type)) {
#if defined(_D2D_INTERNAL_ACL_)
ACManagerPolicy acManagerPolicy = ACMANAGER_POLICY_U;
+#if defined(_TV_) || defined(TIZEN_PROFILE_TV) || defined(TIZEN_TV)
+ _D("Internal ACL for Odroid.");
+ acManagerPolicy = ACMANAGER_POLICY_P;
+#else
+ _D("Internal ACL for Mobile & Wearable.");
IF_FAIL_RETURN_TAG(AddACLDevice(macAddress, deviceName, ip.c_str(), &acManagerPolicy) == ACLResult_OK, CONV_ERROR_INVALID_OPERATION, _E, "AddACLDevice failed");
-
+#endif
if (acManagerPolicy == ACMANAGER_POLICY_P) {
_D("PERMITTED");
policy = CONV_ACCESS_CONTROL_PERMITTED;
#if defined(_D2D_INTERNAL_ACL_)
ACManagerPolicy acManagerPolicy = ACMANAGER_POLICY_U;
-
+#if defined(_TV_) || defined(TIZEN_PROFILE_TV) || defined(TIZEN_TV)
+ _D("Internal ACL for Odroid.");
+ acManagerPolicy = ACMANAGER_POLICY_P;
+#else
+ _D("Internal ACL for Mobile & Wearable.");
IF_FAIL_RETURN_TAG(GetACLState(macAddress, &acManagerPolicy) == ACLResult_OK, CONV_ERROR_INVALID_OPERATION, _E, "ACL check failed");
+#endif
if (acManagerPolicy == ACMANAGER_POLICY_P) {
_D("PERMITTED");
} else {
iotcon_response_result_e response_result;
iotcon_representation_h repr;
+ if (!response) {
+ _D("response is NULL");
+ return;
+ }
+
conv::RemoteAppControlServiceInfo *svcInfo = reinterpret_cast<conv::RemoteAppControlServiceInfo*>(user_data);
ret = iotcon_response_get_result(response, &response_result);
return CONV_ERROR_NONE;
}
+int conv::RemoteAppControlServiceProvider::checkStateRequest(Request* requestObj)
+{
+ _D("communcation/check_state requested");
+
+ RemoteAppControlServiceInfo *svcInfo = reinterpret_cast<RemoteAppControlServiceInfo*>(requestObj->getServiceInfo());
+
+ if (svcInfo->iotconInfoObj.iotconResourceHandle == NULL) {
+ _D("not started");
+ return CONV_ERROR_INVALID_OPERATION;
+ } else {
+ _D("started");
+ return CONV_ERROR_NONE;
+ }
+}
+
int conv::RemoteAppControlServiceProvider::readRequest(Request* requestObj)
{
return CONV_ERROR_NONE;
response_cb_info_s cb_info;
cb_info.requestObj = NULL;
+ if (!response) {
+ _D("response is NULL");
+ return;
+ }
+
ret = iotcon_response_get_representation(response, &repr);
IF_FAIL_CATCH_TAG(ret == IOTCON_ERROR_NONE, _E, "iotcon_response_get_representation() Failed(%d)", ret);
if (appcontrol_result == IOTCON_ERROR_NONE) {
payload.set(NULL, CONV_JSON_APP_CONTROL_RESULT, resultStr.c_str());
}
- result.set(NULL, CONV_JSON_DESCRIPTION, cb_info.requestObj->getDescription());
+ description = cb_info.requestObj->getDescription();
+ result.set(NULL, CONV_JSON_DESCRIPTION, description);
result.set(NULL, CONV_JSON_PAYLOAD, payload);
cb_info.requestObj->publish(CONV_ERROR_NONE, result, 0, NULL);
payload.set(NULL, CONV_JSON_APP_CONTROL_REQUEST, appctl_request_char);
}
- result.set(NULL, CONV_JSON_DESCRIPTION, cb_info.requestObj->getDescription());
+ description = cb_info.requestObj->getDescription();
+ result.set(NULL, CONV_JSON_DESCRIPTION, description);
result.set(NULL, CONV_JSON_PAYLOAD, payload);
cb_info.requestObj->publish(CONV_ERROR_INVALID_OPERATION, result, 0, NULL);
switch (requestObj->getType()) {
case REQ_SUBSCRIBE:
if (svcInfo->registeredRequest != NULL) {
+ for (std::map<int, response_cb_info_s>::iterator it = response_cb_map.begin(); it != response_cb_map.end(); ++it) {
+ if (((response_cb_info_s)it->second).requestObj == svcInfo->registeredRequest) {
+ response_cb_info_s cbInfo;
+ cbInfo.req_id = ((response_cb_info_s)it->second).req_id;
+ cbInfo.requestObj = requestObj;
+
+ it->second = cbInfo;
+ }
+ }
+
delete svcInfo->registeredRequest;
}
svcInfo->registeredRequest = requestObj;
_D("subscribe requested");
break;
case REQ_UNSUBSCRIBE:
+ for (std::map<int, response_cb_info_s>::iterator it = response_cb_map.begin(); it != response_cb_map.end(); ++it) {
+ if (((response_cb_info_s)it->second).requestObj == svcInfo->registeredRequest) {
+ response_cb_info_s cbInfo;
+ cbInfo.req_id = ((response_cb_info_s)it->second).req_id;
+ cbInfo.requestObj = NULL;
+
+ it->second = cbInfo;
+ }
+ }
+
+ delete svcInfo->registeredRequest;
svcInfo->registeredRequest = NULL;
requestObj->reply(CONV_ERROR_NONE);
delete requestObj;
int readRequest(Request* requestObj);
int publishRequest(Request* requestObj);
int registerRequest(Request* requestObj);
+ int checkStateRequest(Request* requestObj);
int loadServiceInfo(Request* requestObj);
int getServiceInfoForDiscovery(Json* jsonObj);
int handleVconfUpdate(keynode_t *node);
return !operator==(rhs);
}
+bool json::isEmpty()
+{
+ json emptyJson;
+ return nodeEquals(json_node, emptyJson.json_node);
+}
+
char* json::dupCstr()
{
IF_FAIL_RETURN_TAG(json_node, NULL, _E, "Json object not initialized");
bool operator==(const json& rhs);
bool operator!=(const json& rhs);
+ bool isEmpty();
char* dupCstr();
std::string str();
service_handle->service_type = convert_string_to_type(service_type);
service_handle->is_local = is_local;
service_handle->connection_state = CONV_SERVICE_CONNECTION_STATE_CONNECTED;
+ conv_channel_h channel_handle = NULL;
+ conv_payload_h payload_handle = NULL;
- conv_channel_h channel_handle = new(std::nothrow) _conv_channel_handle();
- IF_FAIL_VOID_TAG(channel_handle, _E, "Memory allocation failed");
+ if (!channel.isEmpty()) {
+ channel_handle = new(std::nothrow) _conv_channel_handle();
+ IF_FAIL_VOID_TAG(channel_handle, _E, "Memory allocation failed");
+ channel_handle->jchannel = channel;
+ }
- channel_handle->jchannel = channel;
+ if (!payload.isEmpty() || binary_length > 0) {
+ payload_handle = new(std::nothrow) _conv_payload_handle();
+ IF_FAIL_VOID_TAG(payload_handle, _E, "Memory allocation failed");
- conv_payload_h payload_handle = new(std::nothrow) _conv_payload_handle();
- IF_FAIL_VOID_TAG(payload_handle, _E, "Memory allocation failed");
+ payload_handle->jpayload = payload;
+ payload_handle->binary_length = binary_length;
+ payload_handle->binary = binary;
+ }
- payload_handle->jpayload = payload;
- payload_handle->binary_length = binary_length;
- payload_handle->binary = binary;
conv_error_e conv_error = (conv_error_e)error;
-
callback_info->cb(service_handle, channel_handle, conv_error, payload_handle, callback_info->user_data);
- delete payload_handle;
- delete channel_handle;
+ if (payload_handle) {
+ delete payload_handle;
+ }
+ if (channel_handle) {
+ delete channel_handle;
+ }
delete service_handle;
}
json description;
json service = handle->jservice;
+ json device = handle->jdevice;
std::string service_type = convert_type_to_string(handle->service_type);
if (service_type.empty())
description.set(NULL, CONV_JSON_SERVICE, service);
description.set(NULL, CONV_JSON_TYPE, service_type);
+ description.set(NULL, CONV_JSON_DEVICE, device);
description.set(NULL, CONV_JSON_IS_LOCAL, handle->is_local);
int req_id;
}
return service_type;
}
+
+EXTAPI int conv_service_is_started(conv_service_h handle, conv_channel_h channel_handle, bool* started)
+{
+ ASSERT_NOT_NULL(handle);
+ ASSERT_NOT_NULL(started);
+
+ IF_FAIL_RETURN_TAG(conv::util::is_feature_supported(), CONV_ERROR_NOT_SUPPORTED, _E, "Not supported");
+
+ *started = false;
+
+ int req_id;
+
+ json description;
+ json channel;
+ json payload;
+
+ if (channel_handle != NULL)
+ channel = channel_handle->jchannel;
+
+ json service = handle->jservice;
+ json device = handle->jdevice;
+ std::string type = convert_type_to_string(handle->service_type);
+ if (type.empty())
+ return CONV_ERROR_INVALID_PARAMETER;
+
+ description.set(NULL, CONV_JSON_SERVICE, service);
+ description.set(NULL, CONV_JSON_CHANNEL, channel);
+ description.set(NULL, CONV_JSON_DEVICE, device);
+ description.set(NULL, CONV_JSON_TYPE, type);
+ description.set(NULL, CONV_JSON_IS_LOCAL, handle->is_local);
+
+ int err = conv::dbus_client::request(REQ_WRITE, &req_id, CONV_SUBJECT_COMMUNICATION_CHECK_STATE, description.str().c_str(), 0, NULL);
+ IF_FAIL_RETURN_TAG(err == CONV_ERROR_NONE, err, _E, "Failed to get started status");
+
+ *started = true;
+
+ return CONV_ERROR_NONE;
+}
+
//LCOV_EXCL_STOP
g_variant_get(param, "(i&si&si@a(y))", &req_id, &subject, &error, &data, &length, &binary_array);
_D("[Response] ReqId: %d, Subject: %s, Error: %d", req_id, subject, error);
const unsigned char *binary = (const unsigned char*)g_variant_get_data(binary_array);
- _D("%s", binary);
+
response_cb_map_t::iterator it = response_cb_map->find(subject);
IF_FAIL_VOID_TAG(it!= response_cb_map->end(), _E, "Unknown subject'%s'", subject);
it->second(subject, req_id, error, data, length, binary);
*/
int conv_payload_get_binary(conv_payload_h handle, int* length, const unsigned char** value);
+/**
+ * @brief Gets service start status.
+ * @since_tizen 3.0
+ *
+ * @param[in] handle The service handle
+ * @param[in] channel_handle The channel handle
+ * @param[out] started The boolean value of service started check
+ *
+ * @return 0 on success, otherwise a negative error value
+ * @retval #CONV_ERROR_NONE Successful
+ * @retval #CONV_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #CONV_ERROR_NOT_SUPPORTED Not supported
+ * @retval #CONV_ERROR_NO_DATA No Data
+ *
+ */
+int conv_service_is_started(conv_service_h handle, conv_channel_h channel_handle, bool* started);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
public:
Service();
Service(string, string, string, string, string);
- static Result_Base *Resulturi;
Result_Base *Resultdevice;
position findServiceValue(string, char *);
static void getByURI(string, Result_Base*);
static void getByURI(string, long, Result_Base *result);
static void getById(string id, Result_Base *result);
- static int curl_service_calling(string uri, long, void *);
+ static int curl_service_calling(string uri, long, void *, Result_Base *);
//static Search *search();
static size_t createdata(char *buf, size_t size, size_t nmemb, void *up);
- static void createdata_process(string data, void *);
- static int json_parse_service(const char *in, void *);
+ static void createdata_process(string data, void *, Result_Base *);
+ static int json_parse_service(const char *in, void *, Result_Base *);
static Service create(ServiceInfo);
static Service create(map<string, string>);
Channel *createChannel(string uri);
this_ptr->handleWsiDestroy();
break;
- case LWS_CALLBACK_GET_THREAD_ID:
- return pthread_self();
-
case LWS_CALLBACK_CLIENT_CONFIRM_EXTENSION_SUPPORTED:
case LWS_CALLBACK_ADD_POLL_FD:
case LWS_CALLBACK_DEL_POLL_FD:
case LWS_CALLBACK_CLIENT_APPEND_HANDSHAKE_HEADER:
case LWS_CALLBACK_OPENSSL_PERFORM_CLIENT_CERT_VERIFICATION:
case LWS_CALLBACK_CLIENT_FILTER_PRE_ESTABLISH:
+ case LWS_CALLBACK_GET_THREAD_ID:
break;
default:
void Channel::publishMessage(string method, string event, const char *data,
Json::Value to, const unsigned char payload[],
int payload_size, void *user_data) {
- if (data)
+ if (data) {
MSF_DBG("data len %d, payload len %d", strlen(data), payload_size);
+ }
if (!isWebSocketOpen()) {
handleError(string(), Error::create("Not Connected"));
MSF_DBG("writeRequest start");
if (wsi_mirror != NULL) {
lws_callback_on_writable(wsi_mirror);
+ if (pthread_self() != socketThreadId) {
+ MSF_DBG("current thread is different from websocket thread => lws_cancel_service()");
+ lws_cancel_service(lws_get_context(wsi_mirror)); // to exit from poll() inside of lws_service()
+ }
}
}
if (searching) {
stop();
}
+
+ aliveMap.clear();
+
clearServices();
createMSFD();
searching_now = false;
searchListener = NULL;
+ int i;
+
+ for (i=0; i < NUM_OF_THREADS; i++) {
+ threads[i] = 0;
+ }
+
search_list.push_back(this);
}
bool Search::start()
{
MSF_DBG("Search::start()");
- if (searching_now == false) {
- if (search_ref_count == 0) {
- search_ref_count++;
-
- searching_now = true;
+ search_ref_count++;
+ searching_now = true;
- startDiscovery();
- } else {
- search_ref_count++;
-
- searching_now = true;
-
- if (searchListener != NULL) {
- searchListener->onStart();
- }
- }
- }
+ startDiscovery();
return true;
}
MSF_DBG("search stop");
if (searching_now == true) {
search_ref_count--;
- searching_now = false;
- if (search_ref_count == 0) {
- stopDiscovery();
- } else {
- if (searchListener != NULL) {
- searchListener->onStop();
- }
- }
+ stopDiscovery();
+ searching_now = false;
}
return true;
provider_mdns.start();
- ret = pthread_create(&threads[MSFD_THREAD_NUMBER], NULL, pt_startMSFD, NULL);
- if (ret == -1) {
- MSF_DBG("MSFD thread create failed");
+ if ( threads[MSFD_THREAD_NUMBER] == 0 ) {
+ ret = pthread_create(&threads[MSFD_THREAD_NUMBER], NULL, pt_startMSFD, NULL);
+ if (ret == -1) {
+ MSF_DBG("MSFD thread create failed");
+ }
}
- ret = pthread_create(&threads[UPDATE_THREAD_NUMBER], NULL, pt_update_alivemap, NULL);
- if (ret == -1) {
- MSF_DBG("update thread create failed");
+ if ( threads[UPDATE_THREAD_NUMBER] == 0 ) {
+ ret = pthread_create(&threads[UPDATE_THREAD_NUMBER], NULL, pt_update_alivemap, NULL);
+ if (ret == -1) {
+ MSF_DBG("update thread create failed");
+ }
}
onStart();
pthread_cancel(threads[UPDATE_THREAD_NUMBER]);
pthread_join(threads[UPDATE_THREAD_NUMBER], NULL);
+ threads[MSFD_THREAD_NUMBER] = 0;
+ threads[UPDATE_THREAD_NUMBER] = 0;
+
MSF_DBG("MSFD thread joined");
MSF_DBG("update alivemap thread joined");
}
string Service::TYPE_PROPERTY = "md";
string Service::ENDPOINT_PROPERTY = "se";
-Result_Base *Service::Resulturi = NULL;
-
Service Service::local_service;
bool Service::success_get_id = false;
void Service::getDeviceInfo(Result_Base *dev_result)
{
- curl_service_calling(uri, 5000, dev_result);
+ curl_service_calling(uri, 5000, dev_result, NULL);
}
string Service::getUniqueId(string address)
GetLocalServiceCallback r1Service;
string remote_uri = "http://" + address + "/api/v2/";
success_get_id = false;
+ MSF_DBG("calling getByUri");
getByURI(remote_uri, 5000, &r1Service);
+ MSF_DBG("called getByUri");
if (success_get_id) {
MSF_DBG("remote_device_id[%s] for address[%s]", remote_device_id.c_str(), address.c_str());
{
MSF_DBG("getByURI() uri = %s", uri.c_str());
- Resulturi = result;
+ MSF_DBG("calling curl_service_calling");
//Resultdevice = NULL;
- curl_service_calling(uri, timeout, NULL);
- Resulturi = NULL;
+ curl_service_calling(uri, timeout, NULL, result);
+ MSF_DBG("called curl_service_calling");
+ MSF_DBG("getByURI end");
}
-int Service::curl_service_calling(string uri, long timeout, void *dev_result_ptr)
+int Service::curl_service_calling(string uri, long timeout, void *dev_result_ptr, Result_Base *result)
{
+ MSF_DBG("curl_service_calling start");
CURL *curl;
CURLcode res;
struct curl_slist *headers = NULL;
if ((res != CURLE_OK) || (read_data == NULL)) {
MSF_DBG("curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
- createdata_process("", dev_result_ptr);
+ createdata_process("", dev_result_ptr, result);
if (read_data) {
free(read_data);
}
} else {
- createdata_process(string(read_data), dev_result_ptr);
+ MSF_DBG("calling createdata_process");
+ createdata_process(string(read_data), dev_result_ptr, result);
free(read_data);
}
curl_easy_cleanup(curl);
}
-
+ MSF_DBG("curl_service_calling end");
return 0;
}
return size*nmemb;
}
-void Service::createdata_process(string data, void *dev_result_ptr)
+void Service::createdata_process(string data, void *dev_result_ptr, Result_Base* result)
{
if (data.length() != 0) {
- json_parse_service(data.c_str(), dev_result_ptr);
+ json_parse_service(data.c_str(), dev_result_ptr, result);
} else {
- if (Resulturi != NULL) {
- Resulturi->onError(Error::create("Timeout"));
+ if (result != NULL) {
+ result->onError(Error::create("Timeout"));
}
if (dev_result_ptr != NULL) {
(static_cast<Result_Base*> (dev_result_ptr))->onError(Error::create("Not Found"));
}
}
-int Service::json_parse_service(const char *in, void *ptr)
+int Service::json_parse_service(const char *in, void *ptr, Result_Base* result)
{
+ MSF_DBG("json_parse_service start");
JsonParser *parser = json_parser_new();
if (json_parser_load_from_data(parser, in, -1, NULL)) {
retService.SecureConnectionSupport = true;
}
- if ((Resulturi!= NULL)) {
- Resulturi->onSuccess(retService);
+ if ((result != NULL)) {
+ MSF_DBG("json_parse_service");
+ result->onSuccess(retService);
}
+ MSF_DBG("json_parse_service end");
+
return 0;
}
g_service = 0;
}
+ aliveMap.clear();
+
int rv = dnssd_initialize();
if (rv != DNSSD_ERROR_NONE) {
MSF_DBG("mDNS is not initialzed.");