mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
45 lines
1.1 KiB
Go
45 lines
1.1 KiB
Go
// +build windows
|
|
|
|
// Copyright 2016 go-dockerclient authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package docker
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"sync"
|
|
|
|
"github.com/Microsoft/go-winio"
|
|
)
|
|
|
|
const (
|
|
nativeProtocol = namedPipeProtocol
|
|
nativeRealEndpoint = "npipe:////./pipe/docker_engine"
|
|
nativeBadEndpoint = "npipe:////./pipe/godockerclient_test_echo"
|
|
)
|
|
|
|
var (
|
|
// namedPipeCount is used to provide uniqueness in the named pipes generated
|
|
// by newNativeServer
|
|
namedPipeCount int
|
|
// namedPipesAllocateLock protects namedPipeCount
|
|
namedPipeAllocateLock sync.Mutex
|
|
)
|
|
|
|
func newNativeServer(handler http.Handler) (*httptest.Server, func(), error) {
|
|
namedPipeAllocateLock.Lock()
|
|
defer namedPipeAllocateLock.Unlock()
|
|
pipeName := fmt.Sprintf("//./pipe/godockerclient_test_%d", namedPipeCount)
|
|
namedPipeCount++
|
|
l, err := winio.ListenPipe(pipeName, &winio.PipeConfig{MessageMode: true})
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
srv := httptest.NewUnstartedServer(handler)
|
|
srv.Listener = l
|
|
return srv, func() {}, nil
|
|
}
|