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( |     private static final List<State> TERMINATED = Arrays.asList( | ||||||
|  |             State.TERMINATED_SUCCESS, | ||||||
|             State.TERMINATED_DECLINED_OR_BUSY, |             State.TERMINATED_DECLINED_OR_BUSY, | ||||||
|             State.TERMINATED_CONNECTIVITY_ERROR, |             State.TERMINATED_CONNECTIVITY_ERROR, | ||||||
|             State.TERMINATED_CANCEL_OR_TIMEOUT, |             State.TERMINATED_CANCEL_OR_TIMEOUT, | ||||||
|  | @ -143,7 +144,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     void deliverPacket(final JinglePacket jinglePacket) { |     synchronized void deliverPacket(final JinglePacket jinglePacket) { | ||||||
|         Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": packet delivered to JingleRtpConnection"); |         Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": packet delivered to JingleRtpConnection"); | ||||||
|         switch (jinglePacket.getAction()) { |         switch (jinglePacket.getAction()) { | ||||||
|             case SESSION_INITIATE: |             case SESSION_INITIATE: | ||||||
|  | @ -166,7 +167,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     void notifyRebound() { |     synchronized void notifyRebound() { | ||||||
|         if (TERMINATED.contains(this.state)) { |         if (TERMINATED.contains(this.state)) { | ||||||
|             return; |             return; | ||||||
|         } |         } | ||||||
|  | @ -353,7 +354,11 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web | ||||||
|         discoverIceServers(iceServers -> sendSessionAccept(offer,iceServers)); |         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 { |         try { | ||||||
|             setupWebRTC(iceServers); |             setupWebRTC(iceServers); | ||||||
|         } catch (WebRTCWrapper.InitializationException e) { |         } catch (WebRTCWrapper.InitializationException e) { | ||||||
|  | @ -394,7 +399,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web | ||||||
|         send(sessionAccept); |         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); |         Log.d(Config.LOGTAG, id.account.getJid().asBareJid() + ": delivered message to JingleRtpConnection " + message); | ||||||
|         switch (message.getName()) { |         switch (message.getName()) { | ||||||
|             case "propose": |             case "propose": | ||||||
|  | @ -537,7 +542,11 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web | ||||||
|         discoverIceServers(iceServers -> sendSessionInitiate(targetState, iceServers)); |         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 { |         try { | ||||||
|             setupWebRTC(iceServers); |             setupWebRTC(iceServers); | ||||||
|         } catch (WebRTCWrapper.InitializationException e) { |         } 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) { |         switch (this.state) { | ||||||
|             case PROPOSED: |             case PROPOSED: | ||||||
|                 acceptCallFromProposed(); |                 acceptCallFromProposed(); | ||||||
|  | @ -714,7 +723,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void rejectCall() { |     public synchronized void rejectCall() { | ||||||
|         switch (this.state) { |         switch (this.state) { | ||||||
|             case PROPOSED: |             case PROPOSED: | ||||||
|                 rejectCallFromProposed(); |                 rejectCallFromProposed(); | ||||||
|  | @ -727,7 +736,7 @@ public class JingleRtpConnection extends AbstractJingleConnection implements Web | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void endCall() { |     public synchronized void endCall() { | ||||||
|         if (isInState(State.PROPOSED) && !isInitiator()) { |         if (isInState(State.PROPOSED) && !isInitiator()) { | ||||||
|             rejectCallFromProposed(); |             rejectCallFromProposed(); | ||||||
|             return; |             return; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Daniel Gultsch
						Daniel Gultsch