RtpConnection: synchronize all externally call methods to guard state transitions
This commit is contained in:
parent
172d2c693f
commit
65b43661dd
|
@ -45,6 +45,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
);
|
||||
|
||||
private static final List<State> TERMINATED = Arrays.asList(
|
||||
State.TERMINATED_SUCCESS,
|
||||
State.TERMINATED_DECLINED_OR_BUSY,
|
||||
State.TERMINATED_CONNECTIVITY_ERROR,
|
||||
State.TERMINATED_CANCEL_OR_TIMEOUT,
|
||||
|
@ -143,7 +144,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
}
|
||||
|
||||
@Override
|
||||
void deliverPacket(final JinglePacket jinglePacket) {
|
||||
synchronized void deliverPacket(final JinglePacket jinglePacket) {
|
||||
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": packet delivered to JingleRtpConnection");
|
||||
switch (jinglePacket.getAction()) {
|
||||
case SESSION_INITIATE:
|
||||
|
@ -166,7 +167,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
}
|
||||
|
||||
@Override
|
||||
void notifyRebound() {
|
||||
synchronized void notifyRebound() {
|
||||
if (TERMINATED.contains(this.state)) {
|
||||
return;
|
||||
}
|
||||
|
@ -353,7 +354,11 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
discoverIceServers(iceServers -> sendSessionAccept(offer,iceServers));
|
||||
}
|
||||
|
||||
private void sendSessionAccept(final SessionDescription offer, final List<PeerConnection.IceServer> iceServers) {
|
||||
private synchronized void sendSessionAccept(final SessionDescription offer, final List<PeerConnection.IceServer> iceServers) {
|
||||
if (TERMINATED.contains(this.state)) {
|
||||
Log.w(Config.LOGTAG,id.account.getJid().asBareJid()+": ICE servers got discovered when session was already terminated. nothing to do.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
setupWebRTC(iceServers);
|
||||
} catch (WebRTCWrapper.InitializationException e) {
|
||||
|
@ -394,7 +399,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
send(sessionAccept);
|
||||
}
|
||||
|
||||
void deliveryMessage(final Jid from, final Element message, final String serverMessageId, final long timestamp) {
|
||||
synchronized void deliveryMessage(final Jid from, final Element message, final String serverMessageId, final long timestamp) {
|
||||
Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": delivered message to JingleRtpConnection " + message);
|
||||
switch (message.getName()) {
|
||||
case "propose":
|
||||
|
@ -537,7 +542,11 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
discoverIceServers(iceServers -> sendSessionInitiate(targetState, iceServers));
|
||||
}
|
||||
|
||||
private void sendSessionInitiate(final State targetState, final List<PeerConnection.IceServer> iceServers) {
|
||||
private synchronized void sendSessionInitiate(final State targetState, final List<PeerConnection.IceServer> iceServers) {
|
||||
if (TERMINATED.contains(this.state)) {
|
||||
Log.w(Config.LOGTAG,id.account.getJid().asBareJid()+": ICE servers got discovered when session was already terminated. nothing to do.");
|
||||
return;
|
||||
}
|
||||
try {
|
||||
setupWebRTC(iceServers);
|
||||
} catch (WebRTCWrapper.InitializationException e) {
|
||||
|
@ -701,7 +710,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
}
|
||||
|
||||
|
||||
public void acceptCall() {
|
||||
public synchronized void acceptCall() {
|
||||
switch (this.state) {
|
||||
case PROPOSED:
|
||||
acceptCallFromProposed();
|
||||
|
@ -714,7 +723,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
}
|
||||
}
|
||||
|
||||
public void rejectCall() {
|
||||
public synchronized void rejectCall() {
|
||||
switch (this.state) {
|
||||
case PROPOSED:
|
||||
rejectCallFromProposed();
|
||||
|
@ -727,7 +736,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web
|
|||
}
|
||||
}
|
||||
|
||||
public void endCall() {
|
||||
public synchronized void endCall() {
|
||||
if (isInState(State.PROPOSED) && !isInitiator()) {
|
||||
rejectCallFromProposed();
|
||||
return;
|
||||
|
|
Loading…
Reference in a new issue