4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Yong Yeon Kim <yy9875.kim@samsung.com>
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
23 * This file defines api utilities of contents manager engines.
25 * @file media-server-thumb.c
26 * @author Yong Yeon Kim(yy9875.kim@samsung.com)
30 #include <arpa/inet.h>
31 #include <sys/types.h>
32 #include <sys/socket.h>
36 #include "media-util.h"
38 #include "media-server-ipc.h"
39 #include "media-server-types.h"
40 #include "media-scanner-dbg.h"
41 #include "media-scanner-db-svc.h"
42 #include "media-scanner-utils.h"
43 #include "media-scanner-socket.h"
45 extern GAsyncQueue *storage_queue;
46 extern GAsyncQueue *scan_queue;
47 extern GAsyncQueue *reg_queue;
48 GMutex *receive_mutex;
50 gboolean msc_receive_request(GIOChannel *src, GIOCondition condition, gpointer data)
52 ms_comm_msg_s *recv_msg = NULL;
53 int sockfd = MS_SOCK_NOT_ALLOCATE;
54 int req_num = MS_MSG_MAX;
56 int ret = MS_MEDIA_ERR_NONE;
58 sockfd = g_io_channel_unix_get_fd(src);
60 MSC_DBG_ERR("sock fd is invalid!");
64 MS_MALLOC(recv_msg, sizeof(ms_comm_msg_s));
65 if (recv_msg == NULL) {
66 MSC_DBG_ERR("MS_MALLOC failed");
70 /* Socket is readable */
71 ret = ms_ipc_receive_message(sockfd, recv_msg, sizeof(*recv_msg), NULL, NULL);
72 if (ret != MS_MEDIA_ERR_NONE) {
73 MS_SAFE_FREE(recv_msg);
77 MSC_DBG_INFO("receive msg from [%d] %d, %s", recv_msg->pid, recv_msg->msg_type, recv_msg->msg);
79 /* copy from recived data */
80 req_num = recv_msg->msg_type;
83 /* request bulk insert*/
84 if (req_num == MS_MSG_BULK_INSERT) {
85 MSC_DBG_INFO("BULK INSERT");
86 g_async_queue_push(reg_queue, GINT_TO_POINTER(recv_msg));
87 } else if (req_num == MS_MSG_DIRECTORY_SCANNING ||req_num == MS_MSG_DIRECTORY_SCANNING_NON_RECURSIVE) {
88 /* this request from another apps */
89 /* set the scan data for scanning thread */
90 g_async_queue_push(scan_queue, GINT_TO_POINTER(recv_msg));
91 } else if (req_num == MS_MSG_STORAGE_ALL ||req_num == MS_MSG_STORAGE_PARTIAL || req_num == MS_MSG_STORAGE_INVALID) {
92 /* this request from media-server */
93 g_async_queue_push(storage_queue, GINT_TO_POINTER(recv_msg));
95 MSC_DBG_ERR("THIS REQUEST IS INVALID %d", req_num);
96 MS_SAFE_FREE(recv_msg);
106 int msc_send_scan_result(int result, ms_comm_msg_s *scan_data)
109 int res = MS_MEDIA_ERR_NONE;
111 ms_comm_msg_s send_msg;
114 ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
115 if (ret != MS_MEDIA_ERR_NONE)
116 return MS_MEDIA_ERR_SOCKET_CONN;
118 /* send ready message */
119 memset(&send_msg, 0x0, sizeof(ms_comm_msg_s));
120 send_msg.msg_type = MS_MSG_SCANNER_RESULT;
121 send_msg.pid = scan_data->pid;
122 send_msg.result = result;
123 send_msg.msg_size = strlen(scan_data->msg);
124 strncpy(send_msg.msg, scan_data->msg, send_msg.msg_size);
126 ret = ms_ipc_send_msg_to_server(sockfd, MS_SCAN_COMM_PORT, &send_msg, NULL);
127 if (ret != MS_MEDIA_ERR_NONE)
135 int msc_send_register_result(int result, ms_comm_msg_s *reg_data)
137 int ret = MS_MEDIA_ERR_NONE;
139 ms_comm_msg_s send_msg;
142 ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
143 if (ret != MS_MEDIA_ERR_NONE)
144 return MS_MEDIA_ERR_SOCKET_CONN;
146 /* send ready message */
147 memset(&send_msg, 0x0, sizeof(ms_comm_msg_s));
148 send_msg.msg_type = MS_MSG_SCANNER_BULK_RESULT;
149 send_msg.pid = reg_data->pid;
150 send_msg.result = result;
151 send_msg.msg_size = reg_data->msg_size;
152 strncpy(send_msg.msg, reg_data->msg, send_msg.msg_size);
154 ret = ms_ipc_send_msg_to_server(sockfd, MS_SCAN_COMM_PORT, &send_msg, NULL);
161 int msc_send_ready(void)
164 int res = MS_MEDIA_ERR_NONE;
166 ms_comm_msg_s send_msg;
169 ret = ms_ipc_create_client_socket(MS_PROTOCOL_UDP, 0, &sockfd);
170 if (ret != MS_MEDIA_ERR_NONE)
171 return MS_MEDIA_ERR_SOCKET_CONN;
173 /* send ready message */
174 memset(&send_msg, 0, sizeof(send_msg));
175 send_msg.msg_type = MS_MSG_SCANNER_READY;
177 ret = ms_ipc_send_msg_to_server(sockfd, MS_SCAN_COMM_PORT, &send_msg, NULL);
178 if (ret != MS_MEDIA_ERR_NONE)