Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 91e8659a authored by Wink Saville's avatar Wink Saville
Browse files

Add debug and some cleanup

Change-Id: I866676a1ec4a338dcfe089cbf0483e5e546ded85
parent 0d7ddce1
Loading
Loading
Loading
Loading
+56 −39
Original line number Diff line number Diff line
@@ -25,17 +25,11 @@ import android.net.rtp.RtpStream;
import android.net.sip.SimpleSessionDescription.Media;
import android.net.wifi.WifiManager;
import android.os.Message;
import android.os.RemoteException;
import android.telephony.Rlog;
import android.text.TextUtils;
import android.util.Log;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Handles an Internet audio call over SIP. You can instantiate this class with {@link SipManager},
@@ -60,7 +54,8 @@ import java.util.Map;
 * </div>
 */
public class SipAudioCall {
    private static final String TAG = SipAudioCall.class.getSimpleName();
    private static final String LOG_TAG = SipAudioCall.class.getSimpleName();
    private static final boolean DBG = true;
    private static final boolean RELEASE_SOCKET = true;
    private static final boolean DONT_RELEASE_SOCKET = false;
    private static final int SESSION_TIMEOUT = 5; // in seconds
@@ -191,7 +186,6 @@ public class SipAudioCall {
    private boolean mMuted = false;
    private boolean mHold = false;

    private SipProfile mPendingCallRequest;
    private WifiManager mWm;
    private WifiManager.WifiLock mWifiHighPerfLock;

@@ -261,7 +255,7 @@ public class SipAudioCall {
                }
            }
        } catch (Throwable t) {
            Log.e(TAG, "setListener()", t);
            loge("setListener()", t);
        }
    }

@@ -371,7 +365,7 @@ public class SipAudioCall {
                mAudioStream = new AudioStream(InetAddress.getByName(
                        getLocalIp()));
            } catch (Throwable t) {
                Log.i(TAG, "transferToNewSession(): " + t);
                loge("transferToNewSession():", t);
            }
        }
        if (origin != null) origin.endCall();
@@ -382,26 +376,26 @@ public class SipAudioCall {
        return new SipSession.Listener() {
            @Override
            public void onCalling(SipSession session) {
                Log.d(TAG, "calling... " + session);
                if (DBG) log("onCalling: session=" + session);
                Listener listener = mListener;
                if (listener != null) {
                    try {
                        listener.onCalling(SipAudioCall.this);
                    } catch (Throwable t) {
                        Log.i(TAG, "onCalling(): " + t);
                        loge("onCalling():", t);
                    }
                }
            }

            @Override
            public void onRingingBack(SipSession session) {
                Log.d(TAG, "sip call ringing back: " + session);
                if (DBG) log("onRingingBackk: " + session);
                Listener listener = mListener;
                if (listener != null) {
                    try {
                        listener.onRingingBack(SipAudioCall.this);
                    } catch (Throwable t) {
                        Log.i(TAG, "onRingingBack(): " + t);
                        loge("onRingingBack():", t);
                    }
                }
            }
@@ -424,7 +418,7 @@ public class SipAudioCall {
                        String answer = createAnswer(sessionDescription).encode();
                        mSipSession.answerCall(answer, SESSION_TIMEOUT);
                    } catch (Throwable e) {
                        Log.e(TAG, "onRinging()", e);
                        loge("onRinging():", e);
                        session.endCall();
                    }
                }
@@ -434,7 +428,7 @@ public class SipAudioCall {
            public void onCallEstablished(SipSession session,
                    String sessionDescription) {
                mPeerSd = sessionDescription;
                Log.v(TAG, "onCallEstablished()" + mPeerSd);
                if (DBG) log("onCallEstablished(): " + mPeerSd);

                // TODO: how to notify the UI that the remote party is changed
                if ((mTransferringSession != null)
@@ -452,14 +446,14 @@ public class SipAudioCall {
                            listener.onCallEstablished(SipAudioCall.this);
                        }
                    } catch (Throwable t) {
                        Log.i(TAG, "onCallEstablished(): " + t);
                        loge("onCallEstablished(): ", t);
                    }
                }
            }

            @Override
            public void onCallEnded(SipSession session) {
                Log.d(TAG, "sip call ended: " + session + " mSipSession:" + mSipSession);
                if (DBG) log("onCallEnded: " + session + " mSipSession:" + mSipSession);
                // reset the trasnferring session if it is the one.
                if (session == mTransferringSession) {
                    mTransferringSession = null;
@@ -475,7 +469,7 @@ public class SipAudioCall {
                    try {
                        listener.onCallEnded(SipAudioCall.this);
                    } catch (Throwable t) {
                        Log.i(TAG, "onCallEnded(): " + t);
                        loge("onCallEnded(): ", t);
                    }
                }
                close();
@@ -483,13 +477,13 @@ public class SipAudioCall {

            @Override
            public void onCallBusy(SipSession session) {
                Log.d(TAG, "sip call busy: " + session);
                if (DBG) log("onCallBusy: " + session);
                Listener listener = mListener;
                if (listener != null) {
                    try {
                        listener.onCallBusy(SipAudioCall.this);
                    } catch (Throwable t) {
                        Log.i(TAG, "onCallBusy(): " + t);
                        loge("onCallBusy(): ", t);
                    }
                }
                close(false);
@@ -498,7 +492,7 @@ public class SipAudioCall {
            @Override
            public void onCallChangeFailed(SipSession session, int errorCode,
                    String message) {
                Log.d(TAG, "sip call change failed: " + message);
                if (DBG) log("onCallChangedFailed: " + message);
                mErrorCode = errorCode;
                mErrorMessage = message;
                Listener listener = mListener;
@@ -507,7 +501,7 @@ public class SipAudioCall {
                        listener.onError(SipAudioCall.this, mErrorCode,
                                message);
                    } catch (Throwable t) {
                        Log.i(TAG, "onCallBusy(): " + t);
                        loge("onCallBusy():", t);
                    }
                }
            }
@@ -542,8 +536,8 @@ public class SipAudioCall {
            @Override
            public void onCallTransferring(SipSession newSession,
                    String sessionDescription) {
                Log.v(TAG, "onCallTransferring mSipSession:"
                        + mSipSession + " newSession:" + newSession);
                if (DBG) log("onCallTransferring: mSipSession="
                        + mSipSession + " newSession=" + newSession);
                mTransferringSession = newSession;
                try {
                    if (sessionDescription == null) {
@@ -554,7 +548,7 @@ public class SipAudioCall {
                        newSession.answerCall(answer, SESSION_TIMEOUT);
                    }
                } catch (Throwable e) {
                    Log.e(TAG, "onCallTransferring()", e);
                    loge("onCallTransferring()", e);
                    newSession.endCall();
                }
            }
@@ -562,7 +556,7 @@ public class SipAudioCall {
    }

    private void onError(int errorCode, String message) {
        Log.d(TAG, "sip session error: "
        if (DBG) log("onError: "
                + SipErrorCode.toString(errorCode) + ": " + message);
        mErrorCode = errorCode;
        mErrorMessage = message;
@@ -571,7 +565,7 @@ public class SipAudioCall {
            try {
                listener.onError(this, errorCode, message);
            } catch (Throwable t) {
                Log.i(TAG, "onError(): " + t);
                loge("onError():", t);
            }
        }
        synchronized (this) {
@@ -600,11 +594,11 @@ public class SipAudioCall {
        synchronized (this) {
            mSipSession = session;
            mPeerSd = sessionDescription;
            Log.v(TAG, "attachCall()" + mPeerSd);
            if (DBG) log("attachCall(): " + mPeerSd);
            try {
                session.setListener(createListener());
            } catch (Throwable e) {
                Log.e(TAG, "attachCall()", e);
                loge("attachCall()", e);
                throwSipException(e);
            }
        }
@@ -627,6 +621,7 @@ public class SipAudioCall {
     */
    public void makeCall(SipProfile peerProfile, SipSession sipSession,
            int timeout) throws SipException {
        if (DBG) log("makeCall: " + peerProfile + " session=" + sipSession + " timeout=" + timeout);
        if (!SipManager.isVoipSupported(mContext)) {
            throw new SipException("VOIP API is not supported");
        }
@@ -640,6 +635,7 @@ public class SipAudioCall {
                sipSession.makeCall(peerProfile, createOffer().encode(),
                        timeout);
            } catch (IOException e) {
                loge("makeCall:", e);
                throw new SipException("makeCall()", e);
            }
        }
@@ -650,6 +646,7 @@ public class SipAudioCall {
     * @throws SipException if the SIP service fails to end the call
     */
    public void endCall() throws SipException {
        if (DBG) log("endCall: mSipSession" + mSipSession);
        synchronized (this) {
            stopCall(RELEASE_SOCKET);
            mInCall = false;
@@ -672,9 +669,11 @@ public class SipAudioCall {
     * @throws SipException if the SIP service fails to hold the call
     */
    public void holdCall(int timeout) throws SipException {
        if (DBG) log("holdCall: mSipSession" + mSipSession + " timeout=" + timeout);
        synchronized (this) {
            if (mHold) return;
            if (mSipSession == null) {
                loge("holdCall:");
                throw new SipException("Not in a call to hold call");
            }
            mSipSession.changeCall(createHoldOffer().encode(), timeout);
@@ -695,6 +694,7 @@ public class SipAudioCall {
     * @throws SipException if the SIP service fails to answer the call
     */
    public void answerCall(int timeout) throws SipException {
        if (DBG) log("answerCall: mSipSession" + mSipSession + " timeout=" + timeout);
        synchronized (this) {
            if (mSipSession == null) {
                throw new SipException("No call to answer");
@@ -704,6 +704,7 @@ public class SipAudioCall {
                        getLocalIp()));
                mSipSession.answerCall(createAnswer(mPeerSd).encode(), timeout);
            } catch (IOException e) {
                loge("answerCall:", e);
                throw new SipException("answerCall()", e);
            }
        }
@@ -722,6 +723,7 @@ public class SipAudioCall {
     * @throws SipException if the SIP service fails to unhold the call
     */
    public void continueCall(int timeout) throws SipException {
        if (DBG) log("continueCall: mSipSession" + mSipSession + " timeout=" + timeout);
        synchronized (this) {
            if (!mHold) return;
            mSipSession.changeCall(createContinueOffer().encode(), timeout);
@@ -740,6 +742,7 @@ public class SipAudioCall {
            media.setRtpPayload(codec.type, codec.rtpmap, codec.fmtp);
        }
        media.setRtpPayload(127, "telephone-event/8000", "0-15");
        if (DBG) log("createOffer: offer=" + offer);
        return offer;
    }

@@ -798,18 +801,22 @@ public class SipAudioCall {
            }
        }
        if (codec == null) {
            loge("createAnswer: no suitable codes");
            throw new IllegalStateException("Reject SDP: no suitable codecs");
        }
        if (DBG) log("createAnswer: answer=" + answer);
        return answer;
    }

    private SimpleSessionDescription createHoldOffer() {
        SimpleSessionDescription offer = createContinueOffer();
        offer.setAttribute("sendonly", "");
        if (DBG) log("createHoldOffer: offer=" + offer);
        return offer;
    }

    private SimpleSessionDescription createContinueOffer() {
        if (DBG) log("createContinueOffer");
        SimpleSessionDescription offer =
                new SimpleSessionDescription(mSessionId, getLocalIp());
        Media media = offer.newMedia(
@@ -825,17 +832,17 @@ public class SipAudioCall {

    private void grabWifiHighPerfLock() {
        if (mWifiHighPerfLock == null) {
            Log.v(TAG, "acquire wifi high perf lock");
            if (DBG) log("grabWifiHighPerfLock:");
            mWifiHighPerfLock = ((WifiManager)
                    mContext.getSystemService(Context.WIFI_SERVICE))
                    .createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, TAG);
                    .createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, LOG_TAG);
            mWifiHighPerfLock.acquire();
        }
    }

    private void releaseWifiHighPerfLock() {
        if (mWifiHighPerfLock != null) {
            Log.v(TAG, "release wifi high perf lock");
            if (DBG) log("releaseWifiHighPerfLock:");
            mWifiHighPerfLock.release();
            mWifiHighPerfLock = null;
        }
@@ -912,7 +919,7 @@ public class SipAudioCall {
            AudioGroup audioGroup = getAudioGroup();
            if ((audioGroup != null) && (mSipSession != null)
                    && (SipSession.State.IN_CALL == getState())) {
                Log.v(TAG, "send DTMF: " + code);
                if (DBG) log("sendDtmf: code=" + code + " result=" + result);
                audioGroup.sendDtmf(code);
            }
            if (result != null) result.sendToTarget();
@@ -971,6 +978,7 @@ public class SipAudioCall {
     */
    public void setAudioGroup(AudioGroup group) {
        synchronized (this) {
            if (DBG) log("setAudioGroup: group=" + group);
            if ((mAudioStream != null) && (mAudioStream.getGroup() != null)) {
                mAudioStream.join(group);
            }
@@ -997,8 +1005,8 @@ public class SipAudioCall {
    }

    private synchronized void startAudioInternal() throws UnknownHostException {
        if (DBG) loge("startAudioInternal: mPeerSd=" + mPeerSd);
        if (mPeerSd == null) {
            Log.v(TAG, "startAudioInternal() mPeerSd = null");
            throw new IllegalStateException("mPeerSd = null");
        }

@@ -1082,6 +1090,7 @@ public class SipAudioCall {
    // set audio group mode based on current audio configuration
    private void setAudioGroupMode() {
        AudioGroup audioGroup = getAudioGroup();
        if (DBG) log("setAudioGroupMode: audioGroup=" + audioGroup);
        if (audioGroup != null) {
            if (mHold) {
                audioGroup.setMode(AudioGroup.MODE_ON_HOLD);
@@ -1096,7 +1105,7 @@ public class SipAudioCall {
    }

    private void stopCall(boolean releaseSocket) {
        Log.d(TAG, "stop audiocall");
        if (DBG) log("stopCall: releaseSocket=" + releaseSocket);
        releaseWifiHighPerfLock();
        if (mAudioStream != null) {
            mAudioStream.join(null);
@@ -1120,7 +1129,15 @@ public class SipAudioCall {
        }
    }

    private SipProfile getPeerProfile(SipSession session) {
        return session.getPeerProfile();
    private void log(String s) {
        Rlog.d(LOG_TAG, s);
    }

    private void loge(String s) {
        Rlog.e(LOG_TAG, s);
    }

    private void loge(String s, Throwable t) {
        Rlog.e(LOG_TAG, s, t);
    }
}
+2 −3
Original line number Diff line number Diff line
@@ -21,10 +21,9 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
import android.telephony.Rlog;

import java.text.ParseException;

@@ -591,7 +590,7 @@ public class SipManager {
                        : session.getLocalProfile().getUriString());
            } catch (Throwable e) {
                // SipService died? SIP stack died?
                Log.w(TAG, "getUri(): " + e);
                Rlog.e(TAG, "getUri(): ", e);
                return null;
            }
        }
+31 −14
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package android.net.sip;

import android.os.RemoteException;
import android.util.Log;
import android.telephony.Rlog;

/**
 * Represents a SIP session that is associated with a SIP dialog or a standalone
@@ -242,7 +242,7 @@ public final class SipSession {
            try {
                realSession.setListener(createListener());
            } catch (RemoteException e) {
                Log.e(TAG, "SipSession.setListener(): " + e);
                loge("SipSession.setListener:", e);
            }
        }
    }
@@ -261,7 +261,7 @@ public final class SipSession {
        try {
            return mSession.getLocalIp();
        } catch (RemoteException e) {
            Log.e(TAG, "getLocalIp(): " + e);
            loge("getLocalIp:", e);
            return "127.0.0.1";
        }
    }
@@ -275,7 +275,7 @@ public final class SipSession {
        try {
            return mSession.getLocalProfile();
        } catch (RemoteException e) {
            Log.e(TAG, "getLocalProfile(): " + e);
            loge("getLocalProfile:", e);
            return null;
        }
    }
@@ -290,7 +290,7 @@ public final class SipSession {
        try {
            return mSession.getPeerProfile();
        } catch (RemoteException e) {
            Log.e(TAG, "getPeerProfile(): " + e);
            loge("getPeerProfile:", e);
            return null;
        }
    }
@@ -305,7 +305,7 @@ public final class SipSession {
        try {
            return mSession.getState();
        } catch (RemoteException e) {
            Log.e(TAG, "getState(): " + e);
            loge("getState:", e);
            return State.NOT_DEFINED;
        }
    }
@@ -319,7 +319,7 @@ public final class SipSession {
        try {
            return mSession.isInCall();
        } catch (RemoteException e) {
            Log.e(TAG, "isInCall(): " + e);
            loge("isInCall:", e);
            return false;
        }
    }
@@ -333,7 +333,7 @@ public final class SipSession {
        try {
            return mSession.getCallId();
        } catch (RemoteException e) {
            Log.e(TAG, "getCallId(): " + e);
            loge("getCallId:", e);
            return null;
        }
    }
@@ -364,7 +364,7 @@ public final class SipSession {
        try {
            mSession.register(duration);
        } catch (RemoteException e) {
            Log.e(TAG, "register(): " + e);
            loge("register:", e);
        }
    }

@@ -381,7 +381,7 @@ public final class SipSession {
        try {
            mSession.unregister();
        } catch (RemoteException e) {
            Log.e(TAG, "unregister(): " + e);
            loge("unregister:", e);
        }
    }

@@ -402,7 +402,7 @@ public final class SipSession {
        try {
            mSession.makeCall(callee, sessionDescription, timeout);
        } catch (RemoteException e) {
            Log.e(TAG, "makeCall(): " + e);
            loge("makeCall:", e);
        }
    }

@@ -420,7 +420,7 @@ public final class SipSession {
        try {
            mSession.answerCall(sessionDescription, timeout);
        } catch (RemoteException e) {
            Log.e(TAG, "answerCall(): " + e);
            loge("answerCall:", e);
        }
    }

@@ -436,7 +436,7 @@ public final class SipSession {
        try {
            mSession.endCall();
        } catch (RemoteException e) {
            Log.e(TAG, "endCall(): " + e);
            loge("endCall:", e);
        }
    }

@@ -453,7 +453,7 @@ public final class SipSession {
        try {
            mSession.changeCall(sessionDescription, timeout);
        } catch (RemoteException e) {
            Log.e(TAG, "changeCall(): " + e);
            loge("changeCall:", e);
        }
    }

@@ -463,12 +463,14 @@ public final class SipSession {

    private ISipSessionListener createListener() {
        return new ISipSessionListener.Stub() {
            @Override
            public void onCalling(ISipSession session) {
                if (mListener != null) {
                    mListener.onCalling(SipSession.this);
                }
            }

            @Override
            public void onRinging(ISipSession session, SipProfile caller,
                    String sessionDescription) {
                if (mListener != null) {
@@ -477,12 +479,14 @@ public final class SipSession {
                }
            }

            @Override
            public void onRingingBack(ISipSession session) {
                if (mListener != null) {
                    mListener.onRingingBack(SipSession.this);
                }
            }

            @Override
            public void onCallEstablished(ISipSession session,
                    String sessionDescription) {
                if (mListener != null) {
@@ -491,18 +495,21 @@ public final class SipSession {
                }
            }

            @Override
            public void onCallEnded(ISipSession session) {
                if (mListener != null) {
                    mListener.onCallEnded(SipSession.this);
                }
            }

            @Override
            public void onCallBusy(ISipSession session) {
                if (mListener != null) {
                    mListener.onCallBusy(SipSession.this);
                }
            }

            @Override
            public void onCallTransferring(ISipSession session,
                    String sessionDescription) {
                if (mListener != null) {
@@ -513,6 +520,7 @@ public final class SipSession {
                }
            }

            @Override
            public void onCallChangeFailed(ISipSession session, int errorCode,
                    String message) {
                if (mListener != null) {
@@ -521,24 +529,28 @@ public final class SipSession {
                }
            }

            @Override
            public void onError(ISipSession session, int errorCode, String message) {
                if (mListener != null) {
                    mListener.onError(SipSession.this, errorCode, message);
                }
            }

            @Override
            public void onRegistering(ISipSession session) {
                if (mListener != null) {
                    mListener.onRegistering(SipSession.this);
                }
            }

            @Override
            public void onRegistrationDone(ISipSession session, int duration) {
                if (mListener != null) {
                    mListener.onRegistrationDone(SipSession.this, duration);
                }
            }

            @Override
            public void onRegistrationFailed(ISipSession session, int errorCode,
                    String message) {
                if (mListener != null) {
@@ -547,6 +559,7 @@ public final class SipSession {
                }
            }

            @Override
            public void onRegistrationTimeout(ISipSession session) {
                if (mListener != null) {
                    mListener.onRegistrationTimeout(SipSession.this);
@@ -554,4 +567,8 @@ public final class SipSession {
            }
        };
    }

    private void loge(String s, Throwable t) {
        Rlog.e(TAG, s, t);
    }
}
+21 −19

File changed.

Preview size limit exceeded, changes collapsed.

+165 −106

File changed.

Preview size limit exceeded, changes collapsed.

Loading