terminated rtp connection do not count as busy

This commit is contained in:
Daniel Gultsch 2020-04-24 09:41:54 +02:00
parent c0036b4ca6
commit 4f5415ecba
2 changed files with 17 additions and 10 deletions

View File

@ -122,6 +122,9 @@ public class JingleConnectionManager extends AbstractConnectionManager {
public boolean isBusy() { public boolean isBusy() {
for (AbstractJingleConnection connection : this.connections.values()) { for (AbstractJingleConnection connection : this.connections.values()) {
if (connection instanceof JingleRtpConnection) { if (connection instanceof JingleRtpConnection) {
if (((JingleRtpConnection) connection).isTerminated()) {
continue;
}
return true; return true;
} }
} }
@ -139,11 +142,11 @@ public class JingleConnectionManager extends AbstractConnectionManager {
return !contact.showInContactList(); return !contact.showInContactList();
} }
public ScheduledFuture<?> schedule(final Runnable runnable, final long delay, final TimeUnit timeUnit) { ScheduledFuture<?> schedule(final Runnable runnable, final long delay, final TimeUnit timeUnit) {
return this.scheduledExecutorService.schedule(runnable, delay, timeUnit); return this.scheduledExecutorService.schedule(runnable, delay, timeUnit);
} }
public void respondWithJingleError(final Account account, final IqPacket original, String jingleCondition, String condition, String conditionType) { void respondWithJingleError(final Account account, final IqPacket original, String jingleCondition, String condition, String conditionType) {
final IqPacket response = original.generateResponse(IqPacket.TYPE.ERROR); final IqPacket response = original.generateResponse(IqPacket.TYPE.ERROR);
final Element error = response.addChild("error"); final Element error = response.addChild("error");
error.setAttribute("type", conditionType); error.setAttribute("type", conditionType);

View File

@ -185,7 +185,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
@Override @Override
synchronized void notifyRebound() { synchronized void notifyRebound() {
if (TERMINATED.contains(this.state)) { if (isTerminated()) {
return; return;
} }
webRTCWrapper.close(); webRTCWrapper.close();
@ -398,7 +398,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
} }
private synchronized void sendSessionAccept(final Set<Media> media, final SessionDescription offer, final List<PeerConnection.IceServer> iceServers) { private synchronized void sendSessionAccept(final Set<Media> media, final SessionDescription offer, final List<PeerConnection.IceServer> iceServers) {
if (TERMINATED.contains(this.state)) { if (isTerminated()) {
Log.w(Config.LOGTAG, id.account.getJid().asBareJid() + ": ICE servers got discovered when session was already terminated. nothing to do."); Log.w(Config.LOGTAG, id.account.getJid().asBareJid() + ": ICE servers got discovered when session was already terminated. nothing to do.");
return; return;
} }
@ -617,7 +617,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
} }
private synchronized void sendSessionInitiate(final Set<Media> media, final State targetState, final List<PeerConnection.IceServer> iceServers) { private synchronized void sendSessionInitiate(final Set<Media> media, final State targetState, final List<PeerConnection.IceServer> iceServers) {
if (TERMINATED.contains(this.state)) { if (isTerminated()) {
Log.w(Config.LOGTAG, id.account.getJid().asBareJid() + ": ICE servers got discovered when session was already terminated. nothing to do."); Log.w(Config.LOGTAG, id.account.getJid().asBareJid() + ": ICE servers got discovered when session was already terminated. nothing to do.");
return; return;
} }
@ -689,7 +689,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
if (response.getType() == IqPacket.TYPE.ERROR) { if (response.getType() == IqPacket.TYPE.ERROR) {
final String errorCondition = response.getErrorCondition(); final String errorCondition = response.getErrorCondition();
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": received IQ-error from " + response.getFrom() + " in RTP session. " + errorCondition); Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": received IQ-error from " + response.getFrom() + " in RTP session. " + errorCondition);
if (TERMINATED.contains(this.state)) { if (isTerminated()) {
Log.i(Config.LOGTAG, id.account.getJid().asBareJid() + ": ignoring error because session was already terminated"); Log.i(Config.LOGTAG, id.account.getJid().asBareJid() + ": ignoring error because session was already terminated");
return; return;
} }
@ -709,7 +709,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
this.finish(); this.finish();
} else if (response.getType() == IqPacket.TYPE.TIMEOUT) { } else if (response.getType() == IqPacket.TYPE.TIMEOUT) {
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": received IQ timeout in RTP session with " + id.with + ". terminating with connectivity error"); Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": received IQ timeout in RTP session with " + id.with + ". terminating with connectivity error");
if (TERMINATED.contains(this.state)) { if (isTerminated()) {
Log.i(Config.LOGTAG, id.account.getJid().asBareJid() + ": ignoring error because session was already terminated"); Log.i(Config.LOGTAG, id.account.getJid().asBareJid() + ": ignoring error because session was already terminated");
return; return;
} }
@ -839,7 +839,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
} }
public synchronized void endCall() { public synchronized void endCall() {
if (TERMINATED.contains(this.state)) { if (isTerminated()) {
Log.w(Config.LOGTAG, id.account.getJid().asBareJid() + ": received endCall() when session has already been terminated. nothing to do"); Log.w(Config.LOGTAG, id.account.getJid().asBareJid() + ": received endCall() when session has already been terminated. nothing to do");
return; return;
} }
@ -977,7 +977,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
//TODO exact syntax is yet to be determined but transport-replace sounds like the most reasonable //TODO exact syntax is yet to be determined but transport-replace sounds like the most reasonable
//as there is no content-replace //as there is no content-replace
if (Arrays.asList(PeerConnection.PeerConnectionState.FAILED, PeerConnection.PeerConnectionState.DISCONNECTED).contains(newState)) { if (Arrays.asList(PeerConnection.PeerConnectionState.FAILED, PeerConnection.PeerConnectionState.DISCONNECTED).contains(newState)) {
if (TERMINATED.contains(this.state)) { if (isTerminated()) {
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": not sending session-terminate after connectivity error because session is already in state " + this.state); Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": not sending session-terminate after connectivity error because session is already in state " + this.state);
return; return;
} }
@ -990,7 +990,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
private void closeWebRTCSessionAfterFailedConnection() { private void closeWebRTCSessionAfterFailedConnection() {
this.webRTCWrapper.close(); this.webRTCWrapper.close();
synchronized (this) { synchronized (this) {
if (TERMINATED.contains(state)) { if (isTerminated()) {
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": no need to send session-terminate after failed connection. Other party already did"); Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": no need to send session-terminate after failed connection. Other party already did");
return; return;
} }
@ -1136,6 +1136,10 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
return this.state; return this.state;
} }
public boolean isTerminated() {
return TERMINATED.contains(this.state);
}
public Optional<VideoTrack> geLocalVideoTrack() { public Optional<VideoTrack> geLocalVideoTrack() {
return webRTCWrapper.getLocalVideoTrack(); return webRTCWrapper.getLocalVideoTrack();
} }