static void test_apparam_set_multi(void) { GObexApparam *apparam; guint8 buf[1024]; gsize len; apparam = g_obex_apparam_set_uint8(NULL, TAG_U8, 0x01); g_assert(apparam != NULL); apparam = g_obex_apparam_set_uint16(apparam, TAG_U16, 0x0102); g_assert(apparam != NULL); apparam = g_obex_apparam_set_uint32(apparam, TAG_U32, 0x01020304); g_assert(apparam != NULL); apparam = g_obex_apparam_set_uint64(apparam, TAG_U64, 0x0102030405060708); g_assert(apparam != NULL); apparam = g_obex_apparam_set_string(apparam, TAG_STRING, "ABC"); g_assert(apparam != NULL); len = g_obex_apparam_encode(apparam, buf, sizeof(buf)); g_assert_cmpuint(len, ==, sizeof(tag_multi)); g_obex_apparam_free(apparam); }
static DBusMessage *get_folder_listing(struct map_data *map, DBusMessage *message, GObexApparam *apparam) { struct obc_transfer *transfer; GError *err = NULL; DBusMessage *reply; transfer = obc_transfer_get("x-obex/folder-listing", NULL, NULL, &err); if (transfer == NULL) { g_obex_apparam_free(apparam); goto fail; } obc_transfer_set_apparam(transfer, apparam); if (obc_session_queue(map->session, transfer, folder_listing_cb, map, &err)) { map->msg = dbus_message_ref(message); return NULL; } fail: reply = g_dbus_create_error(message, ERROR_INTERFACE ".Failed", "%s", err->message); g_error_free(err); return reply; }
static DBusMessage *push_message(struct map_data *map, DBusMessage *message, const char *filename, const char *folder, GObexApparam *apparam) { struct obc_transfer *transfer; GError *err = NULL; DBusMessage *reply; transfer = obc_transfer_put("x-bt/message", folder, filename, NULL, 0, &err); if (transfer == NULL) { g_obex_apparam_free(apparam); goto fail; } obc_transfer_set_apparam(transfer, apparam); if (!obc_session_queue(map->session, transfer, NULL, NULL, &err)) goto fail; return obc_transfer_create_dbus_reply(transfer, message); fail: reply = g_dbus_create_error(message, ERROR_INTERFACE ".Failed", "%s", err->message); g_error_free(err); return reply; }
static DBusMessage *map_list_messages(DBusConnection *connection, DBusMessage *message, void *user_data) { struct map_data *map = user_data; const char *folder; GObexApparam *apparam; DBusMessageIter args; dbus_message_iter_init(message, &args); if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_STRING) return g_dbus_create_error(message, ERROR_INTERFACE ".InvalidArguments", NULL); dbus_message_iter_get_basic(&args, &folder); apparam = g_obex_apparam_set_uint16(NULL, MAP_AP_MAXLISTCOUNT, DEFAULT_COUNT); apparam = g_obex_apparam_set_uint16(apparam, MAP_AP_STARTOFFSET, DEFAULT_OFFSET); dbus_message_iter_next(&args); if (parse_message_filters(apparam, &args) == NULL) { g_obex_apparam_free(apparam); return g_dbus_create_error(message, ERROR_INTERFACE ".InvalidArguments", NULL); } return get_message_listing(map, message, folder, apparam); }
static void reset_request(struct mas_session *mas) { if (mas->buffer) { g_string_free(mas->buffer, TRUE); mas->buffer = NULL; } if (mas->inparams) { g_obex_apparam_free(mas->inparams); mas->inparams = NULL; } if (mas->outparams) { g_obex_apparam_free(mas->outparams); mas->outparams = NULL; } mas->nth_call = FALSE; mas->finished = FALSE; mas->ap_sent = FALSE; }
static void reset_request(struct mns_session *mns) { if (mns->buffer) { g_string_free(mns->buffer, TRUE); mns->buffer = NULL; } if (mns->inparams) { g_obex_apparam_free(mns->inparams); mns->inparams = NULL; } }
static void test_apparam_set_string(void) { GObexApparam *apparam; guint8 buf[1024]; gsize len; apparam = g_obex_apparam_set_string(NULL, TAG_STRING, "ABC"); g_assert(apparam != NULL); len = g_obex_apparam_encode(apparam, buf, sizeof(buf)); assert_memequal(tag_string, sizeof(tag_string), buf, len); g_obex_apparam_free(apparam); }
static void test_apparam_set_uint64(void) { GObexApparam *apparam; guint8 buf[1024]; gsize len; apparam = g_obex_apparam_set_uint64(NULL, TAG_U64, 0x0102030405060708); g_assert(apparam != NULL); len = g_obex_apparam_encode(apparam, buf, sizeof(buf)); assert_memequal(tag_uint64, sizeof(tag_uint64), buf, len); g_obex_apparam_free(apparam); }
static void test_apparam_set_bytes(void) { GObexApparam *apparam; guint8 buf[1024]; gsize len; apparam = g_obex_apparam_set_bytes(NULL, TAG_BYTES, tag_bytes + 2, 255); g_assert(apparam != NULL); len = g_obex_apparam_encode(apparam, buf, sizeof(buf)); assert_memequal(tag_bytes, sizeof(tag_bytes), buf, len); g_obex_apparam_free(apparam); }
static void test_apparam_get_uint8(void) { GObexApparam *apparam; guint8 data; gboolean ret; apparam = parse_and_decode(tag_uint8, sizeof(tag_uint8)); ret = g_obex_apparam_get_uint8(apparam, TAG_U8, &data); g_assert(ret == TRUE); g_assert(data == 0x01); g_obex_apparam_free(apparam); }
static void test_apparam_get_uint64(void) { GObexApparam *apparam; uint64_t data; gboolean ret; apparam = parse_and_decode(tag_uint64, sizeof(tag_uint64)); ret = g_obex_apparam_get_uint64(apparam, TAG_U64, &data); g_assert(ret == TRUE); g_assert(data == 0x0102030405060708); g_obex_apparam_free(apparam); }
static void test_apparam_get_string(void) { GObexApparam *apparam; char *string; apparam = parse_and_decode(tag_string, sizeof(tag_string)); string = g_obex_apparam_get_string(apparam, TAG_STRING); g_assert(string != NULL); g_assert_cmpstr(string, ==, "ABC"); g_free(string); g_obex_apparam_free(apparam); }
static void test_apparam_get_uint32(void) { GObexApparam *apparam; uint32_t data; gboolean ret; apparam = parse_and_decode(tag_uint32, sizeof(tag_uint32)); ret = g_obex_apparam_get_uint32(apparam, TAG_U32, &data); g_assert(ret == TRUE); g_assert(data == 0x01020304); g_obex_apparam_free(apparam); }
static void test_apparam_get_bytes(void) { GObexApparam *apparam; const uint8_t *data; gsize len; gboolean ret; apparam = parse_and_decode(tag_bytes, sizeof(tag_bytes)); ret = g_obex_apparam_get_bytes(apparam, TAG_BYTES, &data, &len); g_assert(ret == TRUE); assert_memequal(tag_bytes + 2, sizeof(tag_bytes) - 2, data, len); g_obex_apparam_free(apparam); }
static void test_header_encode_apparam(void) { GObexHeader *header; GObexApparam *apparam; gboolean ret; guint32 data; header = parse_and_encode(hdr_apparam, sizeof(hdr_apparam)); apparam = g_obex_header_get_apparam(header); g_assert(apparam != NULL); ret = g_obex_apparam_get_uint32(apparam, 0x00, &data); g_assert(ret == TRUE); g_assert(data == 0x01020304); g_obex_apparam_free(apparam); g_obex_header_free(header); }
static void test_apparam_get_multi(void) { GObexApparam *apparam; char *string; uint8_t data8; uint16_t data16; uint32_t data32; uint64_t data64; gboolean ret; apparam = g_obex_apparam_decode(tag_multi, sizeof(tag_multi)); g_assert(apparam != NULL); ret = g_obex_apparam_get_uint8(apparam, TAG_U8, &data8); g_assert(ret == TRUE); g_assert(data8 == 0x01); ret = g_obex_apparam_get_uint16(apparam, TAG_U16, &data16); g_assert(ret == TRUE); g_assert(data16 == 0x0102); ret = g_obex_apparam_get_uint32(apparam, TAG_U32, &data32); g_assert(ret == TRUE); g_assert(data32 == 0x01020304); ret = g_obex_apparam_get_uint64(apparam, TAG_U64, &data64); g_assert(ret == TRUE); g_assert(data64 == 0x0102030405060708); string = g_obex_apparam_get_string(apparam, TAG_STRING); g_assert(string != NULL); g_assert_cmpstr(string, ==, "ABC"); g_free(string); g_obex_apparam_free(apparam); }
static void test_header_apparam(void) { GObexHeader *header; GObexApparam *apparam; uint8_t buf[1024]; size_t len; apparam = g_obex_apparam_set_uint32(NULL, 0, 0x01020304); g_assert(apparam != NULL); header = g_obex_header_new_apparam(apparam); g_assert(header != NULL); len = g_obex_header_encode(header, buf, sizeof(buf)); assert_memequal(hdr_apparam, sizeof(hdr_apparam), buf, len); g_obex_apparam_free(apparam); g_obex_header_free(header); }
static DBusMessage *map_list_folders(DBusConnection *connection, DBusMessage *message, void *user_data) { struct map_data *map = user_data; GObexApparam *apparam; DBusMessageIter args; dbus_message_iter_init(message, &args); apparam = g_obex_apparam_set_uint16(NULL, MAP_AP_MAXLISTCOUNT, DEFAULT_COUNT); apparam = g_obex_apparam_set_uint16(apparam, MAP_AP_STARTOFFSET, DEFAULT_OFFSET); if (parse_folder_filters(apparam, &args) == NULL) { g_obex_apparam_free(apparam); return g_dbus_create_error(message, ERROR_INTERFACE ".InvalidArguments", NULL); } return get_folder_listing(map, message, apparam); }
static int vobject_close(void *object) { struct pbap_object *obj = object; DBG(""); if (obj->session) obj->session->obj = NULL; if (obj->buffer) g_string_free(obj->buffer, TRUE); if (obj->apparam) g_obex_apparam_free(obj->apparam); if (obj->request) phonebook_req_finalize(obj->request); g_free(obj); return 0; }
static DBusMessage *map_push_message(DBusConnection *connection, DBusMessage *message, void *user_data) { struct map_data *map = user_data; char *filename; char *folder; GObexApparam *apparam; DBusMessageIter args; dbus_message_iter_init(message, &args); if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_STRING) return g_dbus_create_error(message, ERROR_INTERFACE ".InvalidArguments", NULL); dbus_message_iter_get_basic(&args, &filename); dbus_message_iter_next(&args); if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_STRING) { return g_dbus_create_error(message, ERROR_INTERFACE ".InvalidArguments", NULL); } dbus_message_iter_get_basic(&args, &folder); dbus_message_iter_next(&args); apparam = g_obex_apparam_set_uint8(NULL, MAP_AP_CHARSET, CHARSET_UTF8); if (parse_push_options(apparam, &args) == NULL) { g_obex_apparam_free(apparam); return g_dbus_create_error(message, ERROR_INTERFACE ".InvalidArguments", NULL); } return push_message(map, message, filename, folder, apparam); }
static struct apparam_field *parse_aparam(const uint8_t *buffer, uint32_t hlen) { GObexApparam *apparam; struct apparam_field *param; apparam = g_obex_apparam_decode(buffer, hlen); if (apparam == NULL) return NULL; param = g_new0(struct apparam_field, 1); /* * As per spec when client doesn't include MAXLISTCOUNT_TAG then it * should be assume as Maximum value in vcardlisting 65535 */ param->maxlistcount = UINT16_MAX; g_obex_apparam_get_uint8(apparam, ORDER_TAG, ¶m->order); g_obex_apparam_get_uint8(apparam, SEARCHATTRIB_TAG, ¶m->searchattrib); g_obex_apparam_get_uint8(apparam, FORMAT_TAG, ¶m->format); g_obex_apparam_get_uint16(apparam, MAXLISTCOUNT_TAG, ¶m->maxlistcount); g_obex_apparam_get_uint16(apparam, LISTSTARTOFFSET_TAG, ¶m->liststartoffset); g_obex_apparam_get_uint64(apparam, FILTER_TAG, ¶m->filter); param->searchval = g_obex_apparam_get_string(apparam, SEARCHVALUE_TAG); DBG("o %x sa %x sv %s fil %" G_GINT64_MODIFIER "x for %x max %x off %x", param->order, param->searchattrib, param->searchval, param->filter, param->format, param->maxlistcount, param->liststartoffset); g_obex_apparam_free(apparam); return param; }
static void transport_func(GIOChannel *io, GError *err, gpointer user_data) { struct callback_data *callback = user_data; struct obc_session *session = callback->session; struct obc_driver *driver = session->driver; struct obc_transport *transport = session->transport; GObex *obex; GObexApparam *apparam; GObexTransportType type; int tx_mtu = -1; int rx_mtu = -1; DBG(""); if (err != NULL) { error("%s", err->message); goto done; } g_io_channel_set_close_on_unref(io, FALSE); if (transport->getpacketopt && transport->getpacketopt(io, &tx_mtu, &rx_mtu) == 0) type = G_OBEX_TRANSPORT_PACKET; else type = G_OBEX_TRANSPORT_STREAM; obex = g_obex_new(io, type, tx_mtu, rx_mtu); if (obex == NULL) goto done; g_io_channel_set_close_on_unref(io, TRUE); apparam = NULL; if (driver->supported_features) apparam = driver->supported_features(session); if (apparam) { uint8_t buf[1024]; ssize_t len; len = g_obex_apparam_encode(apparam, buf, sizeof(buf)); if (driver->target) g_obex_connect(obex, connect_cb, callback, &err, G_OBEX_HDR_TARGET, driver->target, driver->target_len, G_OBEX_HDR_APPARAM, buf, len, G_OBEX_HDR_INVALID); else g_obex_connect(obex, connect_cb, callback, &err, G_OBEX_HDR_APPARAM, buf, len, G_OBEX_HDR_INVALID); g_obex_apparam_free(apparam); } else if (driver->target) g_obex_connect(obex, connect_cb, callback, &err, G_OBEX_HDR_TARGET, driver->target, driver->target_len, G_OBEX_HDR_INVALID); else g_obex_connect(obex, connect_cb, callback, &err, G_OBEX_HDR_INVALID); if (err != NULL) { error("%s", err->message); g_obex_unref(obex); goto done; } session->obex = obex; sessions = g_slist_prepend(sessions, session); g_obex_set_disconnect_function(obex, session_disconnected, session); return; done: callback_destroy(callback, err); }