From 69246e15276d7010c00269be140b9fb1a5c11ae5 Mon Sep 17 00:00:00 2001 From: "John Howard (VM)" Date: Fri, 13 Feb 2015 11:46:14 -0800 Subject: [PATCH] api\server: Factored out UnixHttp on Windows, supported on Linux only. Signed-off-by: John Howard --- api/server/server.go | 41 ---------------------------- api/server/server_linux.go | 52 ++++++++++++++++++++++++++++++++++++ api/server/server_windows.go | 20 ++++++++++++++ 3 files changed, 72 insertions(+), 41 deletions(-) create mode 100644 api/server/server_linux.go create mode 100644 api/server/server_windows.go diff --git a/api/server/server.go b/api/server/server.go index 78ca4b7829..191ad9153e 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -16,7 +16,6 @@ import ( "os" "strconv" "strings" - "syscall" "crypto/tls" "crypto/x509" @@ -1502,31 +1501,6 @@ func setSocketGroup(addr, group string) error { return nil } -func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) { - r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version")) - - if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) { - return nil, err - } - mask := syscall.Umask(0777) - defer syscall.Umask(mask) - - l, err := newListener("unix", addr, job.GetenvBool("BufferRequests")) - if err != nil { - return nil, err - } - - if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil { - return nil, err - } - - if err := os.Chmod(addr, 0660); err != nil { - return nil, err - } - - return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil -} - func allocateDaemonPort(addr string) error { host, port, err := net.SplitHostPort(addr) if err != nil { @@ -1582,21 +1556,6 @@ func setupTcpHttp(addr string, job *engine.Job) (*HttpServer, error) { return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil } -// NewServer sets up the required Server and does protocol specific checking. -func NewServer(proto, addr string, job *engine.Job) (Server, error) { - // Basic error and sanity checking - switch proto { - case "fd": - return nil, serveFd(addr, job) - case "tcp": - return setupTcpHttp(addr, job) - case "unix": - return setupUnixHttp(addr, job) - default: - return nil, fmt.Errorf("Invalid protocol format.") - } -} - type Server interface { Serve() error Close() error diff --git a/api/server/server_linux.go b/api/server/server_linux.go new file mode 100644 index 0000000000..7d312c685b --- /dev/null +++ b/api/server/server_linux.go @@ -0,0 +1,52 @@ +// +build linux + +package server + +import ( + "fmt" + "net/http" + "os" + "syscall" + + "github.com/docker/docker/engine" +) + +// NewServer sets up the required Server and does protocol specific checking. +func NewServer(proto, addr string, job *engine.Job) (Server, error) { + // Basic error and sanity checking + switch proto { + case "fd": + return nil, serveFd(addr, job) + case "tcp": + return setupTcpHttp(addr, job) + case "unix": + return setupUnixHttp(addr, job) + default: + return nil, fmt.Errorf("Invalid protocol format.") + } +} + +func setupUnixHttp(addr string, job *engine.Job) (*HttpServer, error) { + r := createRouter(job.Eng, job.GetenvBool("Logging"), job.GetenvBool("EnableCors"), job.Getenv("Version")) + + if err := syscall.Unlink(addr); err != nil && !os.IsNotExist(err) { + return nil, err + } + mask := syscall.Umask(0777) + defer syscall.Umask(mask) + + l, err := newListener("unix", addr, job.GetenvBool("BufferRequests")) + if err != nil { + return nil, err + } + + if err := setSocketGroup(addr, job.Getenv("SocketGroup")); err != nil { + return nil, err + } + + if err := os.Chmod(addr, 0660); err != nil { + return nil, err + } + + return &HttpServer{&http.Server{Addr: addr, Handler: r}, l}, nil +} diff --git a/api/server/server_windows.go b/api/server/server_windows.go new file mode 100644 index 0000000000..fba1c6a60a --- /dev/null +++ b/api/server/server_windows.go @@ -0,0 +1,20 @@ +// +build windows + +package server + +import ( + "fmt" + + "github.com/docker/docker/engine" +) + +// NewServer sets up the required Server and does protocol specific checking. +func NewServer(proto, addr string, job *engine.Job) (Server, error) { + // Basic error and sanity checking + switch proto { + case "tcp": + return setupTcpHttp(addr, job) + default: + return nil, errors.New("Invalid protocol format. Windows only supports tcp.") + } +}