Browse code

Merge pull request #10971 from Microsoft/10662-api_server_factor_out_windows

api\server: Factored out UnixHttp on Windows, supported on Linux only.

Jessie Frazelle authored on 2015/03/03 05:40:20
Showing 3 changed files
... ...
@@ -16,7 +16,6 @@ import (
16 16
 	"os"
17 17
 	"strconv"
18 18
 	"strings"
19
-	"syscall"
20 19
 
21 20
 	"crypto/tls"
22 21
 	"crypto/x509"
... ...
@@ -1513,31 +1512,6 @@ func setSocketGroup(addr, group string) error {
1513 1513
 	return nil
1514 1514
 }
1515 1515
 
1516
-func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) {
1517
-	r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version"))
1518
-
1519
-	if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) {
1520
-		return nil, err
1521
-	}
1522
-	mask := syscall.Umask(0777)
1523
-	defer syscall.Umask(mask)
1524
-
1525
-	l, err := newListener("unix", addr, job.GetenvBool("BufferRequests"))
1526
-	if err != nil {
1527
-		return nil, err
1528
-	}
1529
-
1530
-	if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil {
1531
-		return nil, err
1532
-	}
1533
-
1534
-	if err := os.Chmod(addr, 0660); err != nil {
1535
-		return nil, err
1536
-	}
1537
-
1538
-	return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil
1539
-}
1540
-
1541 1516
 func allocateDaemonPort(addr string) error {
1542 1517
 	host, port, err := net.SplitHostPort(addr)
1543 1518
 	if err != nil {
... ...
@@ -1593,21 +1567,6 @@ func setupTcpHttp(addr string, job *engine.Job) (*HttpServer, error) {
1593 1593
 	return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil
1594 1594
 }
1595 1595
 
1596
-// NewServer sets up the required Server and does protocol specific checking.
1597
-func NewServer(proto, addr string, job *engine.Job) (Server, error) {
1598
-	// Basic error and sanity checking
1599
-	switch proto {
1600
-	case "fd":
1601
-		return nil, serveFd(addr, job)
1602
-	case "tcp":
1603
-		return setupTcpHttp(addr, job)
1604
-	case "unix":
1605
-		return setupUnixHttp(addr, job)
1606
-	default:
1607
-		return nil, fmt.Errorf("Invalid protocol format.")
1608
-	}
1609
-}
1610
-
1611 1596
 type Server interface {
1612 1597
 	Serve() error
1613 1598
 	Close() error
1614 1599
new file mode 100644
... ...
@@ -0,0 +1,52 @@
0
+// +build linux
1
+
2
+package server
3
+
4
+import (
5
+	"fmt"
6
+	"net/http"
7
+	"os"
8
+	"syscall"
9
+
10
+	"github.com/docker/docker/engine"
11
+)
12
+
13
+// NewServer sets up the required Server and does protocol specific checking.
14
+func NewServer(proto, addr string, job *engine.Job) (Server, error) {
15
+	// Basic error and sanity checking
16
+	switch proto {
17
+	case "fd":
18
+		return nil, serveFd(addr, job)
19
+	case "tcp":
20
+		return setupTcpHttp(addr, job)
21
+	case "unix":
22
+		return setupUnixHttp(addr, job)
23
+	default:
24
+		return nil, fmt.Errorf("Invalid protocol format.")
25
+	}
26
+}
27
+
28
+func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) {
29
+	r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version"))
30
+
31
+	if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) {
32
+		return nil, err
33
+	}
34
+	mask := syscall.Umask(0777)
35
+	defer syscall.Umask(mask)
36
+
37
+	l, err := newListener("unix", addr, job.GetenvBool("BufferRequests"))
38
+	if err != nil {
39
+		return nil, err
40
+	}
41
+
42
+	if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil {
43
+		return nil, err
44
+	}
45
+
46
+	if err := os.Chmod(addr, 0660); err != nil {
47
+		return nil, err
48
+	}
49
+
50
+	return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil
51
+}
0 52
new file mode 100644
... ...
@@ -0,0 +1,20 @@
0
+// +build windows
1
+
2
+package server
3
+
4
+import (
5
+	"fmt"
6
+
7
+	"github.com/docker/docker/engine"
8
+)
9
+
10
+// NewServer sets up the required Server and does protocol specific checking.
11
+func NewServer(proto, addr string, job *engine.Job) (Server, error) {
12
+	// Basic error and sanity checking
13
+	switch proto {
14
+	case "tcp":
15
+		return setupTcpHttp(addr, job)
16
+	default:
17
+		return nil, errors.New("Invalid protocol format. Windows only supports tcp.")
18
+	}
19
+}