}
if (frame instanceof SpdyPingStreamSourceChannel) {
handlePing((SpdyPingStreamSourceChannel) frame);
} else if (frame instanceof SpdySynStreamStreamSourceChannel) {
//we have a request
final SpdySynStreamStreamSourceChannel dataChannel = (SpdySynStreamStreamSourceChannel) frame;
final SpdyServerConnection connection = new SpdyServerConnection(channel, dataChannel, undertowOptions, bufferSize);
final HttpServerExchange exchange = new HttpServerExchange(connection, dataChannel.getHeaders(), dataChannel.getResponseChannel().getHeaders(), maxEntitySize);
dataChannel.setMaxStreamSize(maxEntitySize);
exchange.setRequestScheme(exchange.getRequestHeaders().getFirst(SCHEME));
exchange.setProtocol(new HttpString(exchange.getRequestHeaders().getFirst(VERSION)));
exchange.setRequestMethod(new HttpString(exchange.getRequestHeaders().getFirst(METHOD)));
exchange.getRequestHeaders().put(Headers.HOST, exchange.getRequestHeaders().getFirst(HOST));
final String path = exchange.getRequestHeaders().getFirst(PATH);
setRequestPath(exchange, path, encoding, allowEncodingSlash, decodeBuffer);
SSLSession session = channel.getSslSession();
if(session != null) {
connection.setSslSessionInfo(new SpdySslSessionInfo(channel));
}
dataChannel.getResponseChannel().setCompletionListener(new ChannelListener<SpdySynReplyStreamSinkChannel>() {
@Override
public void handleEvent(SpdySynReplyStreamSinkChannel channel) {
Connectors.terminateResponse(exchange);
}
});
if(!dataChannel.isOpen()) {
Connectors.terminateRequest(exchange);
} else {
dataChannel.setCompletionListener(new ChannelListener<SpdySynStreamStreamSourceChannel>() {
@Override
public void handleEvent(SpdySynStreamStreamSourceChannel channel) {
Connectors.terminateRequest(exchange);
}
});