@Override public MockResponse dispatch(RecordedRequest request) throws InterruptedException { MockResponse response = responseQueue.take(); if (response.getBody() != null) { /* * "URL" must be used in the service catalog sample (such as * access.json or accessRackspace.json) for the declared service * endpoints. */ String newBody = urlTokenPattern.matcher(new String(response.getBody().readByteArray())).replaceAll(": \"" + url.toString()); response = response.setBody(newBody); } return response; }
private void pushPromises(FramedStream stream, List<PushPromise> promises) throws IOException { for (PushPromise pushPromise : promises) { List<Header> pushedHeaders = new ArrayList<>(); pushedHeaders.add(new Header(stream.getConnection().getProtocol() == Protocol.SPDY_3 ? Header.TARGET_HOST : Header.TARGET_AUTHORITY, url(pushPromise.getPath()).host())); pushedHeaders.add(new Header(Header.TARGET_METHOD, pushPromise.getMethod())); pushedHeaders.add(new Header(Header.TARGET_PATH, pushPromise.getPath())); Headers pushPromiseHeaders = pushPromise.getHeaders(); for (int i = 0, size = pushPromiseHeaders.size(); i < size; i++) { pushedHeaders.add(new Header(pushPromiseHeaders.name(i), pushPromiseHeaders.value(i))); } String requestLine = pushPromise.getMethod() + ' ' + pushPromise.getPath() + " HTTP/1.1"; List<Integer> chunkSizes = Collections.emptyList(); // No chunked encoding for SPDY. requestQueue.add(new RecordedRequest(requestLine, pushPromise.getHeaders(), chunkSizes, 0, new Buffer(), sequenceNumber.getAndIncrement(), socket)); boolean hasBody = pushPromise.getResponse().getBody() != null; FramedStream pushedStream = stream.getConnection().pushStream(stream.getId(), pushedHeaders, hasBody); writeResponse(pushedStream, pushPromise.getResponse()); } } }
Buffer body = response.getBody(); boolean closeStreamAfterHeaders = body != null || !response.getPushPromises().isEmpty(); stream.reply(spdyHeaders, closeStreamAfterHeaders);
private void writeHttpResponse(Socket socket, BufferedSink sink, MockResponse response) throws IOException { sink.writeUtf8(response.getStatus()); sink.writeUtf8("\r\n"); Headers headers = response.getHeaders(); for (int i = 0, size = headers.size(); i < size; i++) { sink.writeUtf8(headers.name(i)); sink.writeUtf8(": "); sink.writeUtf8(headers.value(i)); sink.writeUtf8("\r\n"); } sink.writeUtf8("\r\n"); sink.flush(); Buffer body = response.getBody(); if (body == null) return; sleepIfDelayed(response); throttledTransfer(response, socket, body, sink, body.size(), false); }