Skip to content

Commit 7ecd52c

Browse files
committed
Serve subscriptions after namespace announce
1 parent 9288500 commit 7ecd52c

7 files changed

Lines changed: 892 additions & 127 deletions

File tree

include/openmoq/publisher/transport/moqt_control_messages.h

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,18 +40,77 @@ struct TrackMessage {
4040
bool content_exists = false;
4141
};
4242

43+
struct PublishNamespaceOk {
44+
std::uint64_t request_id = 0;
45+
};
46+
47+
struct SubscribeNamespaceMessage {
48+
std::uint64_t request_id = 0;
49+
std::vector<std::string> track_namespace_prefix;
50+
};
51+
52+
struct SubscribeMessage {
53+
std::uint64_t request_id = 0;
54+
std::vector<std::string> track_namespace;
55+
std::string track_name;
56+
std::uint8_t subscriber_priority = 0;
57+
std::uint8_t group_order = 0;
58+
std::uint8_t forward = 0;
59+
std::uint64_t filter_type = 0;
60+
std::size_t start_group_id = 0;
61+
std::size_t start_object_id = 0;
62+
std::size_t end_group_id = 0;
63+
};
64+
65+
struct PublishNamespaceError {
66+
std::uint64_t request_id = 0;
67+
std::uint64_t error_code = 0;
68+
std::string reason;
69+
};
70+
71+
struct PublishOk {
72+
std::uint64_t request_id = 0;
73+
std::uint8_t forward = 0;
74+
std::uint8_t subscriber_priority = 0;
75+
std::uint8_t group_order = 0;
76+
std::uint64_t filter_type = 0;
77+
};
78+
79+
struct PublishError {
80+
std::uint64_t request_id = 0;
81+
std::uint64_t error_code = 0;
82+
std::string reason;
83+
};
84+
4385
std::vector<std::uint8_t> encode_varint(std::uint64_t value);
4486
bool decode_varint(std::span<const std::uint8_t> bytes, std::size_t& offset, std::uint64_t& value);
4587

4688
std::vector<std::uint8_t> encode_setup_message(const SetupMessage& message);
4789
bool decode_server_setup_message(std::span<const std::uint8_t> bytes, ServerSetupMessage& message);
4890
std::vector<std::uint8_t> encode_server_setup_message(const ServerSetupMessage& message);
91+
bool next_control_message(std::span<const std::uint8_t> bytes, std::size_t& message_size);
4992
std::vector<std::uint8_t> encode_namespace_message(const NamespaceMessage& message);
93+
bool decode_subscribe_namespace_message(std::span<const std::uint8_t> bytes, SubscribeNamespaceMessage& message);
94+
std::vector<std::uint8_t> encode_subscribe_namespace_ok_message(std::uint64_t request_id);
95+
bool decode_subscribe_message(std::span<const std::uint8_t> bytes, SubscribeMessage& message);
96+
std::vector<std::uint8_t> encode_subscribe_ok_message(std::uint64_t request_id,
97+
std::uint64_t track_alias,
98+
std::uint8_t subscriber_priority,
99+
std::size_t largest_group_id,
100+
std::size_t largest_object_id,
101+
bool content_exists);
102+
std::vector<std::uint8_t> encode_subscribe_error_message(std::uint64_t request_id,
103+
std::uint64_t error_code,
104+
std::string_view reason);
50105
std::vector<std::uint8_t> encode_track_message(const TrackMessage& message);
51106
std::vector<std::uint8_t> encode_publish_done_message(std::uint64_t request_id, std::uint64_t stream_count);
52107
std::vector<std::uint8_t> encode_publish_namespace_done_message(const NamespaceMessage& message);
53108
std::vector<std::uint8_t> encode_object_stream(std::uint64_t track_alias,
54109
const CmsfObject& object,
55110
std::span<const std::uint8_t> payload);
111+
bool decode_publish_namespace_ok(std::span<const std::uint8_t> bytes, PublishNamespaceOk& message);
112+
bool decode_publish_namespace_error(std::span<const std::uint8_t> bytes, PublishNamespaceError& message);
113+
bool decode_publish_ok(std::span<const std::uint8_t> bytes, PublishOk& message);
114+
bool decode_publish_error(std::span<const std::uint8_t> bytes, PublishError& message);
56115

57116
} // namespace openmoq::publisher::transport

include/openmoq/publisher/transport/picoquic_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class PicoquicClient final : public PublisherTransport {
2525
std::vector<std::uint8_t>& bytes,
2626
bool& fin,
2727
std::chrono::milliseconds timeout) override;
28+
std::string connection_id() const override;
2829
TransportStatus close(std::uint64_t application_error_code) override;
2930

3031
private:

include/openmoq/publisher/transport/publisher_transport.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class PublisherTransport {
6060
std::vector<std::uint8_t>& bytes,
6161
bool& fin,
6262
std::chrono::milliseconds timeout) = 0;
63+
virtual std::string connection_id() const = 0;
6364
virtual TransportStatus close(std::uint64_t application_error_code) = 0;
6465
};
6566

0 commit comments

Comments
 (0)