public void To(uint prefix, string dst, string number) { if (_State == FunctionState.Idle) { FunctionState st = FunctionState.Error; if (prefix == Cd40Cfg.INT_DST) { _To = new TlfIaPosition(prefix, dst); _To.Listen(); if (_To.State == TlfState.Out) { _To.TlfPosStateChanged += OnToMonitoringCallStateChanged; st = FunctionState.Executing; Top.WorkingThread.Enqueue("SetSnmp", delegate() { string snmpString = Top.Cfg.PositionId + "_" + "LISTEN" + "_" + _To.Number; General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString)); }); } } State = st; } }
public void To(int id) { if (_State == FunctionState.Idle) { Debug.Assert(id < Tlf.NumDestinations); TlfPosition to = Top.Tlf[id]; FunctionState st = FunctionState.Error; if (to.IsTop) { _To = new TlfIaPosition(to); _To.Listen(); if (_To.State == TlfState.Out) { _To.TlfPosStateChanged += OnToMonitoringCallStateChanged; st = FunctionState.Executing; Top.WorkingThread.Enqueue("SetSnmp", delegate() { string snmpString = Top.Cfg.PositionId + "_" + "LISTEN" + "_" + _To.Literal; General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString)); }); } } State = st; } }
public void To(uint prefix, string dst, string number) { _FirstTransferTryKO = false; _ToTransfer = null; _FromTransferDisplayName = ""; if (_State == FunctionState.Idle) { List <TlfPosition> activeCalls = Top.Tlf.ActiveCalls; FunctionState st = FunctionState.Error; if (activeCalls.Count == 1) { TlfPosition tlf = activeCalls[0]; if ((tlf.State == TlfState.Set) || (tlf.State == TlfState.Conf)) { using (TlfIaPosition to = new TlfIaPosition(prefix, dst)) { string toUri = to.Uri; if (TlfManager.GetDisplayName(to.Uri) == null && to.Literal.Length > 0) { //Si to.uri no tiene display name se añade el Literal como display name en la transferencia directa toUri = "\"" + to.Literal + "\" " + to.Uri; } SipAgent.TransferCall(tlf.CallId, -1, toUri, null); Top.Sip.TlfTransferStatus += OnTransferStatus; AssociateCall = tlf; st = FunctionState.Executing; Top.WorkingThread.Enqueue("SetSnmp", delegate() { string snmpString = Top.Cfg.PositionId + "_" + "TRANSFER" + "_" + tlf.Literal; General.SafeLaunchEvent(SetSnmpString, this, new SnmpStringMsg <string, string>(Settings.Default.TlfFacilityOid, snmpString)); }); } } } State = st; } }
private void OnFromMonitoringCallStateChanged(object sender) { TlfIaPosition from = (TlfIaPosition)sender; if (from.CallId == -1) { foreach (KeyValuePair <int, TlfIaPosition> p in _Froms) { if (p.Value == from) { from.TlfPosStateChanged -= OnFromMonitoringCallStateChanged; from.Dispose(); _Froms.Remove(p.Key); General.SafeLaunchEvent(RemoteListenChanged, this, new ListenPickUpMsg(FunctionState.Idle, from.Literal, p.Key)); break; } } } }
private void OnIncomingMonitoringCall(object sender, int call, CORESIP_CallInfo info, CORESIP_CallInInfo inInfo, CORESIP_Answer answer) { Debug.Assert(!_Froms.ContainsKey(call)); TlfIaPosition from = new TlfIaPosition(1000); int code = from.HandleIncomingCall(call, -1, info, inInfo); Debug.Assert(code == SipAgent.SIP_RINGING); if (!from.IsTop) { answer.Value = SipAgent.SIP_NOT_ACCEPTABLE_HERE; return; } answer.Value = 0; from.TlfPosStateChanged += OnFromMonitoringCallStateChanged; _Froms[call] = from; General.SafeLaunchEvent(RemoteListenChanged, this, new ListenPickUpMsg(FunctionState.Executing, from.Literal, call)); }