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.
17 #include "bluetooth-api.h"
18 #include "net_nfc_server_handover.h"
19 #include "net_nfc_debug_internal.h"
20 #include "net_nfc_util_internal.h"
21 #include "net_nfc_util_ndef_message.h"
22 #include "net_nfc_util_ndef_record.h"
23 #include "net_nfc_util_handover.h"
24 #include "net_nfc_server_controller.h"
25 #include "net_nfc_server_llcp.h"
26 #include "net_nfc_server_process_handover.h"
27 #include "net_nfc_server_process_snep.h"
28 #include "net_nfc_util_gdbus_internal.h"
29 #include "net_nfc_server_handover_bss.h"
30 #include "net_nfc_server_handover_bt.h"
32 typedef void (*_net_nfc_server_handover_create_carrier_msg_cb)(
33 net_nfc_error_e result,
34 ndef_message_s *selector,
37 typedef struct _net_nfc_handover_context_t
39 net_nfc_target_handle_s *handle;
40 net_nfc_error_e result;
41 net_nfc_llcp_socket_t socket;
43 net_nfc_conn_handover_carrier_type_e type;
45 ndef_record_s *record;
48 net_nfc_handover_context_t;
50 #define NET_NFC_CH_CONTEXT net_nfc_target_handle_s *handle;\
51 net_nfc_llcp_socket_t socket;\
52 net_nfc_error_e result;\
54 net_nfc_conn_handover_carrier_type_e type;\
57 typedef struct _net_nfc_server_handover_create_config_context_t
61 _net_nfc_server_handover_create_carrier_msg_cb cb;
62 net_nfc_conn_handover_carrier_type_e current_type;
63 ndef_message_s *ndef_message;
64 ndef_message_s *requester; /* for low power selector */
66 ndef_record_s *record;
68 net_nfc_server_handover_create_config_context_t;
70 typedef struct _net_nfc_server_handover_process_config_context_t
74 net_nfc_server_handover_process_carrier_record_cb cb;
75 }net_nfc_server_handover_process_config_context_t;
79 static void _net_nfc_server_handover_send_response(void *user_param,
81 net_nfc_error_e result);
83 static void _net_nfc_server_handover_client_process(
84 net_nfc_handover_context_t *context);
86 static void _net_nfc_server_handover_client_error_cb(
87 net_nfc_error_e result,
88 net_nfc_target_handle_s *handle,
89 net_nfc_llcp_socket_t socket,
93 static void _net_nfc_server_handover_client_connected_cb(
94 net_nfc_error_e result,
95 net_nfc_target_handle_s *handle,
96 net_nfc_llcp_socket_t socket,
100 static void _net_nfc_server_handover_get_response_process(
101 net_nfc_handover_context_t *context);
103 static net_nfc_error_e
104 _net_nfc_server_handover_create_requester_from_rawdata(
105 ndef_message_s **requestor,
108 static net_nfc_error_e
109 _net_nfc_server_handover_create_requester_carrier_configs(
110 net_nfc_conn_handover_carrier_type_e type,
114 static bool _net_nfc_server_handover_check_hr_record_validation(
115 ndef_message_s *message);
117 static bool _net_nfc_server_handover_check_hs_record_validation(
118 ndef_message_s *message);
120 static net_nfc_error_e
121 _net_nfc_server_handover_create_selector_carrier_configs(
122 net_nfc_conn_handover_carrier_type_e type,
126 static int _net_nfc_server_handover_iterate_create_carrier_configs(
127 net_nfc_server_handover_create_config_context_t *context);
129 static int _net_nfc_server_handover_iterate_carrier_configs_to_next(
130 net_nfc_server_handover_create_config_context_t *context);
132 static int _net_nfc_server_handover_iterate_carrier_configs_step(
133 net_nfc_server_handover_create_config_context_t *context);
135 static void _net_nfc_server_handover_server_process(
136 net_nfc_handover_context_t *context);
138 ////////////////////////////////////////////////////////////////////////////
140 static void _net_nfc_server_handover_send_response(
143 net_nfc_error_e result)
145 HandoverRequestData *handover_data = NULL;
148 GVariant* data = NULL;
150 handover_data = (HandoverRequestData*)user_param;
152 data = net_nfc_util_gdbus_data_to_variant(ac_data);
154 resp_type = NET_NFC_MESSAGE_CONNECTION_HANDOVER;
156 if (result == NET_NFC_OK)
157 resp_event = NET_NFC_EXCHANGER_TRANSFER_COMPLETED;
159 resp_event = NET_NFC_EXCHANGER_TRANSFER_FAILED;
161 if (handover_data->invocation)
163 net_nfc_gdbus_handover_complete_request(
164 handover_data->handoverobj,
165 handover_data->invocation,
170 g_object_unref(handover_data->invocation);
173 if (handover_data->data)
175 g_free(handover_data->data->buffer);
176 g_free(handover_data->data);
179 g_object_unref(handover_data->handoverobj);
181 g_free(handover_data);
184 static net_nfc_error_e _net_nfc_server_handover_convert_ndef_message_to_data(
188 net_nfc_error_e result;
191 if (msg == NULL || data == NULL)
193 return NET_NFC_INVALID_PARAM;
196 length = net_nfc_util_get_ndef_message_length(msg);
199 net_nfc_util_alloc_data(data, length);
200 result = net_nfc_util_convert_ndef_message_to_rawdata(msg, data);
204 result = NET_NFC_INVALID_PARAM;
210 static void _net_nfc_server_handover_bt_get_carrier_record_cb(
211 net_nfc_error_e result,
212 net_nfc_conn_handover_carrier_state_e cps,
213 ndef_record_s *carrier,
214 uint32_t aux_data_count,
215 ndef_record_s *aux_data,
218 net_nfc_server_handover_create_config_context_t *context =
219 (net_nfc_server_handover_create_config_context_t *)user_param;
221 /* append record to ndef message */
222 if (result == NET_NFC_OK)
224 ndef_record_s *record;
226 /* FIXME : copy record and append */
227 net_nfc_util_create_record(carrier->TNF,
233 if ((result = net_nfc_util_append_carrier_config_record(
234 context->ndef_message,
238 DEBUG_SERVER_MSG("net_nfc_util_append_carrier"
239 "_config_record success");
243 DEBUG_ERR_MSG("net_nfc_util_append_carrier"
244 "_config_record failed [%d]",
246 net_nfc_util_free_record(record);
250 (GSourceFunc)_net_nfc_server_handover_iterate_carrier_configs_to_next,
254 /* don't free context */
257 static void _net_nfc_server_handover_bt_process_carrier_record_cb(
258 net_nfc_error_e result,
259 net_nfc_conn_handover_carrier_type_e type,
263 net_nfc_server_handover_process_config_context_t *context =
264 (net_nfc_server_handover_process_config_context_t *)user_param;
266 if (result == NET_NFC_OK)
268 if (context->cb != NULL)
270 context->cb(result, type, data, context->user_param);
275 DEBUG_ERR_MSG("_handover_bt_process_carrier_record failed [%d]",
279 _net_nfc_util_free_mem(context);
283 net_nfc_error_e net_nfc_server_handover_get_carrier_record_by_priority_order(
284 ndef_message_s *request, ndef_record_s **record)
286 net_nfc_error_e result;
287 unsigned int carrier_count = 0;
289 LOGD("[%s] START", __func__);
291 if (request == NULL || record == NULL)
293 return NET_NFC_NULL_PARAMETER;
298 if ((result = net_nfc_util_get_alternative_carrier_record_count(
300 &carrier_count)) == NET_NFC_OK)
303 net_nfc_conn_handover_carrier_type_e carrier_type =
304 NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;
306 for (priority = NET_NFC_CONN_HANDOVER_CARRIER_BT;*record == NULL
307 && priority < NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;priority++)
309 /* check each carrier record and create matched record */
310 for (idx = 0; idx < carrier_count; idx++)
312 if ((net_nfc_util_get_alternative_carrier_type(
315 &carrier_type)== NET_NFC_OK)
316 && (carrier_type == priority))
318 DEBUG_SERVER_MSG("selected carrier type"
319 " = [%d]", carrier_type);
320 net_nfc_util_get_carrier_config_record(
332 DEBUG_ERR_MSG("net_nfc_util_get_alternative_carrier"
333 "_record_count failed");
336 LOGD("[%s] END", __func__);
341 static net_nfc_error_e _net_nfc_server_handover_create_requester_from_rawdata(
342 ndef_message_s **requestor,
345 net_nfc_error_e result;
347 if (requestor == NULL)
348 return NET_NFC_NULL_PARAMETER;
352 result = net_nfc_util_create_ndef_message(requestor);
353 if (result == NET_NFC_OK)
355 result = net_nfc_util_convert_rawdata_to_ndef_message(data,
358 if (result == NET_NFC_OK)
360 if (_net_nfc_server_handover_check_hr_record_validation(
367 DEBUG_ERR_MSG("record is not valid or"
368 " is not available");
369 net_nfc_util_free_ndef_message(*requestor);
370 result = NET_NFC_INVALID_PARAM;
375 DEBUG_ERR_MSG("_net_nfc_ndef_rawdata_to_ndef"
376 "failed [%d]",result);
379 DEBUG_ERR_MSG("net_nfc_util_create_ndef_message failed [%d]",
386 net_nfc_error_e net_nfc_server_handover_create_selector_from_rawdata(
387 ndef_message_s **selector, data_s *data)
389 net_nfc_error_e result;
391 if (selector == NULL)
392 return NET_NFC_NULL_PARAMETER;
396 if ((result = net_nfc_util_create_ndef_message(selector))
399 if ((result = net_nfc_util_convert_rawdata_to_ndef_message(data,
400 *selector)) == NET_NFC_OK)
403 /* if record is not Hs record, then */
404 if (_net_nfc_server_handover_check_hs_record_validation(
411 DEBUG_ERR_MSG("record is not valid or is "
413 net_nfc_util_free_ndef_message(*selector);
414 result = NET_NFC_INVALID_PARAM;
419 DEBUG_ERR_MSG("_net_nfc_ndef_rawdata_to_ndef"
420 " failed [%d]",result);
425 DEBUG_ERR_MSG("_net_nfc_util_create_ndef_message"
426 " failed [%d]",result);
432 static bool _net_nfc_server_handover_check_hr_record_validation(
433 ndef_message_s *message)
438 LOGD("[%s] START", __func__);
443 rec = (ndef_record_s *)message->records;
445 if (memcmp(rec->type_s.buffer, CH_REQ_RECORD_TYPE,
446 rec->type_s.length) != 0)
448 DEBUG_ERR_MSG("This is not connection handover"
453 if (rec->payload_s.buffer[0] != CH_VERSION)
455 DEBUG_ERR_MSG("connection handover version is not matched");
459 if (net_nfc_util_get_alternative_carrier_record_count(message, &count)
460 != NET_NFC_OK || count == 0)
462 DEBUG_ERR_MSG("there is no carrier reference");
466 LOGD("[%s] END", __func__);
471 LOGD("[%s] END", __func__);
476 static bool _net_nfc_server_handover_check_hs_record_validation(
477 ndef_message_s *message)
482 LOGD("[%s] START", __func__);
487 rec = (ndef_record_s *)message->records;
489 if (memcmp(rec->type_s.buffer, CH_SEL_RECORD_TYPE,
490 rec->type_s.length) != 0)
492 DEBUG_ERR_MSG("This is not connection handover"
497 if (net_nfc_util_get_alternative_carrier_record_count(
498 message,&count)!= NET_NFC_OK || count == 0)
500 DEBUG_ERR_MSG("there is no carrrier reference");
505 if (rec->payload_s.buffer[0] != CH_VERSION)
507 DEBUG_ERR_MSG("connection handover version"
512 LOGD("[%s] END", __func__);
517 LOGD("[%s] END", __func__);
522 static int _net_nfc_server_handover_iterate_carrier_configs_step(
523 net_nfc_server_handover_create_config_context_t *context)
525 LOGD("[%s:%d] START", __func__, __LINE__);
532 if (context->cb != NULL)
534 context->cb(NET_NFC_OK, context->ndef_message,
535 context->user_param);
538 if (context->ndef_message != NULL)
540 net_nfc_util_free_ndef_message(context->ndef_message);
543 _net_nfc_util_free_mem(context);
545 LOGD("[%s:%d] END", __func__, __LINE__);
550 static int _net_nfc_server_handover_iterate_carrier_configs_to_next(
551 net_nfc_server_handover_create_config_context_t *context)
553 if (context->result == NET_NFC_OK || context->result == NET_NFC_BUSY)
555 if (context->type == NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN)
557 if (context->current_type <
558 NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN)
560 context->current_type++;
565 context->current_type =
566 NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;
570 (GSourceFunc)_net_nfc_server_handover_iterate_create_carrier_configs,
575 DEBUG_ERR_MSG("context->result is error [%d]", context->result);
578 (GSourceFunc)_net_nfc_server_handover_iterate_carrier_configs_step,
585 static int _net_nfc_server_handover_iterate_create_carrier_configs(
586 net_nfc_server_handover_create_config_context_t *context)
588 LOGD("[%s:%d] START", __func__, __LINE__);
590 switch (context->current_type)
592 case NET_NFC_CONN_HANDOVER_CARRIER_BT :
593 DEBUG_MSG("[NET_NFC_CONN_HANDOVER_CARRIER_BT]");
594 net_nfc_server_handover_bt_get_carrier_record(
595 _net_nfc_server_handover_bt_get_carrier_record_cb,
599 // case NET_NFC_CONN_HANDOVER_CARRIER_WIFI_BSS :
600 // DEBUG_MSG("[NET_NFC_CONN_HANDOVER_CARRIER_WIFI_BSS]");
602 // (GSourceFunc)net_nfc_service_llcp_handover_append_wifi_carrier_config,
606 // case NET_NFC_CONN_HANDOVER_CARRIER_WIFI_IBSS :
607 // DEBUG_MSG("[NET_NFC_CONN_HANDOVER_CARRIER_WIFI_BSS]");
609 // (GSourceFunc)_net_nfc_server_handover_append_wifi_carrier_config,
613 case NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN :
614 DEBUG_MSG("[NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN]");
616 (GSourceFunc)_net_nfc_server_handover_iterate_carrier_configs_step,
621 DEBUG_MSG("[unknown : %d]", context->current_type);
623 (GSourceFunc)_net_nfc_server_handover_iterate_carrier_configs_step,
628 LOGD("[%s:%d] END", __func__, __LINE__);
633 static net_nfc_error_e _net_nfc_server_handover_create_requester_carrier_configs(
634 net_nfc_conn_handover_carrier_type_e type,
638 net_nfc_error_e result = NET_NFC_OK;
639 net_nfc_server_handover_create_config_context_t *context = NULL;
641 LOGD("[%s:%d] START", __func__, __LINE__);
643 _net_nfc_util_alloc_mem(context, sizeof(*context));
646 context->type = type;
647 if (type == NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN)
649 context->current_type =
650 NET_NFC_CONN_HANDOVER_CARRIER_BT;
653 context->current_type = context->type;
656 context->user_param = user_param;
657 net_nfc_util_create_handover_request_message(
658 &context->ndef_message);
660 /* append carrier record */
662 (GSourceFunc)_net_nfc_server_handover_iterate_create_carrier_configs,
667 DEBUG_ERR_MSG("alloc failed");
668 result = NET_NFC_ALLOC_FAIL;
671 LOGD("[%s:%d] END", __func__, __LINE__);
676 static net_nfc_error_e _net_nfc_server_handover_create_selector_carrier_configs(
677 net_nfc_conn_handover_carrier_type_e type,
681 net_nfc_error_e result = NET_NFC_OK;
682 net_nfc_server_handover_create_config_context_t *context = NULL;
684 LOGD("[%s:%d] START", __func__, __LINE__);
686 _net_nfc_util_alloc_mem(context, sizeof(*context));
689 context->type = type;
690 if (type == NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN)
691 context->current_type = NET_NFC_CONN_HANDOVER_CARRIER_BT;
693 context->current_type = context->type;
696 context->user_param = user_param;
697 net_nfc_util_create_handover_select_message(
698 &context->ndef_message);
700 /* append carrier record */
702 (GSourceFunc)_net_nfc_server_handover_iterate_create_carrier_configs,
707 DEBUG_ERR_MSG("alloc failed");
708 result = NET_NFC_ALLOC_FAIL;
711 LOGD("[%s:%d] END", __func__, __LINE__);
716 net_nfc_error_e net_nfc_server_handover_process_carrier_record(
717 ndef_record_s *carrier, void *cb, void *user_param)
719 net_nfc_error_e result = NET_NFC_OK;
720 net_nfc_server_handover_process_config_context_t *context = NULL;
722 LOGD("[%s:%d] START", __func__, __LINE__);
724 _net_nfc_util_alloc_mem(context, sizeof(*context));
727 net_nfc_conn_handover_carrier_type_e type;
729 net_nfc_util_get_alternative_carrier_type_from_record(
733 context->type = type;
734 context->user_param = user_param;
736 context->step = NET_NFC_LLCP_STEP_01;
738 /* process carrier record */
741 case NET_NFC_CONN_HANDOVER_CARRIER_BT :
742 DEBUG_MSG("[NET_NFC_CONN_HANDOVER_CARRIER_BT]");
743 net_nfc_server_handover_bt_process_carrier_record(
745 _net_nfc_server_handover_bt_process_carrier_record_cb,
749 case NET_NFC_CONN_HANDOVER_CARRIER_WIFI_BSS :
750 DEBUG_MSG("[NET_NFC_CONN_HANDOVER_CARRIER_WIFI_BSS]");
751 net_nfc_server_handover_bss_process_carrier_record(
755 _net_nfc_util_free_mem(context);
758 case NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN :
759 DEBUG_MSG("[NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN]");
760 _net_nfc_util_free_mem(context);
764 DEBUG_MSG("[unknown]");
765 _net_nfc_util_free_mem(context);
771 DEBUG_ERR_MSG("alloc failed");
772 result = NET_NFC_ALLOC_FAIL;
775 LOGD("[%s:%d] END", __func__, __LINE__);
781 static net_nfc_error_e _net_nfc_server_handover_snep_client_cb(
782 net_nfc_snep_handle_h handle,
783 net_nfc_error_e result,
788 _net_nfc_server_handover_client_context_t *context =
789 (_net_nfc_server_handover_client_context_t *)user_param;
791 DEBUG_SERVER_MSG("type [%d], result [%d], data [%p], user_param [%p]",
792 type, result, data, user_param);
795 case SNEP_RESP_SUCCESS :
797 ndef_message_s *selector;
799 result = net_nfc_server_handover_create_selector_from_rawdata(
802 if (result == NET_NFC_OK) {
803 if (false /* is low power ??? */) {
805 _net_nfc_server_handover_process_selector_msg(
810 _net_nfc_server_handover_process_selector_msg(
815 if (result != NET_NFC_OK) {
816 DEBUG_ERR_MSG("_net_nfc_server_handover_process"
817 "_selector_msg failed [%d]",result);
818 if (context->cb != NULL) {
822 context->user_param);
824 _net_nfc_util_free_mem(context);
827 net_nfc_util_free_ndef_message(selector);
829 DEBUG_ERR_MSG("_net_nfc_server_handover_create"
830 "_selector_from_rawdata failed [%d]",result);
831 if (context->cb != NULL) {
835 context->user_param);
837 _net_nfc_util_free_mem(context);
842 case SNEP_RESP_BAD_REQ :
843 case SNEP_RESP_EXCESS_DATA :
844 case SNEP_RESP_NOT_FOUND :
845 case SNEP_RESP_NOT_IMPLEMENT :
846 case SNEP_RESP_REJECT :
847 case SNEP_RESP_UNSUPPORTED_VER :
850 DEBUG_ERR_MSG("error response [0x%02x]", type);
851 if (context->cb != NULL) {
852 context->cb(result, context->type, NULL,
853 context->user_param);
855 _net_nfc_util_free_mem(context);
864 static void _net_nfc_server_handover_create_requester_carrier_configs_cb(
865 net_nfc_error_e result,
869 _net_nfc_server_handover_client_context_t *context =
870 (_net_nfc_server_handover_client_context_t *)user_param;
879 /* convert ndef message */
880 if ((result = _net_nfc_server_handover_convert_ndef_message_to_data(msg,
881 &data)) == NET_NFC_OK) {
882 net_nfc_service_snep_client(context->handle,
887 _net_nfc_server_handover_snep_client_cb,
890 net_nfc_util_free_data(&data);
894 DEBUG_ERR_MSG("_net_nfc_server_handover_convert"
895 "_ndef_message_to_datafailed [%d]",result);
896 if (context->cb != NULL)
901 context->user_param);
903 _net_nfc_util_free_mem(context);
908 DEBUG_ERR_MSG("null param, [%d]", result);
909 if (context->cb != NULL)
914 context->user_param);
916 _net_nfc_util_free_mem(context);
924 static void _net_nfc_server_handover_server_create_carrier_configs_cb(
925 net_nfc_error_e result,
926 ndef_message_s *selector,
929 _net_nfc_server_handover_create_config_context_t *context =
930 (_net_nfc_server_handover_create_config_context_t *)user_param;
938 if (result == NET_NFC_OK)
940 result = _net_nfc_server_handover_convert_ndef_message_to_data(
944 if (result == NET_NFC_OK)
946 /* process message */
947 net_nfc_server_handover_process_carrier_record(
952 result = net_nfc_service_snep_server_send_get_response(
955 if (result != NET_NFC_OK)
957 DEBUG_ERR_MSG("net_nfc_service_snep_server"
958 "_send_get_response failed [%d]",result);
960 net_nfc_util_free_data(&data);
964 DEBUG_ERR_MSG("_net_nfc_server_handover_convert_ndef_message_to_data"
965 "failed [%d]",result);
970 DEBUG_ERR_MSG("_net_nfc_server_handover_create_selector_msg"
971 "failed [%d]",result);
974 _net_nfc_util_free_mem(context);
977 static net_nfc_error_e _net_nfc_server_handover_create_selector_msg(
978 net_nfc_snep_handle_h handle,
979 ndef_message_s *request,
982 net_nfc_error_e result;
985 net_nfc_manager_util_play_sound(NET_NFC_TASK_END);
987 /* get requester message */
988 if ((result = net_nfc_util_get_alternative_carrier_record_count(
990 &count)) == NET_NFC_OK)
992 if (1/* power state */ || count == 1)
994 ndef_record_s *record = NULL;
996 /* fill alternative carrier information */
998 net_nfc_server_handover_get_carrier_record_by_priority_order(
1000 &record)) == NET_NFC_OK)
1002 net_nfc_conn_handover_carrier_type_e type =
1003 NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;
1005 if ((result = net_nfc_util_get_alternative_carrier_type_from_record(
1007 &type)) == NET_NFC_OK)
1009 _net_nfc_server_handover_create_config_context_t *context = NULL;
1011 _net_nfc_util_alloc_mem(context, sizeof(*context));
1013 context->user_param = handle;
1015 net_nfc_util_create_record(record->TNF,
1016 &record->type_s, &record->id_s,
1020 if ((result = _net_nfc_server_handover_create_selector_carrier_configs(
1022 _net_nfc_server_handover_server_create_carrier_configs_cb,
1023 context)) != NET_NFC_OK)
1025 DEBUG_ERR_MSG("_create_selector_carrier_configs "
1026 "failed [%d]", result);
1031 DEBUG_ERR_MSG("get_alternative_carrier_type_from_record "
1032 "failed [%d]", result);
1037 DEBUG_ERR_MSG("r_get_carrier_record_by_priority_order"
1038 " failed [%d]", result);
1041 else /* low power && count > 1 */
1043 ndef_message_s selector;
1045 if ((result = _net_nfc_server_handover_create_low_power_selector_message(
1047 &selector)) == NET_NFC_OK)
1049 _net_nfc_server_handover_server_create_carrier_configs_cb(
1054 net_nfc_util_free_ndef_message(&selector);
1058 DEBUG_ERR_MSG("_create_low_power_selector_message"
1059 "failed [%d]", result);
1065 DEBUG_ERR_MSG("net_nfc_util_get_alternative_carrier_record_count"
1066 "failed [%d]", result);
1073 static net_nfc_error_e _net_nfc_server_handover_create_server_cb(
1074 net_nfc_snep_handle_h handle,
1075 net_nfc_error_e result,
1080 DEBUG_SERVER_MSG("type [0x%02x], result [%d], data [%p], user_param [%p]",
1081 type, result, data, user_param);
1083 if (result != NET_NFC_OK || data == NULL || data->buffer == NULL)
1086 return NET_NFC_NULL_PARAMETER;
1093 ndef_message_s *request;
1095 /* TODO : send select response to requester */
1097 _net_nfc_server_handover_create_requester_from_rawdata(
1100 if (result == NET_NFC_OK) {
1101 if (1/* TODO : check version */)
1103 _net_nfc_server_handover_create_selector_msg(
1110 DEBUG_ERR_MSG("not supported version [0x%x]",
1113 result = NET_NFC_NOT_SUPPORTED;
1116 net_nfc_util_free_ndef_message(request);
1120 DEBUG_ERR_MSG("_net_nfc_server_handover_create"
1121 "_requester_from_rawdata failed [%d]",result);
1127 DEBUG_ERR_MSG("PUT request doesn't supported");
1128 result = NET_NFC_NOT_SUPPORTED;
1132 DEBUG_ERR_MSG("error [%d]", result);
1142 static net_nfc_error_e _net_nfc_server_handover_select_carrier_record(
1143 ndef_message_s *request,
1144 net_nfc_conn_handover_carrier_type_e *type,
1145 ndef_record_s **record)
1147 net_nfc_error_e result;
1151 *type = NET_NFC_CONN_HANDOVER_CARRIER_UNKNOWN;
1153 /* get requester message */
1154 if ((result = net_nfc_util_get_alternative_carrier_record_count(request,
1155 &count)) == NET_NFC_OK)
1157 if (1/* power state */ || count == 1)
1159 ndef_record_s *temp;
1161 /* fill alternative carrier information */
1163 net_nfc_server_handover_get_carrier_record_by_priority_order(
1165 &temp)) == NET_NFC_OK)
1168 net_nfc_util_get_alternative_carrier_type_from_record(
1170 type)) == NET_NFC_OK)
1172 net_nfc_util_create_record(temp->TNF,
1173 &temp->type_s, &temp->id_s,
1179 DEBUG_ERR_MSG("net_nfc_util_get_alternative"
1180 "_carrier_type_from_record failed [%d]", result);
1185 DEBUG_ERR_MSG("_handover_get_carrier_record"
1186 "_by_priority_order failed [%d]", result);
1189 else /* low power && count > 1 */
1191 result = NET_NFC_INVALID_STATE;
1196 DEBUG_ERR_MSG("net_nfc_util_get_alternative_carrier_record_count "
1197 "failed [%d]", result);
1205 static void _net_nfc_server_handover_create_carrier_configs_2_cb(
1206 net_nfc_error_e result,
1207 ndef_message_s *selector,
1210 net_nfc_handover_context_t *context =
1211 (net_nfc_handover_context_t *)user_param;
1213 DEBUG_SERVER_MSG("_net_nfc_server_handover_server_create_carrier_config_cb"
1214 "result [%d]",result);
1216 if (context == NULL)
1221 context->result = result;
1223 if (result == NET_NFC_OK) {
1224 result = _net_nfc_server_handover_convert_ndef_message_to_data(
1228 DEBUG_SERVER_MSG("selector message created, length [%d]",
1229 context->data.length);
1231 context->state = NET_NFC_LLCP_STEP_03;
1235 DEBUG_ERR_MSG("_net_nfc_server_handover_create_selector_msg failed [%d]",
1237 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1240 _net_nfc_server_handover_get_response_process(context);
1243 static void _net_nfc_server_handover_process_carrier_record_2_cb(
1244 net_nfc_error_e result,
1245 net_nfc_conn_handover_carrier_type_e type,
1249 net_nfc_handover_context_t *context =
1250 (net_nfc_handover_context_t *)user_param;
1252 DEBUG_SERVER_MSG("_net_nfc_server_handover_server_process_carrier_record_cb"
1253 "result [%d]",result);
1255 context->result = result;
1256 if (result == NET_NFC_OK)
1258 context->state = NET_NFC_LLCP_STEP_04;
1262 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1265 context->data.length = data->length;
1266 _net_nfc_util_alloc_mem(context->data.buffer, context->data.length);
1267 memcpy(context->data.buffer, data->buffer, context->data.length);
1270 _net_nfc_server_handover_server_process(context);
1273 static void _net_nfc_server_handover_get_response_process(
1274 net_nfc_handover_context_t *context)
1276 net_nfc_error_e result;
1278 if (context == NULL)
1283 switch (context->state)
1285 case NET_NFC_LLCP_STEP_02 :
1286 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_02");
1288 result = _net_nfc_server_handover_create_selector_carrier_configs(
1290 _net_nfc_server_handover_create_carrier_configs_2_cb,
1293 if (result != NET_NFC_OK)
1295 DEBUG_ERR_MSG("_net_nfc_server_handover_create_"
1296 "selector_carrier_config failed [%d]",result);
1300 case NET_NFC_LLCP_STEP_03 :
1301 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_03");
1303 result = net_nfc_server_handover_process_carrier_record(
1305 _net_nfc_server_handover_process_carrier_record_2_cb,
1308 if (result != NET_NFC_OK)
1310 DEBUG_ERR_MSG("net_nfc_server_handover_process_carrier_record"
1311 "failed [%d]",result);
1315 case NET_NFC_LLCP_STEP_04 :
1316 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_04");
1318 /* response select message */
1319 result = net_nfc_server_snep_server_send_get_response(
1320 (net_nfc_snep_handle_h)context->handle,
1324 case NET_NFC_STATE_ERROR :
1325 DEBUG_SERVER_MSG("NET_NFC_STATE_ERROR");
1329 DEBUG_ERR_MSG("NET_NFC_LLCP_STEP_??");
1335 static bool _net_nfc_server_handover_get_response_cb(
1336 net_nfc_snep_handle_h handle,
1342 net_nfc_error_e result;
1343 ndef_message_s *request;
1345 DEBUG_SERVER_MSG("type [%d], data [%p], user_param [%p]",
1346 type, data, user_param);
1348 if (data == NULL || data->buffer == NULL)
1354 /* TODO : send select response to requester */
1355 result = _net_nfc_server_handover_create_requester_from_rawdata(
1359 if (result == NET_NFC_OK)
1361 net_nfc_conn_handover_carrier_type_e type;
1362 ndef_record_s *record;
1364 if (_net_nfc_server_handover_select_carrier_record(
1367 &record) == NET_NFC_OK)
1369 net_nfc_handover_context_t *context = NULL;
1371 _net_nfc_util_alloc_mem(context, sizeof(*context));
1373 if (context != NULL)
1375 context->handle = (void *)handle;
1376 context->type = type;
1377 context->user_param = user_param;
1378 context->state = NET_NFC_LLCP_STEP_02;
1380 net_nfc_util_create_record(record->TNF,
1386 _net_nfc_server_handover_get_response_process(context);
1390 DEBUG_ERR_MSG("_net_nfc_util_alloc_mem failed");
1391 result = NET_NFC_ALLOC_FAIL;
1399 net_nfc_util_free_ndef_message(request);
1403 DEBUG_SERVER_MSG("it is not handover requester message, [%d]",
1407 return (result == NET_NFC_OK);
1410 ////////////////////////////////////////////////////////////////////////////////
1411 static void _net_nfc_server_handover_server_process_carrier_record_cb(
1412 net_nfc_error_e result,
1413 net_nfc_conn_handover_carrier_type_e type,
1417 net_nfc_handover_context_t *context =
1418 (net_nfc_handover_context_t *)user_param;
1420 DEBUG_SERVER_MSG("_net_nfc_server_handover_server_process"
1421 "_carrier_record_cb result [%d]",result);
1423 context->result = result;
1424 if (result == NET_NFC_OK)
1426 context->state = NET_NFC_LLCP_STEP_04;
1430 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1433 _net_nfc_server_handover_server_process(context);
1436 static void _net_nfc_server_handover_server_create_carrier_config_cb(
1437 net_nfc_error_e result,
1438 ndef_message_s *selector,
1441 net_nfc_handover_context_t *context =
1442 (net_nfc_handover_context_t *)user_param;
1444 DEBUG_SERVER_MSG("_net_nfc_server_handover_server_create"
1445 "_carrier_config_cb,result [%d]",result);
1447 if (context == NULL)
1452 context->result = result;
1454 if (result == NET_NFC_OK)
1456 result = _net_nfc_server_handover_convert_ndef_message_to_data(
1459 DEBUG_SERVER_MSG("selector message created, length [%d]",
1460 context->data.length);
1461 context->state = NET_NFC_LLCP_STEP_03;
1465 DEBUG_ERR_MSG("_net_nfc_server_handover_create_selector_msg"
1466 " failed [%d]", result);
1467 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1470 _net_nfc_server_handover_server_process(context);
1473 static void _net_nfc_server_handover_server_recv_cb(
1474 net_nfc_error_e result,
1475 net_nfc_target_handle_s *handle,
1476 net_nfc_llcp_socket_t socket,
1480 net_nfc_handover_context_t *context =
1481 (net_nfc_handover_context_t *)user_param;
1482 ndef_message_s *request;
1484 DEBUG_SERVER_MSG("_net_nfc_server_handover_server_recv_cb,"
1485 " socket [%x], result [%d]", socket, result);
1487 context->result = result;
1489 if (result == NET_NFC_OK)
1491 result = _net_nfc_server_handover_create_requester_from_rawdata(
1495 if (result == NET_NFC_OK)
1497 ndef_record_s *record;
1499 if (_net_nfc_server_handover_select_carrier_record(
1502 &record) == NET_NFC_OK)
1504 net_nfc_util_create_record(record->TNF,
1505 &record->type_s, &record->id_s,
1509 context->state = NET_NFC_LLCP_STEP_02;
1514 context->state = NET_NFC_LLCP_STEP_06;
1517 net_nfc_util_free_ndef_message(request);
1521 DEBUG_ERR_MSG("_net_nfc_server_handover_create"
1522 "_requester_from_rawdata failed [%d]",result);
1523 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1528 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_receive failed [%d]",
1530 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1533 _net_nfc_server_handover_server_process(context);
1536 static void _net_nfc_server_handover_server_send_cb(net_nfc_error_e result,
1537 net_nfc_target_handle_s *handle,
1538 net_nfc_llcp_socket_t socket,
1542 net_nfc_handover_context_t *context =
1543 (net_nfc_handover_context_t *)user_param;
1545 DEBUG_SERVER_MSG("_net_nfc_server_handover_server_send_cb"
1546 " socket [%x], result [%d]", socket, result);
1548 context->result = result;
1550 if (result == NET_NFC_OK)
1552 context->state = NET_NFC_LLCP_STEP_01;
1553 net_nfc_util_free_data(&context->data);
1554 net_nfc_util_free_record(context->record);
1555 context->record = NULL;
1559 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_send failed [%d]",
1561 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1564 _net_nfc_server_handover_server_process(context);
1567 static void _net_nfc_server_handover_server_process(
1568 net_nfc_handover_context_t *context)
1570 if (context == NULL)
1575 switch (context->state)
1577 case NET_NFC_LLCP_STEP_01 :
1578 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_01");
1580 /* receive request message */
1581 net_nfc_server_llcp_simple_receive(context->handle,
1583 _net_nfc_server_handover_server_recv_cb,
1587 case NET_NFC_LLCP_STEP_02 :
1588 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_02");
1590 context->result = _net_nfc_server_handover_create_selector_carrier_configs(
1592 _net_nfc_server_handover_server_create_carrier_config_cb,
1595 if (context->result != NET_NFC_OK)
1597 DEBUG_ERR_MSG("_net_nfc_server_handover_create_selector"
1598 "_carrier_configs failed [%d]", context->result);
1602 case NET_NFC_LLCP_STEP_03 :
1603 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_03");
1605 context->result = net_nfc_server_handover_process_carrier_record(
1607 _net_nfc_server_handover_server_process_carrier_record_cb,
1609 if (context->result != NET_NFC_OK)
1611 DEBUG_ERR_MSG("_net_nfc_server_handover_process_carrier_"
1612 "record failed [%d]",context->result);
1616 case NET_NFC_LLCP_STEP_04 :
1617 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_04");
1619 /* send select message */
1620 net_nfc_server_llcp_simple_send(
1624 _net_nfc_server_handover_server_send_cb,
1628 case NET_NFC_STATE_ERROR :
1629 DEBUG_SERVER_MSG("NET_NFC_STATE_ERROR");
1631 /* error, invoke callback */
1632 DEBUG_ERR_MSG("handover_server failed, [%d]",
1639 DEBUG_ERR_MSG("NET_NFC_LLCP_STEP_??");
1645 static void _net_nfc_server_handover_server_error_cb(
1646 net_nfc_error_e result,
1647 net_nfc_target_handle_s *handle,
1648 net_nfc_llcp_socket_t socket,
1652 net_nfc_handover_context_t *context =
1653 (net_nfc_handover_context_t *)user_param;
1655 DEBUG_ERR_MSG("result [%d], socket [%x], user_param [%p]",
1656 result, socket, user_param);
1658 if (context == NULL)
1663 net_nfc_controller_llcp_socket_close(socket, &result);
1665 net_nfc_util_free_record(context->record);
1666 net_nfc_util_free_data(&context->data);
1667 _net_nfc_util_free_mem(user_param);
1670 static void _net_nfc_server_handover_server_incomming_cb(
1671 net_nfc_error_e result,
1672 net_nfc_target_handle_s *handle,
1673 net_nfc_llcp_socket_t socket,
1677 DEBUG_SERVER_MSG("result [%d], socket [%x], user_param [%p]",
1678 result, socket, user_param);
1680 net_nfc_handover_context_t *accept_context = NULL;
1682 _net_nfc_util_alloc_mem(accept_context, sizeof(*accept_context));
1683 if (accept_context == NULL)
1685 DEBUG_ERR_MSG("_net_nfc_util_alloc_mem failed");
1687 result = NET_NFC_ALLOC_FAIL;
1691 accept_context->handle = handle;
1692 accept_context->socket = socket;
1693 accept_context->state = NET_NFC_LLCP_STEP_01;
1695 result = net_nfc_server_llcp_simple_accept(
1698 _net_nfc_server_handover_server_error_cb,
1701 if (result != NET_NFC_OK)
1703 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_accept failed, [%d]",
1709 _net_nfc_server_handover_server_process(accept_context);
1714 if (accept_context != NULL)
1716 _net_nfc_util_free_mem(accept_context);
1719 net_nfc_controller_llcp_socket_close(socket, &result);
1721 /* TODO : restart ?? */
1724 net_nfc_error_e net_nfc_server_handover_default_server_start(
1725 net_nfc_target_handle_s *handle)
1727 net_nfc_error_e result;
1729 /* start default handover server using snep */
1731 net_nfc_server_snep_default_server_register_get_response_cb(
1732 _net_nfc_server_handover_get_response_cb,
1735 /* start default handover server */
1736 result = net_nfc_server_llcp_simple_server(
1740 _net_nfc_server_handover_server_incomming_cb,
1741 _net_nfc_server_handover_server_error_cb,
1744 if (result == NET_NFC_OK)
1746 DEBUG_SERVER_MSG("start handover server, san [%s], sap [%d]",
1751 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_server failed, [%d]",
1758 static void _handover_default_activate_cb(int event,
1759 net_nfc_target_handle_s *handle, uint32_t sap, const char *san, void *user_param)
1761 net_nfc_error_e result;
1763 DEBUG_SERVER_MSG("event [%d], handle [%p], sap [%d], san [%s]",
1764 event, handle, sap, san);
1766 if (event == NET_NFC_LLCP_START) {
1767 /* start default handover server using snep */
1768 result = net_nfc_server_snep_default_server_register_get_response_cb(
1769 _net_nfc_server_handover_get_response_cb, NULL);
1771 /* start default handover server */
1772 result = net_nfc_server_llcp_simple_server(handle,
1774 _net_nfc_server_handover_server_incomming_cb,
1775 _net_nfc_server_handover_server_error_cb, NULL);
1777 if (result == NET_NFC_OK) {
1778 DEBUG_SERVER_MSG("start handover server, san [%s], sap [%d]",
1781 DEBUG_ERR_MSG("net_nfc_service_llcp_server failed, [%d]",
1784 } else if (event == NET_NFC_LLCP_UNREGISTERED) {
1785 /* unregister server, do nothing */
1789 net_nfc_error_e net_nfc_server_handover_default_server_register()
1793 /* TODO : make id, */
1794 snprintf(id, sizeof(id), "%d", getpid());
1796 /* start default snep server */
1797 return net_nfc_server_llcp_register_service(id,
1800 _handover_default_activate_cb,
1804 net_nfc_error_e net_nfc_server_handover_default_server_unregister()
1808 /* TODO : make id, */
1809 snprintf(id, sizeof(id), "%d", getpid());
1811 /* start default snep server */
1812 return net_nfc_server_llcp_unregister_service(id,
1817 ////////////////////////////////////////////////////////////////////////////////
1819 static void _net_nfc_server_handover_client_post_process_cb(
1820 net_nfc_error_e result,
1821 net_nfc_conn_handover_carrier_type_e type,
1825 net_nfc_handover_context_t *context =
1826 (net_nfc_handover_context_t *)user_param;
1828 if (context == NULL)
1833 context->state = NET_NFC_LLCP_STEP_RETURN;
1835 _net_nfc_server_handover_client_process(context);
1838 static void _net_nfc_server_handover_client_process_carrier_record_cb(
1839 net_nfc_error_e result,
1840 net_nfc_conn_handover_carrier_type_e type,
1844 net_nfc_handover_context_t *context =
1845 (net_nfc_handover_context_t *)user_param;
1847 DEBUG_SERVER_MSG("_net_nfc_server_handover_server_process"
1848 "_carrier_record_cb,result [%d]",result);
1850 context->result = result;
1852 net_nfc_util_free_data(&context->data);
1854 if (result == NET_NFC_OK)
1856 net_nfc_util_alloc_data(&context->data, data->length);
1857 memcpy(context->data.buffer, data->buffer, data->length);
1859 context->state = NET_NFC_LLCP_STEP_05;
1863 context->state = NET_NFC_MESSAGE_LLCP_ERROR;
1866 _net_nfc_server_handover_client_process(context);
1869 static void _net_nfc_server_handover_client_recv_cb(net_nfc_error_e result,
1870 net_nfc_target_handle_s *handle,
1871 net_nfc_llcp_socket_t socket,
1875 net_nfc_handover_context_t *context =
1876 (net_nfc_handover_context_t *)user_param;
1878 if (context == NULL)
1883 context->result = result;
1885 if (result == NET_NFC_OK)
1887 ndef_message_s *selector;
1888 ndef_record_s *record;
1890 result = net_nfc_server_handover_create_selector_from_rawdata(
1894 if (result == NET_NFC_OK)
1897 net_nfc_server_handover_get_carrier_record_by_priority_order(
1901 if (result == NET_NFC_OK)
1903 net_nfc_util_create_record(
1905 &record->type_s, &record->id_s,
1909 context->state = NET_NFC_LLCP_STEP_04;
1913 DEBUG_ERR_MSG("_get_carrier_record_by_priority_order"
1914 " failed, [%d]",result);
1915 context->state = NET_NFC_STATE_ERROR;
1920 DEBUG_ERR_MSG("_net_nfc_server_handover_create"
1921 "_selector_from_rawdata failed, [%d]",result);
1922 context->state = NET_NFC_STATE_ERROR;
1927 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_receive failed, [%d]",
1929 context->state = NET_NFC_STATE_ERROR;
1932 _net_nfc_server_handover_client_process(context);
1935 static void _net_nfc_server_handover_client_send_cb(net_nfc_error_e result,
1936 net_nfc_target_handle_s *handle,
1937 net_nfc_llcp_socket_t socket,
1941 net_nfc_handover_context_t *context =
1942 (net_nfc_handover_context_t *)user_param;
1944 if (context == NULL)
1949 context->result = result;
1951 net_nfc_util_free_data(&context->data);
1953 if (result == NET_NFC_OK)
1955 context->state = NET_NFC_LLCP_STEP_03;
1959 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_client failed, [%d]",
1961 context->state = NET_NFC_STATE_ERROR;
1964 _net_nfc_server_handover_client_process(context);
1967 static void _net_nfc_server_handover_client_create_carrier_configs_cb(
1968 net_nfc_error_e result,
1969 ndef_message_s *msg,
1972 net_nfc_handover_context_t *context =
1973 (net_nfc_handover_context_t *)user_param;
1975 if (context == NULL) {
1979 context->result = result;
1984 _net_nfc_server_handover_convert_ndef_message_to_data(
1986 &context->data)) == NET_NFC_OK)
1988 context->state = NET_NFC_LLCP_STEP_02;
1992 DEBUG_ERR_MSG("_net_nfc_server_handover_convert_ndef_"
1993 "message_to_data failed [%d]",result);
1994 context->state = NET_NFC_STATE_ERROR;
1995 context->result = result;
2000 DEBUG_ERR_MSG("null param, [%d]", result);
2001 context->state = NET_NFC_STATE_ERROR;
2002 context->result = result;
2005 _net_nfc_server_handover_client_process(context);
2009 ////////////////////////////////////////////////////////////////////////////////
2010 static void _net_nfc_server_handover_client_process(
2011 net_nfc_handover_context_t *context)
2013 net_nfc_error_e result;
2015 if (context == NULL)
2020 switch (context->state)
2022 case NET_NFC_LLCP_STEP_01 :
2023 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_01");
2025 if ((result = _net_nfc_server_handover_create_requester_carrier_configs(
2027 _net_nfc_server_handover_client_create_carrier_configs_cb,
2028 context)) != NET_NFC_OK)
2030 DEBUG_ERR_MSG("_net_nfc_server_handover_create_requester"
2031 "_carrier_configs failed [%d]",result);
2035 case NET_NFC_LLCP_STEP_02 :
2036 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_02");
2039 net_nfc_server_llcp_simple_send(
2043 _net_nfc_server_handover_client_send_cb,
2047 case NET_NFC_LLCP_STEP_03 :
2048 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_03");
2050 /* receive response */
2051 net_nfc_server_llcp_simple_receive(context->handle,
2053 _net_nfc_server_handover_client_recv_cb,
2057 case NET_NFC_LLCP_STEP_04 :
2058 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_04");
2060 result = net_nfc_server_handover_process_carrier_record(
2062 _net_nfc_server_handover_client_process_carrier_record_cb,
2065 if (result != NET_NFC_OK)
2067 DEBUG_ERR_MSG("net_nfc_server_handover_process_carrier_record failed [%d]",result);
2071 case NET_NFC_LLCP_STEP_05 :
2072 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_05");
2074 /* start post process */
2075 if (context->type == NET_NFC_CONN_HANDOVER_CARRIER_BT)
2077 net_nfc_server_handover_bt_post_process(
2079 _net_nfc_server_handover_client_post_process_cb,
2084 DEBUG_ERR_MSG("not supported...");
2088 case NET_NFC_LLCP_STEP_RETURN :
2089 DEBUG_SERVER_MSG("NET_NFC_LLCP_STEP_RETURN");
2091 /* complete and invoke callback */
2092 _net_nfc_server_handover_send_response(
2093 context->user_param,
2097 net_nfc_util_free_data(&context->data);
2098 net_nfc_util_free_record(context->record);
2099 _net_nfc_util_free_mem(context);
2102 case NET_NFC_STATE_ERROR :
2104 DEBUG_ERR_MSG("NET_NFC_STATE_ERROR");
2106 _net_nfc_server_handover_send_response(
2107 context->user_param,
2116 static void _net_nfc_server_handover_client_connected_cb(
2117 net_nfc_error_e result,
2118 net_nfc_target_handle_s *handle,
2119 net_nfc_llcp_socket_t socket,
2123 DEBUG_SERVER_MSG("result [%d], socket [%x], user_param [%p]",
2124 result, socket, user_param);
2126 if (result == NET_NFC_OK)
2128 net_nfc_handover_context_t *context = NULL;
2129 _net_nfc_util_alloc_mem(context, sizeof(*context));
2131 if (context != NULL)
2133 context->handle = handle;
2134 context->socket = socket;
2135 context->state = NET_NFC_LLCP_STEP_01;
2136 context->user_param = user_param;
2137 _net_nfc_server_handover_client_process(context);
2141 DEBUG_ERR_MSG("_net_nfc_util_alloc_mem failed");
2142 result = NET_NFC_ALLOC_FAIL;
2147 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_client"
2148 " failed, [%d]", result);
2152 static void _net_nfc_server_handover_client_error_cb(net_nfc_error_e result,
2153 net_nfc_target_handle_s *handle,
2154 net_nfc_llcp_socket_t socket,
2159 DEBUG_ERR_MSG("result [%d], socket [%x], user_param [%p]",
2160 result, socket, user_param);
2164 _net_nfc_server_handover_send_response(user_param, NULL, result);
2167 net_nfc_controller_llcp_socket_close(socket, &result);
2171 net_nfc_error_e net_nfc_server_handover_default_client_start(
2172 net_nfc_target_handle_s *handle, void *user_data)
2174 net_nfc_error_e result;
2176 result = net_nfc_server_llcp_simple_client(
2180 _net_nfc_server_handover_client_connected_cb,
2181 _net_nfc_server_handover_client_error_cb,
2184 if (result != NET_NFC_OK)
2186 DEBUG_ERR_MSG("net_nfc_server_llcp_simple_client"
2187 " failed, [%d]",result);