#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,
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) {
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;
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);
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);
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);
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);
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);
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);
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);
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);
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);
g_hash_table_insert(ap, GINT_TO_POINTER(tag), entry);
return TRUE;
-#else
- return FALSE;
-#endif
}