1
2
3
4
5
6
7
8
9
10
11
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 }