diff options
| author | Keith Packard <keithp@keithp.com> | 2018-10-07 09:22:44 -0700 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2018-10-07 09:38:43 -0700 | 
| commit | af678be97e419a1167a0630f28bcaba82d67929b (patch) | |
| tree | 728c79d5eee0097b42d05669baeb836accc11350 /map-server/altos-map/AltosMap.java | |
| parent | 7b248524d4bd2c3ab64899b133230d131258396c (diff) | |
map-server: Implement altos-map in C
This app is all about startup time, and java starts
slowly. Re-implement in C to improve server performance.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'map-server/altos-map/AltosMap.java')
| -rw-r--r-- | map-server/altos-map/AltosMap.java | 182 | 
1 files changed, 0 insertions, 182 deletions
diff --git a/map-server/altos-map/AltosMap.java b/map-server/altos-map/AltosMap.java deleted file mode 100644 index ad0a4f5f..00000000 --- a/map-server/altos-map/AltosMap.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright © 2018 Keith Packard <keithp@keithp.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * General Public License for more details. - */ - -package altosmap; - -import java.net.*; -import java.io.*; -import java.util.*; -import java.text.*; - -import org.altusmetrum.altoslib_13.*; - -public class AltosMap { - -	public final static int port = 16717; - -	public final static String protocol_version = "1.0.0"; - -	String	query_string; -	String	remote_addr; - -	public String reason_string(int code) { -		switch (code) { -		case 200: -			return "OK"; -		case 400: -			return "Bad Request"; -		case 403: -			return "Forbidden"; -		case 404: -			return "Not Found"; -		case 408: -			return "Request Timeout"; -		default: -			return "Failure"; -		} -	} - -	public void write_status(int status) { -		System.out.printf("Status: %d %s\n", status, reason_string(status)); -	} - -	public void write_type(String type) { -		System.out.printf("Content-Type: %s\n", type); -	} - -	public void fail(int status, String reason) { -		write_status(status); -		write_type("text/html"); -		System.out.printf("\n"); -		System.out.printf("<html>\n"); -		System.out.printf("<head><title>Map Fetch Failure</title></head>\n"); -		System.out.printf("<body>%s</body>\n", reason); -		System.out.printf("</html>\n"); -		System.exit(1); -	} - -	public void process() { -		query_string = System.getenv("QUERY_STRING"); - -		if (query_string == null) -			fail(400, "Missing query string"); - -		remote_addr = System.getenv("REMOTE_ADDR"); - -		if (remote_addr == null) -			fail(400, "Missing remote address"); - -		String[] queries = query_string.split("&"); - -		double	lon = AltosLib.MISSING; -		double	lat = AltosLib.MISSING; -		int	zoom = AltosLib.MISSING; -		String	version = null; - -		try { -			for (String query : queries) { -				String[] q = query.split("="); -				if (q.length >= 2) { -					String name = q[0]; -					String value = q[1]; -					if (name.equals("lon")) -						lon = AltosParse.parse_double_net(value); -					else if (name.equals("lat")) -						lat = AltosParse.parse_double_net(value); -					else if (name.equals("zoom")) -						zoom = AltosParse.parse_int(value); -					else if (name.equals("version")) -						version = value; -					else -						fail(400, String.format("Extra query param \"%s\"", query)); -				} -			} -		} catch (ParseException pe) { -			fail(400, String.format("Invalid query: %s", pe.toString())); -		} - -		if (version != null) { -			System.out.printf("Content-Type: text/plain\n"); -			System.out.printf("\n"); -			System.out.printf("%s\n", protocol_version); -		} else { -			if (lon == AltosLib.MISSING) -				fail(400, "Missing longitude"); -			if (lat == AltosLib.MISSING) -				fail(400, "Missing latitude"); -			if (zoom == AltosLib.MISSING) -				fail(400, "Missing zoom"); - -			try { -				Socket	socket = null; -				int tries = 0; - -				while (tries < 10 && socket == null) { -					try { -						socket = new Socket(InetAddress.getLoopbackAddress(), port); -					} catch (IOException ie) { -						Thread.sleep(100); -						tries++; -					} -				} - -				AltosJson	request = new AltosJson(); - -				request.put("lat", lat); -				request.put("lon", lon); -				request.put("zoom", zoom); -				request.put("remote_addr", remote_addr); - -				Writer writer = new PrintWriter(socket.getOutputStream()); -				request.write(writer); -				writer.flush(); - -				AltosJson	reply = AltosJson.fromInputStream(socket.getInputStream()); - -				int status = reply.get_int("status", 400); - -				if (status != 200) -					fail(status, "Bad cache status"); - -				String filename = reply.get_string("filename", null); -				try { -					File file = new File(filename); -					long length = file.length(); -					FileInputStream in = new FileInputStream(file); -					String content_type = reply.get_string("content_type", null); -					System.out.printf("Content-Type: %s\n", content_type); -					System.out.printf("Content-Length: %d\n", file.length()); -					System.out.printf("\n"); -					byte[] buf = new byte[4096]; -					int bytes_read; -					while ((bytes_read = in.read(buf)) > 0) -						System.out.write(buf); -				} catch (IOException ie) { -					fail(404, String.format("IO Exception: %s", ie.toString())); -				} -			} catch (Exception e) { -				fail(404, String.format("Exception %s", e.toString())); -			} -		} -	} - -	public AltosMap() { -	} - -	public static void main(final String[] args) { - -		new AltosMap().process(); - -	} -}  | 
