Browse code

Make all http handlers api.server.Server methods

Signed-off-by: Alexander Morozov <lk4d4@docker.com>

Alexander Morozov authored on 2015/04/18 07:18:28
Showing 2 changed files
... ...
@@ -64,19 +64,14 @@ type Server struct {
64 64
 }
65 65
 
66 66
 func New(cfg *ServerConfig, eng *engine.Engine) *Server {
67
-	r := createRouter(
68
-		eng,
69
-		cfg.Logging,
70
-		cfg.EnableCors,
71
-		cfg.CorsHeaders,
72
-		cfg.Version,
73
-	)
74
-	return &Server{
75
-		cfg:    cfg,
76
-		router: r,
77
-		start:  make(chan struct{}),
78
-		eng:    eng,
67
+	srv := &Server{
68
+		cfg:   cfg,
69
+		start: make(chan struct{}),
70
+		eng:   eng,
79 71
 	}
72
+	r := createRouter(srv, eng)
73
+	srv.router = r
74
+	return srv
80 75
 }
81 76
 
82 77
 func (s *Server) SetDaemon(d *daemon.Daemon) {
... ...
@@ -250,19 +245,14 @@ func streamJSON(job *engine.Job, w http.ResponseWriter, flush bool) {
250 250
 	}
251 251
 }
252 252
 
253
-func getDaemon(eng *engine.Engine) *daemon.Daemon {
254
-	return eng.HackGetGlobalVar("httpapi.daemon").(*daemon.Daemon)
255
-}
256
-
257
-func postAuth(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
253
+func (s *Server) postAuth(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
258 254
 	var config *registry.AuthConfig
259 255
 	err := json.NewDecoder(r.Body).Decode(&config)
260 256
 	r.Body.Close()
261 257
 	if err != nil {
262 258
 		return err
263 259
 	}
264
-	d := getDaemon(eng)
265
-	status, err := d.RegistryService.Auth(config)
260
+	status, err := s.daemon.RegistryService.Auth(config)
266 261
 	if err != nil {
267 262
 		return err
268 263
 	}
... ...
@@ -271,7 +261,7 @@ func postAuth(eng *engine.Engine, version version.Version, w http.ResponseWriter
271 271
 	})
272 272
 }
273 273
 
274
-func getVersion(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
274
+func (s *Server) getVersion(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
275 275
 	w.Header().Set("Content-Type", "application/json")
276 276
 
277 277
 	v := &types.Version{
... ...
@@ -289,7 +279,7 @@ func getVersion(eng *engine.Engine, version version.Version, w http.ResponseWrit
289 289
 	return writeJSON(w, http.StatusOK, v)
290 290
 }
291 291
 
292
-func postContainersKill(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
292
+func (s *Server) postContainersKill(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
293 293
 	if vars == nil {
294 294
 		return fmt.Errorf("Missing parameter")
295 295
 	}
... ...
@@ -317,7 +307,7 @@ func postContainersKill(eng *engine.Engine, version version.Version, w http.Resp
317 317
 		}
318 318
 	}
319 319
 
320
-	if err = getDaemon(eng).ContainerKill(name, sig); err != nil {
320
+	if err = s.daemon.ContainerKill(name, sig); err != nil {
321 321
 		return err
322 322
 	}
323 323
 
... ...
@@ -325,7 +315,7 @@ func postContainersKill(eng *engine.Engine, version version.Version, w http.Resp
325 325
 	return nil
326 326
 }
327 327
 
328
-func postContainersPause(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
328
+func (s *Server) postContainersPause(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
329 329
 	if vars == nil {
330 330
 		return fmt.Errorf("Missing parameter")
331 331
 	}
... ...
@@ -334,8 +324,7 @@ func postContainersPause(eng *engine.Engine, version version.Version, w http.Res
334 334
 	}
335 335
 
336 336
 	name := vars["name"]
337
-	d := getDaemon(eng)
338
-	cont, err := d.Get(name)
337
+	cont, err := s.daemon.Get(name)
339 338
 	if err != nil {
340 339
 		return err
341 340
 	}
... ...
@@ -350,7 +339,7 @@ func postContainersPause(eng *engine.Engine, version version.Version, w http.Res
350 350
 	return nil
351 351
 }
352 352
 
353
-func postContainersUnpause(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
353
+func (s *Server) postContainersUnpause(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
354 354
 	if vars == nil {
355 355
 		return fmt.Errorf("Missing parameter")
356 356
 	}
... ...
@@ -359,8 +348,7 @@ func postContainersUnpause(eng *engine.Engine, version version.Version, w http.R
359 359
 	}
360 360
 
361 361
 	name := vars["name"]
362
-	d := getDaemon(eng)
363
-	cont, err := d.Get(name)
362
+	cont, err := s.daemon.Get(name)
364 363
 	if err != nil {
365 364
 		return err
366 365
 	}
... ...
@@ -375,17 +363,15 @@ func postContainersUnpause(eng *engine.Engine, version version.Version, w http.R
375 375
 	return nil
376 376
 }
377 377
 
378
-func getContainersExport(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
378
+func (s *Server) getContainersExport(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
379 379
 	if vars == nil {
380 380
 		return fmt.Errorf("Missing parameter")
381 381
 	}
382 382
 
383
-	d := getDaemon(eng)
384
-
385
-	return d.ContainerExport(vars["name"], w)
383
+	return s.daemon.ContainerExport(vars["name"], w)
386 384
 }
387 385
 
388
-func getImagesJSON(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
386
+func (s *Server) getImagesJSON(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
389 387
 	if err := parseForm(r); err != nil {
390 388
 		return err
391 389
 	}
... ...
@@ -397,7 +383,7 @@ func getImagesJSON(eng *engine.Engine, version version.Version, w http.ResponseW
397 397
 		All:    toBool(r.Form.Get("all")),
398 398
 	}
399 399
 
400
-	images, err := getDaemon(eng).Repositories().Images(&imagesConfig)
400
+	images, err := s.daemon.Repositories().Images(&imagesConfig)
401 401
 	if err != nil {
402 402
 		return err
403 403
 	}
... ...
@@ -426,7 +412,7 @@ func getImagesJSON(eng *engine.Engine, version version.Version, w http.ResponseW
426 426
 	return writeJSON(w, http.StatusOK, legacyImages)
427 427
 }
428 428
 
429
-func getImagesViz(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
429
+func (s *Server) getImagesViz(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
430 430
 	if version.GreaterThan("1.6") {
431 431
 		w.WriteHeader(http.StatusNotFound)
432 432
 		return fmt.Errorf("This is now implemented in the client.")
... ...
@@ -435,10 +421,10 @@ func getImagesViz(eng *engine.Engine, version version.Version, w http.ResponseWr
435 435
 	return nil
436 436
 }
437 437
 
438
-func getInfo(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
438
+func (s *Server) getInfo(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
439 439
 	w.Header().Set("Content-Type", "application/json")
440 440
 
441
-	info, err := getDaemon(eng).SystemInfo()
441
+	info, err := s.daemon.SystemInfo()
442 442
 	if err != nil {
443 443
 		return err
444 444
 	}
... ...
@@ -446,7 +432,7 @@ func getInfo(eng *engine.Engine, version version.Version, w http.ResponseWriter,
446 446
 	return writeJSON(w, http.StatusOK, info)
447 447
 }
448 448
 
449
-func getEvents(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
449
+func (s *Server) getEvents(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
450 450
 	if err := parseForm(r); err != nil {
451 451
 		return err
452 452
 	}
... ...
@@ -497,7 +483,7 @@ func getEvents(eng *engine.Engine, version version.Version, w http.ResponseWrite
497 497
 		return true
498 498
 	}
499 499
 
500
-	d := getDaemon(eng)
500
+	d := s.daemon
501 501
 	es := d.EventsService
502 502
 	w.Header().Set("Content-Type", "application/json")
503 503
 	enc := json.NewEncoder(utils.NewWriteFlusher(w))
... ...
@@ -550,13 +536,13 @@ func getEvents(eng *engine.Engine, version version.Version, w http.ResponseWrite
550 550
 	}
551 551
 }
552 552
 
553
-func getImagesHistory(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
553
+func (s *Server) getImagesHistory(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
554 554
 	if vars == nil {
555 555
 		return fmt.Errorf("Missing parameter")
556 556
 	}
557 557
 
558 558
 	name := vars["name"]
559
-	history, err := getDaemon(eng).Repositories().History(name)
559
+	history, err := s.daemon.Repositories().History(name)
560 560
 	if err != nil {
561 561
 		return err
562 562
 	}
... ...
@@ -564,14 +550,13 @@ func getImagesHistory(eng *engine.Engine, version version.Version, w http.Respon
564 564
 	return writeJSON(w, http.StatusOK, history)
565 565
 }
566 566
 
567
-func getContainersChanges(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
567
+func (s *Server) getContainersChanges(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
568 568
 	if vars == nil {
569 569
 		return fmt.Errorf("Missing parameter")
570 570
 	}
571 571
 
572 572
 	name := vars["name"]
573
-	d := getDaemon(eng)
574
-	cont, err := d.Get(name)
573
+	cont, err := s.daemon.Get(name)
575 574
 	if err != nil {
576 575
 		return err
577 576
 	}
... ...
@@ -584,7 +569,7 @@ func getContainersChanges(eng *engine.Engine, version version.Version, w http.Re
584 584
 	return writeJSON(w, http.StatusOK, changes)
585 585
 }
586 586
 
587
-func getContainersTop(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
587
+func (s *Server) getContainersTop(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
588 588
 	if version.LessThan("1.4") {
589 589
 		return fmt.Errorf("top was improved a lot since 1.3, Please upgrade your docker client.")
590 590
 	}
... ...
@@ -597,7 +582,7 @@ func getContainersTop(eng *engine.Engine, version version.Version, w http.Respon
597 597
 		return err
598 598
 	}
599 599
 
600
-	procList, err := getDaemon(eng).ContainerTop(vars["name"], r.Form.Get("ps_args"))
600
+	procList, err := s.daemon.ContainerTop(vars["name"], r.Form.Get("ps_args"))
601 601
 	if err != nil {
602 602
 		return err
603 603
 	}
... ...
@@ -605,7 +590,7 @@ func getContainersTop(eng *engine.Engine, version version.Version, w http.Respon
605 605
 	return writeJSON(w, http.StatusOK, procList)
606 606
 }
607 607
 
608
-func getContainersJSON(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
608
+func (s *Server) getContainersJSON(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
609 609
 	if err := parseForm(r); err != nil {
610 610
 		return err
611 611
 	}
... ...
@@ -626,7 +611,7 @@ func getContainersJSON(eng *engine.Engine, version version.Version, w http.Respo
626 626
 		config.Limit = limit
627 627
 	}
628 628
 
629
-	containers, err := getDaemon(eng).Containers(config)
629
+	containers, err := s.daemon.Containers(config)
630 630
 	if err != nil {
631 631
 		return err
632 632
 	}
... ...
@@ -634,7 +619,7 @@ func getContainersJSON(eng *engine.Engine, version version.Version, w http.Respo
634 634
 	return writeJSON(w, http.StatusOK, containers)
635 635
 }
636 636
 
637
-func getContainersStats(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
637
+func (s *Server) getContainersStats(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
638 638
 	if err := parseForm(r); err != nil {
639 639
 		return err
640 640
 	}
... ...
@@ -642,12 +627,10 @@ func getContainersStats(eng *engine.Engine, version version.Version, w http.Resp
642 642
 		return fmt.Errorf("Missing parameter")
643 643
 	}
644 644
 
645
-	d := getDaemon(eng)
646
-
647
-	return d.ContainerStats(vars["name"], utils.NewWriteFlusher(w))
645
+	return s.daemon.ContainerStats(vars["name"], utils.NewWriteFlusher(w))
648 646
 }
649 647
 
650
-func getContainersLogs(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
648
+func (s *Server) getContainersLogs(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
651 649
 	if err := parseForm(r); err != nil {
652 650
 		return err
653 651
 	}
... ...
@@ -670,15 +653,14 @@ func getContainersLogs(eng *engine.Engine, version version.Version, w http.Respo
670 670
 		OutStream:  utils.NewWriteFlusher(w),
671 671
 	}
672 672
 
673
-	d := getDaemon(eng)
674
-	if err := d.ContainerLogs(vars["name"], logsConfig); err != nil {
673
+	if err := s.daemon.ContainerLogs(vars["name"], logsConfig); err != nil {
675 674
 		fmt.Fprintf(w, "Error running logs job: %s\n", err)
676 675
 	}
677 676
 
678 677
 	return nil
679 678
 }
680 679
 
681
-func postImagesTag(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
680
+func (s *Server) postImagesTag(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
682 681
 	if err := parseForm(r); err != nil {
683 682
 		return err
684 683
 	}
... ...
@@ -686,18 +668,17 @@ func postImagesTag(eng *engine.Engine, version version.Version, w http.ResponseW
686 686
 		return fmt.Errorf("Missing parameter")
687 687
 	}
688 688
 
689
-	d := getDaemon(eng)
690 689
 	repo := r.Form.Get("repo")
691 690
 	tag := r.Form.Get("tag")
692 691
 	force := toBool(r.Form.Get("force"))
693
-	if err := d.Repositories().Tag(repo, tag, vars["name"], force); err != nil {
692
+	if err := s.daemon.Repositories().Tag(repo, tag, vars["name"], force); err != nil {
694 693
 		return err
695 694
 	}
696 695
 	w.WriteHeader(http.StatusCreated)
697 696
 	return nil
698 697
 }
699 698
 
700
-func postCommit(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
699
+func (s *Server) postCommit(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
701 700
 	if err := parseForm(r); err != nil {
702 701
 		return err
703 702
 	}
... ...
@@ -723,9 +704,7 @@ func postCommit(eng *engine.Engine, version version.Version, w http.ResponseWrit
723 723
 		Config:  r.Body,
724 724
 	}
725 725
 
726
-	d := getDaemon(eng)
727
-
728
-	imgID, err := d.ContainerCommit(cont, containerCommitConfig)
726
+	imgID, err := s.daemon.ContainerCommit(cont, containerCommitConfig)
729 727
 	if err != nil {
730 728
 		return err
731 729
 	}
... ...
@@ -736,7 +715,7 @@ func postCommit(eng *engine.Engine, version version.Version, w http.ResponseWrit
736 736
 }
737 737
 
738 738
 // Creates an image from Pull or from Import
739
-func postImagesCreate(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
739
+func (s *Server) postImagesCreate(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
740 740
 	if err := parseForm(r); err != nil {
741 741
 		return err
742 742
 	}
... ...
@@ -757,8 +736,6 @@ func postImagesCreate(eng *engine.Engine, version version.Version, w http.Respon
757 757
 		}
758 758
 	}
759 759
 
760
-	d := getDaemon(eng)
761
-
762 760
 	if image != "" { //pull
763 761
 		if tag == "" {
764 762
 			image, tag = parsers.ParseRepositoryTag(image)
... ...
@@ -783,7 +760,7 @@ func postImagesCreate(eng *engine.Engine, version version.Version, w http.Respon
783 783
 			imagePullConfig.Json = false
784 784
 		}
785 785
 
786
-		if err := d.Repositories().Pull(image, tag, imagePullConfig, eng); err != nil {
786
+		if err := s.daemon.Repositories().Pull(image, tag, imagePullConfig, eng); err != nil {
787 787
 			return err
788 788
 		}
789 789
 	} else { //import
... ...
@@ -804,7 +781,7 @@ func postImagesCreate(eng *engine.Engine, version version.Version, w http.Respon
804 804
 			imageImportConfig.Json = false
805 805
 		}
806 806
 
807
-		if err := d.Repositories().Import(src, repo, tag, imageImportConfig, eng); err != nil {
807
+		if err := s.daemon.Repositories().Import(src, repo, tag, imageImportConfig, eng); err != nil {
808 808
 			return err
809 809
 		}
810 810
 
... ...
@@ -813,7 +790,7 @@ func postImagesCreate(eng *engine.Engine, version version.Version, w http.Respon
813 813
 	return nil
814 814
 }
815 815
 
816
-func getImagesSearch(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
816
+func (s *Server) getImagesSearch(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
817 817
 	if err := parseForm(r); err != nil {
818 818
 		return err
819 819
 	}
... ...
@@ -836,15 +813,14 @@ func getImagesSearch(eng *engine.Engine, version version.Version, w http.Respons
836 836
 			headers[k] = v
837 837
 		}
838 838
 	}
839
-	d := getDaemon(eng)
840
-	query, err := d.RegistryService.Search(r.Form.Get("term"), config, headers)
839
+	query, err := s.daemon.RegistryService.Search(r.Form.Get("term"), config, headers)
841 840
 	if err != nil {
842 841
 		return err
843 842
 	}
844 843
 	return json.NewEncoder(w).Encode(query.Results)
845 844
 }
846 845
 
847
-func postImagesPush(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
846
+func (s *Server) postImagesPush(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
848 847
 	if vars == nil {
849 848
 		return fmt.Errorf("Missing parameter")
850 849
 	}
... ...
@@ -896,7 +872,7 @@ func postImagesPush(eng *engine.Engine, version version.Version, w http.Response
896 896
 	return nil
897 897
 }
898 898
 
899
-func getImagesGet(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
899
+func (s *Server) getImagesGet(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
900 900
 	if vars == nil {
901 901
 		return fmt.Errorf("Missing parameter")
902 902
 	}
... ...
@@ -916,14 +892,14 @@ func getImagesGet(eng *engine.Engine, version version.Version, w http.ResponseWr
916 916
 	return job.Run()
917 917
 }
918 918
 
919
-func postImagesLoad(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
919
+func (s *Server) postImagesLoad(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
920 920
 	job := eng.Job("load")
921 921
 	job.Stdin.Add(r.Body)
922 922
 	job.Stdout.Add(w)
923 923
 	return job.Run()
924 924
 }
925 925
 
926
-func postContainersCreate(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
926
+func (s *Server) postContainersCreate(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
927 927
 	if err := parseForm(r); err != nil {
928 928
 		return nil
929 929
 	}
... ...
@@ -940,7 +916,7 @@ func postContainersCreate(eng *engine.Engine, version version.Version, w http.Re
940 940
 		return err
941 941
 	}
942 942
 
943
-	containerId, warnings, err := getDaemon(eng).ContainerCreate(name, config, hostConfig)
943
+	containerId, warnings, err := s.daemon.ContainerCreate(name, config, hostConfig)
944 944
 	if err != nil {
945 945
 		return err
946 946
 	}
... ...
@@ -951,7 +927,7 @@ func postContainersCreate(eng *engine.Engine, version version.Version, w http.Re
951 951
 	})
952 952
 }
953 953
 
954
-func postContainersRestart(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
954
+func (s *Server) postContainersRestart(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
955 955
 	if err := parseForm(r); err != nil {
956 956
 		return err
957 957
 	}
... ...
@@ -959,13 +935,12 @@ func postContainersRestart(eng *engine.Engine, version version.Version, w http.R
959 959
 		return fmt.Errorf("Missing parameter")
960 960
 	}
961 961
 
962
-	s, err := strconv.Atoi(r.Form.Get("t"))
962
+	timeout, err := strconv.Atoi(r.Form.Get("t"))
963 963
 	if err != nil {
964 964
 		return err
965 965
 	}
966 966
 
967
-	d := getDaemon(eng)
968
-	if err := d.ContainerRestart(vars["name"], s); err != nil {
967
+	if err := s.daemon.ContainerRestart(vars["name"], timeout); err != nil {
969 968
 		return err
970 969
 	}
971 970
 
... ...
@@ -974,7 +949,7 @@ func postContainersRestart(eng *engine.Engine, version version.Version, w http.R
974 974
 	return nil
975 975
 }
976 976
 
977
-func postContainerRename(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
977
+func (s *Server) postContainerRename(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
978 978
 	if err := parseForm(r); err != nil {
979 979
 		return err
980 980
 	}
... ...
@@ -982,17 +957,16 @@ func postContainerRename(eng *engine.Engine, version version.Version, w http.Res
982 982
 		return fmt.Errorf("Missing parameter")
983 983
 	}
984 984
 
985
-	d := getDaemon(eng)
986 985
 	name := vars["name"]
987 986
 	newName := r.Form.Get("name")
988
-	if err := d.ContainerRename(name, newName); err != nil {
987
+	if err := s.daemon.ContainerRename(name, newName); err != nil {
989 988
 		return err
990 989
 	}
991 990
 	w.WriteHeader(http.StatusNoContent)
992 991
 	return nil
993 992
 }
994 993
 
995
-func deleteContainers(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
994
+func (s *Server) deleteContainers(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
996 995
 	if err := parseForm(r); err != nil {
997 996
 		return err
998 997
 	}
... ...
@@ -1001,14 +975,13 @@ func deleteContainers(eng *engine.Engine, version version.Version, w http.Respon
1001 1001
 	}
1002 1002
 
1003 1003
 	name := vars["name"]
1004
-	d := getDaemon(eng)
1005 1004
 	config := &daemon.ContainerRmConfig{
1006 1005
 		ForceRemove:  toBool(r.Form.Get("force")),
1007 1006
 		RemoveVolume: toBool(r.Form.Get("v")),
1008 1007
 		RemoveLink:   toBool(r.Form.Get("link")),
1009 1008
 	}
1010 1009
 
1011
-	if err := d.ContainerRm(name, config); err != nil {
1010
+	if err := s.daemon.ContainerRm(name, config); err != nil {
1012 1011
 		// Force a 404 for the empty string
1013 1012
 		if strings.Contains(strings.ToLower(err.Error()), "prefix can't be empty") {
1014 1013
 			return fmt.Errorf("no such id: \"\"")
... ...
@@ -1021,7 +994,7 @@ func deleteContainers(eng *engine.Engine, version version.Version, w http.Respon
1021 1021
 	return nil
1022 1022
 }
1023 1023
 
1024
-func deleteImages(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1024
+func (s *Server) deleteImages(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1025 1025
 	if err := parseForm(r); err != nil {
1026 1026
 		return err
1027 1027
 	}
... ...
@@ -1029,12 +1002,11 @@ func deleteImages(eng *engine.Engine, version version.Version, w http.ResponseWr
1029 1029
 		return fmt.Errorf("Missing parameter")
1030 1030
 	}
1031 1031
 
1032
-	d := getDaemon(eng)
1033 1032
 	name := vars["name"]
1034 1033
 	force := toBool(r.Form.Get("force"))
1035 1034
 	noprune := toBool(r.Form.Get("noprune"))
1036 1035
 
1037
-	list, err := d.ImageDelete(name, force, noprune)
1036
+	list, err := s.daemon.ImageDelete(name, force, noprune)
1038 1037
 	if err != nil {
1039 1038
 		return err
1040 1039
 	}
... ...
@@ -1042,7 +1014,7 @@ func deleteImages(eng *engine.Engine, version version.Version, w http.ResponseWr
1042 1042
 	return writeJSON(w, http.StatusOK, list)
1043 1043
 }
1044 1044
 
1045
-func postContainersStart(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1045
+func (s *Server) postContainersStart(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1046 1046
 	if vars == nil {
1047 1047
 		return fmt.Errorf("Missing parameter")
1048 1048
 	}
... ...
@@ -1067,7 +1039,7 @@ func postContainersStart(eng *engine.Engine, version version.Version, w http.Res
1067 1067
 		hostConfig = c
1068 1068
 	}
1069 1069
 
1070
-	if err := getDaemon(eng).ContainerStart(vars["name"], hostConfig); err != nil {
1070
+	if err := s.daemon.ContainerStart(vars["name"], hostConfig); err != nil {
1071 1071
 		if err.Error() == "Container already started" {
1072 1072
 			w.WriteHeader(http.StatusNotModified)
1073 1073
 			return nil
... ...
@@ -1078,7 +1050,7 @@ func postContainersStart(eng *engine.Engine, version version.Version, w http.Res
1078 1078
 	return nil
1079 1079
 }
1080 1080
 
1081
-func postContainersStop(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1081
+func (s *Server) postContainersStop(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1082 1082
 	if err := parseForm(r); err != nil {
1083 1083
 		return err
1084 1084
 	}
... ...
@@ -1086,13 +1058,12 @@ func postContainersStop(eng *engine.Engine, version version.Version, w http.Resp
1086 1086
 		return fmt.Errorf("Missing parameter")
1087 1087
 	}
1088 1088
 
1089
-	d := getDaemon(eng)
1090 1089
 	seconds, err := strconv.Atoi(r.Form.Get("t"))
1091 1090
 	if err != nil {
1092 1091
 		return err
1093 1092
 	}
1094 1093
 
1095
-	if err := d.ContainerStop(vars["name"], seconds); err != nil {
1094
+	if err := s.daemon.ContainerStop(vars["name"], seconds); err != nil {
1096 1095
 		if err.Error() == "Container already stopped" {
1097 1096
 			w.WriteHeader(http.StatusNotModified)
1098 1097
 			return nil
... ...
@@ -1104,14 +1075,13 @@ func postContainersStop(eng *engine.Engine, version version.Version, w http.Resp
1104 1104
 	return nil
1105 1105
 }
1106 1106
 
1107
-func postContainersWait(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1107
+func (s *Server) postContainersWait(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1108 1108
 	if vars == nil {
1109 1109
 		return fmt.Errorf("Missing parameter")
1110 1110
 	}
1111 1111
 
1112 1112
 	name := vars["name"]
1113
-	d := getDaemon(eng)
1114
-	cont, err := d.Get(name)
1113
+	cont, err := s.daemon.Get(name)
1115 1114
 	if err != nil {
1116 1115
 		return err
1117 1116
 	}
... ...
@@ -1123,7 +1093,7 @@ func postContainersWait(eng *engine.Engine, version version.Version, w http.Resp
1123 1123
 	})
1124 1124
 }
1125 1125
 
1126
-func postContainersResize(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1126
+func (s *Server) postContainersResize(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1127 1127
 	if err := parseForm(r); err != nil {
1128 1128
 		return err
1129 1129
 	}
... ...
@@ -1140,8 +1110,7 @@ func postContainersResize(eng *engine.Engine, version version.Version, w http.Re
1140 1140
 		return err
1141 1141
 	}
1142 1142
 
1143
-	d := getDaemon(eng)
1144
-	cont, err := d.Get(vars["name"])
1143
+	cont, err := s.daemon.Get(vars["name"])
1145 1144
 	if err != nil {
1146 1145
 		return err
1147 1146
 	}
... ...
@@ -1149,7 +1118,7 @@ func postContainersResize(eng *engine.Engine, version version.Version, w http.Re
1149 1149
 	return cont.Resize(height, width)
1150 1150
 }
1151 1151
 
1152
-func postContainersAttach(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1152
+func (s *Server) postContainersAttach(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1153 1153
 	if err := parseForm(r); err != nil {
1154 1154
 		return err
1155 1155
 	}
... ...
@@ -1157,9 +1126,7 @@ func postContainersAttach(eng *engine.Engine, version version.Version, w http.Re
1157 1157
 		return fmt.Errorf("Missing parameter")
1158 1158
 	}
1159 1159
 
1160
-	d := getDaemon(eng)
1161
-
1162
-	cont, err := d.Get(vars["name"])
1160
+	cont, err := s.daemon.Get(vars["name"])
1163 1161
 	if err != nil {
1164 1162
 		return err
1165 1163
 	}
... ...
@@ -1206,16 +1173,14 @@ func postContainersAttach(eng *engine.Engine, version version.Version, w http.Re
1206 1206
 	return nil
1207 1207
 }
1208 1208
 
1209
-func wsContainersAttach(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1209
+func (s *Server) wsContainersAttach(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1210 1210
 	if err := parseForm(r); err != nil {
1211 1211
 		return err
1212 1212
 	}
1213 1213
 	if vars == nil {
1214 1214
 		return fmt.Errorf("Missing parameter")
1215 1215
 	}
1216
-	d := getDaemon(eng)
1217
-
1218
-	cont, err := d.Get(vars["name"])
1216
+	cont, err := s.daemon.Get(vars["name"])
1219 1217
 	if err != nil {
1220 1218
 		return err
1221 1219
 	}
... ...
@@ -1234,7 +1199,7 @@ func wsContainersAttach(eng *engine.Engine, version version.Version, w http.Resp
1234 1234
 	return nil
1235 1235
 }
1236 1236
 
1237
-func getContainersByName(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1237
+func (s *Server) getContainersByName(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1238 1238
 	if vars == nil {
1239 1239
 		return fmt.Errorf("Missing parameter")
1240 1240
 	}
... ...
@@ -1246,13 +1211,12 @@ func getContainersByName(eng *engine.Engine, version version.Version, w http.Res
1246 1246
 	return job.Run()
1247 1247
 }
1248 1248
 
1249
-func getExecByID(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1249
+func (s *Server) getExecByID(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1250 1250
 	if vars == nil {
1251 1251
 		return fmt.Errorf("Missing parameter 'id'")
1252 1252
 	}
1253 1253
 
1254
-	d := getDaemon(eng)
1255
-	eConfig, err := d.ContainerExecInspect(vars["id"])
1254
+	eConfig, err := s.daemon.ContainerExecInspect(vars["id"])
1256 1255
 	if err != nil {
1257 1256
 		return err
1258 1257
 	}
... ...
@@ -1260,7 +1224,7 @@ func getExecByID(eng *engine.Engine, version version.Version, w http.ResponseWri
1260 1260
 	return writeJSON(w, http.StatusOK, eConfig)
1261 1261
 }
1262 1262
 
1263
-func getImagesByName(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1263
+func (s *Server) getImagesByName(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1264 1264
 	if vars == nil {
1265 1265
 		return fmt.Errorf("Missing parameter")
1266 1266
 	}
... ...
@@ -1272,7 +1236,7 @@ func getImagesByName(eng *engine.Engine, version version.Version, w http.Respons
1272 1272
 	return job.Run()
1273 1273
 }
1274 1274
 
1275
-func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1275
+func (s *Server) postBuild(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1276 1276
 	if version.LessThan("1.3") {
1277 1277
 		return fmt.Errorf("Multipart upload for build is no longer supported. Please upgrade your docker client.")
1278 1278
 	}
... ...
@@ -1362,7 +1326,7 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite
1362 1362
 	return nil
1363 1363
 }
1364 1364
 
1365
-func postContainersCopy(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1365
+func (s *Server) postContainersCopy(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1366 1366
 	if vars == nil {
1367 1367
 		return fmt.Errorf("Missing parameter")
1368 1368
 	}
... ...
@@ -1386,7 +1350,7 @@ func postContainersCopy(eng *engine.Engine, version version.Version, w http.Resp
1386 1386
 		res = res[1:]
1387 1387
 	}
1388 1388
 
1389
-	cont, err := getDaemon(eng).Get(vars["name"])
1389
+	cont, err := s.daemon.Get(vars["name"])
1390 1390
 	if err != nil {
1391 1391
 		logrus.Errorf("%v", err)
1392 1392
 		if strings.Contains(strings.ToLower(err.Error()), "no such id") {
... ...
@@ -1412,7 +1376,7 @@ func postContainersCopy(eng *engine.Engine, version version.Version, w http.Resp
1412 1412
 	return nil
1413 1413
 }
1414 1414
 
1415
-func postContainerExecCreate(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1415
+func (s *Server) postContainerExecCreate(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1416 1416
 	if err := parseForm(r); err != nil {
1417 1417
 		return nil
1418 1418
 	}
... ...
@@ -1449,7 +1413,7 @@ func postContainerExecCreate(eng *engine.Engine, version version.Version, w http
1449 1449
 }
1450 1450
 
1451 1451
 // TODO(vishh): Refactor the code to avoid having to specify stream config as part of both create and start.
1452
-func postContainerExecStart(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1452
+func (s *Server) postContainerExecStart(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1453 1453
 	if err := parseForm(r); err != nil {
1454 1454
 		return nil
1455 1455
 	}
... ...
@@ -1500,7 +1464,7 @@ func postContainerExecStart(eng *engine.Engine, version version.Version, w http.
1500 1500
 	return nil
1501 1501
 }
1502 1502
 
1503
-func postContainerExecResize(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1503
+func (s *Server) postContainerExecResize(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1504 1504
 	if err := parseForm(r); err != nil {
1505 1505
 		return err
1506 1506
 	}
... ...
@@ -1517,12 +1481,10 @@ func postContainerExecResize(eng *engine.Engine, version version.Version, w http
1517 1517
 		return err
1518 1518
 	}
1519 1519
 
1520
-	d := getDaemon(eng)
1521
-
1522
-	return d.ContainerExecResize(vars["name"], height, width)
1520
+	return s.daemon.ContainerExecResize(vars["name"], height, width)
1523 1521
 }
1524 1522
 
1525
-func optionsHandler(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1523
+func (s *Server) optionsHandler(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1526 1524
 	w.WriteHeader(http.StatusOK)
1527 1525
 	return nil
1528 1526
 }
... ...
@@ -1533,7 +1495,7 @@ func writeCorsHeaders(w http.ResponseWriter, r *http.Request, corsHeaders string
1533 1533
 	w.Header().Add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS")
1534 1534
 }
1535 1535
 
1536
-func ping(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1536
+func (s *Server) ping(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
1537 1537
 	_, err := w.Write([]byte{'O', 'K'})
1538 1538
 	return err
1539 1539
 }
... ...
@@ -1574,71 +1536,72 @@ func makeHttpHandler(eng *engine.Engine, logging bool, localMethod string, local
1574 1574
 }
1575 1575
 
1576 1576
 // we keep enableCors just for legacy usage, need to be removed in the future
1577
-func createRouter(eng *engine.Engine, logging, enableCors bool, corsHeaders string, dockerVersion string) *mux.Router {
1577
+func createRouter(s *Server, eng *engine.Engine) *mux.Router {
1578 1578
 	r := mux.NewRouter()
1579 1579
 	if os.Getenv("DEBUG") != "" {
1580 1580
 		ProfilerSetup(r, "/debug/")
1581 1581
 	}
1582 1582
 	m := map[string]map[string]HttpApiFunc{
1583 1583
 		"GET": {
1584
-			"/_ping":                          ping,
1585
-			"/events":                         getEvents,
1586
-			"/info":                           getInfo,
1587
-			"/version":                        getVersion,
1588
-			"/images/json":                    getImagesJSON,
1589
-			"/images/viz":                     getImagesViz,
1590
-			"/images/search":                  getImagesSearch,
1591
-			"/images/get":                     getImagesGet,
1592
-			"/images/{name:.*}/get":           getImagesGet,
1593
-			"/images/{name:.*}/history":       getImagesHistory,
1594
-			"/images/{name:.*}/json":          getImagesByName,
1595
-			"/containers/ps":                  getContainersJSON,
1596
-			"/containers/json":                getContainersJSON,
1597
-			"/containers/{name:.*}/export":    getContainersExport,
1598
-			"/containers/{name:.*}/changes":   getContainersChanges,
1599
-			"/containers/{name:.*}/json":      getContainersByName,
1600
-			"/containers/{name:.*}/top":       getContainersTop,
1601
-			"/containers/{name:.*}/logs":      getContainersLogs,
1602
-			"/containers/{name:.*}/stats":     getContainersStats,
1603
-			"/containers/{name:.*}/attach/ws": wsContainersAttach,
1604
-			"/exec/{id:.*}/json":              getExecByID,
1584
+			"/_ping":                          s.ping,
1585
+			"/events":                         s.getEvents,
1586
+			"/info":                           s.getInfo,
1587
+			"/version":                        s.getVersion,
1588
+			"/images/json":                    s.getImagesJSON,
1589
+			"/images/viz":                     s.getImagesViz,
1590
+			"/images/search":                  s.getImagesSearch,
1591
+			"/images/get":                     s.getImagesGet,
1592
+			"/images/{name:.*}/get":           s.getImagesGet,
1593
+			"/images/{name:.*}/history":       s.getImagesHistory,
1594
+			"/images/{name:.*}/json":          s.getImagesByName,
1595
+			"/containers/ps":                  s.getContainersJSON,
1596
+			"/containers/json":                s.getContainersJSON,
1597
+			"/containers/{name:.*}/export":    s.getContainersExport,
1598
+			"/containers/{name:.*}/changes":   s.getContainersChanges,
1599
+			"/containers/{name:.*}/json":      s.getContainersByName,
1600
+			"/containers/{name:.*}/top":       s.getContainersTop,
1601
+			"/containers/{name:.*}/logs":      s.getContainersLogs,
1602
+			"/containers/{name:.*}/stats":     s.getContainersStats,
1603
+			"/containers/{name:.*}/attach/ws": s.wsContainersAttach,
1604
+			"/exec/{id:.*}/json":              s.getExecByID,
1605 1605
 		},
1606 1606
 		"POST": {
1607
-			"/auth":                         postAuth,
1608
-			"/commit":                       postCommit,
1609
-			"/build":                        postBuild,
1610
-			"/images/create":                postImagesCreate,
1611
-			"/images/load":                  postImagesLoad,
1612
-			"/images/{name:.*}/push":        postImagesPush,
1613
-			"/images/{name:.*}/tag":         postImagesTag,
1614
-			"/containers/create":            postContainersCreate,
1615
-			"/containers/{name:.*}/kill":    postContainersKill,
1616
-			"/containers/{name:.*}/pause":   postContainersPause,
1617
-			"/containers/{name:.*}/unpause": postContainersUnpause,
1618
-			"/containers/{name:.*}/restart": postContainersRestart,
1619
-			"/containers/{name:.*}/start":   postContainersStart,
1620
-			"/containers/{name:.*}/stop":    postContainersStop,
1621
-			"/containers/{name:.*}/wait":    postContainersWait,
1622
-			"/containers/{name:.*}/resize":  postContainersResize,
1623
-			"/containers/{name:.*}/attach":  postContainersAttach,
1624
-			"/containers/{name:.*}/copy":    postContainersCopy,
1625
-			"/containers/{name:.*}/exec":    postContainerExecCreate,
1626
-			"/exec/{name:.*}/start":         postContainerExecStart,
1627
-			"/exec/{name:.*}/resize":        postContainerExecResize,
1628
-			"/containers/{name:.*}/rename":  postContainerRename,
1607
+			"/auth":                         s.postAuth,
1608
+			"/commit":                       s.postCommit,
1609
+			"/build":                        s.postBuild,
1610
+			"/images/create":                s.postImagesCreate,
1611
+			"/images/load":                  s.postImagesLoad,
1612
+			"/images/{name:.*}/push":        s.postImagesPush,
1613
+			"/images/{name:.*}/tag":         s.postImagesTag,
1614
+			"/containers/create":            s.postContainersCreate,
1615
+			"/containers/{name:.*}/kill":    s.postContainersKill,
1616
+			"/containers/{name:.*}/pause":   s.postContainersPause,
1617
+			"/containers/{name:.*}/unpause": s.postContainersUnpause,
1618
+			"/containers/{name:.*}/restart": s.postContainersRestart,
1619
+			"/containers/{name:.*}/start":   s.postContainersStart,
1620
+			"/containers/{name:.*}/stop":    s.postContainersStop,
1621
+			"/containers/{name:.*}/wait":    s.postContainersWait,
1622
+			"/containers/{name:.*}/resize":  s.postContainersResize,
1623
+			"/containers/{name:.*}/attach":  s.postContainersAttach,
1624
+			"/containers/{name:.*}/copy":    s.postContainersCopy,
1625
+			"/containers/{name:.*}/exec":    s.postContainerExecCreate,
1626
+			"/exec/{name:.*}/start":         s.postContainerExecStart,
1627
+			"/exec/{name:.*}/resize":        s.postContainerExecResize,
1628
+			"/containers/{name:.*}/rename":  s.postContainerRename,
1629 1629
 		},
1630 1630
 		"DELETE": {
1631
-			"/containers/{name:.*}": deleteContainers,
1632
-			"/images/{name:.*}":     deleteImages,
1631
+			"/containers/{name:.*}": s.deleteContainers,
1632
+			"/images/{name:.*}":     s.deleteImages,
1633 1633
 		},
1634 1634
 		"OPTIONS": {
1635
-			"": optionsHandler,
1635
+			"": s.optionsHandler,
1636 1636
 		},
1637 1637
 	}
1638 1638
 
1639 1639
 	// If "api-cors-header" is not given, but "api-enable-cors" is true, we set cors to "*"
1640 1640
 	// otherwise, all head values will be passed to HTTP handler
1641
-	if corsHeaders == "" && enableCors {
1641
+	corsHeaders := s.cfg.CorsHeaders
1642
+	if corsHeaders == "" && s.cfg.EnableCors {
1642 1643
 		corsHeaders = "*"
1643 1644
 	}
1644 1645
 
... ...
@@ -1651,7 +1614,7 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, corsHeaders stri
1651 1651
 			localMethod := method
1652 1652
 
1653 1653
 			// build the handler function
1654
-			f := makeHttpHandler(eng, logging, localMethod, localRoute, localFct, corsHeaders, version.Version(dockerVersion))
1654
+			f := makeHttpHandler(eng, s.cfg.Logging, localMethod, localRoute, localFct, corsHeaders, version.Version(s.cfg.Version))
1655 1655
 
1656 1656
 			// add the new route
1657 1657
 			if localRoute == "" {
... ...
@@ -1670,7 +1633,14 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, corsHeaders stri
1670 1670
 // FIXME: refactor this to be part of Server and not require re-creating a new
1671 1671
 // router each time. This requires first moving ListenAndServe into Server.
1672 1672
 func ServeRequest(eng *engine.Engine, apiversion version.Version, w http.ResponseWriter, req *http.Request) {
1673
-	router := createRouter(eng, false, true, "", "")
1673
+	cfg := &ServerConfig{
1674
+		EnableCors: true,
1675
+		Version:    string(apiversion),
1676
+	}
1677
+	api := New(cfg, eng)
1678
+	daemon, _ := eng.HackGetGlobalVar("httpapi.daemon").(*daemon.Daemon)
1679
+	api.AcceptConnections(daemon)
1680
+	router := createRouter(api, eng)
1674 1681
 	// Insert APIVERSION into the request as a convenience
1675 1682
 	req.URL.Path = fmt.Sprintf("/v%s%s", apiversion, req.URL.Path)
1676 1683
 	router.ServeHTTP(w, req)
... ...
@@ -48,9 +48,7 @@ const (
48 48
 )
49 49
 
50 50
 var (
51
-	// FIXME: globalDaemon is deprecated by globalEngine. All tests should be converted.
52 51
 	globalDaemon           *daemon.Daemon
53
-	globalEngine           *engine.Engine
54 52
 	globalHttpsEngine      *engine.Engine
55 53
 	globalRogueHttpsEngine *engine.Engine
56 54
 	startFds               int
... ...
@@ -153,7 +151,6 @@ func spawnGlobalDaemon() {
153 153
 	}
154 154
 	t := std_log.New(os.Stderr, "", 0)
155 155
 	eng := NewTestEngine(t)
156
-	globalEngine = eng
157 156
 	globalDaemon = mkDaemonFromEngine(eng, t)
158 157
 
159 158
 	serverConfig := &apiserver.ServerConfig{Logging: true}