|
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
namespace LumiSoft.Net.SIP
{
/// <summary>
/// SIP helper methods.
/// </summary>
public class SIP_Utils
{
#region method ParseAddress
/// <summary>
/// Parses address from SIP To: header field.
/// </summary>
/// <param name="to">SIP header To: value.</param>
/// <returns></returns>
public static string ParseAddress(string to)
{
try{
string retVal = to;
if(to.IndexOf('<') > -1 && to.IndexOf('<') < to.IndexOf('>')){
retVal = to.Substring(to.IndexOf('<') + 1,to.IndexOf('>') - to.IndexOf('<') - 1);
}
// Remove sip:
if(retVal.IndexOf(':') > -1){
retVal = retVal.Substring(retVal.IndexOf(':') + 1).Split(':')[0];
}
return retVal;
}
catch{
throw new ArgumentException("Invalid SIP header To: '" + to + "' value !");
}
}
#endregion
#region method UriToRequestUri
/// <summary>
/// Converts URI to Request-URI by removing all not allowed Request-URI parameters from URI.
/// </summary>
/// <param name="uri">URI value.</param>
/// <returns>Returns valid Request-URI value.</returns>
public static string UriToRequestUri(string uri)
{
// RFC 3261 19.1.2.(Table)
// We need to strip off "method-param" and "header" URI parameters".
// Currently we do it for sip or sips uri, do we need todo it for others too ?
try{
SIP_Uri sUri = SIP_Uri.Parse(uri);
sUri.Parameters.Remove("method");
sUri.Header = null;
return sUri.ToStringValue();
}
catch{
return uri;
}
}
#endregion
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.