if (!this.sdcKeysManager.hasSessionEncryption()) {
LOG.warn("Cannot decrypt message for fetch protocol: no session encryption.");
return;
}
FetchRequest request;
try {
request = sdcKeysManager.getSessionEncryption().getFrom(frameInfo,
new SessionEncryption.Parse<FetchRequest>() {
public FetchRequest parse(ByteString s) throws InvalidProtocolBufferException {
return FetchRequest.parseFrom(s);
}
});
} catch (InvalidProtocolBufferException e) {
throw new FramingException(e);
}
if (request == null) {
return;
}
// Now we have the request. Check the request:
FetchReply.Builder replyBuilder = FetchReply.newBuilder().setId(request.getId());
try {
validate(request);
} catch (IllegalArgumentException e) {
logExceptionInReply(request, replyBuilder, e);
sendReply(replyBuilder.setStatus(StatusCode.BAD_REQUEST.value).build());
LOG.warn(request.getId() + ": Bad request: " + request, e);
throw new FramingException(e);
} catch (MalformedURLException e) {
logExceptionInReply(request, replyBuilder, e);
sendReply(replyBuilder.setStatus(StatusCode.BAD_REQUEST.value).build());
LOG.warn("Bad request: " + request, e);
throw new FramingException(e);
}
// Now execute work asynchronously.
try {
StrategyType strategyType = StrategyType.match(request.getStrategy());
Strategy strategy = injector.getInstance(strategyType.strategyClz);
ResourceFetcher fetcher = new ResourceFetcher(request, strategy);
threadPoolExecutor.submit(fetcher);
} catch (Exception e) {
LOG.warn(request.getId() + ": Agent error: " + request, e);
throw new FramingException(e);
}
}