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