File: channels\ipc\ipcchannelhelper.cs
Project: ndp\clr\src\managedlibraries\remoting\System.Runtime.Remoting.csproj (System.Runtime.Remoting)
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//==========================================================================
//  File:       IpcChannelHelper.cs
//  Author:   Microsoft@Microsoft.Com
//  Summary:    Implements helper methods for Ipc client and server channels.
//
//==========================================================================
 
using System;
using System.IO;
using System.Collections;
using System.Runtime.Remoting.Channels;
 
namespace System.Runtime.Remoting.Channels.Ipc
{
    
    internal static class IpcChannelHelper
    {
        private const String _ipc = "ipc://";
        
        // see if the string starts with "ipc://"
        internal static bool StartsWithIpc(String url)
        {
            return StringHelper.StartsWithAsciiIgnoreCasePrefixLower(url, _ipc);
        } // StartsWithIpc
 
        // Used by Ipc channels to implement IChannel::Parse.
        // It returns the channel uri and places object uri into out parameter.
        internal static String ParseURL(String url, out String objectURI)
        {            
            if (url == null)
                throw new ArgumentNullException("url");
 
            // Set the out parameters
            objectURI = null;
 
            int separator;
 
            // Find the starting point of ipc://
            // NOTE: We are using this version of String.Compare to ensure
            // that string operations are case-insensitive!!
            if (StartsWithIpc(url))
            {
                separator = _ipc.Length;
            }
            else
            {
                return null;
            }
 
            // find next slash (after end of scheme)
            separator = url.IndexOf('/', separator);
            if (-1 == separator)
            {
                return url; // means that the url is just "Ipc://foo" or something like that
            }
 
            // Extract the channel URI which is the prefix
            String channelURI = url.Substring(0, separator);
 
            // Extract the object URI which is the suffix
            objectURI = url.Substring(separator); // leave the slash
 
            return channelURI;
        } // ParseURL
    } // class IpcChannelHelper
 
 
} // namespace System.Runtime.Remoting.Channels.Ipc