#define DCM_SERVER_PATH tzplatform_mkpath(TZ_SYS_BIN, "dcm-svc")
static GMainLoop *g_dcm_agent_loop = NULL;
-static GIOChannel *g_dcm_tcp_channel = NULL;
static gboolean g_folk_dcm_server = FALSE;
-static gboolean g_dcm_server_extracting = FALSE;
static gboolean g_shutdowning_dcm_server = FALSE;
-static gboolean g_dcm_server_queued_all_extracting_request = FALSE;
static int g_dcm_comm_sock = 0;
static int g_dcm_timer_id = 0;
static int g_dcm_service_pid = 0;
g_dcm_timer_id = 0;
}
- if (g_dcm_server_extracting) {
- /* Need to inplement when crash happens */
- MS_DBG_ERR("DCM server is dead when processing all-dcm extraction");
- g_dcm_server_extracting = FALSE;
- MS_DBG("g_dcm_server_extracting is false");
- g_dcm_service_pid = 0;
- } else {
- g_dcm_server_extracting = FALSE;
- MS_DBG("g_dcm_server_extracting is false");
- g_dcm_service_pid = 0;
- }
+ g_dcm_service_pid = 0;
return;
}
return TRUE;
}
-gboolean _ms_dcm_agent_recv_dcm_done_from_server(GIOChannel *src, GIOCondition condition, gpointer data)
-{
- int ret = MS_MEDIA_ERR_NONE;
- struct sockaddr_un dcm_serv_addr;
- unsigned int dcm_serv_addr_len;
-
- int sockfd = -1;
- int dcm_serv_sockfd = -1;
-
- /* Once all-dcm extraction is done, check if there is queued all-dcm request */
- GSource *check_queued_all_dcm_request = NULL;
- check_queued_all_dcm_request = g_idle_source_new();
- g_source_set_callback(check_queued_all_dcm_request, _ms_dcm_check_queued_request, NULL, NULL);
- g_source_attach(check_queued_all_dcm_request, g_main_context_get_thread_default());
-
- if (g_dcm_server_extracting == FALSE) {
- MS_DBG_WARN("Recv DCM service extracting done already");
- return FALSE;
- }
-
- sockfd = g_io_channel_unix_get_fd(src);
- if (sockfd < 0) {
- MS_DBG_ERR("sock fd is invalid!");
- return FALSE;
- }
-
- dcm_serv_addr_len = sizeof(dcm_serv_addr);
-
- if ((dcm_serv_sockfd = accept(sockfd, (struct sockaddr*)&dcm_serv_addr, &dcm_serv_addr_len)) < 0) {
- MS_DBG_STRERROR("accept failed");
- return FALSE;
- }
-
- dcmMsg recv_msg;
-
- MS_DBG_WARN("DCM service SOCKET %d", dcm_serv_sockfd);
-
- ret = ms_ipc_receive_message(dcm_serv_sockfd, &recv_msg, sizeof(dcmMsg));
- if (ret != MS_MEDIA_ERR_NONE) {
- MS_DBG_STRERROR("ms_ipc_receive_message failed");
- close(dcm_serv_sockfd);
- return FALSE;
- }
-
- close(dcm_serv_sockfd);
-
- MS_DBG("Receive : %d", recv_msg.msg_type);
- if (recv_msg.msg_type == DCM_MSG_EXTRACT_ALL_DONE) {
- MS_DBG("DCM extracting done");
- g_dcm_server_extracting = FALSE;
- MS_DBG("g_dcm_server_extracting is false");
-
- return FALSE;
- }
-
- return FALSE;
-}
-
gboolean _ms_dcm_agent_execute_server()
{
int pid;
MS_DBG_SLOG("recv %s(%d, %d) from DCM daemon is successful", res_msg->msg, res_msg->msg_type, res_msg->result);
close(sock);
- if (res_msg->msg_type == 1 && g_dcm_comm_sock > 0) { /* DCM_REQUEST_ALL_MEDIA */
- GSource *source = NULL;
- if (g_dcm_tcp_channel == NULL)
- g_dcm_tcp_channel = g_io_channel_unix_new(g_dcm_comm_sock);
- source = g_io_create_watch(g_dcm_tcp_channel, G_IO_IN);
-
- /* Set callback to be called when socket is readable */
- g_source_set_callback(source, (GSourceFunc)_ms_dcm_agent_recv_dcm_done_from_server, NULL, NULL);
- g_source_attach(source, g_main_context_get_thread_default());
-
- g_dcm_server_extracting = TRUE;
- MS_DBG("g_dcm_server_extracting is true");
- }
-
return TRUE;
}
-gboolean _ms_dcm_check_queued_request(gpointer data)
-{
- if (g_dcm_server_queued_all_extracting_request) {
- MS_DBG_WARN("There is queued request");
-
- /* request all-DCM extraction to DCM service */
- dcmMsg msg;
- dcmMsg recv_msg;
- memset((void *)&msg, 0, sizeof(msg));
- memset((void *)&recv_msg, 0, sizeof(recv_msg));
-
- msg.msg_type = DCM_MSG_REQUEST_ALL_MEDIA;
- ms_sys_get_uid(&(msg.uid));
- msg.msg[0] = '\0';
- msg.msg_size = 0;
-
- /* Command All-DCM extraction to DCM service */
- if (!_ms_dcm_agent_send_msg_to_dcm_server(&msg, &recv_msg))
- MS_DBG_ERR("_ms_dcm_agent_send_msg_to_dcm_server is failed");
-
- g_dcm_server_queued_all_extracting_request = FALSE;
- } else {
- MS_DBG("There is no queued request");
- return FALSE;
- }
-
- return FALSE;
-}
-
gboolean _ms_dcm_agent_timer()
{
- if (g_dcm_server_extracting) {
- MS_DBG("Timer is called.. But dcm-service[%d] is busy.. so timer is recreated", g_dcm_service_pid);
-
- _ms_dcm_create_timer(g_dcm_timer_id);
- return FALSE;
- }
-
g_dcm_timer_id = 0;
MS_DBG("Timer is called.. Now killing dcm-service[%d]", g_dcm_service_pid);
return TRUE;
}
- if (g_folk_dcm_server == FALSE && g_dcm_server_extracting == FALSE) {
+ if (g_folk_dcm_server == FALSE) {
if (g_dcm_service_pid <= 0) { /* This logic is temporary */
MS_DBG_WARN("DCM service is not running.. so start it");
if (!_ms_dcm_agent_execute_server()) {
}
if (recv_msg) {
- if (recv_msg->msg_type == DCM_MSG_REQUEST_ALL_MEDIA && g_dcm_server_extracting) {
- MS_DBG_WARN("DCM service is already extracting..This request is queued.");
- g_dcm_server_queued_all_extracting_request = TRUE;
- } else {
- if (!_ms_dcm_agent_send_msg_to_dcm_server(recv_msg, &res_msg)) {
- MS_DBG_ERR("_ms_dcm_agent_send_msg_to_dcm_server is failed");
+ if (!_ms_dcm_agent_send_msg_to_dcm_server(recv_msg, &res_msg)) {
+ MS_DBG_ERR("_ms_dcm_agent_send_msg_to_dcm_server is failed");
- dcmMsg res_msg;
- memset((void *)&res_msg, 0, sizeof(res_msg));
+ dcmMsg res_msg;
+ memset((void *)&res_msg, 0, sizeof(res_msg));
- res_msg.msg_type = recv_msg->msg_type;
- res_msg.msg_size = strlen(recv_msg->msg);
- if (res_msg.msg_size > 0)
- SAFE_STRLCPY(res_msg.msg, recv_msg->msg, sizeof(res_msg.msg));
- res_msg.result = recv_msg->result;
+ res_msg.msg_type = recv_msg->msg_type;
+ res_msg.msg_size = strlen(recv_msg->msg);
+ if (res_msg.msg_size > 0)
+ SAFE_STRLCPY(res_msg.msg, recv_msg->msg, sizeof(res_msg.msg));
+ res_msg.result = recv_msg->result;
- if (send(client_sock, &res_msg, sizeof(res_msg), 0) != sizeof(res_msg))
- MS_DBG_STRERROR("sendto failed");
- else
- MS_DBG("Sent Refuse msg from %s", recv_msg->msg);
+ if (send(client_sock, &res_msg, sizeof(res_msg), 0) != sizeof(res_msg))
+ MS_DBG_STRERROR("sendto failed");
+ else
+ MS_DBG("Sent Refuse msg from %s", recv_msg->msg);
- close(client_sock);
+ close(client_sock);
- MS_SAFE_FREE(req->recv_msg);
- MS_SAFE_FREE(req);
+ MS_SAFE_FREE(req->recv_msg);
+ MS_SAFE_FREE(req);
- return TRUE;
- }
+ return TRUE;
}
} else {
MS_DBG_ERR("recv_msg is NULL from queue request");
/*close an IO channel & remove resources */
g_io_channel_shutdown(channel, FALSE, NULL);
- g_io_channel_shutdown(g_dcm_tcp_channel, FALSE, NULL);
g_io_channel_unref(channel);
close(g_dcm_comm_sock);