comparison src/luan/lib/webserver/Response.java @ 1347:643cf1c37723

move webserver to lib and bug fixes
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 25 Feb 2019 13:02:33 -0700
parents src/luan/webserver/Response.java@668f29bc52ea
children
comparison
equal deleted inserted replaced
1346:efd1c6380f2c 1347:643cf1c37723
1 package luan.lib.webserver;
2
3 import java.io.InputStream;
4 import java.io.PrintWriter;
5 import java.util.Map;
6 import java.util.LinkedHashMap;
7 import java.util.Collections;
8 import java.util.List;
9
10
11 public class Response {
12 public final String protocol = "HTTP/1.1";
13 public volatile Status status = Status.OK;
14 public final Map<String,Object> headers = Collections.synchronizedMap(new LinkedHashMap<String,Object>());
15 {
16 headers.put("server","Luan");
17 }
18 private static final Body empty = new Body(0,new InputStream(){
19 public int read() { return -1; }
20 });
21 public volatile Body body = empty;
22
23 public static class Body {
24 public final long length;
25 public final InputStream content;
26
27 public Body(long length,InputStream content) {
28 this.length = length;
29 this.content = content;
30 }
31 }
32
33
34 public void addHeader(String name,String value) {
35 Util.add(headers,name,value);
36 }
37
38 public void setCookie(String name,String value,Map<String,String> attributes) {
39 StringBuilder buf = new StringBuilder();
40 buf.append( Util.urlEncode(name) );
41 buf.append( '=' );
42 buf.append( Util.urlEncode(value) );
43 for( Map.Entry<String,String> entry : attributes.entrySet() ) {
44 buf.append( "; " );
45 buf.append( entry.getKey() );
46 buf.append( '=' );
47 buf.append( entry.getValue() );
48 }
49 addHeader( "Set-Cookie", buf.toString() );
50 }
51
52
53 public String toHeaderString() {
54 StringBuilder sb = new StringBuilder();
55 sb.append( protocol )
56 .append( ' ' ).append( status.code )
57 .append( ' ' ).append( status.reason )
58 .append( "\r\n" )
59 ;
60 for( Map.Entry<String,Object> entry : headers.entrySet() ) {
61 String name = entry.getKey();
62 Object value = entry.getValue();
63 if( value instanceof List ) {
64 for( Object v : (List)value ) {
65 sb.append( name ).append( ": " ).append( v ).append( "\r\n" );
66 }
67 } else {
68 sb.append( name ).append( ": " ).append( value ).append( "\r\n" );
69 }
70 }
71 sb.append( "\r\n" );
72 return sb.toString();
73 }
74
75
76 public static Response errorResponse(Status status,String text) {
77 Response response = new Response();
78 response.status = status;
79 response.headers.put( "content-type", "text/plain; charset=utf-8" );
80 PrintWriter writer = new PrintWriter( new ResponseOutputStream(response) );
81 writer.write( text );
82 writer.close();
83 return response;
84 }
85 }