private HttpChannelOverSPDY newHttpChannelOverSPDY(Stream pushStream, Fields pushRequestHeaders) { HttpTransport transport = new PushHttpTransportOverSPDY(connector, configuration, endPoint, pushStrategy, pushStream, pushRequestHeaders, this, version); HttpInputOverSPDY input = new HttpInputOverSPDY(); return new HttpChannelOverSPDY(connector, configuration, endPoint, transport, input, pushStream); }
@Override protected ServerSessionFrameListener provideServerSessionFrameListener(Connector connector, EndPoint endPoint) { return new HTTPServerFrameListener(connector,endPoint); }
@Override public void send(ByteBuffer responseBodyContent, boolean lastContent, Callback callback) { // TODO can this be more efficient? send(null, responseBodyContent, lastContent, callback); }
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 HTTPSPDYServerConnector(Server server, HttpConfiguration config, SslContextFactory sslContextFactory, Map<Short, PushStrategy> pushStrategies) { super(server, AbstractConnectionFactory.getFactories(sslContextFactory, sslContextFactory == null ? new ConnectionFactory[]{new HttpConnectionFactory(config)} : new ConnectionFactory[]{new NPNServerConnectionFactory("spdy/3", "spdy/2", "http/1.1"), new HttpConnectionFactory(config), new HTTPSPDYServerConnectionFactory(SPDY.V3, config, getPushStrategy(SPDY.V3, pushStrategies)), new HTTPSPDYServerConnectionFactory(SPDY.V2, config, getPushStrategy(SPDY.V2, pushStrategies))})); NPNServerConnectionFactory npnConnectionFactory = getConnectionFactory(NPNServerConnectionFactory.class); if (npnConnectionFactory != null) npnConnectionFactory.setDefaultProtocol("http/1.1"); }
public HTTPSPDYServerConnectionFactory( @Name("version") int version, @Name("config") HttpConfiguration config, @Name("pushStrategy") PushStrategy pushStrategy) { super(version); this.pushStrategy = pushStrategy; httpConfiguration = config; addBean(httpConfiguration); }
@Override public void completed() { Stream stream = getStream(); if (LOG.isDebugEnabled()) LOG.debug("Resource pushed for {} on {}", getRequestHeaders().get(HTTPSPDYHeader.URI.name(version)), stream); coordinator.complete(); } }
private static PushStrategy getPushStrategy(short version, Map<Short, PushStrategy> pushStrategies) { PushStrategy pushStrategy = pushStrategies.get(version); if (pushStrategy == null) pushStrategy = new PushStrategy.None(); return pushStrategy; } }
public void requestStart(final Fields headers, final boolean endRequest) { if (!headers.isEmpty()) requestHeaders(headers, endRequest); }
public void setPushRegexps(List<String> pushRegexps) { pushRegexps.clear(); addPushRegexps(pushRegexps); }
private boolean isMainResource(String url, Fields responseHeaders) { return !isPushResource(url, responseHeaders); }
public HTTPSPDYServerConnector(Server server, short version, HttpConfiguration httpConfiguration, PushStrategy push) { super(server, new HTTPSPDYServerConnectionFactory(version, httpConfiguration, push)); }
private void complete() { if (!active.compareAndSet(true, false)) throw new IllegalStateException(); sendNextResourceData(); }
private Set<String> getPushResources(String absoluteURL) { Set<String> result = Collections.emptySet(); if (mainResources.get(absoluteURL) != null) result = mainResources.get(absoluteURL).getResources(); return result; }
private void coordinate() { if (LOG.isDebugEnabled()) LOG.debug("Pushing resources: {}", resources); // Must send all push frames to the client at once before we // return from this method and send the main resource data for (String pushResource : resources) pushResource(pushResource); }
private MainResource getOrCreateMainResource(String absoluteURL) { MainResource mainResource = mainResources.get(absoluteURL); if (mainResource == null) { if (LOG.isDebugEnabled()) LOG.debug("Creating new main resource for {}", absoluteURL); MainResource value = new MainResource(absoluteURL); mainResource = mainResources.putIfAbsent(absoluteURL, value); if (mainResource == null) mainResource = value; } return mainResource; }
private void dispatch() { synchronized (this) { if (dispatched) redispatch=true; else { if (LOG.isDebugEnabled()) LOG.debug("Dispatch {}", this); dispatched=true; execute(this); } } }
public HttpTransportOverSPDY(Connector connector, HttpConfiguration configuration, EndPoint endPoint, PushStrategy pushStrategy, Stream stream, Fields requestHeaders) { this.connector = connector; this.configuration = configuration; this.endPoint = endPoint; this.pushStrategy = pushStrategy == null ? new PushStrategy.None() : pushStrategy; this.stream = stream; this.requestHeaders = requestHeaders; Session session = stream.getSession(); this.version = session.getVersion(); }
@Override public void onHeaders(Stream stream, HeadersInfo headersInfo) { if (LOG.isDebugEnabled()) LOG.debug("Received {} on {}", headersInfo, stream); HttpChannelOverSPDY channel = (HttpChannelOverSPDY)stream.getAttribute(CHANNEL_ATTRIBUTE); channel.requestHeaders(headersInfo.getHeaders(), headersInfo.isClose()); }
public ReferrerPushStrategy() { List<String> defaultPushRegexps = Arrays.asList(".*\\.css", ".*\\.js", ".*\\.png", ".*\\.jpeg", ".*\\.jpg", ".*\\.gif", ".*\\.ico"); addPushRegexps(defaultPushRegexps); List<String> defaultPushContentTypes = Arrays.asList( "text/css", "text/javascript", "application/javascript", "application/x-javascript", "image/png", "image/x-png", "image/jpeg", "image/gif", "image/x-icon", "image/vnd.microsoft.icon"); this.pushContentTypes.addAll(defaultPushContentTypes); }