Add check privilege of remote input 83/84983/4
authorInHong Han <inhong1.han@samsung.com>
Mon, 22 Aug 2016 11:37:14 +0000 (20:37 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Tue, 23 Aug 2016 06:55:57 +0000 (23:55 -0700)
Change-Id: I474f5f34d0f9c94b14c2ec5c7ba135681b7b7d2b

ism/modules/panelagent/ecoresocket/ecore_socket_panel_agent_module.cpp
ism/src/isf_remote_client.cpp
ism/src/isf_remote_client.h
ism/src/isf_remote_control.cpp
ism/src/isf_remote_control.h
ism/src/scim_trans_commands.h

index d989085..85f9204 100755 (executable)
@@ -3009,6 +3009,19 @@ private:
 
                     if (NULL != buf)
                         delete[] buf;
+                } else if (cmd == ISM_TRANS_CMD_CHECK_REMOTE_PRIVILEGE) {
+                    bool ret = false;
+
+                    if (m_info_manager->check_privilege_by_sockfd(client_id, IMEMANAGER_PRIVILEGE))
+                        ret = true;
+
+                    Transaction trans;
+                    Socket client_socket(client_id);
+
+                    trans.clear();
+                    trans.put_command(SCIM_TRANS_CMD_REPLY);
+                    trans.put_command(ret ? SCIM_TRANS_CMD_OK : SCIM_TRANS_CMD_FAIL);
+                    trans.write_to_socket(client_socket);
                 } else {
                     LOGW ("unknow cmd: %d\n", cmd);
                 }
index 28edbef..cd19361 100644 (file)
@@ -257,6 +257,26 @@ public:
         return true;
     }
 
+    bool check_privilege (void) {
+        int cmd;
+
+        m_trans.put_command (ISM_TRANS_CMD_CHECK_REMOTE_PRIVILEGE);
+        m_trans.write_to_socket (m_socket_remoteinput2panel);
+        if (!m_trans.read_from_socket (m_socket_remoteinput2panel, m_socket_timeout)) {
+            std::cerr << __func__ << " read_from_socket() may be timeout \n";
+            return false;
+        }
+
+        if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY &&
+                m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) {
+        } else {
+            std::cerr << __func__ << " remote control permission denied\n";
+            return false;
+        }
+
+        return true;
+    }
+
     remote_control_callback_type recv_callback_message(void) {
         if (! m_socket_panel2remoteinput.is_connected () || ! m_trans_recv.read_from_socket(m_socket_panel2remoteinput, m_socket_timeout))
             return REMOTE_CONTROL_CALLBACK_ERROR;
@@ -341,12 +361,14 @@ RemoteInputClient::close_connection (void)
     m_impl->close_connection ();
 }
 
-bool RemoteInputClient::is_connected (void) const
+bool
+RemoteInputClient::is_connected (void) const
 {
     return m_impl->is_connected ();
 }
 
-int RemoteInputClient::get_panel2remote_connection_number (void) const
+int
+RemoteInputClient::get_panel2remote_connection_number (void) const
 {
     return m_impl->get_panel2remote_connection_number ();
 }
@@ -369,6 +391,12 @@ RemoteInputClient::send_remote_input_message (const char* str)
     return m_impl->send_remote_input_message (str);
 }
 
+bool
+RemoteInputClient::check_privilege (void)
+{
+    return m_impl->check_privilege ();
+}
+
 remote_control_callback_type
 RemoteInputClient::recv_callback_message (void)
 {
index 045f722..86fec48 100644 (file)
@@ -52,6 +52,7 @@ public:
     bool prepare                (void);
     bool has_pending_event      (void) const;
     bool send_remote_input_message (const char* str);
+    bool check_privilege        (void);
     remote_control_callback_type recv_callback_message (void);
     void get_entry_metadata (int *hint, int *layout, int *variation, int *autocapital_type);
     void get_default_text (String &default_text, int *cursor);
index a2c2a75..f8384e8 100644 (file)
@@ -106,6 +106,16 @@ EXAPI remote_control_client * remote_control_connect(void)
         if (!client->remote_client.open_connection())
             goto cleanup;
 
+        if (!client->remote_client.prepare()) {
+            LOGE ("REMOTE_CONTROL_REPLY_TIMEOUT\n");
+            goto cleanup;
+        }
+
+        if (!client->remote_client.check_privilege()) {
+            LOGE ("REMOTE_CONTROL_PERMISSION_DENIED\n");
+            goto cleanup;
+        }
+
         client->remote_client_id = client->remote_client.get_panel2remote_connection_number();
 
         if (client->remote_client_id >= 0) {
@@ -132,6 +142,12 @@ EXAPI int remote_control_disconnect(remote_control_client *client)
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     if (client->remote_fd_handler)
         ecore_main_fd_handler_del(client->remote_fd_handler);
 
@@ -147,6 +163,12 @@ EXAPI int remote_control_focus_in_callback_set(remote_control_client *client, re
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->focus_in_cb = func;
     client->focus_in_cb_user_data = user_data;
 
@@ -158,6 +180,12 @@ EXAPI int remote_control_focus_in_callback_unset(remote_control_client *client)
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->focus_in_cb = NULL;
     client->focus_in_cb_user_data = NULL;
 
@@ -169,6 +197,12 @@ EXAPI int remote_control_focus_out_callback_set(remote_control_client *client, r
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->focus_out_cb = func;
     client->focus_out_cb_user_data = user_data;
 
@@ -180,6 +214,12 @@ EXAPI int remote_control_focus_out_callback_unset(remote_control_client *client)
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->focus_out_cb = NULL;
     client->focus_out_cb_user_data = NULL;
 
@@ -191,6 +231,12 @@ EXAPI int remote_control_entry_metadata_callback_set(remote_control_client *clie
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->metadata_cb = func;
     client->metadata_cb_user_data = user_data;
 
@@ -202,6 +248,12 @@ EXAPI int remote_control_entry_metadata_callback_unset(remote_control_client *cl
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->metadata_cb = NULL;
     client->metadata_cb_user_data = NULL;
 
@@ -213,6 +265,12 @@ EXAPI int remote_control_default_text_callback_set(remote_control_client *client
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->default_text_cb = func;
     client->default_text_cb_user_data = user_data;
 
@@ -224,6 +282,12 @@ EXAPI int remote_control_default_text_callback_unset(remote_control_client *clie
     if (client == NULL)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     client->default_text_cb = NULL;
     client->default_text_cb_user_data = NULL;
 
@@ -235,11 +299,19 @@ EXAPI int remote_control_send_key_event(remote_control_client *client, remote_co
     if (client == NULL || key < REMOTE_CONTROL_KEY_ENTER || key > REMOTE_CONTROL_KEY_PAGE_DOWN)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     char key_str[10] = {};
     snprintf(key_str, sizeof(key_str), "%d", key);
     String command = String ("|plain|send_key_event|") + String (key_str) + String ("|");
 
-    client->remote_client.prepare();
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
     if (focus_flag && client->remote_client.send_remote_input_message(command.c_str ())) {
         event_check_flag = true;
         return REMOTE_CONTROL_ERROR_NONE;
@@ -252,9 +324,17 @@ EXAPI int remote_control_send_commit_string(remote_control_client *client, const
     if (client == NULL || !text || strlen(text) == 0)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     String command = String ("|plain|commit_string|") + String (text) + String ("|");
 
-    client->remote_client.prepare();
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
     if (focus_flag && client->remote_client.send_remote_input_message(command.c_str ())) {
         event_check_flag = true;
         return REMOTE_CONTROL_ERROR_NONE;
@@ -267,9 +347,17 @@ EXAPI int remote_control_update_preedit_string(remote_control_client *client, co
     if (client == NULL || !text || strlen(text) == 0 || cursor_pos < 0)
         return REMOTE_CONTROL_INVALID_PARAMETER;
 
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
+    if (!client->remote_client.check_privilege())
+        return REMOTE_CONTROL_PERMISSION_DENIED;
+
     String command = String ("|plain|update_preedit_string|") + String (text) + String ("|");
 
-    client->remote_client.prepare();
+    if (!client->remote_client.prepare())
+        return REMOTE_CONTROL_REPLY_TIMEOUT;
+
     if (focus_flag && client->remote_client.send_remote_input_message(command.c_str ())) {
         event_check_flag = true;
         return REMOTE_CONTROL_ERROR_NONE;
index cdcbea3..18e502a 100644 (file)
@@ -12,6 +12,8 @@ typedef enum {
     REMOTE_CONTROL_ERROR_NONE = 0,
     REMOTE_CONTROL_INVALID_PARAMETER,
     REMOTE_CONTROL_INVALID_OPERATION,
+    REMOTE_CONTROL_PERMISSION_DENIED,
+    REMOTE_CONTROL_REPLY_TIMEOUT,
 } remote_control_error_e;
 
 typedef enum {
index 21340d7..77f3dc5 100644 (file)
@@ -642,6 +642,7 @@ const int ISM_TRANS_CMD_RECV_REMOTE_FOCUS_IN              = 1026;
 const int ISM_TRANS_CMD_RECV_REMOTE_FOCUS_OUT             = 1027;
 const int ISM_TRANS_CMD_RECV_REMOTE_ENTRY_METADATA        = 1028;
 const int ISM_TRANS_CMD_RECV_REMOTE_DEFAULT_TEXT          = 1029;
+const int ISM_TRANS_CMD_CHECK_REMOTE_PRIVILEGE            = 1030;
 
 /* IMControl to ISE */
 const int ISM_TRANS_CMD_SET_ISE_MODE                      = 1108;