Skip to content

Commit 98102ef

Browse files
authored
Merge pull request docker-java#988 from a-ba/3.0.x
fix HTTP/1.1 compliance (missing Host header)
2 parents 16379d6 + 224503c commit 98102ef

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

src/main/java/com/github/dockerjava/netty/NettyDockerCmdExecFactory.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,16 +99,20 @@ public void init(DockerClientConfig dockerClientConfig) {
9999
bootstrap = new Bootstrap();
100100

101101
String scheme = dockerClientConfig.getDockerHost().getScheme();
102+
String host = "";
102103

103104
if ("unix".equals(scheme)) {
104105
nettyInitializer = new UnixDomainSocketInitializer();
106+
host = "DUMMY";
105107
} else if ("tcp".equals(scheme)) {
106108
nettyInitializer = new InetSocketInitializer();
109+
host = dockerClientConfig.getDockerHost().getHost() + ":"
110+
+ Integer.toString(dockerClientConfig.getDockerHost().getPort());
107111
}
108112

109113
eventLoopGroup = nettyInitializer.init(bootstrap, dockerClientConfig);
110114

111-
baseResource = new NettyWebTarget(channelProvider).path(dockerClientConfig.getApiVersion().asWebPathPart());
115+
baseResource = new NettyWebTarget(channelProvider, host).path(dockerClientConfig.getApiVersion().asWebPathPart());
112116
}
113117

114118
private DuplexChannel connect() {

src/main/java/com/github/dockerjava/netty/NettyWebTarget.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public class NettyWebTarget implements WebTarget {
3131

3232
private final ChannelProvider channelProvider;
3333

34+
private final String host;
35+
3436
private final ImmutableList<String> path;
3537

3638
private final ImmutableMap<String, String> queryParams;
@@ -42,16 +44,18 @@ public class NettyWebTarget implements WebTarget {
4244

4345
private static final String PATH_SEPARATOR = "/";
4446

45-
public NettyWebTarget(ChannelProvider channelProvider) {
46-
this(channelProvider, ImmutableList.<String>of(), ImmutableMap.<String, String>of(),
47+
public NettyWebTarget(ChannelProvider channelProvider, String host) {
48+
this(channelProvider, host, ImmutableList.<String>of(), ImmutableMap.<String, String>of(),
4749
ImmutableMap.<String, Set<String>>of());
4850
}
4951

5052
private NettyWebTarget(ChannelProvider channelProvider,
53+
String host,
5154
ImmutableList<String> path,
5255
ImmutableMap<String, String> queryParams,
5356
ImmutableMap<String, Set<String>> queryParamsSet) {
5457
this.channelProvider = channelProvider;
58+
this.host = host;
5559
this.path = path;
5660
this.queryParams = queryParams;
5761
this.queryParamsSet = queryParamsSet;
@@ -64,7 +68,7 @@ public NettyWebTarget path(String... components) {
6468
newPath.addAll(Arrays.asList(StringUtils.split(component, PATH_SEPARATOR)));
6569
}
6670

67-
return new NettyWebTarget(channelProvider, newPath.build(), queryParams, queryParamsSet);
71+
return new NettyWebTarget(channelProvider, host, newPath.build(), queryParams, queryParamsSet);
6872
}
6973

7074
public NettyInvocationBuilder request() {
@@ -85,7 +89,8 @@ public NettyInvocationBuilder request() {
8589
resource = resource + "?" + StringUtils.join(params, "&");
8690
}
8791

88-
return new NettyInvocationBuilder(channelProvider, resource);
92+
return new NettyInvocationBuilder(channelProvider, resource)
93+
.header("Host", host);
8994
}
9095

9196
/**
@@ -106,15 +111,15 @@ public NettyWebTarget resolveTemplate(String name, Object value) {
106111
component = component.replaceAll("\\{" + name + "\\}", value.toString());
107112
newPath.add(component);
108113
}
109-
return new NettyWebTarget(channelProvider, newPath.build(), queryParams, queryParamsSet);
114+
return new NettyWebTarget(channelProvider, host, newPath.build(), queryParams, queryParamsSet);
110115
}
111116

112117
public NettyWebTarget queryParam(String name, Object value) {
113118
ImmutableMap.Builder<String, String> builder = ImmutableMap.<String, String>builder().putAll(queryParams);
114119
if (value != null) {
115120
builder.put(name, value.toString());
116121
}
117-
return new NettyWebTarget(channelProvider, path, builder.build(), queryParamsSet);
122+
return new NettyWebTarget(channelProvider, host, path, builder.build(), queryParamsSet);
118123
}
119124

120125
public NettyWebTarget queryParamsSet(String name, Set<?> values) {
@@ -126,7 +131,7 @@ public NettyWebTarget queryParamsSet(String name, Set<?> values) {
126131
}
127132
builder.put(name, valueBuilder.build());
128133
}
129-
return new NettyWebTarget(channelProvider, path, queryParams, builder.build());
134+
return new NettyWebTarget(channelProvider, host, path, queryParams, builder.build());
130135
}
131136

132137
public NettyWebTarget queryParamsJsonMap(String name, Map<String, String> values) {

src/test/java/com/github/dockerjava/netty/NettyWebTargetTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,20 @@ public void setUp() throws Exception {
2222

2323
@Test
2424
public void verifyImmutability() throws Exception {
25-
NettyWebTarget emptyWebTarget = new NettyWebTarget(channelProvider);
25+
NettyWebTarget emptyWebTarget = new NettyWebTarget(channelProvider, "DUMMY");
2626

2727
NettyWebTarget initWebTarget = emptyWebTarget.path("/containers/{id}/attach").resolveTemplate("id", "d03da378b592")
2828
.queryParam("logs", "true");
2929

3030
NettyWebTarget anotherWebTarget = emptyWebTarget.path("/containers/{id}/attach")
3131
.resolveTemplate("id", "2cfada4e3c07").queryParam("stdin", "true");
3232

33-
assertEquals(new NettyWebTarget(channelProvider), emptyWebTarget);
33+
assertEquals(new NettyWebTarget(channelProvider, "DUMMY"), emptyWebTarget);
3434

35-
assertEquals(new NettyWebTarget(channelProvider).path("/containers/d03da378b592/attach")
35+
assertEquals(new NettyWebTarget(channelProvider, "DUMMY").path("/containers/d03da378b592/attach")
3636
.queryParam("logs", "true"), initWebTarget);
3737

38-
assertEquals(new NettyWebTarget(channelProvider).path("/containers/2cfada4e3c07/attach")
38+
assertEquals(new NettyWebTarget(channelProvider, "DUMMY").path("/containers/2cfada4e3c07/attach")
3939
.queryParam("stdin", "true"), anotherWebTarget);
4040
}
4141
}

0 commit comments

Comments
 (0)