snep_msg_s* Snep_Server_msg;
data_s * llcp_server_data = NULL;
-data_s rawdata = { NULL, 0 };
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
return create_record_count;
}
+static bool _net_nfc_change_file_owner_permission(FILE *file)
+{
+ char *buffer = NULL;
+ size_t buffer_len = 0;
+ struct passwd pwd = { 0, };
+ struct passwd *pw_inhouse = NULL;
+ struct group grp = { 0, };
+ struct group *gr_inhouse = NULL;
+
+ if (file == NULL)
+ return false;
+
+ /* change permission */
+ fchmod(fileno(file), 0777);
+
+ /* change owner */
+ /* get passwd id */
+ buffer_len = sysconf(_SC_GETPW_R_SIZE_MAX);
+ if (buffer_len == -1)
+ {
+ buffer_len = 16384;
+ }
+
+ _net_nfc_util_alloc_mem(buffer, buffer_len);
+ if (buffer == NULL)
+ return false;
+
+ getpwnam_r("inhouse", &pwd, buffer, buffer_len, &pw_inhouse);
+ _net_nfc_util_free_mem(buffer);
+
+ /* get group id */
+ buffer_len = sysconf(_SC_GETGR_R_SIZE_MAX);
+ if (buffer_len == -1)
+ {
+ buffer_len = 16384;
+ }
+
+ _net_nfc_util_alloc_mem(buffer, buffer_len);
+ if (buffer == NULL)
+ return false;
+
+ getgrnam_r("inhouse", &grp, buffer, buffer_len, &gr_inhouse);
+ _net_nfc_util_free_mem(buffer);
+
+ if ((pw_inhouse != NULL) && (gr_inhouse != NULL))
+ {
+ if (fchown(fileno(file), pw_inhouse->pw_uid, gr_inhouse->gr_gid) < 0)
+ {
+ DEBUG_MSG("failed to change owner");
+ }
+ }
+
+ return true;
+}
+
+static void _net_nfc_store_ndef_message(data_s *data)
+{
+ char file_name[1024] = { 0, };
+ FILE *fp = NULL;
+
+ if (data == NULL)
+ {
+ return;
+ }
+
+ /* create file */
+ snprintf(file_name, sizeof(file_name), "%s/%s/%s", "/opt/usr/share/nfc-manager-daemon",
+ "message", "emul-ndef-message.txt");
+
+ unlink(file_name);
+
+ if ((fp = fopen(file_name, "w")) != NULL)
+ {
+ int length = 0;
+
+ if ((length = fwrite(data->buffer, 1, data->length, fp)) > 0)
+ {
+ DEBUG_MSG("[%d] bytes is written", length);
+
+ _net_nfc_change_file_owner_permission(fp);
+ fflush(fp);
+ fsync(fileno(fp));
+ }
+ else
+ {
+ DEBUG_MSG("write is failed = [%d]", data->length);
+ }
+
+ fclose(fp);
+ }
+}
+
+static net_nfc_error_e _net_nfc_retrieve_ndef_message(data_s *data)
+{
+ char file_name[1024] = { 0, };
+ FILE *fp = NULL;
+ net_nfc_error_e result = NET_NFC_OK;
+
+ if (data == NULL)
+ {
+ return NET_NFC_NULL_PARAMETER;
+ }
+
+ /* retreive file */
+ snprintf(file_name, sizeof(file_name), "%s/%s/%s", "/opt/usr/share/nfc-manager-daemon",
+ "message", "emul-ndef-message.txt");
+
+ if ((fp = fopen(file_name, "r")) != NULL)
+ {
+ long int size = 0;
+
+ /* rewind to start of file */
+ fseek(fp, 0, SEEK_END);
+ size = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+
+ DEBUG_MSG("message length = [%ld]", size);
+
+ if (size > 0)
+ {
+ if (net_nfc_util_init_data(data, size) == true)
+ {
+ int current;
+ size_t offset = 0;
+
+ /* read fully */
+ do {
+ current = fread(data->buffer + offset, 1,
+ data->length - offset, fp);
+ if (current > 0)
+ offset += current;
+ else
+ break;
+ } while (offset < data->length);
+
+ if (offset == data->length) {
+ result = NET_NFC_OK;
+ } else {
+ result = NET_NFC_NO_NDEF_MESSAGE;
+ }
+ }
+ else
+ {
+ result = NET_NFC_ALLOC_FAIL;
+ }
+ }
+ else
+ {
+ result = NET_NFC_OPERATION_FAIL;
+ }
+
+ fclose(fp);
+ }
+ else
+ {
+ result = NET_NFC_NO_DATA_FOUND;
+ }
+
+ return result;
+}
+
static bool _net_nfc_create_ndef_from_emulMsg(emulMsg_s *emul_msg)
{
DEBUG_EMUL_BEGIN();
int retval = true;
net_nfc_error_e result = NET_NFC_OK;
+ data_s rawdata = { NULL, 0 };
int record_count = emul_msg->record_count;
}
+ _net_nfc_store_ndef_message(&rawdata);
+
DEBUG_EMUL_END();
return retval;
{
DEBUG_EMUL_BEGIN();
- if(rawdata.buffer != NULL)
- {
- _nfc_emul_util_free_mem(rawdata.buffer);
- rawdata.buffer = NULL;
- }
- rawdata.length = 0;
-
if(emul_msg != NULL && emul_msg->file_data != NULL)
{
free(emul_msg->file_data);
uint8_t response = (uint8_t)resp_field;
uint8_t version = 0;
uint32_t length_field = 0;
+ data_s rawdata = { NULL, 0 };
version = SNEP_MAJOR_VER;
version = (((version << 4) & 0xf0) | (SNEP_MINOR_VER & 0x0f));
+ _net_nfc_retrieve_ndef_message(&rawdata);
+
/* version response length payload*/
Snep_Server_msg->data->length = sizeof(uint8_t) + sizeof(uint8_t) + sizeof(uint32_t) + rawdata.length;
static bool _net_nfc_make_llcp_data(emulMsg_s *emul_msg)
{
DEBUG_EMUL_BEGIN();
+ data_s rawdata = { NULL, 0 };
+
+ _net_nfc_retrieve_ndef_message(&rawdata);
if (emul_msg->record_count == 0 || rawdata.length == 0)
{
static bool net_nfc_emul_controller_check_ndef(net_nfc_target_handle_s* handle, uint8_t *ndef_card_state, int* max_data_size, int* real_data_size, net_nfc_error_e* result)
{
+ data_s rawdata = { NULL, 0 };
+
if (result == NULL) {
return false;
}
DEBUG_EMUL_BEGIN();
+ _net_nfc_retrieve_ndef_message(&rawdata);
+
if (_net_nfc_emul_get_is_tag_attached())
{
*ndef_card_state = NET_NFC_NDEF_CARD_READ_WRITE;
static bool net_nfc_emul_controller_read_ndef(net_nfc_target_handle_s* handle, data_s** data, net_nfc_error_e* result)
{
int real_data_size = 0;
+ data_s rawdata = { NULL, 0 };
DEBUG_EMUL_BEGIN();
return false;
}
+ *result = _net_nfc_retrieve_ndef_message(&rawdata);
+ if(*result != NET_NFC_OK)
+ return false;
+
real_data_size = rawdata.length;
if(real_data_size == 0)
DEBUG_EMUL_BEGIN();
- usleep(300 * 1000);
DEBUG_MSG("net_nfc_emul_controller_write_ndef success >>>");
+ _net_nfc_store_ndef_message(data);
+
DEBUG_EMUL_END();
return true;