/*
 *
 *  BlueZ - Bluetooth protocol stack for Linux
 *
 *  Copyright (C) 2012  Intel Corporation. All rights reserved.
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <unistd.h>
#include <stdlib.h>
#include <stdbool.h>
#include <inttypes.h>
#include <string.h>
#include <fcntl.h>
#include <sys/socket.h>

#include <glib.h>

#include "src/shared/util.h"
#include "src/log.h"
#include "android/avdtp.h"

struct test_pdu {
	bool valid;
	bool fragmented;
	const uint8_t *data;
	size_t size;
};

struct test_data {
	char *test_name;
	struct test_pdu *pdu_list;
};

#define data(args...) ((const unsigned char[]) { args })

#define raw_pdu(args...) \
	{							\
		.valid = true,					\
		.data = data(args),				\
		.size = sizeof(data(args)),			\
	}

#define frg_pdu(args...) \
	{							\
		.valid = true,					\
		.fragmented = true,				\
		.data = data(args),				\
		.size = sizeof(data(args)),			\
	}

#define define_test(name, function, args...) \
	do {								\
		const struct test_pdu pdus[] = {			\
			args, { }					\
		};							\
		static struct test_data data;				\
		data.test_name = g_strdup(name);			\
		data.pdu_list = g_malloc(sizeof(pdus));			\
		memcpy(data.pdu_list, pdus, sizeof(pdus));		\
		g_test_add_data_func(name, &data, function);		\
	} while (0)

struct context {
	GMainLoop *main_loop;
	struct avdtp *session;
	struct avdtp_local_sep *sep;
	struct avdtp_stream *stream;
	guint source;
	guint process;
	int fd;
	int mtu;
	gboolean pending_open;
	gboolean pending_suspend;
	unsigned int pdu_offset;
	const struct test_data *data;
};

static void test_debug(const char *str, void *user_data)
{
	const char *prefix = user_data;

	g_print("%s%s\n", prefix, str);
}

static void test_free(gconstpointer user_data)
{
	const struct test_data *data = user_data;

	g_free(data->test_name);
	g_free(data->pdu_list);
}

static gboolean context_quit(gpointer user_data)
{
	struct context *context = user_data;

	if (context->process > 0)
		g_source_remove(context->process);

	g_main_loop_quit(context->main_loop);

	return FALSE;
}

static gboolean send_pdu(gpointer user_data)
{
	struct context *context = user_data;
	const struct test_pdu *pdu;
	ssize_t len;

	pdu = &context->data->pdu_list[context->pdu_offset++];

	len = write(context->fd, pdu->data, pdu->size);

	if (g_test_verbose())
		util_hexdump('<', pdu->data, len, test_debug, "AVDTP: ");

	g_assert_cmpint(len, ==, pdu->size);

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-02-C"))
		g_timeout_add_seconds(1, context_quit, context);

	if (pdu->fragmented)
		return send_pdu(user_data);

	context->process = 0;
	return FALSE;
}

static void context_process(struct context *context)
{
	if (!context->data->pdu_list[context->pdu_offset].valid) {
		context_quit(context);
		return;
	}

	context->process = g_idle_add(send_pdu, context);
}

static gboolean transport_open(struct avdtp_stream *stream)
{
	int fd;

	fd = open("/dev/null", O_RDWR, 0);
	if (fd < 0)
		g_assert_not_reached();

	return avdtp_stream_set_transport(stream, fd, 672, 672);
}

static gboolean test_handler(GIOChannel *channel, GIOCondition cond,
							gpointer user_data)
{
	struct context *context = user_data;
	const struct test_pdu *pdu;
	unsigned char buf[512];
	ssize_t len;
	int fd;

	pdu = &context->data->pdu_list[context->pdu_offset++];

	if (cond & (G_IO_NVAL | G_IO_ERR | G_IO_HUP)) {
		context->source = 0;
		return FALSE;
	}

	fd = g_io_channel_unix_get_fd(channel);

	len = read(fd, buf, sizeof(buf));

	g_assert(len > 0);

	if (g_test_verbose())
		util_hexdump('>', buf, len, test_debug, "AVDTP: ");

	g_assert_cmpint(len, ==, pdu->size);

	g_assert(memcmp(buf, pdu->data, pdu->size) == 0);

	if (context->pending_open) {
		context->pending_open = FALSE;
		g_assert(transport_open(context->stream));
	}

	if (context->pending_suspend) {
		int ret;

		context->pending_suspend = FALSE;
		ret = avdtp_suspend(context->session, context->stream);
		g_assert_cmpint(ret, ==, 0);
	}

	if (!pdu->fragmented)
		context_process(context);

	return TRUE;
}

static struct context *context_new(uint16_t version, uint16_t imtu,
					uint16_t omtu, gconstpointer data)
{
	struct context *context = g_new0(struct context, 1);
	GIOChannel *channel;
	int err, sv[2];

	context->main_loop = g_main_loop_new(NULL, FALSE);
	g_assert(context->main_loop);

	err = socketpair(AF_UNIX, SOCK_SEQPACKET | SOCK_CLOEXEC, 0, sv);
	g_assert(err == 0);

	context->session = avdtp_new(sv[0], imtu, omtu, version);
	g_assert(context->session != NULL);

	channel = g_io_channel_unix_new(sv[1]);

	g_io_channel_set_close_on_unref(channel, TRUE);
	g_io_channel_set_encoding(channel, NULL, NULL);
	g_io_channel_set_buffered(channel, FALSE);

	context->source = g_io_add_watch(channel,
				G_IO_IN | G_IO_HUP | G_IO_ERR | G_IO_NVAL,
				test_handler, context);
	g_assert(context->source > 0);

	g_io_channel_unref(channel);

	context->fd = sv[1];
	context->data = data;

	return context;
}

static struct context *create_context(uint16_t version, gconstpointer data)
{
	return context_new(version, 672, 672, data);
}

static void execute_context(struct context *context)
{
	g_main_loop_run(context->main_loop);

	if (context->source > 0)
		g_source_remove(context->source);
	avdtp_unref(context->session);

	g_main_loop_unref(context->main_loop);

	test_free(context->data);
	g_free(context);
}

static gboolean sep_getcap_ind(struct avdtp *session,
					struct avdtp_local_sep *sep,
					GSList **caps, uint8_t *err,
					void *user_data)
{
	struct avdtp_service_capability *media_transport, *media_codec;
	struct avdtp_media_codec_capability *codec_caps;
	uint8_t cap[4] = { 0xff, 0xff, 2, 64 };

	*caps = NULL;

	media_transport = avdtp_service_cap_new(AVDTP_MEDIA_TRANSPORT,
						NULL, 0);

	*caps = g_slist_append(*caps, media_transport);

	codec_caps = g_malloc0(sizeof(*codec_caps) + sizeof(cap));
	codec_caps->media_type = AVDTP_MEDIA_TYPE_AUDIO;
	codec_caps->media_codec_type = 0x00;
	memcpy(codec_caps->data, cap, sizeof(cap));

	media_codec = avdtp_service_cap_new(AVDTP_MEDIA_CODEC, codec_caps,
					sizeof(*codec_caps) + sizeof(cap));

	*caps = g_slist_append(*caps, media_codec);
	g_free(codec_caps);

	return TRUE;
}

static gboolean sep_open_ind(struct avdtp *session, struct avdtp_local_sep *sep,
				struct avdtp_stream *stream, uint8_t *err,
				void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-18-C")) {
		*err = 0xc0;
		return FALSE;
	}

	context->pending_open = TRUE;
	context->stream = stream;

	return TRUE;
}

static gboolean sep_setconf_ind(struct avdtp *session,
						struct avdtp_local_sep *sep,
						struct avdtp_stream *stream,
						GSList *caps,
						avdtp_set_configuration_cb cb,
						void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-09-C"))
		return FALSE;

	cb(session, stream, NULL);

	return TRUE;
}

static gboolean sep_start_ind(struct avdtp *session,
						struct avdtp_local_sep *sep,
						struct avdtp_stream *stream,
						uint8_t *err,
						void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-21-C")) {
		*err = 0xc0;
		return FALSE;
	}

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-25-C"))
		context->pending_suspend = TRUE;

	return TRUE;
}

static gboolean sep_close_ind(struct avdtp *session,
						struct avdtp_local_sep *sep,
						struct avdtp_stream *stream,
						uint8_t *err,
						void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-24-C")) {
		*err = 0xc0;
		return FALSE;
	}

	return TRUE;
}

static gboolean sep_suspend_ind(struct avdtp *session,
						struct avdtp_local_sep *sep,
						struct avdtp_stream *stream,
						uint8_t *err,
						void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-27-C")) {
		*err = 0xc0;
		return FALSE;
	}

	return TRUE;
}

static struct avdtp_sep_ind sep_ind = {
	.get_capability		= sep_getcap_ind,
	.set_configuration	= sep_setconf_ind,
	.open			= sep_open_ind,
	.close			= sep_close_ind,
	.start			= sep_start_ind,
	.suspend		= sep_suspend_ind,
};

static void sep_setconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep,
				struct avdtp_stream *stream,
				struct avdtp_error *err, void *user_data)
{
	struct context *context = user_data;
	int ret;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-07-C")) {
		g_assert(err != NULL);
		g_assert_cmpint(avdtp_error_error_code(err), ==, 0x13);
		context_quit(context);
		return;
	}

	g_assert(err == NULL);

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BV-11-C") ||
		g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-10-C"))
		ret = avdtp_get_configuration(session, stream);
	else if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BV-23-C"))
		ret = avdtp_abort(session, stream);
	else
		ret = avdtp_open(session, stream);

	g_assert_cmpint(ret, ==, 0);
}

static void sep_getconf_cfm(struct avdtp *session, struct avdtp_local_sep *sep,
				struct avdtp_stream *stream,
				struct avdtp_error *err, void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-10-C")) {
		g_assert(err != NULL);
		g_assert_cmpint(avdtp_error_error_code(err), ==, 0x12);
	} else
		g_assert(err == NULL);

	context_quit(context);
}

static void sep_open_cfm(struct avdtp *session, struct avdtp_local_sep *sep,
			struct avdtp_stream *stream, struct avdtp_error *err,
			void *user_data)
{
	int ret;

	g_assert(err == NULL);

	g_assert(transport_open(stream));

	ret = avdtp_start(session, stream);
	g_assert_cmpint(ret, ==, 0);
}

static void sep_start_cfm(struct avdtp *session, struct avdtp_local_sep *sep,
			struct avdtp_stream *stream, struct avdtp_error *err,
			void *user_data)
{
	struct context *context = user_data;
	int ret;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-19-C") ||
		g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-22-C")) {
		g_assert(err != NULL);
		g_assert_cmpint(avdtp_error_error_code(err), ==, 0x31);
		context_quit(context);
		return;
	}

	g_assert(err == NULL);

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BV-19-C"))
		ret = avdtp_close(session, stream, FALSE);
	else
		ret = avdtp_suspend(session, stream);

	g_assert_cmpint(ret, ==, 0);
}

static void sep_suspend_cfm(struct avdtp *session, struct avdtp_local_sep *sep,
			struct avdtp_stream *stream, struct avdtp_error *err,
			void *user_data)
{
	struct context *context = user_data;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-25-C")) {
		g_assert(err != NULL);
		g_assert_cmpint(avdtp_error_error_code(err), ==, 0x31);
		context_quit(context);
	}
}

static struct avdtp_sep_cfm sep_cfm = {
	.set_configuration	= sep_setconf_cfm,
	.get_configuration	= sep_getconf_cfm,
	.open			= sep_open_cfm,
	.start			= sep_start_cfm,
	.suspend		= sep_suspend_cfm,
};

static void test_server(gconstpointer data)
{
	struct context *context = create_context(0x0100, data);
	struct avdtp_local_sep *sep;

	sep = avdtp_register_sep(AVDTP_SEP_TYPE_SOURCE, AVDTP_MEDIA_TYPE_AUDIO,
					0x00, FALSE, &sep_ind, &sep_cfm,
					context);

	g_idle_add(send_pdu, context);

	execute_context(context);

	avdtp_unregister_sep(sep);
}

static void test_server_1_3(gconstpointer data)
{
	struct context *context = create_context(0x0103, data);
	struct avdtp_local_sep *sep;

	sep = avdtp_register_sep(AVDTP_SEP_TYPE_SOURCE, AVDTP_MEDIA_TYPE_AUDIO,
					0x00, TRUE, &sep_ind, NULL, context);

	g_idle_add(send_pdu, context);

	execute_context(context);

	avdtp_unregister_sep(sep);
}

static void test_server_1_3_sink(gconstpointer data)
{
	struct context *context = create_context(0x0103, data);
	struct avdtp_local_sep *sep;

	sep = avdtp_register_sep(AVDTP_SEP_TYPE_SINK, AVDTP_MEDIA_TYPE_AUDIO,
					0x00, TRUE, &sep_ind, NULL, context);

	g_idle_add(send_pdu, context);

	execute_context(context);

	avdtp_unregister_sep(sep);
}

static void test_server_0_sep(gconstpointer data)
{
	struct context *context = create_context(0x0100, data);

	g_idle_add(send_pdu, context);

	execute_context(context);
}

static gboolean sep_getcap_ind_frg(struct avdtp *session,
					struct avdtp_local_sep *sep,
					GSList **caps, uint8_t *err,
					void *user_data)
{
	struct avdtp_service_capability *media_transport, *media_codec;
	struct avdtp_service_capability *content_protection;
	struct avdtp_media_codec_capability *codec_caps;
	uint8_t cap[4] = { 0xff, 0xff, 2, 64 };
	uint8_t frg_cap[96] = {};

	*caps = NULL;

	media_transport = avdtp_service_cap_new(AVDTP_MEDIA_TRANSPORT,
						NULL, 0);

	*caps = g_slist_append(*caps, media_transport);

	codec_caps = g_malloc0(sizeof(*codec_caps) + sizeof(cap));
	codec_caps->media_type = AVDTP_MEDIA_TYPE_AUDIO;
	codec_caps->media_codec_type = 0x00;
	memcpy(codec_caps->data, cap, sizeof(cap));

	media_codec = avdtp_service_cap_new(AVDTP_MEDIA_CODEC, codec_caps,
					sizeof(*codec_caps) + sizeof(cap));

	*caps = g_slist_append(*caps, media_codec);
	g_free(codec_caps);

	content_protection = avdtp_service_cap_new(AVDTP_CONTENT_PROTECTION,
						frg_cap, sizeof(frg_cap));
	*caps = g_slist_append(*caps, content_protection);

	return TRUE;
}

static struct avdtp_sep_ind sep_ind_frg = {
	.get_capability		= sep_getcap_ind_frg,
};

static void test_server_frg(gconstpointer data)
{
	struct context *context = context_new(0x0100, 48, 48, data);
	struct avdtp_local_sep *sep;

	sep = avdtp_register_sep(AVDTP_SEP_TYPE_SOURCE, AVDTP_MEDIA_TYPE_AUDIO,
						0x00, TRUE, &sep_ind_frg,
						NULL, context);

	g_idle_add(send_pdu, context);

	execute_context(context);

	avdtp_unregister_sep(sep);
}

static void discover_cb(struct avdtp *session, GSList *seps,
				struct avdtp_error *err, void *user_data)
{
	struct context *context = user_data;
	struct avdtp_stream *stream;
	struct avdtp_remote_sep *rsep;
	struct avdtp_service_capability *media_transport, *media_codec;
	struct avdtp_media_codec_capability *cap;
	GSList *caps;
	uint8_t data[4] = { 0x21, 0x02, 2, 32 };
	int ret;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BV-05-C") ||
		g_str_equal(context->data->test_name, "/TP/SIG/SMG/BV-07-C") ||
		g_str_equal(context->data->test_name, "/TP/SIG/SMG/BV-25-C"))
		return;

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-01-C")) {
		g_assert(err != NULL);
		g_assert_cmpint(avdtp_error_error_code(err), ==, 0x01);
		context_quit(context);
		return;
	}

	if (g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-04-C") ||
		g_str_equal(context->data->test_name, "/TP/SIG/SMG/BI-32-C")) {
		g_assert(err != NULL);
		g_assert_cmpint(avdtp_error_error_code(err), ==, 0x11);
		context_quit(context);
		return;
	}

	g_assert(err == NULL);
	g_assert_cmpint(g_slist_length(seps), !=, 0);

	if (g_str_equal(context->data->test_name, "/TP/SIG/FRA/BV-02-C")) {
		g_assert(err == NULL);
		context_quit(context);
		return;
	}

	rsep = avdtp_find_remote_sep(session, context->sep);
	g_assert(rsep != NULL);

	media_transport = avdtp_service_cap_new(AVDTP_MEDIA_TRANSPORT,
						NULL, 0);

	caps = g_slist_append(NULL, media_transport);

	cap = g_malloc0(sizeof(*cap) + sizeof(data));
	cap->media_type = AVDTP_MEDIA_TYPE_AUDIO;
	cap->media_codec_type = 0x00;
	memcpy(cap->data, data, sizeof(data));

	media_codec = avdtp_service_cap_new(AVDTP_MEDIA_CODEC, cap,
						sizeof(*cap) + sizeof(data));

	caps = g_slist_append(caps, media_codec);
	g_free(cap);

	ret = avdtp_set_configuration(session, rsep, context->sep, caps,
								&stream);
	g_assert_cmpint(ret, ==, 0);

	g_slist_free_full(caps, g_free);
}

static void test_client(gconstpointer data)
{
	struct context *context = create_context(0x0100, data);
	struct avdtp_local_sep *sep;

	sep = avdtp_register_sep(AVDTP_SEP_TYPE_SINK, AVDTP_MEDIA_TYPE_AUDIO,
					0x00, FALSE, NULL, &sep_cfm,
					context);
	context->sep = sep;

	avdtp_discover(context->session, discover_cb, context);

	execute_context(context);

	avdtp_unregister_sep(sep);
}

static void test_client_1_3(gconstpointer data)
{
	struct context *context = create_context(0x0103, data);
	struct avdtp_local_sep *sep;

	sep = avdtp_register_sep(AVDTP_SEP_TYPE_SINK, AVDTP_MEDIA_TYPE_AUDIO,
					0x00, TRUE, NULL, &sep_cfm,
					context);
	context->sep = sep;

	avdtp_discover(context->session, discover_cb, context);

	execute_context(context);

	avdtp_unregister_sep(sep);
}

static void test_client_frg(gconstpointer data)
{
	struct context *context = context_new(0x0100, 48, 48, data);
	struct avdtp_local_sep *sep;

	sep = avdtp_register_sep(AVDTP_SEP_TYPE_SINK, AVDTP_MEDIA_TYPE_AUDIO,
					0x00, TRUE, NULL, &sep_cfm,
					context);
	context->sep = sep;

	avdtp_discover(context->session, discover_cb, context);

	execute_context(context);

	avdtp_unregister_sep(sep);
}

int main(int argc, char *argv[])
{
	g_test_init(&argc, &argv, NULL);

	if (g_test_verbose())
		__btd_log_init("*", 0);

	/*
	 * Stream Management Service
	 *
	 * To verify that the following procedures are implemented according to
	 * their specification in AVDTP.
	 */
	define_test("/TP/SIG/SMG/BV-05-C", test_client,
			raw_pdu(0x00, 0x01));
	define_test("/TP/SIG/SMG/BV-06-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00));
	define_test("/TP/SIG/SMG/BV-07-C", test_client,
			raw_pdu(0x10, 0x01),
			raw_pdu(0x12, 0x01, 0x04, 0x00),
			raw_pdu(0x20, 0x02, 0x04));
	define_test("/TP/SIG/SMG/BV-08-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40));
	define_test("/TP/SIG/SMG/BV-09-C", test_client,
			raw_pdu(0x30, 0x01),
			raw_pdu(0x32, 0x01, 0x04, 0x00),
			raw_pdu(0x40, 0x02, 0x04),
			raw_pdu(0x42, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x50, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20));
	define_test("/TP/SIG/SMG/BV-10-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03));
	define_test("/TP/SIG/SMG/BV-11-C", test_client,
			raw_pdu(0x60, 0x01),
			raw_pdu(0x62, 0x01, 0x04, 0x00),
			raw_pdu(0x70, 0x02, 0x04),
			raw_pdu(0x72, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x80, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x82, 0x03),
			raw_pdu(0x90, 0x04, 0x04));
	define_test("/TP/SIG/SMG/BV-12-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x04, 0x04),
			raw_pdu(0x32, 0x04, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0x21, 0x02, 0x02, 0x20));
	define_test("/TP/SIG/SMG/BV-15-C", test_client,
			raw_pdu(0xa0, 0x01),
			raw_pdu(0xa2, 0x01, 0x04, 0x00),
			raw_pdu(0xb0, 0x02, 0x04),
			raw_pdu(0xb2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0xc0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0xc2, 0x03),
			raw_pdu(0xd0, 0x06, 0x04));
	define_test("/TP/SIG/SMG/BV-16-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06));
	define_test("/TP/SIG/SMG/BV-17-C", test_client,
			raw_pdu(0xe0, 0x01),
			raw_pdu(0xe2, 0x01, 0x04, 0x00),
			raw_pdu(0xf0, 0x02, 0x04),
			raw_pdu(0xf2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x00, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x02, 0x03),
			raw_pdu(0x10, 0x06, 0x04),
			raw_pdu(0x12, 0x06),
			raw_pdu(0x20, 0x07, 0x04));
	define_test("/TP/SIG/SMG/BV-18-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x07, 0x04),
			raw_pdu(0x42, 0x07));
	define_test("/TP/SIG/SMG/BV-19-C", test_client,
			raw_pdu(0x30, 0x01),
			raw_pdu(0x32, 0x01, 0x04, 0x00),
			raw_pdu(0x40, 0x02, 0x04),
			raw_pdu(0x42, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x50, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x52, 0x03),
			raw_pdu(0x60, 0x06, 0x04),
			raw_pdu(0x62, 0x06),
			raw_pdu(0x70, 0x07, 0x04),
			raw_pdu(0x72, 0x07),
			raw_pdu(0x80, 0x08, 0x04));
	define_test("/TP/SIG/SMG/BV-20-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x07, 0x04),
			raw_pdu(0x42, 0x07),
			raw_pdu(0x50, 0x08, 0x04),
			raw_pdu(0x52, 0x08));
	define_test("/TP/SIG/SMG/BV-21-C", test_client,
			raw_pdu(0x90, 0x01),
			raw_pdu(0x92, 0x01, 0x04, 0x00),
			raw_pdu(0xa0, 0x02, 0x04),
			raw_pdu(0xa2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0xb0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0xb2, 0x03),
			raw_pdu(0xc0, 0x06, 0x04),
			raw_pdu(0xc2, 0x06),
			raw_pdu(0xd0, 0x07, 0x04),
			raw_pdu(0xd2, 0x07),
			raw_pdu(0xe0, 0x09, 0x04));
	define_test("/TP/SIG/SMG/BV-22-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x07, 0x04),
			raw_pdu(0x42, 0x07),
			raw_pdu(0x50, 0x09, 0x04),
			raw_pdu(0x52, 0x09));
	define_test("/TP/SIG/SMG/BV-23-C", test_client,
			raw_pdu(0xf0, 0x01),
			raw_pdu(0xf2, 0x01, 0x04, 0x00),
			raw_pdu(0x00, 0x02, 0x04),
			raw_pdu(0x02, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x10, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x12, 0x03),
			raw_pdu(0x20, 0x0a, 0x04));
	define_test("/TP/SIG/SMG/BV-24-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x0a, 0x04),
			raw_pdu(0x32, 0x0a));
	define_test("/TP/SIG/SMG/BV-25-C", test_client_1_3,
			raw_pdu(0x30, 0x01),
			raw_pdu(0x32, 0x01, 0x04, 0x00),
			raw_pdu(0x40, 0x0c, 0x04));
	define_test("/TP/SIG/SMG/BV-26-C", test_server_1_3,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x0c, 0x04),
			raw_pdu(0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x08, 0x00));
	define_test("/TP/SIG/SMG/BV-27-C", test_server_1_3,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40));
	define_test("/TP/SIG/SMG/BV-28-C", test_client_1_3,
			raw_pdu(0x50, 0x01),
			raw_pdu(0x52, 0x01, 0x04, 0x00),
			raw_pdu(0x60, 0x0c, 0x04),
			raw_pdu(0x62, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x0f, 0x00),
			raw_pdu(0x70, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20));
	define_test("/TP/SIG/SMG/BV-31-C", test_client_1_3,
			raw_pdu(0x80, 0x01),
			raw_pdu(0x82, 0x01, 0x04, 0x00),
			raw_pdu(0x90, 0x0c, 0x04),
			raw_pdu(0x92, 0x0c, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00,
				0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x06,
				0x00, 0x00, 0xff, 0xff, 0x02, 0x40, 0x08, 0x00),
			raw_pdu(0xa0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20, 0x08,
				0x00));
	define_test("/TP/SIG/SMG/BI-01-C", test_client,
			raw_pdu(0xb0, 0x01),
			raw_pdu(0xb3, 0x01, 0x01));
	define_test("/TP/SIG/SMG/BI-02-C", test_server,
			raw_pdu(0x01, 0x01));
	define_test("/TP/SIG/SMG/BI-03-C", test_server_0_sep,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x03, 0x01, 0x19));
	define_test("/TP/SIG/SMG/BI-04-C", test_client,
			raw_pdu(0xc0, 0x01),
			raw_pdu(0xc2, 0x01, 0x04, 0x00),
			raw_pdu(0xd0, 0x02, 0x04),
			raw_pdu(0xd3, 0x02, 0x11));
	define_test("/TP/SIG/SMG/BI-05-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02),
			raw_pdu(0x13, 0x02, 0x11));
	define_test("/TP/SIG/SMG/BI-06-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x00),
			raw_pdu(0x13, 0x02, 0x12));
	define_test("/TP/SIG/SMG/BI-07-C", test_client,
			raw_pdu(0xe0, 0x01),
			raw_pdu(0xe2, 0x01, 0x04, 0x00),
			raw_pdu(0xf0, 0x02, 0x04),
			raw_pdu(0xf2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x00, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x03, 0x03, 0x00, 0x13));
	define_test("/TP/SIG/SMG/BI-08-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x33, 0x03, 0x00, 0x13));
	define_test("/TP/SIG/SMG/BI-09-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x23, 0x03, 0x00, 0x29));
	define_test("/TP/SIG/SMG/BI-10-C", test_client,
			raw_pdu(0x10, 0x01),
			raw_pdu(0x12, 0x01, 0x04, 0x00),
			raw_pdu(0x20, 0x02, 0x04),
			raw_pdu(0x22, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x30, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x32, 0x03),
			raw_pdu(0x40, 0x04, 0x04),
			raw_pdu(0x43, 0x04, 0x12));
	define_test("/TP/SIG/SMG/BI-11-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x04, 0x00),
			raw_pdu(0x33, 0x04, 0x12));
	define_test("/TP/SIG/SMG/BI-17-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x33, 0x06, 0x31));
	define_test("/TP/SIG/SMG/BI-18-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x33, 0x06, 0xc0));
	define_test("/TP/SIG/SMG/BI-19-C", test_client,
			raw_pdu(0x50, 0x01),
			raw_pdu(0x52, 0x01, 0x04, 0x00),
			raw_pdu(0x60, 0x02, 0x04),
			raw_pdu(0x62, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x70, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x72, 0x03),
			raw_pdu(0x80, 0x06, 0x04),
			raw_pdu(0x82, 0x06),
			raw_pdu(0x90, 0x07, 0x04),
			raw_pdu(0x93, 0x07, 0x04, 0x31));
	define_test("/TP/SIG/SMG/BI-20-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x07, 0x04),
			raw_pdu(0x33, 0x07, 0x04, 0x31));
	define_test("/TP/SIG/SMG/BI-21-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x07, 0x04),
			raw_pdu(0x43, 0x07, 0x04, 0xc0));
	define_test("/TP/SIG/SMG/BI-22-C", test_client,
			raw_pdu(0xa0, 0x01),
			raw_pdu(0xa2, 0x01, 0x04, 0x00),
			raw_pdu(0xb0, 0x02, 0x04),
			raw_pdu(0xb2, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0xc0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0xc2, 0x03),
			raw_pdu(0xd0, 0x06, 0x04),
			raw_pdu(0xd2, 0x06),
			raw_pdu(0xe0, 0x07, 0x04),
			raw_pdu(0xe3, 0x07, 0x04, 0x31));
	define_test("/TP/SIG/SMG/BI-23-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x08, 0x00),
			raw_pdu(0x43, 0x08, 0x12));
	define_test("/TP/SIG/SMG/BI-24-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x08, 0x04),
			raw_pdu(0x43, 0x08, 0xc0));
	define_test("/TP/SIG/SMG/BI-25-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x07, 0x04),
			raw_pdu(0x42, 0x07),
			raw_pdu(0xf0, 0x09, 0x04),
			raw_pdu(0xf3, 0x09, 0x04, 0x31));
	define_test("/TP/SIG/SMG/BI-26-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x09, 0x04),
			raw_pdu(0x43, 0x09, 0x04, 0x31));
	define_test("/TP/SIG/SMG/BI-27-C", test_server,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x07, 0x04),
			raw_pdu(0x42, 0x07),
			raw_pdu(0x50, 0x09, 0x04),
			raw_pdu(0x53, 0x09, 0x04, 0xc0));
	define_test("/TP/SIG/SMG/BI-28-C", test_server,
			raw_pdu(0x00, 0xff),
			raw_pdu(0x01, 0x3f));
	define_test("/TP/SIG/SMG/BI-30-C", test_client,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			raw_pdu(0x12, 0x02, 0xee, 0x01, 0x00, 0x01, 0x00, 0x07,
				0x06, 0x00, 0x00, 0xff, 0xff, 0x02, 0x40),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20));
	define_test("/TP/SIG/SMG/ESR04/BI-28-C", test_server,
			raw_pdu(0x00, 0x3f),
			raw_pdu(0x01, 0x3f));
	define_test("/TP/SIG/SMG/BI-32-C", test_client_1_3,
			raw_pdu(0x30, 0x01),
			raw_pdu(0x32, 0x01, 0x04, 0x00),
			raw_pdu(0x40, 0x0c, 0x04),
			raw_pdu(0x43, 0x0c, 0x11));
	define_test("/TP/SIG/SMG/BI-33-C", test_server_1_3,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x0c),
			raw_pdu(0x13, 0x0c, 0x11));
	define_test("/TP/SIG/SMG/BI-35-C", test_client_1_3,
			raw_pdu(0x50, 0x01),
			raw_pdu(0x52, 0x01, 0x04, 0x00),
			raw_pdu(0x60, 0x0c, 0x04),
			raw_pdu(0x62, 0x0c, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00,
				0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x06,
				0x00, 0x00, 0xff, 0xff, 0x02, 0x40, 0x08, 0x00),
			raw_pdu(0x70, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20, 0x08,
				0x00));
	define_test("/TP/SIG/SMG/BI-36-C", test_client_1_3,
			raw_pdu(0x80, 0x01),
			raw_pdu(0x82, 0x01, 0x04, 0x00),
			raw_pdu(0x90, 0x0c, 0x04),
			raw_pdu(0x92, 0x0c, 0xee, 0x01, 0x00, 0x01, 0x00, 0x07,
				0x06, 0x00, 0x00, 0xff, 0xff, 0x02, 0x40),
			raw_pdu(0xa0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20));

	/*
	 * Signaling Message Fragmentation Service
	 *
	 * verify that the IUT (INT and ACP) fragments the signaling messages
	 * that cannot fit in a single L2CAP packet.
	 */
	define_test("/TP/SIG/FRA/BV-01-C", test_server_frg,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x02, 0x04),
			frg_pdu(0x16, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00,
				0x00, 0xff, 0xff, 0x02, 0x40, 0x04, 0x60, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00),
			frg_pdu(0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00),
			raw_pdu(0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00));
	define_test("/TP/SIG/FRA/BV-02-C", test_client_frg,
			raw_pdu(0xb0, 0x01),
			raw_pdu(0xb2, 0x01, 0x04, 0x00),
			raw_pdu(0xc0, 0x02, 0x04),
			frg_pdu(0xc6, 0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x00,
				0x00, 0xff, 0xff, 0x02, 0x40, 0x04, 0x60, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00),
			frg_pdu(0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00),
			raw_pdu(0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
				0x00));

	/*
	 * Delay Reporting
	 *
	 * Verify that the stream management signaling procedure of delay
	 * reporting is implemented according to its specification in AVDTP.
	 */
	define_test("/TP/SIG/SYN/BV-01-C", test_server_1_3_sink,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x08),
			raw_pdu(0x10, 0x0c, 0x04),
			raw_pdu(0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x08, 0x00));
	define_test("/TP/SIG/SYN/BV-02-C", test_client_1_3,
			raw_pdu(0xd0, 0x01),
			raw_pdu(0xd2, 0x01, 0x04, 0x00),
			raw_pdu(0xe0, 0x0c, 0x04),
			raw_pdu(0xe2, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x0f, 0x00, 0x08, 0x00),
			raw_pdu(0xf0, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20, 0x08,
				0x00));
	define_test("/TP/SIG/SYN/BV-03-C", test_server_1_3_sink,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x08),
			raw_pdu(0x10, 0x0c, 0x04),
			raw_pdu(0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x08, 0x00),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20, 0x08,
				0x00),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x00, 0x0d, 0x04, 0x00, 0x00));
	define_test("/TP/SIG/SYN/BV-04-C", test_client_1_3,
			raw_pdu(0x10, 0x01),
			raw_pdu(0x12, 0x01, 0x04, 0x00),
			raw_pdu(0x20, 0x0c, 0x04),
			raw_pdu(0x22, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x0f, 0x00, 0x08, 0x00),
			raw_pdu(0x30, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20, 0x08,
				0x00),
			raw_pdu(0x32, 0x03),
			raw_pdu(0x40, 0x0d, 0x04, 0x00, 0x00));
	define_test("/TP/SIG/SYN/BV-05-C", test_server_1_3,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x0c, 0x04),
			raw_pdu(0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x08, 0x00),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20, 0x08,
				0x00),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x0d, 0x04, 0x00, 0x00),
			raw_pdu(0x42, 0x0d));
	define_test("/TP/SIG/SYN/BV-06-C", test_server_1_3,
			raw_pdu(0x00, 0x01),
			raw_pdu(0x02, 0x01, 0x04, 0x00),
			raw_pdu(0x10, 0x0c, 0x04),
			raw_pdu(0x12, 0x0c, 0x01, 0x00, 0x07, 0x06, 0x00, 0x00,
				0xff, 0xff, 0x02, 0x40, 0x08, 0x00),
			raw_pdu(0x20, 0x03, 0x04, 0x04, 0x01, 0x00, 0x07, 0x06,
				0x00, 0x00, 0x21, 0x02, 0x02, 0x20, 0x08,
				0x00),
			raw_pdu(0x22, 0x03),
			raw_pdu(0x30, 0x06, 0x04),
			raw_pdu(0x32, 0x06),
			raw_pdu(0x40, 0x07, 0x04),
			raw_pdu(0x42, 0x07),
			raw_pdu(0x50, 0x0d, 0x04, 0x00, 0x00),
			raw_pdu(0x52, 0x0d));

	return g_test_run();
}
