1 package org.mortbay.jetty; 2 3 import java.io.UnsupportedEncodingException; 4 5 import org.mortbay.util.MultiMap; 6 import org.mortbay.util.StringUtil; 7 import org.mortbay.util.TypeUtil; 8 import org.mortbay.util.URIUtil; 9 import org.mortbay.util.UrlEncoded; 10 import org.mortbay.util.Utf8StringBuffer; 11 12 public class EncodedHttpURI extends HttpURI 13 { 14 private String _encoding; 15 16 public EncodedHttpURI(String encoding) 17 { 18 super(); 19 } 20 21 22 public String getScheme() 23 { 24 if (_scheme==_authority) 25 return null; 26 int l=_authority-_scheme; 27 if (l==5 && 28 _raw[_scheme]=='h' && 29 _raw[_scheme+1]=='t' && 30 _raw[_scheme+2]=='t' && 31 _raw[_scheme+3]=='p' ) 32 return HttpSchemes.HTTP; 33 if (l==6 && 34 _raw[_scheme]=='h' && 35 _raw[_scheme+1]=='t' && 36 _raw[_scheme+2]=='t' && 37 _raw[_scheme+3]=='p' && 38 _raw[_scheme+4]=='s' ) 39 return HttpSchemes.HTTPS; 40 41 return StringUtil.toString(_raw,_scheme,_authority-_scheme-1,_encoding); 42 } 43 44 public String getAuthority() 45 { 46 if (_authority==_path) 47 return null; 48 return StringUtil.toString(_raw,_authority,_path-_authority,_encoding); 49 } 50 51 public String getHost() 52 { 53 if (_host==_port) 54 return null; 55 return StringUtil.toString(_raw,_host,_port-_host,_encoding); 56 } 57 58 public int getPort() 59 { 60 if (_port==_path) 61 return -1; 62 return TypeUtil.parseInt(_raw, _port+1, _path-_port-1,10); 63 } 64 65 public String getPath() 66 { 67 if (_path==_param) 68 return null; 69 return StringUtil.toString(_raw,_path,_param-_path,_encoding); 70 } 71 72 public String getDecodedPath() 73 { 74 if (_path==_param) 75 return null; 76 return URIUtil.decodePath(_raw,_path,_param-_path); 77 } 78 79 public String getPathAndParam() 80 { 81 if (_path==_query) 82 return null; 83 return StringUtil.toString(_raw,_path,_query-_path,_encoding); 84 } 85 86 public String getCompletePath() 87 { 88 if (_path==_end) 89 return null; 90 return StringUtil.toString(_raw,_path,_end-_path,_encoding); 91 } 92 93 public String getParam() 94 { 95 if (_param==_query) 96 return null; 97 return StringUtil.toString(_raw,_param+1,_query-_param-1,_encoding); 98 } 99 100 public String getQuery() 101 { 102 if (_query==_fragment) 103 return null; 104 return StringUtil.toString(_raw,_query+1,_fragment-_query-1,_encoding); 105 } 106 107 public boolean hasQuery() 108 { 109 return (_fragment>_query); 110 } 111 112 public String getFragment() 113 { 114 if (_fragment==_end) 115 return null; 116 return StringUtil.toString(_raw,_fragment+1,_end-_fragment-1,_encoding); 117 } 118 119 public void decodeQueryTo(MultiMap parameters) 120 { 121 if (_query==_fragment) 122 return; 123 UrlEncoded.decodeTo(StringUtil.toString(_raw,_query+1,_fragment-_query-1,_encoding),parameters,_encoding); 124 } 125 126 public void decodeQueryTo(MultiMap parameters, String encoding) 127 throws UnsupportedEncodingException 128 { 129 if (_query==_fragment) 130 return; 131 132 if (encoding==null) 133 encoding=_encoding; 134 UrlEncoded.decodeTo(StringUtil.toString(_raw,_query+1,_fragment-_query-1,encoding),parameters,encoding); 135 } 136 137 public String toString() 138 { 139 if (_rawString==null) 140 _rawString= StringUtil.toString(_raw,_scheme,_end-_scheme,_encoding); 141 return _rawString; 142 } 143 144 public void writeTo(Utf8StringBuffer buf) 145 { 146 buf.getStringBuffer().append(toString()); 147 } 148 149 }