Mercurial Hosting > luan
annotate src/luan/webserver/Response.java @ 1160:4beabb087be6
add http/impl
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 05 Feb 2018 22:33:59 -0700 |
parents | 49fb4e83484f |
children | 6baccd0c85a7 |
rev | line source |
---|---|
1137 | 1 package luan.webserver; |
2 | |
3 import java.io.InputStream; | |
4 import java.util.Map; | |
5 import java.util.LinkedHashMap; | |
6 import java.util.Collections; | |
1146
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
7 import java.util.List; |
1137 | 8 |
9 | |
10 public class Response { | |
11 public final String protocol = "HTTP/1.1"; | |
12 public volatile Status status = Status.OK; | |
1146
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
13 public final Map<String,Object> headers = Collections.synchronizedMap(new LinkedHashMap<String,Object>()); |
1137 | 14 { |
1148
49fb4e83484f
webserver - change headers to lower case
Franklin Schmidt <fschmidt@gmail.com>
parents:
1146
diff
changeset
|
15 headers.put("server","Luan"); |
1137 | 16 } |
1160 | 17 private static final Body empty = new Body(0,new InputStream(){ |
18 public int read() { return -1; } | |
19 }); | |
20 public volatile Body body = empty; | |
1137 | 21 |
22 public static class Body { | |
23 public final long length; | |
24 public final InputStream content; | |
25 | |
26 public Body(long length,InputStream content) { | |
27 this.length = length; | |
28 this.content = content; | |
29 } | |
30 } | |
31 | |
32 | |
1146
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
33 public void addHeader(String name,String value) { |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
34 Util.add(headers,name,value); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
35 } |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
36 |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
37 public void setCookie(String name,String value,Map<String,String> attributes) { |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
38 StringBuilder buf = new StringBuilder(); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
39 buf.append( Util.urlEncode(name) ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
40 buf.append( '=' ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
41 buf.append( Util.urlEncode(value) ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
42 for( Map.Entry<String,String> entry : attributes.entrySet() ) { |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
43 buf.append( "; " ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
44 buf.append( entry.getKey() ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
45 buf.append( '=' ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
46 buf.append( entry.getValue() ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
47 } |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
48 addHeader( "Set-Cookie", buf.toString() ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
49 } |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
50 |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
51 |
1137 | 52 public String toHeaderString() { |
53 StringBuilder sb = new StringBuilder(); | |
54 sb.append( protocol ) | |
55 .append( ' ' ).append( status.code ) | |
56 .append( ' ' ).append( status.reason ) | |
57 .append( "\r\n" ) | |
58 ; | |
1146
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
59 for( Map.Entry<String,Object> entry : headers.entrySet() ) { |
1137 | 60 String name = entry.getKey(); |
1146
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
61 Object value = entry.getValue(); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
62 if( value instanceof List ) { |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
63 for( Object v : (List)value ) { |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
64 sb.append( name ).append( ": " ).append( v ).append( "\r\n" ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
65 } |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
66 } else { |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
67 sb.append( name ).append( ": " ).append( value ).append( "\r\n" ); |
2dda3c92a473
webserver - implement cookies
Franklin Schmidt <fschmidt@gmail.com>
parents:
1137
diff
changeset
|
68 } |
1137 | 69 } |
70 sb.append( "\r\n" ); | |
71 return sb.toString(); | |
72 } | |
73 } |