Exception handling if an error occurs in syspopup. 86/142786/1 accepted/tizen_3.0_common accepted/tizen_3.0_mobile accepted/tizen_3.0_tv accepted/tizen_3.0_wearable tizen_3.0 accepted/tizen/3.0/common/20170808.135544 accepted/tizen/3.0/mobile/20170808.070830 accepted/tizen/3.0/tv/20170808.070834 accepted/tizen/3.0/wearable/20170808.070838 submit/tizen_3.0/20170807.083452
authorSegwon <segwon.han@samsung.com>
Mon, 7 Aug 2017 08:29:30 +0000 (17:29 +0900)
committerSegwon <segwon.han@samsung.com>
Mon, 7 Aug 2017 08:29:58 +0000 (17:29 +0900)
Signed-off-by: Segwon <segwon.han@samsung.com>
Change-Id: I2ff28e4582961f5f710d961e7e23b2385b0cac4d

daemon/access_control/ACLManager.cpp
daemon/access_control/ACLManager.h
daemon/service_provider/RemoteAppControlServiceProvider.cpp

index 279dfb8de49d6f010d0534301e138a39d50c7c19..c3579fe4f33b169146b57a418e80903d65ca082d 100644 (file)
@@ -95,7 +95,7 @@ static void LaunchPasskeyInputPopupCallback(app_control_h request, app_control_h
        info->callback(info->userdata, result, passkey);
 }
 
-void conv::acl_manager::LaunchPasskeyInputPopup(PopupCallback callback, void *userdata)
+int conv::acl_manager::LaunchPasskeyInputPopup(PopupCallback callback, void *userdata)
 {
        bundle *b = NULL;
        b = bundle_create();
@@ -104,11 +104,18 @@ void conv::acl_manager::LaunchPasskeyInputPopup(PopupCallback callback, void *us
        int ret = syspopup_launch((char *)"d2d-conv-syspopup", b);
        if (ret != 0) {
                _E("syspopup_launch Error (%d).", ret);
+               bundle_free(b);
+               return ACLResult_Error;
        }
 
        bundle_free(b);
 
        info = (usercallback_info *)malloc(sizeof(usercallback_info)*1);
+       if (info == NULL) {
+               _E("info allocation failed in syspopup_launch Error.");
+               return ACLResult_Error;
+       }
+
        info->callback = callback;
        info->userdata = userdata;
 
@@ -118,9 +125,11 @@ void conv::acl_manager::LaunchPasskeyInputPopup(PopupCallback callback, void *us
        app_control_add_extra_data(app_control, "MESSAGE", "REGIST_CALLBACK");
        app_control_send_launch_request(app_control, LaunchPasskeyInputPopupCallback, info);
        app_control_destroy(app_control);
+
+       return ACLResult_OK;
 }
 
-void conv::acl_manager::LaunchPasskeyShowPopup(const char *deviceName)
+int conv::acl_manager::LaunchPasskeyShowPopup(const char *deviceName)
 {
        CreatePasskey();
 
@@ -133,9 +142,13 @@ void conv::acl_manager::LaunchPasskeyShowPopup(const char *deviceName)
        int ret = syspopup_launch((char *)"d2d-conv-syspopup", b);
        if (ret != 0) {
                _E("syspopup_launch Error (%d).", ret);
+               bundle_free(b);
+               return ACLResult_Error;
        }
 
        bundle_free(b);
+
+       return ACLResult_OK;
 }
 
 static void LaunchToast(char *type, char *data)
index 5f49a1482943d002e5eef2bd3f55e812542087dd..a9486400f07cceee36dcab984e51f54a25f06f64 100644 (file)
@@ -53,8 +53,8 @@ namespace conv {
 
     typedef void (*PopupCallback)(void *userdata, int result, char *passkey);
 
-    void LaunchPasskeyShowPopup(const char *deviceName);
-    void LaunchPasskeyInputPopup(PopupCallback callback, void *userdata);
+    int LaunchPasskeyShowPopup(const char *deviceName);
+    int LaunchPasskeyInputPopup(PopupCallback callback, void *userdata);
 
     void LaunchPopupCancelToast();
     void LaunchPasskeyWrongToast();
index a2f7ea9d5b19513710ffec88312fe05c28c32579..cd8e90e9009606fc001f2a9a3614fc9380658b4f 100755 (executable)
@@ -330,8 +330,13 @@ static int __access_control(iotcon_request_h request, iotcon_attributes_h attrib
                        policy = CONV_ACCESS_CONTROL_DENIED;
                } else if (acManagerPolicy == ACMANAGER_POLICY_U2) {
                        _D("UNDECIDED");
-                       conv::acl_manager::LaunchPasskeyShowPopup(deviceName);
-                       policy = CONV_ACCESS_CONTROL_PASSKEY_REQUEST;
+                       int popup_err = conv::acl_manager::LaunchPasskeyShowPopup(deviceName);
+                       if(popup_err == ACLResult_Error) {
+                               _E("ACLResult is Error");
+                               policy = CONV_ACCESS_CONTROL_PASSKEY_CANCEL;
+                       } else {
+                               policy = CONV_ACCESS_CONTROL_PASSKEY_REQUEST;
+                       }
                }
                _D("acManagerPolicy:%d", acManagerPolicy);
 #else
@@ -372,6 +377,7 @@ static int __access_control(iotcon_request_h request, iotcon_attributes_h attrib
                        conv::acl_manager::SetDeviceInfoAndACL(macAddress, deviceType, deviceName, ip.c_str(), ACMANAGER_POLICY_P);
                        conv::acl_manager::LaunchAccessAllowedToast(deviceName);
                } else if (ret == ACLResult_Error) {
+                       _E("ACLResult is Error");
                        policy = CONV_ACCESS_CONTROL_PASSKEY_WRONG;
                } else if (ret == ACLResult_Close) {
                        policy = CONV_ACCESS_CONTROL_PASSKEY_REJECTED;
@@ -743,7 +749,13 @@ static void __on_access_response(iotcon_remote_resource_h resource, iotcon_error
        } else if (!strcmp(CONV_ACCESS_CONTROL_PASSKEY_REQUEST, accessControlResult)) {
 #if defined(_D2D_INTERNAL_ACL_)
                _D("__on_access_response PASSKEY REQUEST");
-               conv::acl_manager::LaunchPasskeyInputPopup(passkey_popup_callback, svcInfo);
+               int popup_err = conv::acl_manager::LaunchPasskeyInputPopup(passkey_popup_callback, svcInfo);
+               if (popup_err == ACLResult_Error) {
+                       _E("ACLResult is Error");
+                       conv::Json result;
+                       svcInfo->accessControlState = ACCESS_CONTROL_STATE_DENIED;
+                       sendResponse(result, CONV_JSON_ON_START, CONV_ERROR_INVALID_OPERATION, svcInfo->registeredRequest);
+               }
                return;
 #endif
        } else if (!strcmp(CONV_ACCESS_CONTROL_PASSKEY_RIGHT, accessControlResult)) {