+ if (stream->class->supports_discarded_events) {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_DISCARDED_EVENTS;
+ }
+
+ break;
+ case BT_MESSAGE_TYPE_STREAM_END:
+ state->expected_msg_types = 0;
+ break;
+ case BT_MESSAGE_TYPE_EVENT:
+ {
+ state->expected_msg_types = BT_MESSAGE_TYPE_EVENT;
+
+ if (stream->class->supports_packets) {
+ state->expected_msg_types |= BT_MESSAGE_TYPE_PACKET_END;
+ } else {
+ state->expected_msg_types |= BT_MESSAGE_TYPE_STREAM_END;
+ }
+
+ if (stream->class->supports_discarded_events) {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_DISCARDED_EVENTS;
+ }
+
+ break;
+ }
+ case BT_MESSAGE_TYPE_PACKET_BEGINNING:
+ {
+ state->expected_msg_types = BT_MESSAGE_TYPE_EVENT |
+ BT_MESSAGE_TYPE_PACKET_END;
+
+ if (stream->class->supports_discarded_events) {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_DISCARDED_EVENTS;
+ }
+
+ break;
+ }
+ case BT_MESSAGE_TYPE_PACKET_END:
+ {
+ state->expected_msg_types = BT_MESSAGE_TYPE_PACKET_BEGINNING |
+ BT_MESSAGE_TYPE_STREAM_END;
+
+ if (stream->class->supports_discarded_events) {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_DISCARDED_EVENTS;
+ }
+
+ if (stream->class->supports_discarded_packets) {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_DISCARDED_PACKETS;
+ }
+
+ break;
+ }
+ case BT_MESSAGE_TYPE_DISCARDED_EVENTS:
+ state->expected_msg_types = BT_MESSAGE_TYPE_DISCARDED_EVENTS;
+
+ if (state->cur_packet) {
+ state->expected_msg_types |= BT_MESSAGE_TYPE_EVENT |
+ BT_MESSAGE_TYPE_PACKET_END;
+ } else {
+ state->expected_msg_types |= BT_MESSAGE_TYPE_STREAM_END;
+
+ if (stream->class->supports_packets) {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_PACKET_BEGINNING;
+
+ if (stream->class->supports_discarded_packets) {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_DISCARDED_PACKETS;
+ }
+ } else {
+ state->expected_msg_types |=
+ BT_MESSAGE_TYPE_EVENT;