Add new socket mode DISCONNECT_AFTER_READING_REQUEST

Useful for writing tests related to POST requests with
retryable and unretryable bodies.

(cherry picked from 3088bcc1d22f3e163e5e7ecbc997daadfdaaeec3)

bug: 10211309

Change-Id: Icb042d5875c4651348103be4eed7a2e248449b52
diff --git a/src/main/java/com/google/mockwebserver/MockWebServer.java b/src/main/java/com/google/mockwebserver/MockWebServer.java
index 5e3a1d7..f7930bc 100644
--- a/src/main/java/com/google/mockwebserver/MockWebServer.java
+++ b/src/main/java/com/google/mockwebserver/MockWebServer.java
@@ -330,6 +330,10 @@
                 requestCount.incrementAndGet();
                 requestQueue.add(request);
                 MockResponse response = dispatcher.dispatch(request);
+                if (response.getSocketPolicy() == SocketPolicy.DISCONNECT_AFTER_READING_REQUEST) {
+                  logger.info("Received request: " + request + " and disconnected without responding");
+                  return false;
+                }
                 writeResponse(out, response);
                 if (response.getSocketPolicy() == SocketPolicy.DISCONNECT_AT_END) {
                     in.close();
diff --git a/src/main/java/com/google/mockwebserver/SocketPolicy.java b/src/main/java/com/google/mockwebserver/SocketPolicy.java
index 3a6797b..121fe80 100644
--- a/src/main/java/com/google/mockwebserver/SocketPolicy.java
+++ b/src/main/java/com/google/mockwebserver/SocketPolicy.java
@@ -51,6 +51,12 @@
     DISCONNECT_AT_START,
 
     /**
+     * Request immediate close of connection after reading the entire
+     * request (and before any response is sent).
+     */
+    DISCONNECT_AFTER_READING_REQUEST,
+
+    /**
      * Don't trust the client during the SSL handshake.
      */
     FAIL_HANDSHAKE,