public GoogleVoiceUserAgent( SIPTransport sipTransport, ISIPCallManager callManager, SIPMonitorLogDelegate logDelegate, string username, string adminMemberId, SIPEndPoint outboundProxy) { Owner = username; AdminMemberId = adminMemberId; m_googleVoiceCall = new GoogleVoiceCall(sipTransport, callManager, logDelegate, username, adminMemberId, outboundProxy); m_googleVoiceCall.CallProgress += new CallProgressDelegate(CallProgress); }
public GoogleVoiceUserAgent( SIPTransport sipTransport, ISIPCallManager callManager, SIPMonitorLogDelegate logDelegate, string username, string adminMemberId, SIPEndPoint outboundProxy) { Owner = username; AdminMemberId = adminMemberId; Log_External = logDelegate; m_googleVoiceCall = new GoogleVoiceCall(sipTransport, callManager, logDelegate, username, adminMemberId, outboundProxy); m_googleVoiceCall.CallProgress += new CallProgressDelegate(CallProgress); }
public void GoogleVoiceCall(string emailAddress, string password, string forwardingNumber, string destinationNumber, string fromURIUserToMatch, int phoneType, int waitForCallbackTimeout) { try { DateTime startTime = DateTime.Now; ExtendScriptTimeout(DEFAULT_CREATECALL_RINGTIME); GoogleVoiceCall googleCall = new GoogleVoiceCall(m_sipTransport, m_callManager, m_dialPlanLogDelegate, m_username, m_adminMemberId, m_outboundProxySocket); m_dialPlanContext.CallCancelledByClient += googleCall.ClientCallTerminated; googleCall.CallProgress += m_dialPlanContext.CallProgress; string content = m_sipRequest.Body; IPAddress requestSDPAddress = (PublicIPAddress != null) ? PublicIPAddress : SIPPacketMangler.GetRequestIPAddress(m_sipRequest); IPEndPoint sdpEndPoint = (content.IsNullOrBlank()) ? null : SDP.GetSDPRTPEndPoint(content); if (sdpEndPoint != null) { if (!IPSocket.IsPrivateAddress(sdpEndPoint.Address.ToString())) { Log("SDP on GoogleVoiceCall call had public IP not mangled, RTP socket " + sdpEndPoint.ToString() + "."); } else { bool wasSDPMangled = false; if (requestSDPAddress != null) { if (sdpEndPoint != null) { content = SIPPacketMangler.MangleSDP(content, requestSDPAddress.ToString(), out wasSDPMangled); } } if (wasSDPMangled) { Log("SDP on GoogleVoiceCall call had RTP socket mangled from " + sdpEndPoint.ToString() + " to " + requestSDPAddress.ToString() + ":" + sdpEndPoint.Port + "."); } else if (sdpEndPoint != null) { Log("SDP on GoogleVoiceCall could not be mangled, using original RTP socket of " + sdpEndPoint.ToString() + "."); } } } else { Log("SDP RTP socket on GoogleVoiceCall call could not be determined."); } SIPDialogue answeredDialogue = googleCall.InitiateCall(emailAddress, password, forwardingNumber, destinationNumber, fromURIUserToMatch, phoneType, waitForCallbackTimeout, m_sipRequest.Header.ContentType, content); if (answeredDialogue != null) { m_dialPlanContext.CallAnswered(SIPResponseStatusCodesEnum.Ok, null, null, null, answeredDialogue.ContentType, answeredDialogue.RemoteSDP, answeredDialogue, SIPDialogueTransferModesEnum.Default); // Dial plan script stops once there is an answered call to bridge to or the client call is cancelled. Log("Google Voice Call was successfully answered in " + DateTime.Now.Subtract(startTime).TotalSeconds.ToString("0.00") + "s."); m_executingScript.StopExecution(); } } catch (ThreadAbortException) { } catch (Exception excp) { Log("Exception on GoogleVoiceCall. " + excp.Message); } }