gzip encoding for route result

This commit is contained in:
Arndt Brenschede 2018-12-31 16:53:31 +01:00
parent a9e8731b3e
commit 664925133a

View file

@ -2,11 +2,13 @@ package btools.server;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.BufferedWriter; import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.ServerSocket; import java.net.ServerSocket;
import java.net.Socket; import java.net.Socket;
@ -20,6 +22,7 @@ import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.zip.GZIPOutputStream;
import btools.router.OsmNodeNamed; import btools.router.OsmNodeNamed;
import btools.router.OsmTrack; import btools.router.OsmTrack;
@ -68,6 +71,7 @@ public class RouteServer extends Thread
// first line // first line
String getline = null; String getline = null;
String agent = null; String agent = null;
String encodings = null;
// more headers until first empty line // more headers until first empty line
for(;;) for(;;)
@ -90,6 +94,10 @@ public class RouteServer extends Thread
{ {
agent = line.substring( "User-Agent: ".length() ); agent = line.substring( "User-Agent: ".length() );
} }
if ( line.startsWith( "Accept-Encoding: " ) )
{
encodings = line.substring( "Accept-Encoding: ".length() );
}
} }
String excludedAgents = System.getProperty( "excludedAgents" ); String excludedAgents = System.getProperty( "excludedAgents" );
@ -194,10 +202,24 @@ public class RouteServer extends Thread
else else
{ {
OsmTrack track = cr.getFoundTrack(); OsmTrack track = cr.getFoundTrack();
writeHttpHeader(bw, handler.getMimeType(), handler.getFileName());
String headers = encodings == null || encodings.indexOf( "gzip" ) < 0 ? null : "Content-Encoding: gzip\n";
writeHttpHeader(bw, handler.getMimeType(), handler.getFileName(), headers );
if ( track != null ) if ( track != null )
{ {
bw.write( handler.formatTrack(track) ); if ( headers != null ) // compressed
{
java.io.ByteArrayOutputStream baos = new ByteArrayOutputStream();
Writer w = new OutputStreamWriter( new GZIPOutputStream( baos ), "UTF-8" );
w.write( handler.formatTrack(track) );
w.close();
bw.flush();
clientSocket.getOutputStream().write( baos.toByteArray() );
}
else
{
bw.write( handler.formatTrack(track) );
}
} }
} }
bw.flush(); bw.flush();