fixed media scanner issue 28/36628/4
authorji.yong.seo <ji.yong.seo@samsung.com>
Wed, 11 Mar 2015 05:01:34 +0000 (14:01 +0900)
committerji.yong.seo <ji.yong.seo@samsung.com>
Thu, 12 Mar 2015 04:27:20 +0000 (13:27 +0900)
Change-Id: I915876196d2196d51b8746e61edab08210adeada

lib/media-util-db.c
lib/media-util-ipc.c
lib/media-util-register.c
src/scanner/media-scanner-socket.c
src/scanner/media-scanner.c
src/server/media-server-db.c
src/server/media-server-main.c
src/server/media-server-scanner.c
src/server/media-server-socket.c
src/server/media-server-thumb.c

index 3a6d105..0fc45f2 100755 (executable)
@@ -393,7 +393,7 @@ static int __media_db_request_update(ms_msg_type_e msg_type, const char *request
 
        /*Create Socket*/
 #ifdef _USE_UDS_SOCKET_
-       ret = ms_ipc_create_client_socket(MS_PROTOCOL_TCP, MS_TIMEOUT_SEC_10, &sockfd, port);
+       ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, MS_TIMEOUT_SEC_10, &sockfd, port);
 #else
        ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, MS_TIMEOUT_SEC_10, &sockfd);
 #endif
index adab3a9..085afc7 100755 (executable)
@@ -411,13 +411,8 @@ int ms_ipc_send_msg_to_server(int sockfd, int port, ms_comm_msg_s *send_msg, str
        addr.sin_port = htons(port);
 #endif
 
-    if (connect(sockfd, &addr, sizeof(addr)) < 0) {
-        MSAPI_DBG_ERR("connect failed [%s]",strerror(errno));
-        return MS_MEDIA_ERR_SOCKET_SEND;
-    }
-
-       if (send(sockfd, send_msg, sizeof(*(send_msg)), 0) != sizeof(*(send_msg))) {
-               MSAPI_DBG_ERR("send failed [%s]", strerror(errno));
+       if (sendto(sockfd, send_msg, sizeof(*(send_msg)), 0, (struct sockaddr *)&addr, sizeof(addr)) != sizeof(*(send_msg))) {
+               MSAPI_DBG_ERR("sendto failed [%s]", strerror(errno));
                res = MS_MEDIA_ERR_SOCKET_SEND;
        } else {
                MSAPI_DBG("sent %d", send_msg->result);
@@ -436,9 +431,9 @@ int ms_ipc_send_msg_to_client(int sockfd, ms_comm_msg_s *send_msg, struct sockad
 #endif
 {
        int res = MS_MEDIA_ERR_NONE;
-       
-       if (send(sockfd, send_msg, sizeof(*(send_msg)), 0) != sizeof(*(send_msg))) {
-               MSAPI_DBG_ERR("send failed [%s]", strerror(errno));
+
+       if (sendto(sockfd, send_msg, sizeof(*(send_msg)), 0, (struct sockaddr *)client_addr, sizeof(*(client_addr))) != sizeof(*(send_msg))) {
+               MSAPI_DBG_ERR("sendto failed [%s]", strerror(errno));
                res = MS_MEDIA_ERR_SOCKET_SEND;
        } else {
                MSAPI_DBG("sent %d", send_msg->result);
@@ -457,8 +452,7 @@ int ms_ipc_receive_message(int sockfd, void *recv_msg, unsigned int msg_size, st
        int recv_msg_size;
        int client_socket = -1;
 #ifdef _USE_UDS_SOCKET_
-       struct sockaddr_un addr, client_addr;
-       unsigned int client_addr_len;
+       struct sockaddr_un addr;
 #else
        struct sockaddr_in addr;
 #endif
@@ -473,13 +467,8 @@ int ms_ipc_receive_message(int sockfd, void *recv_msg, unsigned int msg_size, st
        addr_len = sizeof(struct sockaddr_in);
 #endif
 
-    if ((client_socket = accept(sockfd,(struct sockaddr *) &client_addr,(socklen_t *) &client_addr_len)) < 0) {
-        MSAPI_DBG_ERR("accept failed [%s]",strerror(errno));
-        return MS_MEDIA_ERR_SOCKET_RECEIVE;
-    }
-
-       if ((recv_msg_size = recv(client_socket, recv_msg, msg_size, 0)) < 0) {
-               MSAPI_DBG_ERR("recv failed [%s]", strerror(errno));
+       if ((recv_msg_size = recvfrom(sockfd, recv_msg, msg_size, 0, (struct sockaddr *)&addr, &addr_len)) < 0) {
+               MSAPI_DBG_ERR("recvfrom failed [%s]", strerror(errno));
                return MS_MEDIA_ERR_SOCKET_RECEIVE;
        }
 
@@ -518,19 +507,13 @@ int ms_ipc_wait_message(int sockfd, void *recv_msg, unsigned int msg_size, struc
        addr_len = sizeof(struct sockaddr_in);
 #endif
 
-       if (connected != TRUE){
-
-               if ((client_socket = accept(sockfd,(struct sockaddr *) &client_addr,(socklen_t *) &client_addr_len)) < 0) {
-                       MSAPI_DBG_ERR("accept failed [%s]",strerror(errno));
-                       return MS_MEDIA_ERR_SOCKET_RECEIVE;
-               }
-               if ((recv_msg_size = recv(client_socket, recv_msg, msg_size, 0)) < 0) {
-                       MSAPI_DBG_ERR("recv failed [%s]", strerror(errno));
-                       return MS_MEDIA_ERR_SOCKET_RECEIVE;
-               }
-       } else {
-                       if ((recv_msg_size = recv(sockfd, recv_msg, msg_size, 0)) < 0) {
-                       MSAPI_DBG_ERR("recv failed [%s]", strerror(errno));
+       if ((recv_msg_size = recvfrom(sockfd, recv_msg, msg_size, 0, (struct sockaddr *)recv_addr, &addr_len)) < 0) {
+               MSAPI_DBG_ERR("recvfrom failed [%s]", strerror(errno));
+               if (errno == EWOULDBLOCK) {
+                       MSAPI_DBG_ERR("recvfrom Timeout.");
+                       return MS_MEDIA_ERR_SOCKET_RECEIVE_TIMEOUT;
+               } else {
+                       MSAPI_DBG_ERR("recvfrom error [%s]", strerror(errno));
                        return MS_MEDIA_ERR_SOCKET_RECEIVE;
                }
        }
index 380b11a..20db702 100755 (executable)
@@ -276,7 +276,7 @@ static int __media_db_request_update_async(ms_msg_type_e msg_type, const char *r
 
        /*Create Socket*/
 #ifdef _USE_UDS_SOCKET_
-       ret = ms_ipc_create_client_socket(MS_PROTOCOL_TCP, 0, &sockfd, port);
+       ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd, port);
 #else
        ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
 #endif
index b638b43..48f3bc6 100755 (executable)
@@ -115,7 +115,7 @@ int msc_send_scan_result(int result, ms_comm_msg_s *scan_data)
 
        /*Create Socket*/
 #ifdef _USE_UDS_SOCKET_
-       ret = ms_ipc_create_client_socket(MS_PROTOCOL_TCP, 0, &sockfd, MS_SCAN_COMM_PORT);
+       ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd, MS_SCAN_COMM_PORT);
 #else
        ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
 #endif
@@ -148,7 +148,7 @@ int msc_send_register_result(int result, ms_comm_msg_s *reg_data)
 
        /*Create Socket*/
 #ifdef _USE_UDS_SOCKET_
-       ret = ms_ipc_create_client_socket(MS_PROTOCOL_TCP, 0, &sockfd, MS_SCAN_COMM_PORT);
+       ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd, MS_SCAN_COMM_PORT);
 #else
        ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
 #endif
@@ -179,7 +179,7 @@ int msc_send_ready(void)
 
        /*Create Socket*/
 #ifdef _USE_UDS_SOCKET_
-       ret = ms_ipc_create_client_socket(MS_PROTOCOL_TCP, 0, &sockfd, MS_SCAN_COMM_PORT);
+       ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd, MS_SCAN_COMM_PORT);
 #else
        ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
 #endif
index 48fffb0..4a36851 100755 (executable)
@@ -254,7 +254,7 @@ int main(int argc, char **argv)
 
        /*prepare socket*/
        /* Create and bind new UDP socket */
-       if (ms_ipc_create_server_socket(MS_PROTOCOL_TCP, MS_SCAN_DAEMON_PORT, &sockfd)
+       if (ms_ipc_create_server_socket(MS_PROTOCOL_UDP, MS_SCAN_DAEMON_PORT, &sockfd)
                != MS_MEDIA_ERR_NONE) {
                MSC_DBG_ERR("Failed to create socket\n");
                exit(0);
index ec41384..a60dfd8 100755 (executable)
@@ -64,7 +64,7 @@ gboolean ms_db_thread(void *data)
 
 
        /* Create Socket*/
-       ret = ms_ipc_create_server_socket(MS_PROTOCOL_TCP, MS_DB_UPDATE_PORT, &sockfd);
+       ret = ms_ipc_create_server_socket(MS_PROTOCOL_UDP, MS_DB_UPDATE_PORT, &sockfd);
        if(ret != MS_MEDIA_ERR_NONE) {
 
                MS_DBG_ERR("Failed to create socket\n");
index 60a6c98..ce1a8f6 100755 (executable)
@@ -316,7 +316,7 @@ int main(int argc, char **argv)
        _mkdir("/var/run/media-server",S_IRWXU | S_IRWXG | S_IRWXO);
        
        /* Create and bind new UDP socket */
-       if (ms_ipc_create_server_socket(MS_PROTOCOL_TCP, MS_SCANNER_PORT, &sockfd)
+       if (ms_ipc_create_server_socket(MS_PROTOCOL_UDP, MS_SCANNER_PORT, &sockfd)
                != MS_MEDIA_ERR_NONE) {
                MS_DBG_ERR("Failed to create socket");
        } else {
index d3b6acc..d6e1bdd 100755 (executable)
@@ -168,7 +168,7 @@ ms_scanner_start(void)
 
                /*Create Socket*/
 #ifdef _USE_UDS_SOCKET_
-               ret = ms_ipc_create_server_socket(MS_PROTOCOL_TCP, MS_SCAN_COMM_PORT, &sockfd);
+               ret = ms_ipc_create_server_socket(MS_PROTOCOL_UDP, MS_SCAN_COMM_PORT, &sockfd);
                if (ret != MS_MEDIA_ERR_NONE) {
                        MS_DBG_ERR("ms_ipc_create_server_socket failed [%d]",ret);
                        g_mutex_unlock(scanner_mutex);
index 31b53c9..a72c16a 100755 (executable)
@@ -134,8 +134,6 @@ gboolean ms_read_socket(GIOChannel *src, GIOCondition condition, gpointer data)
        int req_num;
        int path_size;
        int client_sock = -1;
-       struct ucred cr;
-       int cl = sizeof(struct ucred);
 
        g_mutex_lock(scanner_mutex);
 
@@ -170,11 +168,7 @@ gboolean ms_read_socket(GIOChannel *src, GIOCondition condition, gpointer data)
                return TRUE;
        }
 
-       if (getsockopt(client_sock, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) &cl) < 0) {
-               MS_DBG_ERR("Credentail information error");
-       }
-
-       MS_DBG("receive msg from [%d] %d, %s, uid %d", recv_msg.pid, recv_msg.msg_type, recv_msg.msg, cr.uid);
+       MS_DBG("receive msg from [%d] %d, %s, uid %d", recv_msg.pid, recv_msg.msg_type, recv_msg.msg, recv_msg.uid);
 
        if (recv_msg.msg_size > 0 && recv_msg.msg_size < MS_FILE_PATH_LEN_MAX) {
                msg_size = recv_msg.msg_size;
@@ -226,7 +220,7 @@ gboolean ms_read_socket(GIOChannel *src, GIOCondition condition, gpointer data)
                scan_msg.msg_type = req_num;
                scan_msg.pid = pid;
                scan_msg.msg_size = msg_size;
-               scan_msg.uid = cr.uid;
+               scan_msg.uid = recv_msg.uid;
                ms_strcopy(scan_msg.msg, path_size, "%s", recv_msg.msg);
 
                g_mutex_unlock(scanner_mutex);
@@ -297,7 +291,8 @@ gboolean ms_receive_message_from_scanner(GIOChannel *src, GIOCondition condition
 
                                /* owner data exists */
                                /* send result to the owner of request */
-                               ms_ipc_send_msg_to_client(owner_data->client_socket, &recv_msg, owner_data->client_addr);
+                               ms_ipc_send_msg_to_client(sockfd, &recv_msg, owner_data->client_addr);
+
                                /* free owner data*/
                                _ms_delete_owner(owner_data);
                        }
@@ -320,7 +315,7 @@ int ms_send_scan_request(ms_comm_msg_s *send_msg)
 
        /*Create Socket*/
 #ifdef _USE_UDS_SOCKET_
-       ret = ms_ipc_create_client_socket(MS_PROTOCOL_TCP, 0, &sockfd, MS_SCAN_DAEMON_PORT);
+       ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd, MS_SCAN_DAEMON_PORT);
 #else
        ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
 #endif
@@ -419,9 +414,6 @@ gboolean ms_read_db_socket(GIOChannel *src, GIOCondition condition, gpointer dat
        MediaDBHandle *db_handle = NULL;
        ms_comm_msg_s msg;
        char * sql_query = NULL;
-       uid_t uid;
-    struct ucred cr;
-    int cl = sizeof(struct ucred);
 
        memset(&recv_msg, 0, sizeof(recv_msg));
 
@@ -439,22 +431,12 @@ gboolean ms_read_db_socket(GIOChannel *src, GIOCondition condition, gpointer dat
 
 //     MS_DBG("msg_type[%d], msg_size[%d] msg[%s]", recv_msg.msg_type, recv_msg.msg_size, recv_msg.msg);
 
-       if (getsockopt(client_sock, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) &cl) < 0) {
-               MS_DBG_ERR("credential information error");
-       }
-
-       if ( getuid() == cr.uid ){
-               uid = recv_msg.uid;
-       } else {
-               uid = cr.uid;
-       }
-
        if((recv_msg.msg_size <= 0) ||(recv_msg.msg_size > MS_FILE_PATH_LEN_MAX)  || (!MS_STRING_VALID(recv_msg.msg))) {
                MS_DBG_ERR("invalid query. size[%d]", recv_msg.msg_size);
                return TRUE;
        }
 
-       media_db_connect(&db_handle, uid);
+       media_db_connect(&db_handle, recv_msg.uid);
 
        sql_query = strndup(recv_msg.msg, recv_msg.msg_size);
        if (sql_query != NULL) {
@@ -471,7 +453,7 @@ gboolean ms_read_db_socket(GIOChannel *src, GIOCondition condition, gpointer dat
        memset(&msg, 0x0, sizeof(ms_comm_msg_s));
        msg.result = send_msg;
 
-       ms_ipc_send_msg_to_client(client_sock, &msg, &client_addr);
+       ms_ipc_send_msg_to_client(sockfd, &msg, &client_addr);
 
        media_db_disconnect(db_handle);
 
@@ -502,10 +484,7 @@ gboolean ms_read_db_tcp_socket(GIOChannel *src, GIOCondition condition, gpointer
        int ret = MS_MEDIA_ERR_NONE;
        char * sql_query = NULL;
        MediaDBHandle *db_handle = NULL;
-       uid_t uid;
-       struct ucred cr;
-       int cl = sizeof(struct ucred);
-       
+
        sock = g_io_channel_unix_get_fd(src);
        if (sock < 0) {
                MS_DBG_ERR("sock fd is invalid!");
@@ -543,19 +522,9 @@ gboolean ms_read_db_tcp_socket(GIOChannel *src, GIOCondition condition, gpointer
                        return TRUE;
                }
 
-               if (getsockopt(client_sock, SOL_SOCKET, SO_PEERCRED, &cr, (socklen_t *) &cl) < 0) {
-               MS_DBG_ERR("credential information error");
-               }
-
-               if ( getuid() == cr.uid ){
-                       uid = recv_msg.uid;
-               } else {
-                       uid = cr.uid;
-               }
-
                sql_query = strndup(recv_msg.msg, recv_msg.msg_size);
                if (sql_query != NULL) {
-                       media_db_connect(&db_handle, uid);
+                       media_db_connect(&db_handle, recv_msg.uid);
                        if (recv_msg.msg_type == MS_MSG_DB_UPDATE_BATCH_START) {
                                ret = media_db_update_db_batch_start(sql_query);
                        } else if(recv_msg.msg_type == MS_MSG_DB_UPDATE_BATCH_END) {
index a3321be..e364604 100755 (executable)
@@ -1141,7 +1141,7 @@ gboolean _ms_thumb_agent_prepare_udp_socket()
 
        serv_port = MS_THUMB_COMM_PORT;
 
-       if (ms_ipc_create_server_socket(MS_PROTOCOL_TCP, serv_port, &sock) < 0) {
+       if (ms_ipc_create_server_socket(MS_PROTOCOL_UDP, serv_port, &sock) < 0) {
                MS_DBG_ERR("ms_ipc_create_server_socket failed");
                return FALSE;
        }