private void acceptConnections() throws Exception { while (true) { Socket socket; try { socket = serverSocket.accept(); } catch (SocketException e) { logger.info(MockWebServer.this + " done accepting connections: " + e.getMessage()); return; } SocketPolicy socketPolicy = dispatcher.peek().getSocketPolicy(); if (socketPolicy == DISCONNECT_AT_START) { dispatchBookkeepingRequest(0, socket); socket.close(); } else { openClientSockets.add(socket); serveConnection(socket); } } } });
if (response.getSocketPolicy() == SocketPolicy.DISCONNECT_AFTER_REQUEST) { socket.close(); return false; if (response.getSocketPolicy() == SocketPolicy.NO_RESPONSE) { if (response.getSocketPolicy() == SocketPolicy.DISCONNECT_AT_END) { socket.close(); return false; } else if (response.getSocketPolicy() == SocketPolicy.SHUTDOWN_INPUT_AT_END) { socket.shutdownInput(); } else if (response.getSocketPolicy() == SocketPolicy.SHUTDOWN_OUTPUT_AT_END) { socket.shutdownOutput();
/** * Respond to CONNECT requests until a SWITCH_TO_SSL_AT_END response is * dispatched. */ private void createTunnel() throws IOException, InterruptedException { BufferedSource source = Okio.buffer(Okio.source(raw)); BufferedSink sink = Okio.buffer(Okio.sink(raw)); while (true) { SocketPolicy socketPolicy = dispatcher.peek().getSocketPolicy(); if (!processOneRequest(raw, source, sink)) { throw new IllegalStateException("Tunnel without any CONNECT!"); } if (socketPolicy == SocketPolicy.UPGRADE_TO_SSL_AT_END) return; } }
? policy.getSocketPolicy() == DISCONNECT_DURING_REQUEST_BODY : policy.getSocketPolicy() == DISCONNECT_DURING_RESPONSE_BODY;
createTunnel(); SocketPolicy socketPolicy = dispatcher.peek().getSocketPolicy(); if (socketPolicy == FAIL_HANDSHAKE) { dispatchBookkeepingRequest(sequenceNumber, raw);
if (response.getSocketPolicy() == SocketPolicy.NO_RESPONSE) { return;