public void testProtocolSocketFactory() {

    ProtocolSocketFactory p1 = new DefaultProtocolSocketFactory();
    ProtocolSocketFactory p2 = new DefaultProtocolSocketFactory();

    assertTrue(p1.equals(p2));
    assertTrue(p2.equals(p1));

    p1 = new SSLProtocolSocketFactory();
    p2 = new SSLProtocolSocketFactory();

    assertTrue(p1.equals(p2));
    assertTrue(p2.equals(p1));
  }
예제 #2
0
  /**
   * Establishes a connection to the specified host and port (via a proxy if specified). The
   * underlying socket is created from the {@link ProtocolSocketFactory}.
   *
   * @throws IOException if an attempt to establish the connection results in an I/O error.
   */
  public void open() throws IOException {
    LOG.trace("enter HttpConnection.open()");

    final String host = (proxyHostName == null) ? hostName : proxyHostName;
    final int port = (proxyHostName == null) ? portNumber : proxyPortNumber;
    assertNotOpen();

    if (LOG.isDebugEnabled()) {
      LOG.debug("Open connection to " + host + ":" + port);
    }

    try {
      if (this.socket == null) {
        usingSecureSocket = isSecure() && !isProxied();
        // use the protocol's socket factory unless this is a secure
        // proxied connection
        ProtocolSocketFactory socketFactory = null;
        if (isSecure() && isProxied()) {
          Protocol defaultprotocol = Protocol.getProtocol("http");
          socketFactory = defaultprotocol.getSocketFactory();
        } else {
          socketFactory = this.protocolInUse.getSocketFactory();
        }
        this.socket = socketFactory.createSocket(host, port, localAddress, 0, this.params);
      }

      /*
      "Nagling has been broadly implemented across networks,
      including the Internet, and is generally performed by default
      - although it is sometimes considered to be undesirable in
      highly interactive environments, such as some client/server
      situations. In such cases, nagling may be turned off through
      use of the TCP_NODELAY sockets option." */

      socket.setTcpNoDelay(this.params.getTcpNoDelay());
      socket.setSoTimeout(this.params.getSoTimeout());

      int linger = this.params.getLinger();
      if (linger >= 0) {
        socket.setSoLinger(linger > 0, linger);
      }

      int sndBufSize = this.params.getSendBufferSize();
      if (sndBufSize >= 0) {
        socket.setSendBufferSize(sndBufSize);
      }
      int rcvBufSize = this.params.getReceiveBufferSize();
      if (rcvBufSize >= 0) {
        socket.setReceiveBufferSize(rcvBufSize);
      }
      int outbuffersize = socket.getSendBufferSize();
      if ((outbuffersize > 2048) || (outbuffersize <= 0)) {
        outbuffersize = 2048;
      }
      int inbuffersize = socket.getReceiveBufferSize();
      if ((inbuffersize > 2048) || (inbuffersize <= 0)) {
        inbuffersize = 2048;
      }
      inputStream = new BufferedInputStream(socket.getInputStream(), inbuffersize);
      outputStream = new BufferedOutputStream(socket.getOutputStream(), outbuffersize);
      isOpen = true;
    } catch (IOException e) {
      // Connection wasn't opened properly
      // so close everything out
      closeSocketAndStreams();
      throw e;
    }
  }