1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.http.impl.cache;
28
29 import java.util.concurrent.ConcurrentHashMap;
30 import java.util.concurrent.ConcurrentMap;
31
32 import org.apache.hc.core5.http.ProtocolVersion;
33 import org.apache.hc.core5.http.URIScheme;
34 import org.apache.hc.core5.util.VersionInfo;
35
36 final class ViaCacheGenerator {
37
38 final static ViaCacheGenerator INSTANCE = new ViaCacheGenerator();
39
40 final ConcurrentMap<ProtocolVersion, String> internalCache = new ConcurrentHashMap<>(4);
41
42 String generateViaHeader(final VersionInfo vi, final ProtocolVersion pv) {
43 final StringBuilder buf = new StringBuilder();
44 if (!URIScheme.HTTP.same(pv.getProtocol())) {
45 buf.append(pv.getProtocol()).append('/');
46 }
47 buf.append(pv.getMajor()).append('.').append(pv.getMinor());
48 buf.append(' ').append("localhost").append(' ');
49 buf.append("(Apache-HttpClient/");
50 final String release = (vi != null) ? vi.getRelease() : VersionInfo.UNAVAILABLE;
51 buf.append(release).append(" (cache))");
52 return buf.toString();
53 }
54
55 String lookup(final ProtocolVersion pv) {
56 return internalCache.computeIfAbsent(pv, v -> {
57 final VersionInfo vi = VersionInfo.loadVersionInfo("org.apache.hc.client5", getClass().getClassLoader());
58 return generateViaHeader(vi, v);
59 });
60 }
61
62 }