private SIPRequest GetInviteRequest(SIPCallDescriptor sipCallDescriptor, string branchId, string callId, SIPEndPoint localSIPEndPoint, SIPRouteSet routeSet, string content, string contentType)
{
SIPRequest inviteRequest = new SIPRequest(SIPMethodsEnum.INVITE, sipCallDescriptor.Uri);
inviteRequest.LocalSIPEndPoint = localSIPEndPoint;
SIPHeader inviteHeader = new SIPHeader(sipCallDescriptor.GetFromHeader(), SIPToHeader.ParseToHeader(sipCallDescriptor.To), 1, callId);
inviteHeader.From.FromTag = CallProperties.CreateNewTag();
// For incoming calls forwarded via the dial plan the username needs to go into the Contact header.
inviteHeader.Contact = new List<SIPContactHeader>() { new SIPContactHeader(null, new SIPURI(inviteRequest.URI.Scheme, localSIPEndPoint)) };
inviteHeader.Contact[0].ContactURI.User = sipCallDescriptor.Username;
inviteHeader.CSeqMethod = SIPMethodsEnum.INVITE;
inviteHeader.UserAgent = m_userAgent;
inviteHeader.Routes = routeSet;
inviteRequest.Header = inviteHeader;
if (!sipCallDescriptor.ProxySendFrom.IsNullOrBlank())
{
inviteHeader.ProxySendFrom = sipCallDescriptor.ProxySendFrom;
}
SIPViaHeader viaHeader = new SIPViaHeader(localSIPEndPoint, branchId);
inviteRequest.Header.Vias.PushViaHeader(viaHeader);
inviteRequest.Body = content;
inviteRequest.Header.ContentLength = (inviteRequest.Body != null) ? inviteRequest.Body.Length : 0;
inviteRequest.Header.ContentType = contentType;
// Add custom switchboard headers.
if (CallDescriptor.SwitchboardHeaders != null)
{
inviteHeader.SwitchboardOriginalCallID = CallDescriptor.SwitchboardHeaders.SwitchboardOriginalCallID;
//inviteHeader.SwitchboardCallerDescription = CallDescriptor.SwitchboardHeaders.SwitchboardCallerDescription;
inviteHeader.SwitchboardLineName = CallDescriptor.SwitchboardHeaders.SwitchboardLineName;
//inviteHeader.SwitchboardOwner = CallDescriptor.SwitchboardHeaders.SwitchboardOwner;
//inviteHeader.SwitchboardOriginalFrom = CallDescriptor.SwitchboardHeaders.SwitchboardOriginalFrom;
}
// Add custom CRM headers.
if (CallDescriptor.CRMHeaders != null)
{
inviteHeader.CRMPersonName = CallDescriptor.CRMHeaders.PersonName;
inviteHeader.CRMCompanyName = CallDescriptor.CRMHeaders.CompanyName;
inviteHeader.CRMPictureURL = CallDescriptor.CRMHeaders.AvatarURL;
}
try
{
if (sipCallDescriptor.CustomHeaders != null && sipCallDescriptor.CustomHeaders.Count > 0)
{
foreach (string customHeader in sipCallDescriptor.CustomHeaders)
{
if (customHeader.IsNullOrBlank())
{
continue;
}
else if (customHeader.Trim().StartsWith(SIPHeaders.SIP_HEADER_USERAGENT))
{
inviteRequest.Header.UserAgent = customHeader.Substring(customHeader.IndexOf(":") + 1).Trim();
}
else
{
inviteRequest.Header.UnknownHeaders.Add(customHeader);
}
}
}
}
catch (Exception excp)
{
logger.Error("Exception Parsing CustomHeader for GetInviteRequest. " + excp.Message + sipCallDescriptor.CustomHeaders);
}
return inviteRequest;
}