upgrade obexd to 0.47
[profile/ivi/obexd.git] / src / map_ap.c
index aa5938c..6efc484 100644 (file)
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
-#ifdef OPENSOURCE_PATCH
+
 #include <string.h>
 
 #include "log.h"
-#endif
+
 #include "map_ap.h"
 
-#ifdef OPENSOURCE_PATCH
 enum ap_type {
        APT_UINT8,
        APT_UINT16,
@@ -131,29 +130,21 @@ static void ap_entry_free(gpointer val)
 
        g_free(entry);
 }
-#endif
 
 map_ap_t *map_ap_new(void)
 {
-#ifdef OPENSOURCE_PATCH
        return g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL,
                                                                ap_entry_free);
-#else
-       return NULL;
-#endif
 }
 
 void map_ap_free(map_ap_t *ap)
 {
-#ifdef OPENSOURCE_PATCH
        if (!ap)
                return;
 
        g_hash_table_destroy(ap);
-#endif
 }
 
-#ifdef OPENSOURCE_PATCH
 static void ap_decode_u8(map_ap_t *ap, const struct obex_ap_header *hdr)
 {
        if (hdr->len != 1) {
@@ -202,11 +193,9 @@ static void ap_decode_str(map_ap_t *ap, const struct obex_ap_header *hdr)
 
        g_free(val);
 }
-#endif
 
 map_ap_t *map_ap_decode(const uint8_t *buffer, size_t length)
 {
-#ifdef OPENSOURCE_PATCH
        map_ap_t *ap;
        struct obex_ap_header *hdr;
        uint32_t done;
@@ -216,7 +205,7 @@ map_ap_t *map_ap_decode(const uint8_t *buffer, size_t length)
        if (!ap)
                return NULL;
 
-       for (done = 0; done < length; done += hdr->len + sizeof(*hdr)) {
+       for (done = 0;  done < length; done += hdr->len + sizeof(*hdr)) {
                hdr = (struct obex_ap_header *)(buffer + done);
 
                offset = find_ap_def_offset(hdr->tag);
@@ -246,21 +235,104 @@ map_ap_t *map_ap_decode(const uint8_t *buffer, size_t length)
        g_hash_table_foreach(ap, ap_entry_dump, NULL);
 
        return ap;
-#else
-       return NULL;
-#endif
+}
+
+static void ap_encode_u8(GByteArray *buf, struct ap_entry *entry)
+{
+       struct obex_ap_header *hdr;
+
+       hdr = (struct obex_ap_header *) buf->data + buf->len;
+       g_byte_array_set_size(buf, buf->len + sizeof(*hdr) + 1);
+
+       hdr->tag = entry->tag;
+       hdr->len = 1;
+       hdr->val[0] = entry->val.u8;
+}
+
+static void ap_encode_u16(GByteArray *buf, struct ap_entry *entry)
+{
+       struct obex_ap_header *hdr;
+       uint16_t val;
+
+       hdr = (struct obex_ap_header *) buf->data + buf->len;
+
+       g_byte_array_set_size(buf, buf->len + sizeof(*hdr) + 2);
+
+       hdr->tag = entry->tag;
+       hdr->len = 2;
+
+       val = GUINT16_TO_BE(entry->val.u16);
+       memcpy(hdr->val, &val, sizeof(val));
+}
+
+static void ap_encode_u32(GByteArray *buf, struct ap_entry *entry)
+{
+       uint32_t val;
+       struct obex_ap_header *hdr;
+
+       hdr = (struct obex_ap_header *) buf->data + buf->len;
+       g_byte_array_set_size(buf, buf->len + sizeof(*hdr) + 4);
+
+       hdr->tag = entry->tag;
+       hdr->len = 4;
+
+       val = GUINT32_TO_BE(entry->val.u16);
+       memcpy(hdr->val, &val, sizeof(val));
+}
+
+static void ap_encode_str(GByteArray *buf, struct ap_entry *entry)
+{
+       size_t len;
+       struct obex_ap_header *hdr;
+
+       hdr = (struct obex_ap_header *) buf->data + buf->len;
+       len = strlen(entry->val.str);
+       g_byte_array_set_size(buf, buf->len + sizeof(*hdr) + len);
+
+       hdr->tag = entry->tag;
+       hdr->len = len;
+
+       memcpy(hdr->val, entry->val.str, len);
 }
 
 uint8_t *map_ap_encode(map_ap_t *ap, size_t *length)
 {
-       *length = 0;
+       GByteArray *buf;
+       GHashTableIter iter;
+       gpointer key, value;
+       struct ap_entry *entry;
+       int offset;
+
+       buf = g_byte_array_new();
+       g_hash_table_iter_init(&iter, ap);
 
-       return NULL;
+       while (g_hash_table_iter_next(&iter, &key, &value)) {
+               entry = (struct ap_entry *) value;
+               offset = find_ap_def_offset(entry->tag);
+
+               switch (ap_defs[offset].type) {
+               case APT_UINT8:
+                       ap_encode_u8(buf, entry);
+                       break;
+               case APT_UINT16:
+                       ap_encode_u16(buf, entry);
+                       break;
+               case APT_UINT32:
+                       ap_encode_u32(buf, entry);
+                       break;
+               case APT_STR:
+                       ap_encode_str(buf, entry);
+                       break;
+               }
+       }
+
+       *length = buf->len;
+
+       return g_byte_array_free(buf, FALSE);
 }
 
 gboolean map_ap_get_u8(map_ap_t *ap, enum map_ap_tag tag, uint8_t *val)
 {
-#ifdef TIZEN_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -268,21 +340,16 @@ gboolean map_ap_get_u8(map_ap_t *ap, enum map_ap_tag tag, uint8_t *val)
                return FALSE;
 
        entry = g_hash_table_lookup(ap, GINT_TO_POINTER(tag));
-
-       if (!entry)
+       if (entry == NULL)
                return FALSE;
 
        *val = entry->val.u8;
 
        return TRUE;
-#else
-       return FALSE;
-#endif
 }
 
 gboolean map_ap_get_u16(map_ap_t *ap, enum map_ap_tag tag, uint16_t *val)
 {
-#ifdef TIZEN_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -290,21 +357,16 @@ gboolean map_ap_get_u16(map_ap_t *ap, enum map_ap_tag tag, uint16_t *val)
                return FALSE;
 
        entry = g_hash_table_lookup(ap, GINT_TO_POINTER(tag));
-
-       if (!entry)
+       if (entry == NULL)
                return FALSE;
 
        *val = entry->val.u16;
 
        return TRUE;
-#else
-       return FALSE;
-#endif
 }
 
 gboolean map_ap_get_u32(map_ap_t *ap, enum map_ap_tag tag, uint32_t *val)
 {
-#ifdef TIZEN_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -312,21 +374,16 @@ gboolean map_ap_get_u32(map_ap_t *ap, enum map_ap_tag tag, uint32_t *val)
                return FALSE;
 
        entry = g_hash_table_lookup(ap, GINT_TO_POINTER(tag));
-
-       if (!entry)
+       if (entry == NULL)
                return FALSE;
 
        *val = entry->val.u32;
 
        return TRUE;
-#else
-       return FALSE;
-#endif
 }
 
 const char *map_ap_get_string(map_ap_t *ap, enum map_ap_tag tag)
 {
-#ifdef TIZEN_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -334,19 +391,14 @@ const char *map_ap_get_string(map_ap_t *ap, enum map_ap_tag tag)
                return NULL;
 
        entry = g_hash_table_lookup(ap, GINT_TO_POINTER(tag));
-
-       if (!entry)
+       if (entry == NULL)
                return NULL;
 
-       return g_strdup(entry->val.str);
-#else
-       return NULL;
-#endif
+       return entry->val.str;
 }
 
 gboolean map_ap_set_u8(map_ap_t *ap, enum map_ap_tag tag, uint8_t val)
 {
-#ifdef OPENSOURCE_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -360,14 +412,10 @@ gboolean map_ap_set_u8(map_ap_t *ap, enum map_ap_tag tag, uint8_t val)
        g_hash_table_insert(ap, GINT_TO_POINTER(tag), entry);
 
        return TRUE;
-#else
-       return FALSE;
-#endif
 }
 
 gboolean map_ap_set_u16(map_ap_t *ap, enum map_ap_tag tag, uint16_t val)
 {
-#ifdef OPENSOURCE_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -381,14 +429,10 @@ gboolean map_ap_set_u16(map_ap_t *ap, enum map_ap_tag tag, uint16_t val)
        g_hash_table_insert(ap, GINT_TO_POINTER(tag), entry);
 
        return TRUE;
-#else
-       return FALSE;
-#endif
 }
 
 gboolean map_ap_set_u32(map_ap_t *ap, enum map_ap_tag tag, uint32_t val)
 {
-#ifdef OPENSOURCE_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -402,14 +446,10 @@ gboolean map_ap_set_u32(map_ap_t *ap, enum map_ap_tag tag, uint32_t val)
        g_hash_table_insert(ap, GINT_TO_POINTER(tag), entry);
 
        return TRUE;
-#else
-       return FALSE;
-#endif
 }
 
 gboolean map_ap_set_string(map_ap_t *ap, enum map_ap_tag tag, const char *val)
 {
-#ifdef OPENSOURCE_PATCH
        struct ap_entry *entry;
        int offset = find_ap_def_offset(tag);
 
@@ -423,7 +463,4 @@ gboolean map_ap_set_string(map_ap_t *ap, enum map_ap_tag tag, const char *val)
        g_hash_table_insert(ap, GINT_TO_POINTER(tag), entry);
 
        return TRUE;
-#else
-       return FALSE;
-#endif
 }