diff options
-rw-r--r-- | voip/java/android/net/sip/SipAudioCall.java | 20 | ||||
-rw-r--r-- | voip/java/android/net/sip/SipManager.java | 16 |
2 files changed, 31 insertions, 5 deletions
diff --git a/voip/java/android/net/sip/SipAudioCall.java b/voip/java/android/net/sip/SipAudioCall.java index 51236fe..ce18ec5 100644 --- a/voip/java/android/net/sip/SipAudioCall.java +++ b/voip/java/android/net/sip/SipAudioCall.java @@ -519,10 +519,15 @@ public class SipAudioCall { * @param session the session that receives the incoming call * @param sessionDescription the session description of the incoming call * @throws SipException if the SIP service fails to attach this object to - * the session + * the session or VOIP API is not supported by the device + * @see SipManager#isVoipSupported */ public void attachCall(SipSession session, String sessionDescription) throws SipException { + if (!SipManager.isVoipSupported(mContext)) { + throw new SipException("VOIP API is not supported"); + } + synchronized (this) { mSipSession = session; mPeerSd = sessionDescription; @@ -548,10 +553,15 @@ public class SipAudioCall { * SIP protocol) is used if {@code timeout} is zero or negative. * @see Listener#onError * @throws SipException if the SIP service fails to create a session for the - * call + * call or VOIP API is not supported by the device + * @see SipManager#isVoipSupported */ public void makeCall(SipProfile peerProfile, SipSession sipSession, int timeout) throws SipException { + if (!SipManager.isVoipSupported(mContext)) { + throw new SipException("VOIP API is not supported"); + } + synchronized (this) { mSipSession = sipSession; try { @@ -595,6 +605,9 @@ public class SipAudioCall { public void holdCall(int timeout) throws SipException { synchronized (this) { if (mHold) return; + if (mSipSession == null) { + throw new SipException("Not in a call to hold call"); + } mSipSession.changeCall(createHoldOffer().encode(), timeout); mHold = true; setAudioGroupMode(); @@ -614,6 +627,9 @@ public class SipAudioCall { */ public void answerCall(int timeout) throws SipException { synchronized (this) { + if (mSipSession == null) { + throw new SipException("No call to answer"); + } try { mAudioStream = new AudioStream(InetAddress.getByName( getLocalIp())); diff --git a/voip/java/android/net/sip/SipManager.java b/voip/java/android/net/sip/SipManager.java index 2e38662..dce46fe 100644 --- a/voip/java/android/net/sip/SipManager.java +++ b/voip/java/android/net/sip/SipManager.java @@ -133,7 +133,7 @@ public class SipManager { } /** - * Returns true if the system supports SIP-based VoIP. + * Returns true if the system supports SIP-based VOIP API. */ public static boolean isVoipSupported(Context context) { return context.getPackageManager().hasSystemFeature( @@ -305,12 +305,17 @@ public class SipManager { * @param timeout the timeout value in seconds. Default value (defined by * SIP protocol) is used if {@code timeout} is zero or negative. * @return a {@link SipAudioCall} object - * @throws SipException if calling the SIP service results in an error + * @throws SipException if calling the SIP service results in an error or + * VOIP API is not supported by the device * @see SipAudioCall.Listener#onError + * @see #isVoipSupported */ public SipAudioCall makeAudioCall(SipProfile localProfile, SipProfile peerProfile, SipAudioCall.Listener listener, int timeout) throws SipException { + if (!isVoipSupported(mContext)) { + throw new SipException("VOIP API is not supported"); + } SipAudioCall call = new SipAudioCall(mContext, localProfile); call.setListener(listener); SipSession s = createSipSession(localProfile, null); @@ -332,12 +337,17 @@ public class SipManager { * @param timeout the timeout value in seconds. Default value (defined by * SIP protocol) is used if {@code timeout} is zero or negative. * @return a {@link SipAudioCall} object - * @throws SipException if calling the SIP service results in an error + * @throws SipException if calling the SIP service results in an error or + * VOIP API is not supported by the device * @see SipAudioCall.Listener#onError + * @see #isVoipSupported */ public SipAudioCall makeAudioCall(String localProfileUri, String peerProfileUri, SipAudioCall.Listener listener, int timeout) throws SipException { + if (!isVoipSupported(mContext)) { + throw new SipException("VOIP API is not supported"); + } try { return makeAudioCall( new SipProfile.Builder(localProfileUri).build(), |