view src/luan/webserver/Response.java @ 1148:49fb4e83484f

webserver - change headers to lower case
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 04 Feb 2018 17:11:06 -0700
parents 2dda3c92a473
children 4beabb087be6
line wrap: on
line source

package luan.webserver;

import java.io.InputStream;
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.Collections;
import java.util.List;


public class Response {
	public final String protocol = "HTTP/1.1";
	public volatile Status status = Status.OK;
	public final Map<String,Object> headers = Collections.synchronizedMap(new LinkedHashMap<String,Object>());
	{
		headers.put("server","Luan");
	}
	public volatile Body body;

	public static class Body {
		public final long length;
		public final InputStream content;
	
		public Body(long length,InputStream content) {
			this.length = length;
			this.content = content;
		}
	}


	public void addHeader(String name,String value) {
		Util.add(headers,name,value);
	}

	public void setCookie(String name,String value,Map<String,String> attributes) {
		StringBuilder buf = new StringBuilder();
		buf.append( Util.urlEncode(name) );
		buf.append( '=' );
		buf.append( Util.urlEncode(value) );
		for( Map.Entry<String,String> entry : attributes.entrySet() ) {
			buf.append( "; " );
			buf.append( entry.getKey() );
			buf.append( '=' );
			buf.append( entry.getValue() );
		}
		addHeader( "Set-Cookie", buf.toString() );
	}


	public String toHeaderString() {
		StringBuilder sb = new StringBuilder();
		sb.append( protocol )
			.append( ' ' ).append( status.code )
			.append( ' ' ).append( status.reason )
			.append( "\r\n" )
		;
		for( Map.Entry<String,Object> entry : headers.entrySet() ) {
			String name = entry.getKey();
			Object value = entry.getValue();
			if( value instanceof List ) {
				for( Object v : (List)value ) {
					sb.append( name ).append( ": " ).append( v ).append( "\r\n" );
				}
			} else {
				sb.append( name ).append( ": " ).append( value ).append( "\r\n" );
			}
		}
		sb.append( "\r\n" );
		return sb.toString();
	}
}