package ecologylab.oodss.distributed.server.clientsessionmanager;
import java.nio.channels.SelectionKey;
import ecologylab.collections.Scope;
import ecologylab.net.ParsedURL;
import ecologylab.oodss.distributed.impl.NIOServerIOThread;
import ecologylab.oodss.distributed.server.NIOServerProcessor;
import ecologylab.oodss.messages.RequestMessage;
import ecologylab.oodss.messages.ResponseMessage;
import ecologylab.oodss.messages.UpdateMessage;
import ecologylab.serialization.SimplTypesScope;
public abstract class HTTPClientSessionManager<S extends Scope, PARENT extends Scope> extends TCPClientSessionManager<S, PARENT>
{
static final String HTTP_VERSION = "HTTP/1.1";
static final String HTTP_RESPONSE_HEADERS = HTTP_VERSION + " 303 See Other" + "\r\n";
static final String HTTP_APPEND = " " + HTTP_VERSION;
static final int HTTP_APPEND_LENGTH = HTTP_APPEND.length();
static final String HTTP_CONTENT_TYPE = "Content-Type: text/plain; charset=US-ASCII\r\n";
protected boolean ALLOW_HTTP_STYLE_REQUESTS = true;
public HTTPClientSessionManager(String sessionId, int maxPacketSize, NIOServerIOThread server,
NIOServerProcessor frontend, SelectionKey socket, SimplTypesScope translationScope,
PARENT registry)
{
super(sessionId, maxPacketSize, server, frontend, socket, translationScope, registry);
}
/**
* @see ecologylab.oodss.distributed.server.clientsessionmanager.ClientSessionManager#clearOutgoingMessageHeaderBuffer(java.lang.StringBuilder)
*/
@Override
protected void clearOutgoingMessageHeaderBuffer(StringBuilder outgoingMessageHeaderBuf)
{
outgoingMessageHeaderBuf.delete(0, outgoingMessageHeaderBuf.length());
}
/**
* @see ecologylab.oodss.distributed.server.clientsessionmanager.ClientSessionManager#createHeader(java.lang.StringBuilder,
* java.lang.StringBuilder, RequestMessage, ResponseMessage)
*/
@Override
protected void createHeader(int messageSize, StringBuilder outgoingMessageHeaderBuf,
RequestMessage incomingRequest, ResponseMessage outgoingResponse, long uid)
{
boolean isOK = outgoingResponse.isOK();
ParsedURL responseUrl = isOK ? incomingRequest.okRedirectUrl(localScope) : incomingRequest
.errorRedirectUrl(localScope);
if (responseUrl != null)
{
debugA("responseUrl: " + responseUrl);
if (responseUrl != null)
{
outgoingMessageHeaderBuf.append(HTTP_RESPONSE_HEADERS
+ HTTP_CONTENT_TYPE
+ "Location: "
+ responseUrl.toString());
}
debugA("Server sending response!!!\n" + outgoingMessageHeaderBuf.toString());
}
else
warning("isOK=" + isOK + " but responseUrl=null. Can't send redirect response.");
}
@Override
protected void makeUpdateHeader(int messageSize, StringBuilder headerBufOutgoing,
UpdateMessage<?> update)
{
}
/**
* @see ecologylab.oodss.distributed.server.clientsessionmanager.TCPClientSessionManager#clearOutgoingMessageBuffer(java.lang.StringBuilder)
*/
@Override
protected void clearOutgoingMessageBuffer(StringBuilder outgoingMessageBuf)
{
}
/**
* @see ecologylab.oodss.distributed.server.clientsessionmanager.TCPClientSessionManager#prepareBuffers(java.lang.StringBuilder,
* java.lang.StringBuilder, java.lang.StringBuilder)
*/
@Override
protected void prepareBuffers(StringBuilder outgoingMessageHeaderBuf)
{
}
/**
* @see ecologylab.oodss.distributed.server.clientsessionmanager.BaseSessionManager#isInitialized()
*/
@Override
public boolean isInitialized()
{
return true;
}
}