Beispiel #1
0
        internal FtpUrl(
            string url,
            string scheme,
            string userName,
            string password,
            string host,
            ushort port,
            string path,
            ParametersCollection parameters,
            params string[] segments) : base(url, scheme, userName, password, host, (port == 0 ? (scheme == FtpUrlParser.Ssh ? FtpUrlParser.SshPort : (scheme == FtpUrlParser.Ftps ? FtpUrlParser.FtpsPort : FtpUrlParser.FtpPort)) : port))
        {
            port        = (port == 0 ? (scheme == FtpUrlParser.Ssh ? FtpUrlParser.SshPort : (scheme == FtpUrlParser.Ftps ? FtpUrlParser.FtpsPort : FtpUrlParser.FtpPort)) : port);
            _path       = (!String.IsNullOrEmpty(path) ? path : "/");
            _segments   = segments ?? new string[0];
            _parameters = parameters;
            string safePath = (_segments.Length == 0 ? String.Empty : String.Join("/", _segments.Select(segment => UrlParser.ToSafeString(segment, FtpUrlParser.PathAllowedChars))));

            _asString = ToAbsoluteString(
                scheme,
                UrlParser.ToSafeString(userName, UrlParser.LoginAllowed),
                UrlParser.ToSafeString(password, UrlParser.LoginAllowed),
                host,
                port,
                safePath,
                _parameters);
            _location = _asString.Substring(scheme.Length + 1);
            _hashCode = _asString.GetHashCode();
        }
Beispiel #2
0
        private static string ToRelativeString(string path, ParametersCollection query = null, string fragment = null)
        {
            if (path.Length == 0)
            {
                path = "/";
            }

            return(String.Format(
                       "{0}{1}{2}",
                       path,
                       (query != null ? String.Format("?{0}", query.ToString(HttpUrlParser.PathAllowedChars)) : String.Empty),
                       (fragment != null ? String.Format("#{0}", UrlParser.ToSafeString(fragment, HttpUrlParser.PathAllowedChars)) : String.Empty)));
        }
Beispiel #3
0
        /// <inheritdoc />
        protected override IpUrl CreateInstance(IEnumerable <string> segments, bool?requiresParameters = false)
        {
            StringBuilder  path        = new StringBuilder(Path.Length * 2);
            IList <string> newSegments = new List <string>(_segments.Length + 1);

            foreach (string segment in segments)
            {
                path.Append("/").Append(UrlParser.ToSafeString(segment, HttpUrlParser.PathAllowedChars));
                newSegments.Add(segment);
            }

            string url   = (_isAbsolute ? ToAbsoluteString(Scheme, Host, Port, path.ToString(), _query, _fragment) : ToRelativeString(path.ToString(), _query, _fragment));
            var    query = (!requiresParameters.HasValue ? null :
                            (requiresParameters.Value ? (Query != null ? Query.Clone() : new ParametersCollection("&", "=")) : Query));

            return(new HttpUrl(_isAbsolute, url, Scheme, Host, Port, path.ToString(), query, Fragment, segments.ToArray()));
        }
Beispiel #4
0
        /// <inheritdoc />
        protected override IpUrl CreateInstance(IEnumerable <string> segments, bool?requiresParameters = false)
        {
            StringBuilder  path        = new StringBuilder(Path.Length * 2);
            IList <string> newSegments = new List <string>(_segments.Length + 1);

            foreach (string segment in segments)
            {
                path.Append("/").Append(UrlParser.ToSafeString(segment, FtpUrlParser.PathAllowedChars));
                newSegments.Add(segment);
            }

            var parameters = (!requiresParameters.HasValue ? null :
                              (requiresParameters.Value ? (Parameters != null ? Parameters.Clone() : new ParametersCollection(";", "=")) : Parameters));
            string url = ToAbsoluteString(Scheme, UserName, Password, Host, Port, path.ToString(), parameters);

            return(new FtpUrl(url, Scheme, UserName, Password, Host, Port, path.ToString(), Parameters, segments.ToArray()));
        }
Beispiel #5
0
        private static string ToAbsoluteString(string scheme, string host, ushort port, string path = null, ParametersCollection query = null, string fragment = null)
        {
            string portString = (((scheme == HttpUrlParser.Https) && (port == HttpUrlParser.HttpsPort)) || (port == HttpUrlParser.HttpPort) ? String.Empty : ":" + port);

            if (path == null)
            {
                return(String.Format("{0}://{1}{2}/", scheme, host, portString));
            }

            return(String.Format(
                       "{0}://{1}{2}/{3}{4}{5}",
                       scheme,
                       host,
                       portString,
                       path,
                       (query != null ? String.Format("?{0}", query.ToString(HttpUrlParser.PathAllowedChars)) : String.Empty),
                       (fragment != null ? String.Format("#{0}", UrlParser.ToSafeString(fragment, HttpUrlParser.PathAllowedChars)) : String.Empty)));
        }
Beispiel #6
0
        private string ToStringInternal(char[] allowedChars = null)
        {
            StringBuilder result = new StringBuilder(256);

            foreach (var entry in _container)
            {
                foreach (var value in entry.Value)
                {
                    result.AppendFormat(
                        "{0}{1}{2}",
                        _separator,
                        (allowedChars != null ? UrlParser.ToSafeString(entry.Key, allowedChars) : entry.Key),
                        (!String.IsNullOrEmpty(value) ? String.Format("{0}{1}", _valueIndicator, (allowedChars != null ? UrlParser.ToSafeString(value, allowedChars) : value)) : String.Empty));
                }
            }

            return(result.Length > 0 ? result.ToString(1, result.Length - 1) : String.Empty);
        }
Beispiel #7
0
        internal HttpUrl(
            bool isAbsolute,
            string url,
            string scheme,
            string host,
            ushort port,
            string path,
            ParametersCollection query,
            string fragment,
            params string[] segments) : base(url, scheme, null, null, host, (port == 0 ? (scheme == HttpUrlParser.Https ? HttpUrlParser.HttpsPort : HttpUrlParser.HttpPort) : port))
        {
            port        = (port == 0 ? (scheme == HttpUrlParser.Https ? HttpUrlParser.HttpsPort : HttpUrlParser.HttpPort) : port);
            _isAbsolute = isAbsolute;
            _path       = (!String.IsNullOrEmpty(path) ? path : "/");
            _fragment   = fragment;
            _segments   = segments ?? new string[0];
            _query      = query;
            string safePath = (_segments.Length == 0 ? String.Empty : String.Join("/", _segments.Select(segment => UrlParser.ToSafeString(segment, HttpUrlParser.PathAllowedChars))));

            if (isAbsolute)
            {
                _location = ToAbsoluteString(scheme, host, port, _path.TrimStart('/'), _query, _fragment).Substring(scheme.Length + 1);
                _asString = ToAbsoluteString(scheme, host, port, safePath, _query, _fragment);
            }
            else
            {
                _location = _asString = ToRelativeString("/" + safePath, _query, _fragment);
            }

            _hashCode = _asString.GetHashCode();
        }