Adding extra logs
[platform/core/pim/contacts-service.git] / common / ctsvc_socket.c
index 3f07578..189285d 100644 (file)
@@ -26,7 +26,9 @@
 #include "ctsvc_socket.h"
 #include "ctsvc_mutex.h"
 #include "ctsvc_inotify.h"
-
+#ifdef _CONTACTS_IPC_CLIENT
+#include "ctsvc_client_utils.h"
+#endif
 static int __ctsvc_conn_refcnt = 0;
 static int __ctsvc_sockfd = -1;
 
@@ -34,14 +36,26 @@ int ctsvc_socket_init(void)
 {
        int ret;
        struct sockaddr_un caddr;
+       uid_t uid = getuid();
 
+       WARN("ctsvc_socket_init: socket ref count : %d", __ctsvc_conn_refcnt);
        if (0 < __ctsvc_conn_refcnt) {
                __ctsvc_conn_refcnt++;
                return  CONTACTS_ERROR_NONE;
        }
 
        char sock_file[CTSVC_PATH_MAX_LEN] = {0};
-       snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/%s", getuid(), CTSVC_SOCKET_FILE);
+
+#ifdef _CONTACTS_IPC_CLIENT
+       if (ctsvc_client_is_in_system_session()) {
+               /* LCOV_EXCL_START */
+               if (CONTACTS_ERROR_NONE != ctsvc_client_get_active_uid(&uid))
+                       return CONTACTS_ERROR_SYSTEM;
+               /* LCOV_EXCL_STOP */
+       }
+#endif
+
+       snprintf(sock_file, sizeof(sock_file), CTSVC_SOCK_PATH"/%s", uid, CTSVC_SOCKET_FILE);
 
        bzero(&caddr, sizeof(caddr));
        caddr.sun_family = AF_UNIX;
@@ -53,10 +67,12 @@ int ctsvc_socket_init(void)
 
        ret = connect(__ctsvc_sockfd, (struct sockaddr *)&caddr, sizeof(caddr));
        if (-1 == ret) {
+               /* LCOV_EXCL_START */
                ERR("connect() Fail(errno = %d)", errno);
                close(__ctsvc_sockfd);
                __ctsvc_sockfd = -1;
                return CONTACTS_ERROR_IPC;
+               /* LCOV_EXCL_STOP */
        }
 
        __ctsvc_conn_refcnt++;
@@ -134,6 +150,61 @@ static int __ctsvc_socket_handle_return(int fd, ctsvc_socket_msg_s *msg)
        return CONTACTS_ERROR_NONE;
 }
 
+static int __ctsvc_cancel_sim_import(int fd)
+{
+       int ret;
+       ctsvc_socket_msg_s msg = {0};
+
+       RETVM_IF(-1 == fd, CONTACTS_ERROR_IPC, "socket is not connected");
+
+       msg.type = CTSVC_SOCKET_MSG_TYPE_CANCEL_IMPORT_SIM;
+
+       ret = __ctsvc_safe_write(fd, (char *)&msg, sizeof(msg));
+       RETVM_IF(-1 == ret, CONTACTS_ERROR_IPC, "__ctsvc_safe_write() Fail(errno = %d)", errno);
+
+       return CONTACTS_ERROR_NONE;
+}
+
+static int __ctsvc_client_socket_response_handler(int fd, ctsvc_socket_msg_s *msg, contacts_sim_import_progress_cb callback, void *user_data)
+{
+       CTS_FN_CALL;
+       int ret;
+
+       do {
+               ret = __ctsvc_safe_read(fd, (char *)msg, sizeof(ctsvc_socket_msg_s));
+               RETVM_IF(-1 == ret, CONTACTS_ERROR_IPC, "__ctsvc_safe_read() Fail(errno = %d)", errno);
+               RETVM_IF(CTSVC_SOCKET_MSG_REQUEST_MAX_ATTACH < msg->attach_num, CONTACTS_ERROR_IPC,
+                                       "Invalid msg(attach_num = %d)", msg->attach_num);
+
+               switch (msg->type) {
+               case CTSVC_SOCKET_MSG_TYPE_REQUEST_RETURN_VALUE:
+                       break;
+
+               case CTSVC_SOCKET_MSG_TYPE_REQUEST_INVOKE_CB:
+                       DBG("total[%d], index[%d]", msg->val, msg->data);
+                       if (callback) {
+                               if (false == callback(msg->val, msg->data, user_data))
+                                       __ctsvc_cancel_sim_import(fd);
+                       } else {
+                               WARN("No callback");
+                       }
+                       break;
+
+               /* LCOV_EXCL_START */
+               default:
+                       WARN("Unknown Type(%d), ret=%d, attach_num= %d,"
+                                       "attach1 = %d, attach2 = %d, attach3 = %d, attach4 = %d",
+                                       msg->type, msg->val, msg->attach_num,
+                                       msg->attach_sizes[0], msg->attach_sizes[1], msg->attach_sizes[2],
+                                       msg->attach_sizes[3]);
+                       break;
+               /* LCOV_EXCL_STOP */
+               }
+       } while (CTSVC_SOCKET_MSG_TYPE_REQUEST_RETURN_VALUE != msg->type);
+
+       return CONTACTS_ERROR_NONE;
+}
+
 static void __ctsvc_remove_invalid_msg(int fd, int size)
 {
        int ret;
@@ -162,7 +233,8 @@ static void __ctsvc_remove_invalid_msg(int fd, int size)
        }
 }
 
-int ctsvc_request_sim_import(int sim_slot_no)
+int ctsvc_request_sim_import(int sim_slot_no, contacts_sim_import_progress_cb callback,
+               void *user_data)
 {
        int i, ret;
        ctsvc_socket_msg_s msg = {0};
@@ -182,7 +254,7 @@ int ctsvc_request_sim_import(int sim_slot_no)
        ret = __ctsvc_safe_write(__ctsvc_sockfd, src, msg.attach_sizes[0]);
        RETVM_IF(-1 == ret, CONTACTS_ERROR_IPC, "__ctsvc_safe_write() Fail(errno = %d)", errno);
 
-       ret = __ctsvc_socket_handle_return(__ctsvc_sockfd, &msg);
+       ret = __ctsvc_client_socket_response_handler(__ctsvc_sockfd, &msg, callback, user_data);
        RETVM_IF(CONTACTS_ERROR_NONE != ret, ret, "__ctsvc_socket_handle_return() Fail(%d)", ret);
        DBG("attach_num = %d", msg.attach_num);