module-rtp: improve session setup

This commit is contained in:
Wim Taymans 2023-03-03 15:58:12 +01:00
parent 0885899b7a
commit 3b33098cd7

View file

@ -338,7 +338,8 @@ static void session_establish(struct session *sess)
case SESSION_STATE_INIT: case SESSION_STATE_INIT:
/* we initiate */ /* we initiate */
sess->we_initiated = true; sess->we_initiated = true;
pw_log_info("start session initiator:%08x", sess->initiator); pw_log_info("start session initiator:%08x %u %u", sess->initiator,
sess->ctrl_ready, sess->data_ready);
if (!sess->ctrl_ready) if (!sess->ctrl_ready)
send_apple_midi_cmd_in(sess, true); send_apple_midi_cmd_in(sess, true);
else if (!sess->data_ready) else if (!sess->data_ready)
@ -359,7 +360,8 @@ static void session_stop(struct session *sess)
{ {
if (!sess->we_initiated) if (!sess->we_initiated)
return; return;
pw_log_info("stop session initiator:%08x", sess->initiator); pw_log_info("stop session initiator:%08x %u %u", sess->initiator,
sess->ctrl_ready, sess->data_ready);
if (sess->ctrl_ready) { if (sess->ctrl_ready) {
send_apple_midi_cmd_by(sess, true); send_apple_midi_cmd_by(sess, true);
sess->ctrl_ready = false; sess->ctrl_ready = false;
@ -585,6 +587,7 @@ static void parse_apple_midi_cmd_in(struct impl *impl, bool ctrl, uint8_t *buffe
} }
} }
if (success) { if (success) {
sess->initiator = initiator;
sess->ctrl_addr = *sa; sess->ctrl_addr = *sa;
sess->ctrl_len = salen; sess->ctrl_len = salen;
sess->ctrl_ready = true; sess->ctrl_ready = true;
@ -642,15 +645,17 @@ static void parse_apple_midi_cmd_ok(struct impl *impl, bool ctrl, uint8_t *buffe
} }
if (ctrl) { if (ctrl) {
pw_log_info("got ctrl OK %08x %d", initiator, sess->data_ready); pw_log_info("got ctrl OK %08x %u", initiator, sess->data_ready);
sess->ctrl_ready = true; sess->ctrl_ready = true;
if (!sess->data_ready) if (!sess->data_ready)
send_apple_midi_cmd_in(sess, false); send_apple_midi_cmd_in(sess, false);
} else { } else {
pw_log_info("got data OK %08x, session established", initiator); pw_log_info("got data OK %08x %u, session established", initiator,
sess->ctrl_ready);
sess->remote_ssrc = ntohl(hdr->ssrc); sess->remote_ssrc = ntohl(hdr->ssrc);
sess->data_ready = true; sess->data_ready = true;
sess->state = SESSION_STATE_ESTABLISHED; if (sess->ctrl_ready)
sess->state = SESSION_STATE_ESTABLISHED;
} }
} }
@ -720,12 +725,15 @@ static void parse_apple_midi_cmd_by(struct impl *impl, bool ctrl, uint8_t *buffe
} }
if (ctrl) { if (ctrl) {
pw_log_info("got ctrl BY %08x %d", initiator, sess->data_ready); pw_log_info("%p: got ctrl BY %08x %u", sess, initiator, sess->data_ready);
sess->ctrl_ready = false; sess->ctrl_ready = false;
if (!sess->data_ready)
sess->state = SESSION_STATE_INIT;
} else { } else {
pw_log_info("got data BY %08x, session init", initiator); pw_log_info("%p: got data BY %08x %u", sess, initiator, sess->ctrl_ready);
sess->data_ready = false; sess->data_ready = false;
sess->state = SESSION_STATE_INIT; if (!sess->ctrl_ready)
sess->state = SESSION_STATE_INIT;
} }
} }