@Override public okhttp3.Response intercept(Chain chain) throws IOException {
okhttp3.Request request = chain.request();
if (isRunning && !isHostIgnored(request)) {
if (!tape.isPresent()) {
return buildResponse(request, 403, "No tape");
} else {
Tape tape = this.tape.get();
Request recordedRequest = OkHttpRequestAdapter.adapt(request);
if (tape.isReadable() && tape.seek(recordedRequest)) {
return replayResponse(request, tape, recordedRequest);
} else {
LOG.warning(String.format("no matching request found on tape '%s' for request %s %s",
tape.getName(), request.method(), request.url().toString()));
if (tape.getMode() == TapeMode.READ_ONLY_QUIET) {
return buildResponse(request, 404, "No matching response");
}
if (!tape.isWritable()) {
throwTapeNotWritable(request.method() + " " + request.url().toString());
}
return recordResponse(request, tape, recordedRequest, chain.proceed(request));
}
}
} else {
return chain.proceed(request);
}
}