66 "net"
77 "net/http"
88 "os"
9-
10- "github.com/docker/libnetwork/driverapi"
119)
1210
1311const (
@@ -41,8 +39,15 @@ type Driver interface {
4139type CreateNetworkRequest struct {
4240 NetworkID string
4341 Options map [string ]interface {}
44- IpV4Data []driverapi.IPAMData
45- ipV6Data []driverapi.IPAMData
42+ IPv4Data []IPAMData
43+ IPv6Data []IPAMData
44+ }
45+
46+ type IPAMData struct {
47+ AddressSpace string
48+ Pool * net.IPNet
49+ Gateway * net.IPNet
50+ AuxAddresses map [string ]* net.IPNet
4651}
4752
4853type DeleteNetworkRequest struct {
@@ -133,8 +138,9 @@ func (h *Handler) initMux() {
133138
134139 h .mux .HandleFunc (createNetworkPath , func (w http.ResponseWriter , r * http.Request ) {
135140 req := & CreateNetworkRequest {}
136- err := decodeRequest (w , r , req )
141+ err := decodeRequest (r , req )
137142 if err != nil {
143+ badRequestResponse (w )
138144 return
139145 }
140146 err = h .driver .CreateNetwork (req )
@@ -146,8 +152,9 @@ func (h *Handler) initMux() {
146152 })
147153 h .mux .HandleFunc (deleteNetworkPath , func (w http.ResponseWriter , r * http.Request ) {
148154 req := & DeleteNetworkRequest {}
149- err := decodeRequest (w , r , req )
155+ err := decodeRequest (r , req )
150156 if err != nil {
157+ badRequestResponse (w )
151158 return
152159 }
153160 err = h .driver .DeleteNetwork (req )
@@ -159,8 +166,9 @@ func (h *Handler) initMux() {
159166 })
160167 h .mux .HandleFunc (createEndpointPath , func (w http.ResponseWriter , r * http.Request ) {
161168 req := & CreateEndpointRequest {}
162- err := decodeRequest (w , r , req )
169+ err := decodeRequest (r , req )
163170 if err != nil {
171+ badRequestResponse (w )
164172 return
165173 }
166174 err = h .driver .CreateEndpoint (req )
@@ -172,8 +180,9 @@ func (h *Handler) initMux() {
172180 })
173181 h .mux .HandleFunc (deleteEndpointPath , func (w http.ResponseWriter , r * http.Request ) {
174182 req := & DeleteEndpointRequest {}
175- err := decodeRequest (w , r , req )
183+ err := decodeRequest (r , req )
176184 if err != nil {
185+ badRequestResponse (w )
177186 return
178187 }
179188 err = h .driver .DeleteEndpoint (req )
@@ -185,8 +194,9 @@ func (h *Handler) initMux() {
185194 })
186195 h .mux .HandleFunc (joinPath , func (w http.ResponseWriter , r * http.Request ) {
187196 req := & JoinRequest {}
188- err := decodeRequest (w , r , req )
197+ err := decodeRequest (r , req )
189198 if err != nil {
199+ badRequestResponse (w )
190200 return
191201 }
192202 res , err := h .driver .Join (req )
@@ -198,8 +208,9 @@ func (h *Handler) initMux() {
198208 })
199209 h .mux .HandleFunc (leavePath , func (w http.ResponseWriter , r * http.Request ) {
200210 req := & LeaveRequest {}
201- err := decodeRequest (w , r , req )
211+ err := decodeRequest (r , req )
202212 if err != nil {
213+ badRequestResponse (w )
203214 return
204215 }
205216 err = h .driver .Leave (req )
@@ -255,28 +266,37 @@ func (h *Handler) listenAndServe(proto, addr, group string) error {
255266 return server .Serve (l )
256267}
257268
258- func decodeRequest (w http. ResponseWriter , r * http.Request , req interface {}) error {
269+ func decodeRequest (r * http.Request , req interface {}) error {
259270 if err := json .NewDecoder (r .Body ).Decode (req ); err != nil {
260- http .Error (w , err .Error (), http .StatusBadRequest )
261271 return err
262272 }
263273 return nil
264274}
265275
276+ func badRequestResponse (w http.ResponseWriter ) {
277+ w .Header ().Set ("Content-Type" , defaultContentTypeV1_1 )
278+ w .WriteHeader (http .StatusBadRequest )
279+ json .NewEncoder (w ).Encode (map [string ]string {
280+ "Err" : "Failed to decode request" ,
281+ })
282+ }
283+
266284func errorResponse (w http.ResponseWriter , err error ) {
267285 w .Header ().Set ("Content-Type" , defaultContentTypeV1_1 )
286+ w .WriteHeader (http .StatusInternalServerError )
268287 json .NewEncoder (w ).Encode (map [string ]string {
269288 "Err" : err .Error (),
270289 })
271- w .WriteHeader (http .StatusInternalServerError )
272290}
273291
274292func objectResponse (w http.ResponseWriter , obj interface {}) {
275293 w .Header ().Set ("Content-Type" , defaultContentTypeV1_1 )
294+ w .WriteHeader (http .StatusOK )
276295 json .NewEncoder (w ).Encode (obj )
277296}
278297
279298func successResponse (w http.ResponseWriter ) {
280299 w .Header ().Set ("Content-Type" , defaultContentTypeV1_1 )
281300 w .WriteHeader (http .StatusOK )
301+ fmt .Fprintln (w , "" )
282302}
0 commit comments