Changeset 5876 in josm for trunk/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
- Timestamp:
- 2013-04-17T20:14:32+02:00 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/io/remotecontrol/RequestProcessor.java
r5837 r5876 2 2 package org.openstreetmap.josm.io.remotecontrol; 3 3 4 import java.io.BufferedInputStream;5 4 import java.io.BufferedOutputStream; 5 import java.io.BufferedReader; 6 6 import java.io.IOException; 7 7 import java.io.InputStreamReader; 8 8 import java.io.OutputStream; 9 9 import java.io.OutputStreamWriter; 10 import java.io.Reader;11 10 import java.io.Writer; 12 11 import java.net.Socket; 13 12 import java.util.Arrays; 14 13 import java.util.Date; 14 import java.util.HashMap; 15 15 import java.util.Map; 16 16 import java.util.Map.Entry; 17 17 import java.util.StringTokenizer; 18 18 import java.util.TreeMap; 19 import java.util.regex.Matcher; 20 import java.util.regex.Pattern; 19 21 20 22 import org.openstreetmap.josm.io.remotecontrol.handler.AddNodeHandler; … … 136 138 request.getOutputStream()); 137 139 out = new OutputStreamWriter(raw); 138 Reader in = new InputStreamReader(new BufferedInputStream( 139 request.getInputStream()), "ASCII"); 140 141 StringBuffer requestLine = new StringBuffer(); 142 while (requestLine.length() < 1024 * 1024) { 143 int c = in.read(); 144 if (c == -1 || c == '\r' || c == '\n') 145 break; 146 requestLine.append((char) c); 147 } 148 149 System.out.println("RemoteControl received: " + requestLine); 150 String get = requestLine.toString(); 140 BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream(), "ASCII")); 141 142 String get = in.readLine(); 143 System.out.println("RemoteControl received: " + get); 144 151 145 StringTokenizer st = new StringTokenizer(get); 152 146 if (!st.hasMoreTokens()) { … … 165 159 return; 166 160 } 167 168 String command = null; 161 169 162 int questionPos = url.indexOf('?'); 170 if(questionPos < 0) 171 { 172 command = url; 173 } 174 else 175 { 176 command = url.substring(0, questionPos); 177 } 178 163 164 String command = questionPos < 0 ? url : url.substring(0, questionPos); 165 166 Map <String,String> headers = new HashMap<String, String>(); 167 int k=0, MAX_HEADERS=20; 168 while (k<MAX_HEADERS) { 169 get=in.readLine(); 170 if (get==null) break; 171 k++; 172 String h[] = get.split(": ", 2); 173 if (h.length==2) { 174 headers.put(h[0], h[1]); 175 } else break; 176 } 177 178 // Who sent the request: trying our best to detect 179 // not from localhost => sender = IP 180 // from localhost: sender = referer header, if exists 181 String sender = null; 182 183 if (!request.getInetAddress().isLoopbackAddress()) { 184 sender = request.getInetAddress().getHostAddress(); 185 } else { 186 String ref = headers.get("Referer"); 187 Pattern r = Pattern.compile("(https?://)?([^/]*)"); 188 if (ref!=null) { 189 Matcher m = r.matcher(ref); 190 if (m.find()) { 191 sender = m.group(2); 192 } 193 } 194 if (sender == null) { 195 sender = "localhost"; 196 } 197 } 198 179 199 // find a handler for this command 180 200 Class<? extends RequestHandler> handlerClass = handlers.get(command); … … 202 222 handler.setCommand(command); 203 223 handler.setUrl(url); 224 handler.setSender(sender); 204 225 handler.handle(); 205 226 sendHeader(out, "200 OK", handler.getContentType(), false);
Note:
See TracChangeset
for help on using the changeset viewer.