Example #1
0
        private void Call_BridgedCallDisconnected(object sender, CallStateEventArgs e)
        {
            //lock (locker)
            {
                if (LastState.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL) == false ||
                    State.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL) == false)
                {
                    return;
                }

                e.Call.CallStateChange -= Call_BridgedCallDisconnected;

                if (!BridgedCalls.ContainsKey(e.Call.ID))
                {
                    BridgedCalls.Remove(e.Call.ID);
                }

                if (LastState.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL) ||
                    State.In(pjsip_inv_state.PJSIP_INV_STATE_DISCONNECTED, pjsip_inv_state.PJSIP_INV_STATE_NULL))
                {
                    return;
                }

                if (!e.Call.BridgedCalls.ContainsKey(ID))
                {
                    e.Call.BridgedCalls.Remove(ID);
                }
            }
        }
Example #2
0
        public Call unbridge(Call call)
        {
            if (call == this)
            {
                return(this);
            }

            lock (locker)
            {
                if (!BridgedCalls.ContainsKey(call.ID))
                {
                    BridgedCalls.Remove(call.ID);
                }

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

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

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

                call1.stopTransmit(call2);
                call2.stopTransmit(call1);

                return(this);
            }
        }
Example #3
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);
            }
        }