/*
* Copyright (c) 2011-2013 The original author or authors
* ------------------------------------------------------
* 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 io.vertx.core.http.impl;
import io.netty.handler.codec.http2.Http2Exception;
import io.netty.handler.codec.http2.Http2Stream;
import io.vertx.codegen.annotations.Nullable;
import io.vertx.core.Handler;
import io.vertx.core.MultiMap;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.http.HttpClientRequest;
import io.vertx.core.http.HttpClientResponse;
import io.vertx.core.http.HttpConnection;
import io.vertx.core.http.HttpMethod;
import io.vertx.core.http.HttpVersion;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
class HttpClientRequestPushPromise extends HttpClientRequestBase {
private final Http2ClientConnection conn;
private final Http2ClientConnection.Http2ClientStream stream;
private final String rawMethod;
private final MultiMap headers;
private Handler<HttpClientResponse> respHandler;
public HttpClientRequestPushPromise(
Http2ClientConnection conn,
Http2Stream stream,
HttpClientImpl client,
boolean ssl,
HttpMethod method,
String rawMethod,
String uri,
String host,
int port,
MultiMap headers) throws Http2Exception {
super(client, ssl, method, host, port, uri);
this.conn = conn;
this.stream = new Http2ClientConnection.Http2ClientStream(conn, this, stream, false);
this.rawMethod = rawMethod;
this.headers = headers;
}
Http2ClientConnection.Http2ClientStream getStream() {
return stream;
}
@Override
protected Object getLock() {
return this; //
}
@Override
protected void doHandleResponse(HttpClientResponseImpl resp, long timeoutMs) {
synchronized (getLock()) {
if (respHandler != null) {
respHandler.handle(resp);
}
}
}
@Override
protected void checkComplete() {
}
@Override
public HttpClientRequest handler(Handler<HttpClientResponse> handler) {
synchronized (getLock()) {
respHandler = handler;
return this;
}
}
@Override
public HttpConnection connection() {
return conn;
}
@Override
public HttpClientRequest connectionHandler(@Nullable Handler<HttpConnection> handler) {
return this;
}
@Override
public boolean reset(long code) {
synchronized (conn) {
stream.resetRequest(code);
return true;
}
}
@Override
public boolean isChunked() {
return false;
}
@Override
public HttpMethod method() {
return method;
}
@Override
public String getRawMethod() {
return rawMethod;
}
@Override
public HttpClientRequest setRawMethod(String method) {
throw new IllegalStateException();
}
@Override
public String uri() {
return uri;
}
@Override
public String getHost() {
return host;
}
@Override
public MultiMap headers() {
return headers;
}
@Override
public HttpClientRequest write(Buffer data) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest setWriteQueueMaxSize(int maxSize) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest drainHandler(Handler<Void> handler) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest pause() {
throw new IllegalStateException();
}
@Override
public HttpClientRequest resume() {
throw new IllegalStateException();
}
@Override
public HttpClientRequest endHandler(Handler<Void> endHandler) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest setFollowRedirects(boolean followRedirect) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest setChunked(boolean chunked) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest setHost(String host) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest putHeader(String name, String value) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest putHeader(CharSequence name, CharSequence value) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest putHeader(String name, Iterable<String> values) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest putHeader(CharSequence name, Iterable<CharSequence> values) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest write(String chunk) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest write(String chunk, String enc) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest continueHandler(@Nullable Handler<Void> handler) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest sendHead() {
throw new IllegalStateException();
}
@Override
public HttpClientRequest sendHead(Handler<HttpVersion> completionHandler) {
throw new IllegalStateException();
}
@Override
public void end(String chunk) {
throw new IllegalStateException();
}
@Override
public void end(String chunk, String enc) {
throw new IllegalStateException();
}
@Override
public void end(Buffer chunk) {
throw new IllegalStateException();
}
@Override
public HttpClientRequest pushHandler(Handler<HttpClientRequest> handler) {
throw new IllegalStateException();
}
@Override
public void end() {
throw new IllegalStateException();
}
@Override
public boolean writeQueueFull() {
throw new IllegalStateException();
}
@Override
public HttpClientRequest writeCustomFrame(int type, int flags, Buffer payload) {
throw new UnsupportedOperationException("Cannot write frame with HTTP/1.x ");
}
}