summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2018-11-28 17:23:49 +0800
committerwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>2018-11-28 17:26:26 +0800
commitb730d31a7e5e23756ab1b076de21d41369a500c5 (patch)
tree59784664e070438492ddeb96c6abc2a7512d2e67
parent31ff5ce755d00cf12ea2ffc96c33ed9acd36358f (diff)
fix issue,not free stringguppy_6.99.2guppy/6.99.26.99.2
After called afb_req_get_application_id api needed to free the string. Change-Id: Ia59a3f4984854d61f4c5a8d9206f44988594ebf3 Signed-off-by: wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
-rw-r--r--src/hs-client.cpp38
-rw-r--r--src/hs-clientmanager.cpp16
-rw-r--r--src/hs-helper.cpp25
-rw-r--r--src/hs-helper.h13
4 files changed, 74 insertions, 18 deletions
diff --git a/src/hs-client.cpp b/src/hs-client.cpp
index 536ff6e..e97f844 100644
--- a/src/hs-client.cpp
+++ b/src/hs-client.cpp
@@ -216,9 +216,14 @@ int HS_Client::showWindow(afb_req_t request, const char* appid)
hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__);
const char* param = afb_req_value(request, _parameter);
if(param) {
- const char* req_appid = afb_req_get_application_id(request);
+ std::string req_appid = std::move(get_application_id(request));
+ if(req_appid.empty()) {
+ HMI_NOTICE("homescreen-service","can't get application identifier");
+ return AFB_REQ_GETAPPLICATIONID_ERROR;
+ }
+
struct json_object* param_obj = json_tokener_parse(param);
- json_object_object_add(param_obj, _replyto, json_object_new_string(req_appid));
+ json_object_object_add(param_obj, _replyto, json_object_new_string(req_appid.c_str()));
json_object_object_add(push_obj, _parameter, param_obj);
}
else {
@@ -247,10 +252,15 @@ int HS_Client::hideWindow(afb_req_t request)
if(!checkEvent(__FUNCTION__))
return 0;
- HMI_NOTICE("homescreen-service","%s application_id = %s.", __FUNCTION__);
- const char* req_appid = afb_req_get_application_id(request);
+ HMI_NOTICE("homescreen-service","%s called.", __FUNCTION__);
+ std::string req_appid = std::move(get_application_id(request));
+ if(req_appid.empty()) {
+ HMI_NOTICE("homescreen-service","can't get application identifier");
+ return AFB_REQ_GETAPPLICATIONID_ERROR;
+ }
+
struct json_object* push_obj = json_object_new_object();
- hs_add_object_to_json_object_str( push_obj, 4, _application_id, req_appid,
+ hs_add_object_to_json_object_str( push_obj, 4, _application_id, req_appid.c_str(),
_type, __FUNCTION__);
afb_event_push(my_event, push_obj);
return 0;
@@ -310,14 +320,19 @@ int HS_Client::showNotification(afb_req_t request)
const char *value = afb_req_value(request, _text);
if(value) {
HMI_NOTICE("homescreen-service","text is %s", value);
- const char* appid = afb_req_get_application_id(request);
+ std::string appid =std::move(get_application_id(request));
+ if(appid.empty()) {
+ HMI_NOTICE("homescreen-service","can't get application identifier");
+ return AFB_REQ_GETAPPLICATIONID_ERROR;
+ }
+
struct json_object* param_obj = json_object_new_object();
const char *icon = afb_req_value(request, _icon);
if(icon) {
json_object_object_add(param_obj, _icon, json_object_new_string(icon));
json_object_object_add(param_obj, _text, json_object_new_string(value));
struct json_object* push_obj = json_object_new_object();
- hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__);
+ hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid.c_str(), _type, __FUNCTION__);
json_object_object_add(push_obj, _parameter, param_obj);
afb_event_push(my_event, push_obj);
}
@@ -353,11 +368,16 @@ int HS_Client::showInformation(afb_req_t request)
const char *value = afb_req_value(request, _info);
if(value) {
HMI_NOTICE("homescreen-service","info is %s", value);
- const char* appid = afb_req_get_application_id(request);
+ std::string appid = std::move(get_application_id(request));
+ if(appid.empty()) {
+ HMI_NOTICE("homescreen-service","can't get application identifier");
+ return AFB_REQ_GETAPPLICATIONID_ERROR;
+ }
+
struct json_object* param_obj = json_object_new_object();
json_object_object_add(param_obj, _info, json_object_new_string(value));
struct json_object* push_obj = json_object_new_object();
- hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__);
+ hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid.c_str(), _type, __FUNCTION__);
json_object_object_add(push_obj, _parameter, param_obj);
afb_event_push(my_event, push_obj);
}
diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp
index ba29326..1355c99 100644
--- a/src/hs-clientmanager.cpp
+++ b/src/hs-clientmanager.cpp
@@ -254,9 +254,13 @@ int HS_ClientManager::subscribe(afb_req_t request)
const char *value = afb_req_value(request, "event");
HMI_NOTICE("homescreen-service","value is %s", value);
if(value) {
- std::string appid(afb_req_get_application_id(request));
- std::lock_guard<std::mutex> lock(this->mtx);
+ std::string appid =std::move(get_application_id(request));
+ if(appid.empty()) {
+ HMI_NOTICE("homescreen-service","can't get application identifier");
+ return AFB_REQ_GETAPPLICATIONID_ERROR;
+ }
+ std::lock_guard<std::mutex> lock(this->mtx);
HS_Client* client = nullptr;
auto ip = client_list.find(appid);
if(ip != client_list.end()) {
@@ -295,9 +299,13 @@ int HS_ClientManager::unsubscribe(afb_req_t request)
HMI_NOTICE("homescreen-service","value is %s", value);
int ret = 0;
if(value) {
- std::string appid(afb_req_get_application_id(request));
- std::lock_guard<std::mutex> lock(this->mtx);
+ std::string appid = std::move(get_application_id(request));
+ if(appid.empty()) {
+ HMI_NOTICE("homescreen-service","can't get application identifier");
+ return AFB_REQ_GETAPPLICATIONID_ERROR;
+ }
+ std::lock_guard<std::mutex> lock(this->mtx);
auto ip = client_list.find(appid);
if(ip != client_list.end()
&& ip->second->unsubscribe(request, value) != 0) {
diff --git a/src/hs-helper.cpp b/src/hs-helper.cpp
index 07597b7..d0f5713 100644
--- a/src/hs-helper.cpp
+++ b/src/hs-helper.cpp
@@ -246,3 +246,28 @@ int hs_search_event_name_index(const char* value)
}
return ret;
}
+
+/**
+ * get application id from request
+ *
+ * #### Parameters
+ * - request : the request
+ *
+ * #### Return
+ * got application id
+ *
+ */
+std::string get_application_id(const afb_req_t request)
+{
+ std::string appid;
+ char *app_id = afb_req_get_application_id(request);
+ if(app_id == nullptr) {
+ appid = std::string("");
+ }
+ else {
+ appid = std::string(app_id);
+ free(app_id);
+ }
+
+ return appid;
+}
diff --git a/src/hs-helper.h b/src/hs-helper.h
index c01e49a..95ecb66 100644
--- a/src/hs-helper.h
+++ b/src/hs-helper.h
@@ -19,12 +19,14 @@
#define AFB_BINDING_VERSION 3
#include <afb/afb-binding.h>
#include <json-c/json.h>
+#include <string>
-#define AFB_EVENT_BAD_REQUEST 100
-#define AFB_REQ_SUBSCRIBE_ERROR 101
-#define AFB_REQ_UNSUBSCRIBE_ERROR 102
-#define AFB_REQ_SHOWNOTIFICATION_ERROR 103
-#define AFB_REQ_SHOWINFORMATION_ERROR 104
+#define AFB_EVENT_BAD_REQUEST 100
+#define AFB_REQ_SUBSCRIBE_ERROR 101
+#define AFB_REQ_UNSUBSCRIBE_ERROR 102
+#define AFB_REQ_SHOWNOTIFICATION_ERROR 103
+#define AFB_REQ_SHOWINFORMATION_ERROR 104
+#define AFB_REQ_GETAPPLICATIONID_ERROR 105
typedef enum REQ_ERROR
{
@@ -47,5 +49,6 @@ void hs_add_object_to_json_object(struct json_object* j_obj, int count, ...);
void hs_add_object_to_json_object_str(struct json_object* j_obj, int count, ...);
void hs_add_object_to_json_object_func(struct json_object* j_obj, const char* verb_name, int count, ...);
int hs_search_event_name_index(const char* value);
+std::string get_application_id(const afb_req_t request);
#endif /*HOMESCREEN_HELPER_H*/