Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/http/HttpChannelOverSPDY.java')
-rw-r--r--jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/http/HttpChannelOverSPDY.java246
1 files changed, 0 insertions, 246 deletions
diff --git a/jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/http/HttpChannelOverSPDY.java b/jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/http/HttpChannelOverSPDY.java
deleted file mode 100644
index f336f4f47c..0000000000
--- a/jetty-spdy/spdy-http-server/src/main/java/org/eclipse/jetty/spdy/server/http/HttpChannelOverSPDY.java
+++ /dev/null
@@ -1,246 +0,0 @@
-//
-// ========================================================================
-// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
-// ------------------------------------------------------------------------
-// All rights reserved. This program and the accompanying materials
-// are made available under the terms of the Eclipse Public License v1.0
-// and Apache License v2.0 which accompanies this distribution.
-//
-// The Eclipse Public License is available at
-// http://www.eclipse.org/legal/epl-v10.html
-//
-// The Apache License v2.0 is available at
-// http://www.opensource.org/licenses/apache2.0.php
-//
-// You may elect to redistribute this code under either of these licenses.
-// ========================================================================
-//
-
-package org.eclipse.jetty.spdy.server.http;
-
-import java.nio.ByteBuffer;
-
-import org.eclipse.jetty.http.HttpField;
-import org.eclipse.jetty.http.HttpMethod;
-import org.eclipse.jetty.http.HttpVersion;
-import org.eclipse.jetty.io.EndPoint;
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.HttpChannel;
-import org.eclipse.jetty.server.HttpConfiguration;
-import org.eclipse.jetty.server.HttpTransport;
-import org.eclipse.jetty.spdy.api.ByteBufferDataInfo;
-import org.eclipse.jetty.spdy.api.DataInfo;
-import org.eclipse.jetty.spdy.api.Stream;
-import org.eclipse.jetty.spdy.http.HTTPSPDYHeader;
-import org.eclipse.jetty.util.BufferUtil;
-import org.eclipse.jetty.util.Fields;
-import org.eclipse.jetty.util.log.Log;
-import org.eclipse.jetty.util.log.Logger;
-
-public class HttpChannelOverSPDY extends HttpChannel<DataInfo>
-{
- private static final Logger LOG = Log.getLogger(HttpChannelOverSPDY.class);
-
- private final Stream stream;
- private boolean dispatched; // Guarded by synchronization on tasks
- private boolean redispatch; // Guarded by synchronization on tasks
- private boolean headersComplete;
-
- public HttpChannelOverSPDY(Connector connector, HttpConfiguration configuration, EndPoint endPoint, HttpTransport transport, HttpInputOverSPDY input, Stream stream)
- {
- super(connector, configuration, endPoint, transport, input);
- this.stream = stream;
- }
-
- @Override
- public long getIdleTimeout()
- {
- return stream.getIdleTimeout();
- }
-
- @Override
- public boolean headerComplete()
- {
- headersComplete = true;
- return super.headerComplete();
- }
-
- private void dispatch()
- {
- synchronized (this)
- {
- if (dispatched)
- redispatch=true;
- else
- {
- if (LOG.isDebugEnabled())
- LOG.debug("Dispatch {}", this);
- dispatched=true;
- execute(this);
- }
- }
- }
-
- @Override
- public void run()
- {
- boolean execute=true;
-
- while(execute)
- {
- try
- {
- if (LOG.isDebugEnabled())
- LOG.debug("Executing {}",this);
- super.run();
- }
- finally
- {
- if (LOG.isDebugEnabled())
- LOG.debug("Completing {}", this);
- synchronized (this)
- {
- dispatched = redispatch;
- redispatch=false;
- execute=dispatched;
- }
- }
- }
- }
-
-
- public void requestStart(final Fields headers, final boolean endRequest)
- {
- if (!headers.isEmpty())
- requestHeaders(headers, endRequest);
- }
-
- public void requestHeaders(Fields headers, boolean endRequest)
- {
- boolean proceed = performBeginRequest(headers);
- if (!proceed)
- return;
-
- performHeaders(headers);
-
- if (endRequest)
- {
- boolean dispatch = headerComplete();
- if (messageComplete())
- dispatch=true;
- if (dispatch)
- dispatch();
- }
- }
-
- public void requestContent(final DataInfo dataInfo, boolean endRequest)
- {
- boolean dispatch=false;
- if (!headersComplete && headerComplete())
- dispatch=true;
-
- if (LOG.isDebugEnabled())
- LOG.debug("HTTP > {} bytes of content", dataInfo.length());
-
- // We need to copy the dataInfo since we do not know when its bytes
- // will be consumed. When the copy is consumed, we consume also the
- // original, so the implementation can send a window update.
- ByteBuffer copyByteBuffer = dataInfo.asByteBuffer(false);
- ByteBufferDataInfo copyDataInfo = new ByteBufferDataInfo(copyByteBuffer, dataInfo.isClose())
- {
- @Override
- public void consume(int delta)
- {
- super.consume(delta);
- dataInfo.consume(delta);
- }
- };
- if (LOG.isDebugEnabled())
- LOG.debug("Queuing last={} content {}", endRequest, copyDataInfo);
-
- if (content(copyDataInfo))
- dispatch=true;
-
- if (endRequest && messageComplete())
- dispatch=true;
-
- if (dispatch)
- dispatch();
- }
-
- @Override
- public boolean messageComplete()
- {
- super.messageComplete();
- return false;
- }
-
- private boolean performBeginRequest(Fields headers)
- {
- short version = stream.getSession().getVersion();
- Fields.Field methodHeader = headers.get(HTTPSPDYHeader.METHOD.name(version));
- Fields.Field uriHeader = headers.get(HTTPSPDYHeader.URI.name(version));
- Fields.Field versionHeader = headers.get(HTTPSPDYHeader.VERSION.name(version));
-
- if (methodHeader == null || uriHeader == null || versionHeader == null)
- {
- badMessage(400, "Missing required request line elements");
- return false;
- }
-
- HttpMethod httpMethod = HttpMethod.fromString(methodHeader.getValue());
- HttpVersion httpVersion = HttpVersion.fromString(versionHeader.getValue());
-
- // TODO should handle URI as byte buffer as some bad clients send WRONG encodings in query string
- // that we have to deal with
- ByteBuffer uri = BufferUtil.toBuffer(uriHeader.getValue());
-
- if (LOG.isDebugEnabled())
- LOG.debug("HTTP > {} {} {}", httpMethod, uriHeader.getValue(), httpVersion);
- startRequest(httpMethod, httpMethod.asString(), uri, httpVersion);
-
- Fields.Field schemeHeader = headers.get(HTTPSPDYHeader.SCHEME.name(version));
- if (schemeHeader != null)
- getRequest().setScheme(schemeHeader.getValue());
- return true;
- }
-
- private void performHeaders(Fields headers)
- {
- for (Fields.Field header : headers)
- {
- String name = header.getName();
-
- // Skip special SPDY headers, unless it's the "host" header
- HTTPSPDYHeader specialHeader = HTTPSPDYHeader.from(stream.getSession().getVersion(), name);
- if (specialHeader != null)
- {
- if (specialHeader == HTTPSPDYHeader.HOST)
- name = "host";
- else
- continue;
- }
-
- switch (name)
- {
- case "connection":
- case "keep-alive":
- case "proxy-connection":
- case "transfer-encoding":
- {
- // Spec says to ignore these headers
- continue;
- }
- default:
- {
- // Spec says headers must be single valued
- String value = header.getValue();
- if (LOG.isDebugEnabled())
- LOG.debug("HTTP > {}: {}", name, value);
- parsedHeader(new HttpField(name,value));
- break;
- }
- }
- }
- }
-}

Back to the top