}
/* Freeze the length and last modified date. */
final long length = file.length();
final long lastModified = file.lastModified();
byte digest[] = null;
FileInfoResp resp = null;
Protocol.FileInfoResp cachedResp =
feederManager.statResponses.get(fileName);
byte cachedDigest[] =
((cachedResp != null) &&
(cachedResp.getFileLength() == length) &&
(cachedResp.getLastModifiedTime() == lastModified)) ?
cachedResp.getDigestSHA1() : null;
if (fileReq instanceof FileInfoReq) {
if (cachedDigest != null) {
digest = cachedDigest;
} else if (((FileInfoReq) fileReq).getNeedSHA1()) {
digest = getSHA1Digest(file, length).digest();
} else {
// Digest not requested
digest = new byte[0];
}
resp = protocol.new FileInfoResp
(fileName, length, lastModified, digest);
} else {
protocol.write(protocol.new FileStart
(fileName, length, lastModified), namedChannel);
digest = sendFileContents(file, length);