Improve __mc_service_process() 03/245303/5
authorhj kim <backto.kim@samsung.com>
Wed, 7 Oct 2020 02:12:45 +0000 (11:12 +0900)
committerhj kim <backto.kim@samsung.com>
Wed, 7 Oct 2020 06:42:00 +0000 (15:42 +0900)
Change-Id: I911f68d4782eab29ec4088d709dcdfc34422f69e

svc/media_controller_svc.c

index 5c4f674..76e6b16 100644 (file)
@@ -510,91 +510,79 @@ static int __mc_service_app_dead_handler(int pid, void *data)
        return AUL_R_OK;
 }
 
-static gboolean __mc_service_process(gpointer data)
+static int __process_msg(mc_comm_msg_s *request_msg, GList **connected_list)
 {
-       unsigned int length_of_queue = 0;
-       int msg = MEDIA_CONTROLLER_ERROR_NONE;
-       mc_service_t *_service_data = (mc_service_t*)data;
-
-       mc_retvm_if(!_service_data, FALSE, "invalid data");
-       mc_retvm_if(!__mc_service_is_valid_queue(_service_data), FALSE, "invalid queue");
-
-       GQueue *request_queue = _service_data->request->queue;
-       length_of_queue = g_queue_get_length(request_queue);
-
-       mc_info("Queue Length : %u", length_of_queue);
-
-       if (length_of_queue == 0) {
-               mc_debug("There is no request job in the queue");
-               g_source_unref(_service_data->request->source);
-               _service_data->request->source = NULL;
-               return G_SOURCE_REMOVE;
-       }
-
-       mc_service_request *req = NULL;
-       req = (mc_service_request *) g_queue_pop_head(request_queue);
-       if (req == NULL) {
-               mc_error("Failed to get a request job from queue");
-               return G_SOURCE_CONTINUE;
-       }
-
-       mc_comm_msg_s *request_msg = req->req_msg;
-       if (request_msg == NULL) {
-               mc_error("Failed to get a request message from req");
-               msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
-               goto ERROR;
-       }
+       int ret = MEDIA_CONTROLLER_ERROR_NONE;
 
-       if (!MC_STRING_VALID(request_msg->msg) || request_msg->msg_size == 0) {
-               mc_error("Invalid message [msg:%s size:%zu]", request_msg->msg, request_msg->msg_size);
-               msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
-               goto ERROR;
-       }
+       mc_retvm_if(!request_msg, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid request_msg");
+       mc_retvm_if(!MC_STRING_VALID(request_msg->msg), MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid msg");
+       mc_retvm_if(request_msg->msg_size == 0, MEDIA_CONTROLLER_ERROR_INVALID_OPERATION, "invalid msg size");
 
-       if (!__mc_service_is_valid_connection(_service_data->connected_apps, request_msg)) {
-               mc_error("Wrong message");
-               msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
-               goto ERROR;
+       if (!__mc_service_is_valid_connection(*connected_list, request_msg)) {
+               mc_error("Wrong message pid[%d] priv_type[%d]", request_msg->pid, request_msg->priv_type);
+               return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
        }
 
        mc_info("msg_type : [%d]", request_msg->msg_type);
 
        switch (request_msg->msg_type) {
        case MC_MSG_DB_UPDATE:
-               msg = mc_db_request(request_msg->uid, request_msg->msg, request_msg->msg_size);
-               break;
+               return mc_db_request(request_msg->uid, request_msg->msg, request_msg->msg_size);
 
        case MC_MSG_CLIENT_SET:
-               msg = __mc_service_add_cmd_to_send(&(_service_data->connected_apps), request_msg);
-               break;
+               return __mc_service_add_cmd_to_send(connected_list, request_msg);
 
        case MC_MSG_CLIENT_GET:
-               msg = __mc_service_remove_cmd_to_send(&(_service_data->connected_apps), request_msg);
-               break;
+               return __mc_service_remove_cmd_to_send(connected_list, request_msg);
 
        case MC_MSG_SERVER_CONNECTION:
-               msg = __mc_service_add_connection(&(_service_data->connected_apps), request_msg);
-               if (msg == MEDIA_CONTROLLER_ERROR_NONE) {
-                       msg = mc_db_add_application(request_msg->uid, request_msg->msg, request_msg->priv_type);
-                       if (msg != MEDIA_CONTROLLER_ERROR_NONE) {
+               ret = __mc_service_add_connection(connected_list, request_msg);
+               if (ret == MEDIA_CONTROLLER_ERROR_NONE) {
+                       ret = mc_db_add_application(request_msg->uid, request_msg->msg, request_msg->priv_type);
+                       if (ret != MEDIA_CONTROLLER_ERROR_NONE) {
                                mc_error("Failed to mc_db_add_application");
-                               __mc_service_remove_connection(&(_service_data->connected_apps), request_msg);
+                               __mc_service_remove_connection(connected_list, request_msg);
                        }
                }
-               break;
+               return ret;
 
        case MC_MSG_SERVER_DISCONNECTION:
-               __mc_service_remove_connection(&(_service_data->connected_apps), request_msg);
-               msg = mc_db_remove_application(request_msg->uid, request_msg->msg, request_msg->priv_type);
-               break;
+               __mc_service_remove_connection(connected_list, request_msg);
+               return mc_db_remove_application(request_msg->uid, request_msg->msg, request_msg->priv_type);
 
        default:
-               mc_error("Invalid message type!");
-               msg = MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
-               break;
+               mc_error("Invalid message type![%d]", request_msg->msg_type);
+               return MEDIA_CONTROLLER_ERROR_INVALID_OPERATION;
        }
 
-ERROR:
+}
+
+static gboolean __mc_service_process(gpointer data)
+{
+       unsigned int length_of_queue = 0;
+       int msg = MEDIA_CONTROLLER_ERROR_NONE;
+       mc_service_t *_service_data = (mc_service_t*)data;
+       mc_service_request *req = NULL;
+
+       mc_retvm_if(!_service_data, G_SOURCE_REMOVE, "invalid data");
+       mc_retvm_if(!__mc_service_is_valid_queue(_service_data), G_SOURCE_REMOVE, "invalid queue");
+
+       GQueue *request_queue = _service_data->request->queue;
+       length_of_queue = g_queue_get_length(request_queue);
+
+       mc_info("Queue Length : %u", length_of_queue);
+
+       if (length_of_queue == 0) {
+               mc_debug("There is no request job in the queue");
+               g_source_unref(_service_data->request->source);
+               _service_data->request->source = NULL;
+               return G_SOURCE_REMOVE;
+       }
+
+       req = (mc_service_request *) g_queue_pop_head(request_queue);
+
+       msg = __process_msg(req->req_msg, &(_service_data->connected_apps));
+
        if (write(req->client_sock, &msg, sizeof(msg)) != sizeof(msg))
                mc_stderror("send failed");
        else