Example #1
0
        public Call bridge(Call call)
        {
            if (call == this)
            {
                return(this);
            }

            lock (locker)
            {
                if (State.In(pjsip_inv_state.PJSIP_INV_STATE_NULL, pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED))
                {
                    return(this);
                }

                if (call.State.In(pjsip_inv_state.PJSIP_INV_STATE_NULL, pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED))
                {
                    return(this);
                }

                if (!BridgedCalls.ContainsKey(call.ID))
                {
                    BridgedCalls.Add(call.ID, call);
                }

                if (!call.BridgedCalls.ContainsKey(ID))
                {
                    call.BridgedCalls.Add(ID, this);
                }

                var call1 = getAudioMedia();
                var call2 = call.getAudioMedia();

                if (call1 == null || call2 == null)
                {
                    return(this);
                }

                call.CallStateChange += Call_BridgedCallDisconnected;
                CallStateChange      += Call_BridgedCallDisconnected;

                call1.startTransmit(call2);
                call2.startTransmit(call1);

                return(this);
            }
        }