2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
4 * Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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.
22 #include "net_nfc_debug_internal.h"
23 #include "net_nfc_util_internal.h"
24 #include "net_nfc_util_gdbus_internal.h"
25 #include "net_nfc_util_ndef_message.h"
27 void net_nfc_util_gdbus_variant_to_buffer(GVariant *variant, uint8_t **buffer,
34 RET_IF(NULL == variant);
36 g_variant_get(variant, "a(y)", &iter);
38 size = g_variant_iter_n_children(iter);
39 buf = g_new0(guint8, size);
47 while (g_variant_iter_loop(iter, "(y)", &element))
53 g_variant_iter_free(iter);
65 data_s *net_nfc_util_gdbus_variant_to_data(GVariant *variant)
70 data_s *result = NULL;
72 RETV_IF(NULL == variant, result);
74 g_variant_get(variant, "a(y)", &iter);
76 size = g_variant_iter_n_children(iter);
77 buf = g_new0(guint8, size);
84 while (g_variant_iter_loop(iter, "(y)", &element))
90 g_variant_iter_free(iter);
92 result = g_new0(data_s, 1);
96 result->length = size;
107 void net_nfc_util_gdbus_variant_to_data_s(GVariant *variant, data_s *data)
114 RET_IF(NULL == data);
115 RET_IF(NULL == variant);
120 g_variant_get(variant, "a(y)", &iter);
122 size = g_variant_iter_n_children(iter);
123 buf = g_new0(guint8, size);
129 while (g_variant_iter_loop(iter, "(y)", &element))
131 *(buf + i) = element;
135 g_variant_iter_free(iter);
142 GVariant *net_nfc_util_gdbus_buffer_to_variant(const uint8_t *buffer,
145 GVariantBuilder builder;
147 g_variant_builder_init(&builder, G_VARIANT_TYPE("a(y)"));
149 if (buffer && length > 0)
153 for(i = 0; i < length; i++)
154 g_variant_builder_add(&builder, "(y)", *(buffer + i));
157 return g_variant_builder_end(&builder);
160 GVariant *net_nfc_util_gdbus_data_to_variant(const data_s *data)
163 return net_nfc_util_gdbus_buffer_to_variant(data->buffer, data->length);
165 return net_nfc_util_gdbus_buffer_to_variant(NULL, 0);
168 ndef_message_s *net_nfc_util_gdbus_variant_to_ndef_message(GVariant *variant)
170 data_s data = { NULL, 0 };
171 ndef_message_s *temp = NULL;
172 ndef_message_s *message = NULL;
174 RETV_IF(NULL == variant, NULL);
176 net_nfc_util_gdbus_variant_to_data_s(variant, &data);
178 if (NULL == data.buffer || data.length <= 0)
181 if (net_nfc_util_create_ndef_message(&temp) == NET_NFC_OK)
183 if (net_nfc_util_convert_rawdata_to_ndef_message(&data, temp) == NET_NFC_OK)
189 NFC_ERR("net_nfc_create_ndef_message_from_rawdata failed");
191 net_nfc_util_free_ndef_message(temp);
196 NFC_ERR("net_nfc_util_create_ndef_message failed");
199 net_nfc_util_free_data(&data);
205 GVariant *net_nfc_util_gdbus_ndef_message_to_variant(
206 const ndef_message_s *message)
211 GVariant *variant = NULL;
213 length = net_nfc_util_get_ndef_message_length((ndef_message_s *)message);
216 data_s temp = { NULL, 0 };
218 if (net_nfc_util_alloc_data(&temp, length) == true)
220 ret = net_nfc_util_convert_ndef_message_to_rawdata((ndef_message_s *)message,
222 if (NET_NFC_OK == ret)
228 NFC_ERR("can not convert ndef_message to rawdata");
230 net_nfc_util_free_data(&temp);
235 NFC_ERR("net_nfc_util_alloc_data failed");
240 NFC_ERR("message length is 0");
243 variant = net_nfc_util_gdbus_data_to_variant(data);
246 net_nfc_util_free_data(data);