memset((void *)&send_msg, 0, sizeof(mc_comm_msg_s));
send_msg.msg_type = msg_type;
+ send_msg.pid = getpid();
send_msg.uid = getuid();
send_msg.msg_size = request_msg_size;
strncpy(send_msg.msg, request_msg, sizeof(send_msg.msg) - 1);
/*Create Socket*/
- ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_10, &sock_info);
+ ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_5, &sock_info);
sockfd = sock_info.sock_fd;
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "socket is not created properly");
}
/*Create Socket*/
- ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_10, &sock_info);
+ ret = mc_ipc_create_client_socket(MC_TIMEOUT_SEC_5, &sock_info);
sockfd = sock_info.sock_fd;
mc_retvm_if(ret != MEDIA_CONTROLLER_ERROR_NONE, ret, "socket is not created properly");
serv_addr.sun_family = AF_UNIX;
strncpy(serv_addr.sun_path, MC_IPC_PATH, sizeof(serv_addr.sun_path) - 1);
- /* Connecting to the media db server */
+ /* Connecting to the media controller service */
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
mc_stderror("connect error");
mc_ipc_delete_client_socket(&sock_info);
mc_comm_msg_s recv_msg;
int ret = MEDIA_CONTROLLER_ERROR_NONE;
int send_msg = MEDIA_CONTROLLER_ERROR_NONE;
- bool is_duplicated = FALSE;
unsigned int i = 0;
mc_svc_data_t *mc_svc_data = (mc_svc_data_t*)data;
mc_peer_creds creds = {0, };
MC_SAFE_FREE(creds.uid);
MC_SAFE_FREE(creds.smack);
- for (i = 0; i < g_list_length(mc_svc_data->mc_svc_list); i++) {
- char *nth_data = (char *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
- if (nth_data != NULL && strcmp(nth_data, recv_msg.msg) == 0) {
- is_duplicated = TRUE;
- }
- }
- if (!is_duplicated) {
- mc_svc_data->mc_svc_list = g_list_append(mc_svc_data->mc_svc_list, recv_msg.msg);
- }
+ mc_svc_list_t *set_data = (mc_svc_list_t *)malloc(sizeof(mc_svc_list_t));
+ set_data->pid = recv_msg.pid;
+ set_data->data = strdup(recv_msg.msg);
+ mc_svc_data->mc_svc_list = g_list_append(mc_svc_data->mc_svc_list, set_data);
} else if (recv_msg.msg_type == MC_MSG_CLIENT_GET) {
/* check privileage */
ret = mc_cynara_check(&creds, MC_SERVER_PRIVILEGE);
MC_SAFE_FREE(creds.uid);
MC_SAFE_FREE(creds.smack);
+ mc_svc_list_t *set_data = NULL;
for (i = 0; i < g_list_length(mc_svc_data->mc_svc_list); i++) {
send_msg = MEDIA_CONTROLLER_ERROR_PERMISSION_DENIED;
- char *nth_data = (char *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
- if (nth_data != NULL && strcmp(nth_data, recv_msg.msg) == 0) {
- mc_svc_data->mc_svc_list = g_list_remove(mc_svc_data->mc_svc_list, nth_data);
+ set_data = (mc_svc_list_t *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
+ if (set_data != NULL && set_data->data != NULL && strcmp(set_data->data, recv_msg.msg) == 0) {
+ mc_svc_data->mc_svc_list = g_list_remove(mc_svc_data->mc_svc_list, set_data);
+ MC_SAFE_FREE(set_data->data);
+ MC_SAFE_FREE(set_data);
send_msg = MEDIA_CONTROLLER_ERROR_NONE;
}
}
g_connection_cnt--;
mc_error("[No-error] decreased connection count [%d]", g_connection_cnt);
+ // remove resource for disconnected process
+ mc_svc_list_t *set_data = NULL;
+ for (i = 0; i < g_list_length(mc_svc_data->mc_svc_list); i++) {
+ set_data = (mc_svc_list_t *)g_list_nth_data(mc_svc_data->mc_svc_list, i);
+ if ((set_data != NULL) && (set_data->pid == recv_msg.pid)) {
+ mc_svc_data->mc_svc_list = g_list_remove(mc_svc_data->mc_svc_list, set_data);
+ MC_SAFE_FREE(set_data->data);
+ MC_SAFE_FREE(set_data);
+ }
+ }
+
send_msg = MEDIA_CONTROLLER_ERROR_NONE;
} else {
mc_error("Wrong message!");
/*Init main loop*/
g_mc_svc_mainloop = g_main_loop_new(context, FALSE);
- /* Create new channel to watch UDP socket */
+ /* Create new channel to watch TCP socket */
channel = g_io_channel_unix_new(sockfd);
source = g_io_create_watch(channel, G_IO_IN);