api\server: Factored out UnixHttp on Windows, supported on Linux only.
| ... | ... |
@@ -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 |
+} |