Improved javadocs and logging.
This commit is contained in:
parent
c63ef3e08b
commit
2a765afdc6
|
@ -181,7 +181,7 @@ public class HttpConnectionOverFCGI extends AbstractConnection implements Connec
|
||||||
if (channels.isEmpty())
|
if (channels.isEmpty())
|
||||||
close();
|
close();
|
||||||
else
|
else
|
||||||
failAndClose(new EOFException());
|
failAndClose(new EOFException(String.valueOf(getEndPoint())));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -22,6 +22,16 @@ import java.nio.ByteBuffer;
|
||||||
|
|
||||||
import org.eclipse.jetty.fcgi.FCGI;
|
import org.eclipse.jetty.fcgi.FCGI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Parser for the BEGIN_REQUEST frame body.</p>
|
||||||
|
* <pre>
|
||||||
|
* struct begin_request_body {
|
||||||
|
* ushort role;
|
||||||
|
* ubyte flags;
|
||||||
|
* ubyte[5] reserved;
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
public class BeginRequestContentParser extends ContentParser
|
public class BeginRequestContentParser extends ContentParser
|
||||||
{
|
{
|
||||||
private final ServerParser.Listener listener;
|
private final ServerParser.Listener listener;
|
||||||
|
|
|
@ -21,9 +21,28 @@ package org.eclipse.jetty.fcgi.parser;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
|
||||||
import org.eclipse.jetty.fcgi.FCGI;
|
import org.eclipse.jetty.fcgi.FCGI;
|
||||||
|
import org.eclipse.jetty.util.log.Log;
|
||||||
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Parser for FastCGI frame headers.</p>
|
||||||
|
* <pre>
|
||||||
|
* struct frame_header {
|
||||||
|
* ubyte version;
|
||||||
|
* ubyte type;
|
||||||
|
* ushort requestId;
|
||||||
|
* ushort contentLength;
|
||||||
|
* ubyte paddingLength;
|
||||||
|
* ubyte reserved;
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @see Parser
|
||||||
|
*/
|
||||||
public class HeaderParser
|
public class HeaderParser
|
||||||
{
|
{
|
||||||
|
private static final Logger LOG = Log.getLogger(Parser.class);
|
||||||
|
|
||||||
private State state = State.VERSION;
|
private State state = State.VERSION;
|
||||||
private int cursor;
|
private int cursor;
|
||||||
private int version;
|
private int version;
|
||||||
|
@ -109,6 +128,8 @@ public class HeaderParser
|
||||||
case RESERVED:
|
case RESERVED:
|
||||||
{
|
{
|
||||||
buffer.get();
|
buffer.get();
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Parsed request {} header {} length={}", getRequest(), getFrameType(), getContentLength());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -20,11 +20,44 @@ package org.eclipse.jetty.fcgi.parser;
|
||||||
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
import org.eclipse.jetty.http.HttpField;
|
import org.eclipse.jetty.http.HttpField;
|
||||||
import org.eclipse.jetty.util.log.Log;
|
import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Parser for the PARAMS frame body.</p>
|
||||||
|
* <pre>
|
||||||
|
* struct small_name_small_value_params_body {
|
||||||
|
* ubyte nameLength;
|
||||||
|
* ubyte valueLength;
|
||||||
|
* ubyte[] nameBytes;
|
||||||
|
* ubyte[] valueBytes;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* struct small_name_large_value_params_body {
|
||||||
|
* ubyte nameLength;
|
||||||
|
* uint valueLength;
|
||||||
|
* ubyte[] nameBytes;
|
||||||
|
* ubyte[] valueBytes;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* struct large_name_small_value_params_body {
|
||||||
|
* uint nameLength;
|
||||||
|
* ubyte valueLength;
|
||||||
|
* ubyte[] nameBytes;
|
||||||
|
* ubyte[] valueBytes;
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* struct large_name_large_value_params_body {
|
||||||
|
* uint nameLength;
|
||||||
|
* uint valueLength;
|
||||||
|
* ubyte[] nameBytes;
|
||||||
|
* ubyte[] valueBytes;
|
||||||
|
* }
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
public class ParamsContentParser extends ContentParser
|
public class ParamsContentParser extends ContentParser
|
||||||
{
|
{
|
||||||
private static final Logger LOG = Log.getLogger(ParamsContentParser.class);
|
private static final Logger LOG = Log.getLogger(ParamsContentParser.class);
|
||||||
|
@ -179,7 +212,7 @@ public class ParamsContentParser extends ContentParser
|
||||||
}
|
}
|
||||||
case PARAM:
|
case PARAM:
|
||||||
{
|
{
|
||||||
Charset utf8 = Charset.forName("UTF-8");
|
Charset utf8 = StandardCharsets.UTF_8;
|
||||||
onParam(new String(nameBytes, utf8), new String(valueBytes, utf8));
|
onParam(new String(nameBytes, utf8), new String(valueBytes, utf8));
|
||||||
partialReset();
|
partialReset();
|
||||||
if (length == 0)
|
if (length == 0)
|
||||||
|
|
|
@ -22,6 +22,8 @@ import java.nio.ByteBuffer;
|
||||||
|
|
||||||
import org.eclipse.jetty.fcgi.FCGI;
|
import org.eclipse.jetty.fcgi.FCGI;
|
||||||
import org.eclipse.jetty.http.HttpField;
|
import org.eclipse.jetty.http.HttpField;
|
||||||
|
import org.eclipse.jetty.util.log.Log;
|
||||||
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>The FastCGI protocol exchanges <em>frames</em>.</p>
|
* <p>The FastCGI protocol exchanges <em>frames</em>.</p>
|
||||||
|
@ -39,9 +41,14 @@ import org.eclipse.jetty.http.HttpField;
|
||||||
* </pre>
|
* </pre>
|
||||||
* <p>Depending on the {@code type}, the content may have a different format,
|
* <p>Depending on the {@code type}, the content may have a different format,
|
||||||
* so there are specialized content parsers.</p>
|
* so there are specialized content parsers.</p>
|
||||||
|
*
|
||||||
|
* @see HeaderParser
|
||||||
|
* @see ContentParser
|
||||||
*/
|
*/
|
||||||
public abstract class Parser
|
public abstract class Parser
|
||||||
{
|
{
|
||||||
|
private static final Logger LOG = Log.getLogger(Parser.class);
|
||||||
|
|
||||||
protected final HeaderParser headerParser = new HeaderParser();
|
protected final HeaderParser headerParser = new HeaderParser();
|
||||||
private State state = State.HEADER;
|
private State state = State.HEADER;
|
||||||
private int padding;
|
private int padding;
|
||||||
|
@ -73,6 +80,9 @@ public abstract class Parser
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ContentParser.Result result = contentParser.parse(buffer);
|
ContentParser.Result result = contentParser.parse(buffer);
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Parsed request {} content {} result={}", headerParser.getRequest(), headerParser.getFrameType(), result);
|
||||||
|
|
||||||
if (result == ContentParser.Result.PENDING)
|
if (result == ContentParser.Result.PENDING)
|
||||||
{
|
{
|
||||||
// Not enough data, signal to read/parse more.
|
// Not enough data, signal to read/parse more.
|
||||||
|
|
|
@ -35,8 +35,8 @@ import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>The parser for STDOUT type frames.</p>
|
* <p>The parser for STDOUT type frame bodies.</p>
|
||||||
* <p>STDOUT frames contain both the HTTP headers (but not the response line)
|
* <p>STDOUT frame bodies contain both the HTTP headers (but not the response line)
|
||||||
* and the HTTP content (either Content-Length delimited or chunked).</p>
|
* and the HTTP content (either Content-Length delimited or chunked).</p>
|
||||||
* <p>For this reason, a special HTTP parser is used to parse the frames body.
|
* <p>For this reason, a special HTTP parser is used to parse the frames body.
|
||||||
* This special HTTP parser is configured to skip the response line, and to
|
* This special HTTP parser is configured to skip the response line, and to
|
||||||
|
@ -99,12 +99,12 @@ public class ResponseContentParser extends StreamContentParser
|
||||||
|
|
||||||
public boolean parse(ByteBuffer buffer)
|
public boolean parse(ByteBuffer buffer)
|
||||||
{
|
{
|
||||||
if (LOG.isDebugEnabled())
|
|
||||||
LOG.debug("Response {} {} content {} {}", request, FCGI.StreamType.STD_OUT, state, buffer);
|
|
||||||
|
|
||||||
int remaining = buffer.remaining();
|
int remaining = buffer.remaining();
|
||||||
while (remaining > 0)
|
while (remaining > 0)
|
||||||
{
|
{
|
||||||
|
if (LOG.isDebugEnabled())
|
||||||
|
LOG.debug("Response {} {}, state {} {}", request, FCGI.StreamType.STD_OUT, state, buffer);
|
||||||
|
|
||||||
switch (state)
|
switch (state)
|
||||||
{
|
{
|
||||||
case HEADERS:
|
case HEADERS:
|
||||||
|
|
|
@ -25,8 +25,8 @@ import org.eclipse.jetty.util.log.Log;
|
||||||
import org.eclipse.jetty.util.log.Logger;
|
import org.eclipse.jetty.util.log.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>A stream content parser parses frames of type STDIN, STDOUT and STDERR.</p>
|
* <p>A stream content parser parses frame bodies of type STDIN, STDOUT and STDERR.</p>
|
||||||
* <p>STDOUT frames are handled specially by {@link ResponseContentParser}.
|
* <p>STDOUT frame bodies are handled specially by {@link ResponseContentParser}.
|
||||||
*/
|
*/
|
||||||
public class StreamContentParser extends ContentParser
|
public class StreamContentParser extends ContentParser
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue