View Javadoc

1   // ========================================================================
2   // Copyright (c) 2008-2009 Mort Bay Consulting Pty. Ltd.
3   // ------------------------------------------------------------------------
4   // All rights reserved. This program and the accompanying materials
5   // are made available under the terms of the Eclipse Public License v1.0
6   // and Apache License v2.0 which accompanies this distribution.
7   // The Eclipse Public License is available at 
8   // http://www.eclipse.org/legal/epl-v10.html
9   // The Apache License v2.0 is available at
10  // http://www.opensource.org/licenses/apache2.0.php
11  // You may elect to redistribute this code under either of these licenses. 
12  // ========================================================================
13  
14  package org.eclipse.jetty.http;
15  
16  import java.io.UnsupportedEncodingException;
17  
18  import org.eclipse.jetty.util.MultiMap;
19  import org.eclipse.jetty.util.StringUtil;
20  import org.eclipse.jetty.util.TypeUtil;
21  import org.eclipse.jetty.util.URIUtil;
22  import org.eclipse.jetty.util.UrlEncoded;
23  import org.eclipse.jetty.util.Utf8StringBuffer;
24  
25  public class EncodedHttpURI extends HttpURI
26  {
27      private final String _encoding;
28      
29      public EncodedHttpURI(String encoding)
30      {
31          super();
32          _encoding = encoding;
33      }
34      
35      
36      @Override
37      public String getScheme()
38      {
39          if (_scheme==_authority)
40              return null;
41          int l=_authority-_scheme;
42          if (l==5 && 
43              _raw[_scheme]=='h' && 
44              _raw[_scheme+1]=='t' && 
45              _raw[_scheme+2]=='t' && 
46              _raw[_scheme+3]=='p' )
47              return HttpSchemes.HTTP;
48          if (l==6 && 
49              _raw[_scheme]=='h' && 
50              _raw[_scheme+1]=='t' && 
51              _raw[_scheme+2]=='t' && 
52              _raw[_scheme+3]=='p' && 
53              _raw[_scheme+4]=='s' )
54              return HttpSchemes.HTTPS;
55          
56          return StringUtil.toString(_raw,_scheme,_authority-_scheme-1,_encoding);
57      }
58      
59      @Override
60      public String getAuthority()
61      {
62          if (_authority==_path)
63              return null;
64          return StringUtil.toString(_raw,_authority,_path-_authority,_encoding);
65      }
66      
67      @Override
68      public String getHost()
69      {
70          if (_host==_port)
71              return null;
72          return StringUtil.toString(_raw,_host,_port-_host,_encoding);
73      }
74      
75      @Override
76      public int getPort()
77      {
78          if (_port==_path)
79              return -1;
80          return TypeUtil.parseInt(_raw, _port+1, _path-_port-1,10);
81      }
82      
83      @Override
84      public String getPath()
85      {
86          if (_path==_param)
87              return null;
88          return StringUtil.toString(_raw,_path,_param-_path,_encoding);
89      }
90      
91      @Override
92      public String getDecodedPath()
93      {
94          if (_path==_param)
95              return null;
96          return URIUtil.decodePath(_raw,_path,_param-_path);
97      }
98      
99      @Override
100     public String getPathAndParam()
101     {
102         if (_path==_query)
103             return null;
104         return StringUtil.toString(_raw,_path,_query-_path,_encoding);
105     }
106     
107     @Override
108     public String getCompletePath()
109     {
110         if (_path==_end)
111             return null;
112         return StringUtil.toString(_raw,_path,_end-_path,_encoding);
113     }
114     
115     @Override
116     public String getParam()
117     {
118         if (_param==_query)
119             return null;
120         return StringUtil.toString(_raw,_param+1,_query-_param-1,_encoding);
121     }
122     
123     @Override
124     public String getQuery()
125     {
126         if (_query==_fragment)
127             return null;
128         return StringUtil.toString(_raw,_query+1,_fragment-_query-1,_encoding);
129     }
130     
131     @Override
132     public boolean hasQuery()
133     {
134         return (_fragment>_query);
135     }
136     
137     @Override
138     public String getFragment()
139     {
140         if (_fragment==_end)
141             return null;
142         return StringUtil.toString(_raw,_fragment+1,_end-_fragment-1,_encoding);
143     }
144 
145     @Override
146     public void decodeQueryTo(MultiMap parameters) 
147     {
148         if (_query==_fragment)
149             return;
150         UrlEncoded.decodeTo(StringUtil.toString(_raw,_query+1,_fragment-_query-1,_encoding),parameters,_encoding);
151     }
152 
153     @Override
154     public void decodeQueryTo(MultiMap parameters, String encoding) 
155         throws UnsupportedEncodingException
156     {
157         if (_query==_fragment)
158             return;
159        
160         if (encoding==null)
161             encoding=_encoding;
162         UrlEncoded.decodeTo(StringUtil.toString(_raw,_query+1,_fragment-_query-1,encoding),parameters,encoding);
163     }
164     
165     @Override
166     public String toString()
167     {
168         if (_rawString==null)
169             _rawString= StringUtil.toString(_raw,_scheme,_end-_scheme,_encoding);
170         return _rawString;
171     }
172     
173     public void writeTo(Utf8StringBuffer buf)
174     {
175         buf.getStringBuffer().append(toString());
176     }
177     
178 }