2 * Copyright (c) 2018 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <mdg_debug.h>
20 #include <mdg_private.h>
23 mdg_group_s *mdg_get_group_from_variant(GVariant *va)
25 char *device_id = NULL;
26 char *group_name = NULL;
27 mdg_group_type_e type = MDG_GROUP_TYPE_LOCAL;
28 GVariantIter *iter = NULL;
30 GVariant *key_value = NULL;
32 mdg_group_s *group = calloc(1, sizeof(mdg_group_s));
35 _ERR("Memory allocation failed");
40 g_variant_get(va, "a{sv}", &iter);
41 while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
42 if (g_strcmp0(key, "DeviceID") == 0)
43 device_id = (char *)g_variant_get_string(key_value, NULL);
44 else if (g_strcmp0(key, "GroupName") == 0)
45 group_name = (char *)g_variant_get_string(key_value, NULL);
46 else if (g_strcmp0(key, "Type") == 0)
47 type = g_variant_get_int32(key_value);
50 group->device_id = g_strdup(device_id);
51 group->group_name = g_strdup(group_name);
54 g_variant_iter_free(iter);
59 mdg_device_s *mdg_get_device_from_variant(GVariant *va)
61 char *device_id = NULL;
62 char *model_name = NULL;
63 char *device_name = NULL;
64 char *platform_ver = NULL;
65 char *vendor_id = NULL;
67 bool is_invited = false;
68 int type = MDG_DEVICE_TYPE_LOCAL;
69 GVariantIter *iter = NULL;
71 GVariant *key_value = NULL;
73 mdg_device_s *device = calloc(1, sizeof(mdg_device_s));
76 _ERR("Memory allocation failed");
81 g_variant_get(va, "a{sv}", &iter);
82 while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
83 if (g_strcmp0(key, "DeviceID") == 0)
84 device_id = (char *)g_variant_get_string(key_value, NULL);
85 else if (g_strcmp0(key, "ModelName") == 0)
86 model_name = (char *)g_variant_get_string(key_value, NULL);
87 else if (g_strcmp0(key, "DeviceName") == 0)
88 device_name = (char *)g_variant_get_string(key_value, NULL);
89 else if (g_strcmp0(key, "PlatformVer") == 0)
90 platform_ver = (char *)g_variant_get_string(key_value, NULL);
91 else if (g_strcmp0(key, "VendorID") == 0)
92 vendor_id = (char *)g_variant_get_string(key_value, NULL);
93 else if (g_strcmp0(key, "Profile") == 0)
94 profile = (char *)g_variant_get_string(key_value, NULL);
95 else if (g_strcmp0(key, "IsInvited") == 0)
96 is_invited = g_variant_get_int32(key_value);
97 else if (g_strcmp0(key, "Type") == 0)
98 type = g_variant_get_int32(key_value);
101 device->device_id = g_strdup(device_id);
102 device->model_name = g_strdup(model_name);
103 device->device_name = g_strdup(device_name);
104 device->platform_ver = g_strdup(platform_ver);
105 device->vendor_id = g_strdup(vendor_id);
106 device->profile = g_strdup(profile);
107 device->is_invited = is_invited;
110 g_variant_iter_free(iter);
115 void mdg_get_channel_from_variant(GVariant *va, char **device_id, char **channel_id,
116 char **remote_address)
118 GVariantIter *iter = NULL;
120 GVariant *key_value = NULL;
122 g_variant_get(va, "a{sv}", &iter);
123 while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
124 if (g_strcmp0(key, "DeviceID") == 0)
125 *device_id = (char *)g_variant_get_string(key_value, NULL);
126 else if (g_strcmp0(key, "ChannelID") == 0)
127 *channel_id = (char *)g_variant_get_string(key_value, NULL);
128 else if (g_strcmp0(key, "RemoteAddress") == 0) {
129 if (remote_address != NULL)
130 *remote_address = (char *)g_variant_get_string(key_value, NULL);
134 g_variant_iter_free(iter);
137 void mdg_get_data_from_variant(GVariant *va, char **device_id, char **channel_id,
138 int *msg_id, unsigned char **data, int *data_len)
140 GVariantIter *iter = NULL;
142 GVariant *key_value = NULL;
143 GVariant *data_va = NULL;
144 GVariantIter *data_iter = NULL;
145 unsigned char byte_data;
147 g_variant_get(va, "a{sv}", &iter);
148 while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
149 if (g_strcmp0(key, "DeviceID") == 0)
150 *device_id = (char *)g_variant_get_string(key_value, NULL);
151 else if (g_strcmp0(key, "ChannelID") == 0)
152 *channel_id = (char *)g_variant_get_string(key_value, NULL);
153 else if (g_strcmp0(key, "MsgID") == 0)
154 *msg_id = g_variant_get_int32(key_value);
155 else if (g_strcmp0(key, "Data") == 0)
156 data_va = g_variant_get_variant(key_value);
157 else if (g_strcmp0(key, "DataLen") == 0)
158 *data_len = g_variant_get_int32(key_value);
163 *data = (unsigned char *)g_try_malloc0(*data_len + 1);
165 g_variant_get(data_va, "a(y)", &data_iter);
166 while (g_variant_iter_loop(data_iter, "(y)", &byte_data))
167 (*data)[i++] = byte_data;
170 g_variant_iter_free(iter);
173 void mdg_get_progress_from_variant(GVariant *va, char **file_path,
174 long long *send_size, long long *total_size, int *percent)
176 GVariantIter *iter = NULL;
178 GVariant *key_value = NULL;
180 g_variant_get(va, "a{sv}", &iter);
181 while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
182 if (g_strcmp0(key, "FilePath") == 0)
183 *file_path = (char *)g_variant_get_string(key_value, NULL);
184 if (g_strcmp0(key, "SendSize") == 0)
185 *send_size = g_variant_get_int64(key_value);
186 if (g_strcmp0(key, "TotalSize") == 0)
187 *total_size = g_variant_get_int64(key_value);
188 if (g_strcmp0(key, "Percent") == 0)
189 *percent = g_variant_get_int32(key_value);
192 g_variant_iter_free(iter);
195 void mdg_get_receive_file_from_variant(GVariant *va, char **device_id, char **file_path)
197 GVariantIter *iter = NULL;
199 GVariant *key_value = NULL;
201 g_variant_get(va, "a{sv}", &iter);
202 while (g_variant_iter_loop(iter, "{sv}", &key, &key_value)) {
203 if (g_strcmp0(key, "DeviceID") == 0)
204 *device_id = (char *)g_variant_get_string(key_value, NULL);
205 if (g_strcmp0(key, "FilePath") == 0)
206 *file_path = (char *)g_variant_get_string(key_value, NULL);
209 g_variant_iter_free(iter);
212 GVariant *mdg_create_variant_device(mdg_device_s *device)
216 GVariantBuilder *builder;
218 builder = g_variant_builder_new(G_VARIANT_TYPE("a{sv}"));
220 g_variant_builder_add(builder, "{sv}", "DeviceID",
221 g_variant_new_string(device->device_id));
222 g_variant_builder_add(builder, "{sv}", "ModelName",
223 g_variant_new_string(device->model_name));
224 g_variant_builder_add(builder, "{sv}", "DeviceName",
225 g_variant_new_string(device->device_name));
226 g_variant_builder_add(builder, "{sv}", "PlatformVer",
227 g_variant_new_string(device->platform_ver));
228 g_variant_builder_add(builder, "{sv}", "VendorID",
229 g_variant_new_string(device->vendor_id));
230 g_variant_builder_add(builder, "{sv}", "Profile",
231 g_variant_new_string(device->profile));
232 g_variant_builder_add(builder, "{sv}", "IsInvited",
233 g_variant_new_int32(device->is_invited));
234 g_variant_builder_add(builder, "{sv}", "Type",
235 g_variant_new_int32(device->type));
237 va = g_variant_builder_end(builder);
239 g_variant_builder_unref(builder);
244 void mdg_clean_group (mdg_group_s *group)
249 if (group->device_id) {
250 g_free(group->device_id);
251 group->device_id = NULL;
253 if (group->group_name) {
254 g_free(group->group_name);
255 group->group_name = NULL;
262 void mdg_clean_device (mdg_device_s *device)
267 if (device->device_id) {
268 g_free(device->device_id);
269 device->device_id = NULL;
272 if (device->model_name) {
273 g_free(device->model_name);
274 device->model_name = NULL;
277 if (device->device_name) {
278 g_free(device->device_name);
279 device->device_name = NULL;
282 if (device->platform_ver) {
283 g_free(device->platform_ver);
284 device->platform_ver = NULL;
287 if (device->vendor_id) {
288 g_free(device->vendor_id);
289 device->vendor_id = NULL;
292 if (device->profile) {
293 g_free(device->profile);
294 device->profile = NULL;
301 void mdg_clean_channel (mdg_channel_s *channel)
306 if (channel->device_id) {
307 g_free(channel->device_id);
308 channel->device_id = NULL;
311 if (channel->channel_id) {
312 g_free(channel->channel_id);
313 channel->channel_id = NULL;
316 if (channel->remote_address) {
317 g_free(channel->remote_address);
318 channel->remote_address = NULL;