コード例 #1
0
        /// <summary>
        /// This method is called when new SIP request received.
        /// </summary>
        /// <param name="requestContext">SIP proxy request context.</param>
        /// <returns>Returns true if request handled by this method, otherwise false.</returns>
        /// <remarks>
        /// This method is called when SIP proxy receives new out of transaction request.
        /// </remarks>
        public virtual bool ProcessRequest(SIP_RequestContext requestContext)
        {
            // REMOVE ME:

            /* Handler description.
             *) Any tel: URI is routed to the specified target gateway.
             *) URIs starting with + is routed to the specified target gateway.
             *) Require authentication.
             */

            // TODO: ACK

            // This is not URI we want.
            if (requestContext.Request.RequestLine.Uri.Scheme.ToLower() != "tel" && !(requestContext.Request.RequestLine.Uri is SIP_Uri))
            {
                return(false);
            }

            SIP_Uri requestUri = (SIP_Uri)requestContext.Request.RequestLine.Uri;

            long dummy = 0;

            if (requestUri.User.StartsWith("+") || Int64.TryParse(requestUri.User, out dummy))
            {
                // Not authenticated, send authentication challenge.
                if (requestContext.User == null)
                {
                    requestContext.ChallengeRequest();

                    return(true);
                }

                // Create staefull proxy context for request forwarding.
                SIP_ProxyContext proxyContext = requestContext.ProxyContext;

                // Add target server credentials, if any.
                //proxyContext.Credentials.Add(new NetworkCredential("user","password","domain-realm"));
                // ...

                // Start statefull request proxying.
                proxyContext.Start();

                return(true);
            }

            return(false);
        }
コード例 #2
0
        /// <summary>
        /// This method is called when new SIP request received.
        /// </summary>
        /// <param name="requestContext">SIP proxy request context.</param>
        /// <returns>Returns true if request handled by this method, otherwise false.</returns>
        /// <remarks>
        /// This method is called when SIP proxy receives new out of transaction request.
        /// </remarks>
        public virtual bool ProcessRequest(SIP_RequestContext requestContext)
        {
            // REMOVE ME:

            /* Handler description.
                *) Any tel: URI is routed to the specified target gateway.
                *) URIs starting with + is routed to the specified target gateway.
                *) Require authentication.
            */

            // TODO: ACK

            // This is not URI we want.
            if(requestContext.Request.RequestLine.Uri.Scheme.ToLower() != "tel" && !(requestContext.Request.RequestLine.Uri is SIP_Uri)){
                return false;
            }

            SIP_Uri requestUri = (SIP_Uri)requestContext.Request.RequestLine.Uri;

            long dummy = 0;
            if(requestUri.User.StartsWith("+") || Int64.TryParse(requestUri.User,out dummy)){
                // Not authenticated, send authentication challenge.
                if(requestContext.User == null){
                    requestContext.ChallengeRequest();

                    return true;
                }

                // Create staefull proxy context for request forwarding.
                SIP_ProxyContext proxyContext = requestContext.ProxyContext;

                // Add target server credentials, if any.
                //proxyContext.Credentials.Add(new NetworkCredential("user","password","domain-realm"));
                // ...

                // Start statefull request proxying.
                proxyContext.Start();

                return true;
            }            

            return false;
        }