-
Notifications
You must be signed in to change notification settings - Fork 1
/
listen.go
116 lines (96 loc) · 4.81 KB
/
listen.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package web
import (
"crypto/tls"
"net"
)
// ListenAndServe Открытие адреса или сокета без использования конфигурации веб сервера (конфигурация по
// умолчанию), запуск веб сервера для обслуживания входящих соединений.
func (web *impl) ListenAndServe(addr string) Interface {
var conf *Configuration
if conf, web.err = parseAddress(addr); web.err != nil {
return web
}
return web.ListenAndServeWithConfig(conf)
}
// ListenAndServeTLS Открытие адреса или сокета с использованием TLS, без использования конфигурации веб сервера
// (конфигурация по умолчанию), запуск веб сервера для обслуживания входящих соединений.
func (web *impl) ListenAndServeTLS(addr string, certFile string, keyFile string, tlsConfig *tls.Config) Interface {
var conf *Configuration
if conf, web.err = parseAddress(addr); web.err != nil {
return web
}
conf.TLSPublicKeyPEM, conf.TLSPrivateKeyPEM = certFile, keyFile
return web.ListenAndServeTLSWithConfig(conf, tlsConfig)
}
// ListenAndServeWithConfig Настройка сервера с использованием переданной конфигурации, открытие адреса или сокета
// на прослушивание, запуск веб сервера для обслуживания входящих соединений.
func (web *impl) ListenAndServeWithConfig(conf *Configuration) Interface {
var listener net.Listener
if conf == nil {
web.err = Errors().NoConfiguration()
return web
}
web.cfg = conf
if listener, web.err = web.NewListener(web.cfg); web.err != nil {
return web
}
return web.ServeWithId(listener, web.cfg.ID)
}
// ListenAndServeTLSWithConfig Настройка сервера с использованием переданной конфигурации в режиме TLS, открытие
// адреса или сокета на прослушивание, запуск веб сервера для обслуживания входящих соединений.
func (web *impl) ListenAndServeTLSWithConfig(conf *Configuration, tlsConfig *tls.Config) Interface {
var listener net.Listener
if conf == nil {
web.err = Errors().NoConfiguration()
return web
}
web.cfg = conf
if tlsConfig == nil {
tlsConfig, web.err = web.net.NewTLSConfigDefault(conf.TLSPublicKeyPEM, conf.TLSPrivateKeyPEM)
if web.err != nil {
return web
}
}
if listener, web.err = web.NewListenerTLS(web.cfg, tlsConfig); web.err != nil {
return web
}
return web.ServeTLSWithId(listener, tlsConfig, web.cfg.ID)
}
// ListenersSystemdWithoutNames Возвращает срез net.Listener сокетов переданных в процесс веб сервера из systemd.
func (web *impl) ListenersSystemdWithoutNames() ([]net.Listener, error) {
return web.listenersSystemdWithoutNames()
}
// ListenersSystemdWithNames Возвращает карту срезов net.Listener сокетов переданных в процесс веб сервера
// из systemd.
func (web *impl) ListenersSystemdWithNames() (map[string][]net.Listener, error) {
return web.listenersSystemdWithNames()
}
// ListenersSystemdTLSWithoutNames Возвращает срез net.listener для TLS сокетов переданных в процесс веб сервера
// из systemd.
func (web *impl) ListenersSystemdTLSWithoutNames(tlsConfig *tls.Config) ([]net.Listener, error) {
return web.listenersSystemdTLSWithoutNames(tlsConfig)
}
// ListenersSystemdTLSWithNames Возвращает карту срезов net.listener для TLS сокетов переданных в процесс веб сервера
// из systemd.
func (web *impl) ListenersSystemdTLSWithNames(tlsConfig *tls.Config) (map[string][]net.Listener, error) {
return web.listenersSystemdTLSWithNames(tlsConfig)
}
// NewListener Создание нового слушателя соединений net.Listener на основе конфигурации веб сервера.
func (web *impl) NewListener(conf *Configuration) (ret net.Listener, err error) {
if web.net.IsRunning() {
err = Errors().AlreadyRunning()
return
}
ret, _, err = web.net.NewListener(&conf.Configuration)
return
}
// NewListenerTLS Создание нового слушателя соединений net.Listener в режиме TLS, на основе конфигурации
// веб сервера.
func (web *impl) NewListenerTLS(conf *Configuration, tlsConfig *tls.Config) (ret net.Listener, err error) {
if web.net.IsRunning() {
err = Errors().AlreadyRunning()
return
}
ret, _, err = web.net.NewListenerTLS(&conf.Configuration, tlsConfig)
return
}