mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-02 09:01:50 -05:00
module-rtp: only create sessions with avahi
This commit is contained in:
parent
432f927da9
commit
4507f7ab39
1 changed files with 11 additions and 19 deletions
|
|
@ -496,7 +496,6 @@ static struct session *make_session(struct impl *impl, struct pw_properties *pro
|
||||||
sess->impl = impl;
|
sess->impl = impl;
|
||||||
sess->initiator = pw_properties_get_uint32(props, "rtp.initiator", pw_rand32());
|
sess->initiator = pw_properties_get_uint32(props, "rtp.initiator", pw_rand32());
|
||||||
sess->ssrc = pw_rand32();
|
sess->ssrc = pw_rand32();
|
||||||
sess->remote_ssrc = pw_properties_get_uint32(props, "rtp.receiver-ssrc", 0);
|
|
||||||
sess->ts_offset = impl->ts_offset < 0 ? pw_rand32() : impl->ts_offset;
|
sess->ts_offset = impl->ts_offset < 0 ? pw_rand32() : impl->ts_offset;
|
||||||
|
|
||||||
str = pw_properties_get(props, "sess.name");
|
str = pw_properties_get(props, "sess.name");
|
||||||
|
|
@ -525,7 +524,6 @@ static struct session *find_session_by_addr_name(struct impl *impl,
|
||||||
{
|
{
|
||||||
struct session *sess;
|
struct session *sess;
|
||||||
spa_list_for_each(sess, &impl->sessions, link) {
|
spa_list_for_each(sess, &impl->sessions, link) {
|
||||||
pw_log_info("'%s' '%s'", sess->name, name);
|
|
||||||
if (cmp_ip(sa, &sess->ctrl_addr) &&
|
if (cmp_ip(sa, &sess->ctrl_addr) &&
|
||||||
spa_streq(sess->name, name))
|
spa_streq(sess->name, name))
|
||||||
return sess;
|
return sess;
|
||||||
|
|
@ -569,31 +567,21 @@ static void parse_apple_midi_cmd_in(struct impl *impl, bool ctrl, uint8_t *buffe
|
||||||
ssrc = ntohl(hdr->ssrc);
|
ssrc = ntohl(hdr->ssrc);
|
||||||
|
|
||||||
get_ip(sa, addr, sizeof(addr), &port);
|
get_ip(sa, addr, sizeof(addr), &port);
|
||||||
pw_log_info("IN from %s:%d %s", addr, port, hdr->name);
|
pw_log_info("IN from %s:%d %s %08x", addr, port, hdr->name, ssrc);
|
||||||
|
|
||||||
sess = find_session_by_initiator(impl, initiator);
|
sess = find_session_by_initiator(impl, initiator);
|
||||||
if (sess == NULL)
|
if (sess == NULL)
|
||||||
sess = find_session_by_addr_name(impl, sa, hdr->name);
|
sess = find_session_by_addr_name(impl, sa, hdr->name);
|
||||||
|
|
||||||
if (ctrl) {
|
if (ctrl) {
|
||||||
if (sess != NULL) {
|
if (sess == NULL) {
|
||||||
|
pw_log_warn("receive ctrl IN from nonexisting session %08x", initiator);
|
||||||
|
success = false;
|
||||||
|
} else {
|
||||||
if (sess->ctrl_ready) {
|
if (sess->ctrl_ready) {
|
||||||
pw_log_warn("receive ctrl IN from existing session %08x", initiator);
|
pw_log_warn("receive ctrl IN from existing session %08x", initiator);
|
||||||
success = false;
|
success = false;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
struct pw_properties *props;
|
|
||||||
|
|
||||||
props = pw_properties_new("sess.name", hdr->name, NULL);
|
|
||||||
pw_properties_setf(props, "rtp.initiator", "%u", initiator);
|
|
||||||
pw_properties_setf(props, "rtp.receiver-ssrc", "%u", ssrc);
|
|
||||||
|
|
||||||
pw_log_info("got control IN request %08x", initiator);
|
|
||||||
sess = make_session(impl, props);
|
|
||||||
if (sess == NULL) {
|
|
||||||
pw_log_warn("failed to make session: %m");
|
|
||||||
success = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (success) {
|
if (success) {
|
||||||
sess->ctrl_addr = *sa;
|
sess->ctrl_addr = *sa;
|
||||||
|
|
@ -802,6 +790,7 @@ on_data_io(void *data, int fd, uint32_t mask)
|
||||||
struct impl *impl = data;
|
struct impl *impl = data;
|
||||||
ssize_t len;
|
ssize_t len;
|
||||||
uint8_t buffer[2048];
|
uint8_t buffer[2048];
|
||||||
|
uint32_t ssrc;
|
||||||
|
|
||||||
if (mask & SPA_IO_IN) {
|
if (mask & SPA_IO_IN) {
|
||||||
struct sockaddr_storage sa;
|
struct sockaddr_storage sa;
|
||||||
|
|
@ -818,7 +807,10 @@ on_data_io(void *data, int fd, uint32_t mask)
|
||||||
parse_apple_midi_cmd(impl, false, buffer, len, &sa, salen);
|
parse_apple_midi_cmd(impl, false, buffer, len, &sa, salen);
|
||||||
} else {
|
} else {
|
||||||
struct rtp_header *hdr = (struct rtp_header*)buffer;
|
struct rtp_header *hdr = (struct rtp_header*)buffer;
|
||||||
struct session *sess = find_session_by_ssrc(impl, ntohl(hdr->ssrc));
|
struct session *sess;
|
||||||
|
|
||||||
|
ssrc = ntohl(hdr->ssrc);
|
||||||
|
sess = find_session_by_ssrc(impl, ssrc);
|
||||||
if (sess == NULL)
|
if (sess == NULL)
|
||||||
goto unknown_ssrc;
|
goto unknown_ssrc;
|
||||||
|
|
||||||
|
|
@ -834,7 +826,7 @@ short_packet:
|
||||||
pw_log_warn("short packet received");
|
pw_log_warn("short packet received");
|
||||||
return;
|
return;
|
||||||
unknown_ssrc:
|
unknown_ssrc:
|
||||||
pw_log_warn("unknown SSRC");
|
pw_log_warn("unknown SSRC %08x", ssrc);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue