bluetooth: Make __near_bluetooth_parse_oob_record use struct bt_data
authorSzymon Janc <szymon.janc@tieto.com>
Wed, 31 Oct 2012 11:22:17 +0000 (12:22 +0100)
committerSamuel Ortiz <sameo@linux.intel.com>
Wed, 14 Nov 2012 10:35:36 +0000 (11:35 +0100)
This will make it similar to handover agent api and thus make switching
between those two interfaces easier.

src/bluetooth.c
src/ndef.c
src/near.h

index 63e76da..bb85c90 100644 (file)
@@ -622,12 +622,12 @@ static void bt_parse_eir(uint8_t *eir_data, uint16_t eir_data_len,
  * mime_properties is a bitmask and should reflect the fields found in
  * the incoming oob.
  */
-int __near_bluetooth_parse_oob_record(uint8_t version, uint8_t *bt_data,
+int __near_bluetooth_parse_oob_record(struct bt_data *data,
                                uint16_t *mime_properties, near_bool_t pair)
 {
        struct near_oob_data *oob;
        uint16_t bt_oob_data_size;
-       uint8_t *ptr = bt_data;
+       uint8_t *ptr = data->data;
        uint8_t marker;
        char *tmp;
 
@@ -635,7 +635,7 @@ int __near_bluetooth_parse_oob_record(uint8_t version, uint8_t *bt_data,
 
        oob = g_try_malloc0(sizeof(struct near_oob_data));
 
-       if (version == BT_MIME_V2_1) {
+       if (data->type == BT_MIME_V2_1) {
                /*
                 * Total OOB data size (including size bytes)
                 * Some implementations (e.g. Android 4.1) stores
@@ -645,14 +645,14 @@ int __near_bluetooth_parse_oob_record(uint8_t version, uint8_t *bt_data,
                 * byte (and the payload size IS the oob data size).
                 */
                bt_oob_data_size =
-                       GUINT16_FROM_LE(get_unaligned((uint16_t *) bt_data));
+                       GUINT16_FROM_LE(get_unaligned((uint16_t *) ptr));
                if (bt_oob_data_size > 0xFF)    /* Big Endian */
                        bt_oob_data_size = GUINT16_FROM_BE(bt_oob_data_size);
 
                bt_oob_data_size -= 2 ; /* remove oob datas size len */
 
                /* First item: BD_ADDR (mandatory) */
-               ptr = &bt_data[2];
+               ptr = &data->data[2];
                oob->bd_addr = g_strdup_printf("%02X:%02X:%02X:%02X:%02X:%02X",
                                ptr[5], ptr[4], ptr[3], ptr[2], ptr[1], ptr[0]);
 
@@ -663,7 +663,7 @@ int __near_bluetooth_parse_oob_record(uint8_t version, uint8_t *bt_data,
                if (bt_oob_data_size)
                        bt_parse_eir(ptr, bt_oob_data_size, oob,
                                                        mime_properties);
-       } else if (version == BT_MIME_V2_0) {
+       } else if (data->type == BT_MIME_V2_0) {
                marker = *ptr++;        /* could be '$' */
 
                oob->bd_addr = g_strdup_printf(
index b4a47b2..3290551 100644 (file)
@@ -1364,9 +1364,12 @@ parse_mime_type(struct near_ndef_record *record,
 {
        struct near_ndef_mime_payload *mime = NULL;
        int err = 0;
+       struct bt_data data;
 
        DBG("");
 
+       memset(&data, 0, sizeof(data));
+
        if ((ndef_data == NULL) || ((offset + payload_length) > ndef_length))
                return NULL;
 
@@ -1379,16 +1382,20 @@ parse_mime_type(struct near_ndef_record *record,
        DBG("MIME Type  '%s' action: %d", mime->type, action);
        if (strcmp(mime->type, BT_MIME_STRING_2_1) == 0) {
                mime->handover.carrier_type = NEAR_CARRIER_BLUETOOTH;
-               err = __near_bluetooth_parse_oob_record(BT_MIME_V2_1,
-                               &ndef_data[offset], &mime->handover.properties,
-                               action);
+               data.type = BT_MIME_V2_1;
+               data.size = record->header->payload_len;
+               memcpy(data.data, ndef_data + offset, data.size);
        } else if (strcmp(mime->type, BT_MIME_STRING_2_0) == 0) {
                mime->handover.carrier_type = NEAR_CARRIER_BLUETOOTH;
-               err = __near_bluetooth_parse_oob_record(BT_MIME_V2_0,
-                               &ndef_data[offset], &mime->handover.properties,
-                               action);
+               data.type = BT_MIME_V2_0;
+               data.size = record->header->payload_len;
+               memcpy(data.data, ndef_data + offset, data.size);
        }
 
+       if (data.size > 0)
+               err = __near_bluetooth_parse_oob_record(&data,
+                                       &mime->handover.properties, action);
+
        if (err < 0) {
                DBG("Parsing mime error %d", err);
                g_free(mime->type);
index c5c4325..af36859 100644 (file)
@@ -186,7 +186,7 @@ struct bt_data {
 
 int __near_bluetooth_init(void);
 void __near_bluetooth_cleanup(void);
-int __near_bluetooth_parse_oob_record(uint8_t version, uint8_t *bt_data,
+int __near_bluetooth_parse_oob_record(struct bt_data *data,
                                        uint16_t *properties, near_bool_t pair);
 int __near_bluetooth_pair(void *data);
 uint8_t *__near_bluetooth_local_get_properties(int *bt_data_len,