本文整理汇总了C#中SIPSorcery.SIP.SIPRequest.Copy方法的典型用法代码示例。如果您正苦于以下问题:C# SIPRequest.Copy方法的具体用法?C# SIPRequest.Copy怎么用?C# SIPRequest.Copy使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SIPSorcery.SIP.SIPRequest
的用法示例。
在下文中一共展示了SIPRequest.Copy方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetAuthenticatedRegistrationRequest
private SIPRequest GetAuthenticatedRegistrationRequest(SIPRequest registerRequest, SIPResponse sipResponse)
{
try
{
SIPAuthorisationDigest authRequest = sipResponse.Header.AuthenticationHeader.SIPDigest;
m_lastServerNonce = authRequest.Nonce;
string username = (m_authUsername != null) ? m_authUsername : m_sipAccountAOR.User;
authRequest.SetCredentials(username, m_password, registerRequest.URI.ToString(), SIPMethodsEnum.REGISTER.ToString());
SIPRequest regRequest = registerRequest.Copy();
regRequest.LocalSIPEndPoint = registerRequest.LocalSIPEndPoint;
regRequest.Header.Vias.TopViaHeader.Branch = CallProperties.CreateBranchId();
regRequest.Header.From.FromTag = CallProperties.CreateNewTag();
regRequest.Header.To.ToTag = null;
regRequest.Header.CSeq = ++m_cseq;
regRequest.Header.AuthenticationHeader = new SIPAuthenticationHeader(authRequest);
regRequest.Header.AuthenticationHeader.SIPDigest.Response = authRequest.Digest;
//if (RequestSwitchboardToken)
//{
// regRequest.Header.SwitchboardTokenRequest = m_expiry;
//}
return regRequest;
}
catch (Exception excp)
{
logger.Error("Exception GetAuthenticatedRegistrationRequest. " + excp.Message);
throw excp;
}
}
示例2: GetAuthenticatedRegistrationRequest
private SIPRequest GetAuthenticatedRegistrationRequest(SIPProviderBinding binding, SIPRequest registerRequest, SIPResponse sipResponse)
{
try
{
SIPAuthorisationDigest authRequest = sipResponse.Header.AuthenticationHeader.SIPDigest;
authRequest.SetCredentials(binding.ProviderAuthUsername, binding.ProviderPassword, registerRequest.URI.ToString(), SIPMethodsEnum.REGISTER.ToString());
SIPRequest regRequest = registerRequest.Copy();
regRequest.LocalSIPEndPoint = registerRequest.LocalSIPEndPoint;
regRequest.Header.Vias.TopViaHeader.Branch = CallProperties.CreateBranchId();
regRequest.Header.From.FromTag = CallProperties.CreateNewTag();
regRequest.Header.To.ToTag = null;
regRequest.Header.CSeq = ++binding.CSeq;
if (SIPProviderMagicJack.IsMagicJackRequest(sipResponse))
{
regRequest.Header.AuthenticationHeader = SIPProviderMagicJack.GetAuthenticationHeader(sipResponse);
}
else
{
regRequest.Header.AuthenticationHeader = new SIPAuthenticationHeader(authRequest);
regRequest.Header.AuthenticationHeader.SIPDigest.Response = authRequest.Digest;
}
return regRequest;
}
catch (Exception excp)
{
logger.Error("Exception GetAuthenticatedRegistrationRequest. " + excp.Message);
throw excp;
}
}
示例3: GetAuthenticatedRequest
private SIPRequest GetAuthenticatedRequest(SIPRequest originalRequest, SIPResponse sipResponse)
{
try
{
SIPAuthorisationDigest digest = sipResponse.Header.AuthenticationHeader.SIPDigest;
m_lastServerNonce = digest.Nonce;
string username = (m_callDescriptor.AuthUsername != null) ? m_callDescriptor.AuthUsername : m_callDescriptor.Username;
digest.SetCredentials(username, m_callDescriptor.Password, originalRequest.URI.ToString(), originalRequest.Method.ToString());
SIPRequest authRequest = originalRequest.Copy();
authRequest.LocalSIPEndPoint = originalRequest.LocalSIPEndPoint;
authRequest.Header.Vias.TopViaHeader.Branch = CallProperties.CreateBranchId();
authRequest.Header.From.FromTag = CallProperties.CreateNewTag();
authRequest.Header.To.ToTag = null;
authRequest.Header.CallId = CallProperties.CreateNewCallId();
authRequest.Header.CSeq = originalRequest.Header.CSeq + 1;
authRequest.Header.AuthenticationHeader = new SIPAuthenticationHeader(digest);
authRequest.Header.AuthenticationHeader.SIPDigest.Response = digest.Digest;
return authRequest;
}
catch (Exception excp)
{
logger.Error("Exception SIPNonInviteClientUserAgent GetAuthenticatedRequest. " + excp.Message);
throw excp;
}
}
示例4: ProcessNotifyRequest
public void ProcessNotifyRequest(SIPRequest sipRequest)
{
try
{
// Hack to work around MWI request from callcentric not having a trailing CRLF and breaking some softphones like the Bria.
if (sipRequest.Header.Event == MWI_EVENT_TYPE && sipRequest.Body.NotNullOrBlank() && sipRequest.Body.Substring(sipRequest.Body.Length - 2) != m_crlf)
{
sipRequest.Body += m_crlf;
}
string fromURI = (sipRequest.Header.From != null && sipRequest.Header.From.FromURI != null) ? sipRequest.Header.From.FromURI.ToString() : "unknown";
string domain = GetCanonicalDomain_External(sipRequest.URI.Host, true);
if (domain != null)
{
SIPAccount sipAccount = GetSIPAccount_External(s => s.SIPUsername == sipRequest.URI.User && s.SIPDomain == domain);
if (sipAccount != null)
{
List<SIPRegistrarBinding> bindings = GetSIPAccountBindings_External(b => b.SIPAccountId == sipAccount.Id, null, 0, MAX_FORWARD_BINDINGS);
if (bindings != null)
{
foreach (SIPRegistrarBinding binding in bindings)
{
SIPURI dstURI = binding.MangledContactSIPURI;
SIPEndPoint localSIPEndPoint = (m_outboundProxy != null) ? m_sipTransport.GetDefaultSIPEndPoint(m_outboundProxy.Protocol) : m_sipTransport.GetDefaultSIPEndPoint(dstURI.Protocol);
SIPEndPoint dstSIPEndPoint = null;
// If the outbound proxy is a loopback address, as it will normally be for local deployments, then it cannot be overriden.
if(m_outboundProxy != null && IPAddress.IsLoopback(m_outboundProxy.Address))
{
dstSIPEndPoint = m_outboundProxy;
}
else if (binding.ProxySIPEndPoint != null)
{
// If the binding has a specific proxy end point sent then the request needs to be forwarded to the proxy's default end point for it to take care of.
dstSIPEndPoint = new SIPEndPoint(SIPProtocolsEnum.udp, new IPEndPoint(binding.ProxySIPEndPoint.Address, m_defaultSIPPort));
}
else if (m_outboundProxy != null)
{
dstSIPEndPoint = m_outboundProxy;
}
else
{
SIPDNSLookupResult lookupResult = m_sipTransport.GetURIEndPoint(dstURI, false);
if(lookupResult.LookupError != null)
{
Log_External(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.Notifier, SIPMonitorEventTypesEnum.MWI, "A NOTIFY request from " + fromURI + " was not forwarded due to DNS failure for " + dstURI.Host + ", " + lookupResult.LookupError + ".", sipAccount.Owner));
}
else
{
dstSIPEndPoint = lookupResult.GetSIPEndPoint();
}
}
if (dstSIPEndPoint != null)
{
// Rather than create a brand new request copy the received one and modify the headers that need to be unique.
SIPRequest notifyRequest = sipRequest.Copy();
notifyRequest.URI = dstURI;
notifyRequest.Header.Contact = SIPContactHeader.CreateSIPContactList(new SIPURI(dstURI.Scheme, localSIPEndPoint));
notifyRequest.Header.To = new SIPToHeader(null, dstURI, null);
notifyRequest.Header.CallId = CallProperties.CreateNewCallId();
SIPViaHeader viaHeader = new SIPViaHeader(localSIPEndPoint, CallProperties.CreateBranchId());
notifyRequest.Header.Vias = new SIPViaSet();
notifyRequest.Header.Vias.PushViaHeader(viaHeader);
// If the binding has a proxy socket defined set the header to ask the upstream proxy to use it.
if (binding.ProxySIPEndPoint != null)
{
notifyRequest.Header.ProxySendFrom = binding.ProxySIPEndPoint.ToString();
// If the binding has a specific proxy end point sent then the request needs to be forwarded to the proxy's default end point for it to take care of.
dstSIPEndPoint = new SIPEndPoint(SIPProtocolsEnum.udp, new IPEndPoint(binding.ProxySIPEndPoint.Address, m_defaultSIPPort));
}
Log_External(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.Notifier, SIPMonitorEventTypesEnum.MWI, "Forwarding NOTIFY request from " + fromURI + " to registered binding at " + dstURI.ToString() + ", proxy " + dstSIPEndPoint.ToString() + ".", sipAccount.Owner));
SIPNonInviteTransaction notifyTransaction = m_sipTransport.CreateNonInviteTransaction(notifyRequest, dstSIPEndPoint, localSIPEndPoint, dstSIPEndPoint);
notifyTransaction.SendReliableRequest();
}
else
{
Log_External(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.Notifier, SIPMonitorEventTypesEnum.MWI, "A NOTIFY request from " + fromURI + " was not forwarded as no destination end point was resolved.", sipAccount.Owner));
}
}
// Send OK response to server.
SIPResponse okResponse = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.Ok, null);
m_sipTransport.SendResponse(okResponse);
}
else
{
// Send unavailable response to server.
Log_External(new SIPMonitorConsoleEvent(SIPMonitorServerTypesEnum.Notifier, SIPMonitorEventTypesEnum.MWI, "NOTIFY request from " + fromURI + " for " + sipAccount.SIPUsername + "@" + sipAccount.SIPDomain + " but no bindings available, responding with temporarily unavailable.", sipAccount.Owner));
SIPResponse notAvailableResponse = SIPTransport.GetResponse(sipRequest, SIPResponseStatusCodesEnum.TemporarilyUnavailable, null);
m_sipTransport.SendResponse(notAvailableResponse);
}
}
//.........这里部分代码省略.........