private void assertContent() {
   if (!mFirstWrite) return;
   mFirstWrite = false;
   Assert.assertNotNull(mRequest.getHeaders().getHeaders().get("Content-Type"));
   Assert.assertTrue(
       mRequest.getHeaders().getHeaders().get("Transfer-Encoding") != null
           || mRequest.getHeaders().getContentLength() != -1);
 }
示例#2
0
 private void recycleSocket(final AsyncSocket socket, AsyncHttpRequest request) {
   if (socket == null) return;
   URI uri = request.getUri();
   int port = getSchemePort(uri);
   String lookup = computeLookup(uri, port, request);
   // nothing here will block...
   synchronized (this) {
     HashSet<AsyncSocket> sockets = mSockets.get(lookup);
     if (sockets == null) {
       sockets = new HashSet<AsyncSocket>();
       mSockets.put(lookup, sockets);
     }
     final HashSet<AsyncSocket> ss = sockets;
     sockets.add(socket);
     socket.setClosedCallback(
         new CompletedCallback() {
           @Override
           public void onCompleted(Exception ex) {
             synchronized (AsyncSocketMiddleware.this) {
               ss.remove(socket);
             }
             socket.setClosedCallback(null);
           }
         });
   }
 }
    public Entry(
        URI uri,
        RawHeaders varyHeaders,
        AsyncHttpRequest request,
        ResponseHeaders responseHeaders) {
      this.uri = uri.toString();
      this.varyHeaders = varyHeaders;
      this.requestMethod = request.getMethod();
      this.responseHeaders = responseHeaders.getHeaders();

      //            if (isHttps()) {
      //                HttpsURLConnection httpsConnection = (HttpsURLConnection) httpConnection;
      //                cipherSuite = httpsConnection.getCipherSuite();
      //                Certificate[] peerCertificatesNonFinal = null;
      //                try {
      //                    peerCertificatesNonFinal = httpsConnection.getServerCertificates();
      //                } catch (SSLPeerUnverifiedException ignored) {
      //                }
      //                peerCertificates = peerCertificatesNonFinal;
      //                localCertificates = httpsConnection.getLocalCertificates();
      //            } else {
      cipherSuite = null;
      peerCertificates = null;
      localCertificates = null;
      //            }
    }
示例#4
0
  String computeLookup(URI uri, int port, AsyncHttpRequest request) {
    String proxy;
    if (proxyHost != null) proxy = proxyHost + ":" + proxyPort;
    else proxy = "";

    if (request.proxyHost != null) proxy = request.getProxyHost() + ":" + request.proxyPort;

    return uri.getScheme() + "//" + uri.getHost() + ":" + port + "?proxy=" + proxy;
  }
  @Override
  public boolean exchangeHeaders(final OnExchangeHeaderData data) {
    Protocol p = Protocol.get(data.protocol);
    if (p != null && p != Protocol.HTTP_1_0 && p != Protocol.HTTP_1_1)
      return super.exchangeHeaders(data);

    AsyncHttpRequest request = data.request;
    AsyncHttpRequestBody requestBody = data.request.getBody();

    if (requestBody != null) {
      if (requestBody.length() >= 0) {
        request.getHeaders().set("Content-Length", String.valueOf(requestBody.length()));
        data.response.sink(data.socket);
      } else if ("close".equals(request.getHeaders().get("Connection"))) {
        data.response.sink(data.socket);
      } else {
        request.getHeaders().set("Transfer-Encoding", "Chunked");
        data.response.sink(new ChunkedOutputFilter(data.socket));
      }
    }

    String rl = request.getRequestLine().toString();
    String rs = request.getHeaders().toPrefixString(rl);
    request.logv("\n" + rs);

    Util.writeAll(data.socket, rs.getBytes(), data.sendHeadersCallback);

    LineEmitter.StringCallback headerCallback =
        new LineEmitter.StringCallback() {
          Headers mRawHeaders = new Headers();
          String statusLine;

          @Override
          public void onStringAvailable(String s) {
            try {
              s = s.trim();
              if (statusLine == null) {
                statusLine = s;
              } else if (!TextUtils.isEmpty(s)) {
                mRawHeaders.addLine(s);
              } else {
                String[] parts = statusLine.split(" ", 3);
                if (parts.length < 2) throw new Exception(new IOException("Not HTTP"));

                data.response.headers(mRawHeaders);
                String protocol = parts[0];
                data.response.protocol(protocol);
                data.response.code(Integer.parseInt(parts[1]));
                data.response.message(parts.length == 3 ? parts[2] : "");
                data.receiveHeadersCallback.onCompleted(null);

                // socket may get detached after headers (websocket)
                AsyncSocket socket = data.response.socket();
                if (socket == null) return;
                DataEmitter emitter;
                // HEAD requests must not return any data. They still may
                // return content length, etc, which will confuse the body decoder
                if (AsyncHttpHead.METHOD.equalsIgnoreCase(data.request.getMethod())) {
                  emitter = HttpUtil.EndEmitter.create(socket.getServer(), null);
                } else {
                  emitter =
                      HttpUtil.getBodyDecoder(socket, Protocol.get(protocol), mRawHeaders, false);
                }
                data.response.emitter(emitter);
              }
            } catch (Exception ex) {
              data.receiveHeadersCallback.onCompleted(ex);
            }
          }
        };

    LineEmitter liner = new LineEmitter();
    data.socket.setDataCallback(liner);
    liner.setLineCallback(headerCallback);
    return true;
  }