File: server.go

package info (click to toggle)
golang-github-inconshreveable-muxado 0.0~git20140312.0.f693c7e-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 256 kB
  • ctags: 374
  • sloc: makefile: 2
file content (71 lines) | stat: -rw-r--r-- 1,968 bytes parent folder | download | duplicates (3)
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
package muxado

import (
	"crypto/tls"
	"github.com/inconshreveable/muxado/proto"
	"github.com/inconshreveable/muxado/proto/ext"
	"net"
)

// A Listener accepts new connections from its net.Listener
// and begins muxado server connections on them.
//
// It's API is very similar to a net.Listener, but it returns
// muxado.Sessions instead of net.Conn's.
type Listener struct {
	wrapped net.Listener
}

// Accept the next connection from the listener and begin
// a muxado session on it.
func (l *Listener) Accept() (Session, error) {
	conn, err := l.wrapped.Accept()
	if err != nil {
		return nil, err
	}

	return Server(conn), nil
}

// Addr returns the bound address of the wrapped net.Listener
func (l *Listener) Addr() net.Addr {
	return l.wrapped.Addr()
}

// Close closes the wrapped net.Listener
func (l *Listener) Close() error {
	return l.wrapped.Close()
}

// Server returns a muxado server session using conn as the transport.
func Server(conn net.Conn) Session {
	return &sessionAdaptor{proto.NewSession(conn, proto.NewStream, false, []proto.Extension{ext.NewDefaultHeartbeat()})}
}

// Listen binds to a network address and returns a Listener which accepts
// new connections and starts muxado server sessions on them.
func Listen(network, addr string) (*Listener, error) {
	l, err := net.Listen(network, addr)
	if err != nil {
		return nil, err
	}

	return &Listener{l}, nil
}

// ListenTLS binds to a network address and accepts new TLS-encrypted connections.
// It returns a Listener which starts new muxado server sessions on the connections.
func ListenTLS(network, addr string, tlsConfig *tls.Config) (*Listener, error) {
	l, err := tls.Listen(network, addr, tlsConfig)
	if err != nil {
		return nil, err
	}

	return &Listener{l}, nil
}

// NewListener creates a new muxado listener which creates new muxado server sessions
// by accepting connections from the given net.Listener
func NewListener(l net.Listener) *Listener {
	return &Listener{l}
}