Revise structure of json-structured parameters
authorSangchul Lee <sc11.lee@samsung.com>
Wed, 26 Apr 2023 03:47:30 +0000 (12:47 +0900)
committer이상철/Tizen Platform Lab(SR)/삼성전자 <sc11.lee@samsung.com>
Thu, 27 Apr 2023 02:21:08 +0000 (11:21 +0900)
e.g.)
{
  "params": {
    "codec_data":{"string":null},
    "codec_data_length":{"uint":0},
    "mime_type":{"int":7},
    "bitrate":{"uint":0},
    "channels":{"uint":2},
    "sample_rate":{"uint":0}
  }
}

Signed-off-by: Sangchul Lee <sc11.lee@samsung.com>
src/client/espp_service_client_msg.c
src/client/espp_service_client_socket.c
src/daemon/espp_service_msg.c
src/daemon/espp_service_priv.h

index 43e227223ac8daa29ec396063375bb28a814dcd4..388884745a8b6ec629b6cfd5ebbda09d1569d828 100644 (file)
@@ -36,41 +36,51 @@ static JsonObject *make_json_object_params(va_list ap, const char *formats, Json
 {
        char c;
        JsonObject *params = json_object_new();
+       JsonObject *member;
 
        ASSERT(object);
 
        while (*formats) {
+               member = json_object_new();
                switch ((c = *formats++)) {
                case 'b':
-                       json_object_set_boolean_member(params,
+                       json_object_set_object_member(params, (const gchar*)va_arg(ap, char *), member);
+                       json_object_set_boolean_member(member,
                                data_type_strs[ESPP_SERVICE_DATA_TYPE_BOOL], (gboolean)va_arg(ap, int));
                        break;
                case 'i':
-                       json_object_set_int_member(params,
+                       json_object_set_object_member(params, (const gchar*)va_arg(ap, char *), member);
+                       json_object_set_int_member(member,
                                data_type_strs[ESPP_SERVICE_DATA_TYPE_INT], (gint64)va_arg(ap, int));
                        break;
                case 'l':
-                       json_object_set_int_member(params,
+                       json_object_set_object_member(params, (const gchar*)va_arg(ap, char *), member);
+                       json_object_set_int_member(member,
                                data_type_strs[ESPP_SERVICE_DATA_TYPE_INT64], (gint64)va_arg(ap, int64_t));
                        break;
                case 'u':
-                       json_object_set_int_member(params,
+                       json_object_set_object_member(params, (const gchar*)va_arg(ap, char *), member);
+                       json_object_set_int_member(member,
                                data_type_strs[ESPP_SERVICE_DATA_TYPE_UINT], (gint64)va_arg(ap, unsigned int));
                        break;
                case 'k':
-                       json_object_set_int_member(params,
+                       json_object_set_object_member(params, (const gchar*)va_arg(ap, char *), member);
+                       json_object_set_int_member(member,
                                data_type_strs[ESPP_SERVICE_DATA_TYPE_UINT64], (gint64)va_arg(ap, uint64_t));
                        break;
                case 'd':
-                       json_object_set_double_member(params,
+                       json_object_set_object_member(params, (const gchar*)va_arg(ap, char *), member);
+                       json_object_set_double_member(member,
                                data_type_strs[ESPP_SERVICE_DATA_TYPE_DOUBLE], (gdouble)va_arg(ap, double));
                        break;
                case 's':
-                       json_object_set_string_member(params,
+                       json_object_set_object_member(params, (const gchar*)va_arg(ap, char *), member);
+                       json_object_set_string_member(member,
                                data_type_strs[ESPP_SERVICE_DATA_TYPE_STRING], (const gchar*)va_arg(ap, char *));
                        break;
                default:
                        LOG_ERROR("not supported format[%c]", c);
+                       json_object_unref(member);
                        json_object_unref(params);
                        json_object_unref(object);
                        return NULL;
index e2798552f46313b9db7fb31acae08c509c727ac5..ab6a4fc00347752e8102fa82dab5881a07fa7eb1 100644 (file)
@@ -294,8 +294,8 @@ int espp_service_client_socket_request_set_audio_stream_info(espp_s *espp, espp_
 
        FILL_SOCKET_MSG_REQUEST(data, ESPP_SERVICE_REQUEST_SET_AUDIO_STREAM_INFO);
        FILL_SOCKET_MSG_PARAMS(data, ESPP_SERVICE_REQUEST_SET_AUDIO_STREAM_INFO,
-               info->codec_data, info->codec_data_length, info->mime_type,
-               info->bitrate, info->channels, info->sample_rate);
+               "codec_data", info->codec_data, "codec_data_length", info->codec_data_length, "mime_type", info->mime_type,
+               "bitrate", info->bitrate, "channels", info->channels, "sample_rate", info->sample_rate);
        if (send_data(espp->fd, &data, &result) != 0)
                return -1;
 
@@ -317,9 +317,9 @@ int espp_service_client_socket_request_set_video_stream_info(espp_s *espp, espp_
 
        FILL_SOCKET_MSG_REQUEST(data, ESPP_SERVICE_REQUEST_SET_VIDEO_STREAM_INFO);
        FILL_SOCKET_MSG_PARAMS(data, ESPP_SERVICE_REQUEST_SET_VIDEO_STREAM_INFO,
-               info->codec_data, info->codec_data_length, info->mime_type,
-               info->width, info->height, info->max_width, info->max_height,
-               info->framerate_num, info->framerate_den);
+               "codec_data", info->codec_data, "codec_data_length", info->codec_data_length, "mime_type", info->mime_type,
+               "width", info->width, "height", info->height, "max_width", info->max_width, "max_height", info->max_height,
+               "framerate_num", info->framerate_num, "framerate_den", info->framerate_den);
        if (send_data(espp->fd, &data, &result) != 0)
                return -1;
 
index 711622b16c65e4ea50ef0ef2fb53cad6238d0c87..87fd34491c6a23425108a3ec05358b396451a9bf 100644 (file)
@@ -28,45 +28,33 @@ static void __json_obj_foreach_func(JsonObject *object, const gchar *name, JsonN
 {
        formats_data_s *data  = (formats_data_s *)user_data;
        char c;
+       JsonObject *member = json_node_get_object(node);
 
        ASSERT(data);
+       ASSERT(member);
 
        switch ((c = *(data->formats + data->count++))) {
-       case 'b': {
-               RET_IF(g_strcmp0(name, data_type_strs[ESPP_SERVICE_DATA_TYPE_BOOL]), "type[%s] is not bool", name);
-               *(va_arg(data->ap, int*)) = json_node_get_boolean(node);
+       case 'b':
+               *(va_arg(data->ap, int*)) = json_object_get_boolean_member(member, data_type_strs[ESPP_SERVICE_DATA_TYPE_BOOL]);
                break;
-       }
-       case 'i': {
-               RET_IF(g_strcmp0(name, data_type_strs[ESPP_SERVICE_DATA_TYPE_INT]), "type[%s] is not int", name);
-               *(va_arg(data->ap, int*)) = json_node_get_int(node);
+       case 'i':
+               *(va_arg(data->ap, int*)) = json_object_get_int_member(member, data_type_strs[ESPP_SERVICE_DATA_TYPE_INT]);
                break;
-       }
-       case 'l': {
-               RET_IF(g_strcmp0(name, data_type_strs[ESPP_SERVICE_DATA_TYPE_INT64]), "type[%s] is not int64", name);
-               *(va_arg(data->ap, int64_t*)) = json_node_get_int(node);
+       case 'l':
+               *(va_arg(data->ap, int64_t*)) = json_object_get_int_member(member, data_type_strs[ESPP_SERVICE_DATA_TYPE_INT64]);
                break;
-       }
-       case 'u': {
-               RET_IF(g_strcmp0(name, data_type_strs[ESPP_SERVICE_DATA_TYPE_UINT]), "type[%s] is not uint", name);
-               *(va_arg(data->ap, unsigned int*)) = json_node_get_int(node);
+       case 'u':
+               *(va_arg(data->ap, unsigned int*)) = json_object_get_int_member(member, data_type_strs[ESPP_SERVICE_DATA_TYPE_UINT]);
                break;
-       }
-       case 'k': {
-               RET_IF(g_strcmp0(name, data_type_strs[ESPP_SERVICE_DATA_TYPE_UINT64]), "type[%s] is not uint64", name);
-               *(va_arg(data->ap, uint64_t*)) = json_node_get_int(node);
+       case 'k':
+               *(va_arg(data->ap, uint64_t*)) = json_object_get_int_member(member, data_type_strs[ESPP_SERVICE_DATA_TYPE_UINT64]);
                break;
-       }
-       case 'd': {
-               RET_IF(g_strcmp0(name, data_type_strs[ESPP_SERVICE_DATA_TYPE_DOUBLE]), "type[%s] is not double", name);
-               *(va_arg(data->ap, double*)) = json_node_get_double(node);
+       case 'd':
+               *(va_arg(data->ap, double*)) = json_object_get_double_member(member, data_type_strs[ESPP_SERVICE_DATA_TYPE_DOUBLE]);
                break;
-       }
-       case 's': {
-               RET_IF(g_strcmp0(name, data_type_strs[ESPP_SERVICE_DATA_TYPE_STRING]), "type[%s] is not string", name);
-               *(va_arg(data->ap, char**)) = g_strdup(json_node_get_string(node));
+       case 's':
+               *(va_arg(data->ap, char**)) =  g_strdup(json_object_get_string_member(member, data_type_strs[ESPP_SERVICE_DATA_TYPE_STRING]));
                break;
-       }
        default:
                LOG_ERROR("not supported format[%c]", c);
        }
index 7693f933df39570edf59124596166c08103cbd1f..cc256d38726da05716ed372eed426567d79dd244 100644 (file)
@@ -37,7 +37,7 @@ typedef struct {
 
 int espp_service_init_socket(espp_service_s *svc);
 void espp_service_deinit_socket(espp_service_s *svc);
-int espp_service_func_handler(espp_service_s *svc, int fd, espp_service_data_from_client_s *request, espp_service_data_from_server_s *result);
+int espp_service_func_handler(espp_service_s *svc, int fd, espp_service_data_from_client_s *data, espp_service_data_from_server_s *result);
 void espp_service_handle_destroy_cb(gpointer data);
 int espp_service_msg_parse_params(const char *params, espp_service_request_e request, ...);