Remove unnecessary setting
[platform/core/connectivity/nfc-manager-neard.git] / client / net_nfc_client_ndef_message.c
1 /*
2  * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  *                               http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 #include <linux/limits.h>
17
18 #include "net_nfc_debug_internal.h"
19 #include "net_nfc_util_internal.h"
20 #include "net_nfc_util_ndef_message.h"
21 #include "net_nfc_ndef_message.h"
22 #include "net_nfc_data.h"
23
24
25 /* public functions */
26 API net_nfc_error_e net_nfc_create_ndef_message(ndef_message_s **ndef_message)
27 {
28         return net_nfc_util_create_ndef_message(ndef_message);
29 }
30
31 API net_nfc_error_e net_nfc_create_rawdata_from_ndef_message(
32                 ndef_message_s *ndef_message, data_s **rawdata)
33 {
34         data_s *data;
35         uint32_t count;
36         net_nfc_error_e result;
37
38         RETV_IF(NULL == ndef_message, NET_NFC_NULL_PARAMETER);
39         RETV_IF(NULL == rawdata, NET_NFC_NULL_PARAMETER);
40
41         *rawdata = NULL;
42
43         result = net_nfc_get_ndef_message_byte_length(ndef_message, &count);
44         if (result != NET_NFC_OK)
45                 return result;
46
47         result = net_nfc_create_data(&data ,NULL, count);
48         if (result != NET_NFC_OK)
49                 return result;
50
51         result = net_nfc_util_convert_ndef_message_to_rawdata(ndef_message, data);
52
53         if (result == NET_NFC_OK)
54                 *rawdata = data;
55         else
56                 net_nfc_free_data(data);
57
58         return result;
59 }
60
61 API net_nfc_error_e net_nfc_create_ndef_message_from_rawdata(
62                 ndef_message_s **ndef_message, data_s *rawdata)
63 {
64         ndef_message_s *msg;
65         net_nfc_error_e result;
66
67         RETV_IF(NULL == ndef_message, NET_NFC_NULL_PARAMETER);
68         RETV_IF(NULL == rawdata, NET_NFC_NULL_PARAMETER);
69
70         *ndef_message = NULL;
71
72         result = net_nfc_create_ndef_message(&msg);
73         if (result != NET_NFC_OK)
74                 return result;
75
76         result = net_nfc_util_convert_rawdata_to_ndef_message(rawdata, msg);
77         if (result == NET_NFC_OK)
78                 *ndef_message = msg;
79         else
80                 net_nfc_free_ndef_message(msg);
81
82         return result;
83 }
84
85 API net_nfc_error_e net_nfc_get_ndef_message_byte_length(
86                 ndef_message_s *ndef_message, uint32_t *length)
87 {
88         net_nfc_error_e result;
89
90         RETV_IF(NULL == ndef_message, NET_NFC_NULL_PARAMETER);
91         RETV_IF(NULL == length, NET_NFC_NULL_PARAMETER);
92
93         *length = net_nfc_util_get_ndef_message_length(ndef_message);
94         if (*length >= 0)
95                 result = NET_NFC_OK;
96         else
97                 result = NET_NFC_INVALID_PARAM;
98
99         return result;
100 }
101
102 API net_nfc_error_e net_nfc_append_record_to_ndef_message(
103                 ndef_message_s *ndef_message, ndef_record_s *record)
104 {
105         RETV_IF(NULL == ndef_message, NET_NFC_NULL_PARAMETER);
106         RETV_IF(NULL == record, NET_NFC_NULL_PARAMETER);
107
108         return net_nfc_util_append_record(ndef_message, record);
109 }
110
111 API net_nfc_error_e net_nfc_free_ndef_message(ndef_message_s *ndef_message)
112 {
113         RETV_IF(NULL == ndef_message, NET_NFC_NULL_PARAMETER);
114
115         return net_nfc_util_free_ndef_message(ndef_message);
116 }
117
118 API net_nfc_error_e net_nfc_get_ndef_message_record_count(
119                 ndef_message_s *ndef_message, int *count)
120 {
121         RETV_IF(NULL == ndef_message, NET_NFC_NULL_PARAMETER);
122         RETV_IF(NULL == count, NET_NFC_NULL_PARAMETER);
123
124         *count = ndef_message->recordCount;
125         return NET_NFC_OK;
126 }
127
128 API void net_nfc_ndef_print_message (ndef_message_s *ndef_message)
129 {
130         net_nfc_util_print_ndef_message(ndef_message);
131 }
132
133
134 API net_nfc_error_e net_nfc_search_record_by_type(ndef_message_s *ndef_message,
135                 net_nfc_record_tnf_e tnf, data_s *type, ndef_record_s **record)
136 {
137         return net_nfc_util_search_record_by_type(ndef_message, tnf, type, record);
138 }
139
140 API net_nfc_error_e net_nfc_append_record_by_index(ndef_message_s *ndef_message,
141                 int index, ndef_record_s *record)
142 {
143         return net_nfc_util_append_record_by_index(ndef_message, index, record);
144 }
145
146 API net_nfc_error_e net_nfc_get_record_by_index (ndef_message_s *ndef_message,
147                 int index, ndef_record_s **record)
148 {
149         return net_nfc_util_get_record_by_index(ndef_message, index, record);
150 }
151
152 API net_nfc_error_e net_nfc_remove_record_by_index(ndef_message_s *ndef_message,
153                 int index)
154 {
155         return net_nfc_util_remove_record_by_index(ndef_message, index);
156 }
157
158 API net_nfc_error_e net_nfc_retrieve_current_ndef_message(
159                 ndef_message_s **ndef_message)
160 {
161         FILE *fp = NULL;
162         char file_path[PATH_MAX] = { 0, };
163         net_nfc_error_e result = NET_NFC_UNKNOWN_ERROR;
164
165         RETV_IF(NULL == ndef_message, NET_NFC_NULL_PARAMETER);
166
167         snprintf(file_path, sizeof(file_path), "%s/%s/%s", NET_NFC_MANAGER_DATA_PATH,
168                         NET_NFC_MANAGER_DATA_PATH_MESSAGE, NET_NFC_MANAGER_NDEF_FILE_NAME);
169
170         if ((fp = fopen(file_path, "r")) != NULL)
171         {
172                 long int size = 0;
173
174                 /* rewind to start of file */
175                 fseek(fp, 0, SEEK_END);
176                 size = ftell(fp);
177                 fseek(fp, 0, SEEK_SET);
178
179                 NFC_DBG("message length = [%ld]", size);
180
181                 if (size > 0)
182                 {
183                         data_s data = { NULL, 0 };
184
185                         if (net_nfc_util_alloc_data(&data, size) == true)
186                         {
187                                 int current;
188                                 size_t offset = 0;
189                                 /* read fully */
190                                 do {
191                                         current = fread(data.buffer + offset, 1,
192                                                         data.length - offset, fp);
193                                         if (current > 0)
194                                                 offset += current;
195                                         else
196                                                 break;
197                                 } while (offset < data.length);
198
199                                 if (offset == data.length)
200                                         result = net_nfc_create_ndef_message_from_rawdata(ndef_message, &data);
201                                 else
202                                         NFC_ERR("failed to read ndef message");
203
204                                 net_nfc_util_free_data(&data);
205                         }
206                         else
207                         {
208                                 result = NET_NFC_ALLOC_FAIL;
209                         }
210                 }
211                 else
212                 {
213                         result = NET_NFC_NO_NDEF_MESSAGE;
214                 }
215
216                 fclose(fp);
217         }
218         else
219         {
220                 result = NET_NFC_NO_NDEF_MESSAGE;
221         }
222
223         return result;
224 }