view src/org/eclipse/jetty/http/EncodedHttpURI.java @ 867:4f5547d29192

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 02 Oct 2016 21:06:18 -0600
parents 3428c60d7cfc
children
line wrap: on
line source

//
//  ========================================================================
//  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
//  ------------------------------------------------------------------------
//  All rights reserved. This program and the accompanying materials
//  are made available under the terms of the Eclipse Public License v1.0
//  and Apache License v2.0 which accompanies this distribution.
//
//      The Eclipse Public License is available at
//      http://www.eclipse.org/legal/epl-v10.html
//
//      The Apache License v2.0 is available at
//      http://www.opensource.org/licenses/apache2.0.php
//
//  You may elect to redistribute this code under either of these licenses.
//  ========================================================================
//

package org.eclipse.jetty.http;

import java.io.UnsupportedEncodingException;

import org.eclipse.jetty.util.MultiMap;
import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.TypeUtil;
import org.eclipse.jetty.util.URIUtil;
import org.eclipse.jetty.util.UrlEncoded;
import org.eclipse.jetty.util.Utf8StringBuffer;

public class EncodedHttpURI extends HttpURI
{
    private final String _encoding;
    
    public EncodedHttpURI(String encoding)
    {
        super();
        _encoding = encoding;
    }
    
    
    @Override
    public String getScheme()
    {
        if (_scheme==_authority)
            return null;
        int l=_authority-_scheme;
        if (l==5 && 
            _raw[_scheme]=='h' && 
            _raw[_scheme+1]=='t' && 
            _raw[_scheme+2]=='t' && 
            _raw[_scheme+3]=='p' )
            return HttpSchemes.HTTP;
        if (l==6 && 
            _raw[_scheme]=='h' && 
            _raw[_scheme+1]=='t' && 
            _raw[_scheme+2]=='t' && 
            _raw[_scheme+3]=='p' && 
            _raw[_scheme+4]=='s' )
            return HttpSchemes.HTTPS;
        
        return StringUtil.toString(_raw,_scheme,_authority-_scheme-1,_encoding);
    }
    
    @Override
    public String getAuthority()
    {
        if (_authority==_path)
            return null;
        return StringUtil.toString(_raw,_authority,_path-_authority,_encoding);
    }
    
    @Override
    public String getHost()
    {
        if (_host==_port)
            return null;
        return StringUtil.toString(_raw,_host,_port-_host,_encoding);
    }
    
    @Override
    public int getPort()
    {
        if (_port==_path)
            return -1;
        return TypeUtil.parseInt(_raw, _port+1, _path-_port-1,10);
    }
    
    @Override
    public String getPath()
    {
        if (_path==_param)
            return null;
        return StringUtil.toString(_raw,_path,_param-_path,_encoding);
    }
    
    @Override
    public String getDecodedPath()
    {
        if (_path==_param)
            return null;
        return URIUtil.decodePath(_raw,_path,_param-_path);
    }
    
    @Override
    public String getPathAndParam()
    {
        if (_path==_query)
            return null;
        return StringUtil.toString(_raw,_path,_query-_path,_encoding);
    }
    
    @Override
    public String getCompletePath()
    {
        if (_path==_end)
            return null;
        return StringUtil.toString(_raw,_path,_end-_path,_encoding);
    }
    
    @Override
    public String getParam()
    {
        if (_param==_query)
            return null;
        return StringUtil.toString(_raw,_param+1,_query-_param-1,_encoding);
    }
    
    @Override
    public String getQuery()
    {
        if (_query==_fragment)
            return null;
        return StringUtil.toString(_raw,_query+1,_fragment-_query-1,_encoding);
    }
    
    @Override
    public boolean hasQuery()
    {
        return (_fragment>_query);
    }
    
    @Override
    public String getFragment()
    {
        if (_fragment==_end)
            return null;
        return StringUtil.toString(_raw,_fragment+1,_end-_fragment-1,_encoding);
    }

    @Override
    public void decodeQueryTo(MultiMap parameters) 
    {
        if (_query==_fragment)
            return;
        UrlEncoded.decodeTo(StringUtil.toString(_raw,_query+1,_fragment-_query-1,_encoding),parameters,_encoding);
    }

    @Override
    public void decodeQueryTo(MultiMap parameters, String encoding) 
        throws UnsupportedEncodingException
    {
        if (_query==_fragment)
            return;
       
        if (encoding==null)
            encoding=_encoding;
        UrlEncoded.decodeTo(StringUtil.toString(_raw,_query+1,_fragment-_query-1,encoding),parameters,encoding);
    }
    
    @Override
    public String toString()
    {
        if (_rawString==null)
            _rawString= StringUtil.toString(_raw,_scheme,_end-_scheme,_encoding);
        return _rawString;
    }
    
    public void writeTo(Utf8StringBuffer buf)
    {
        buf.getStringBuffer().append(toString());
    }
    
}