func NewTransport() *Transport { mux := mss.NewMultistreamMuxer() mux.AddHandler("/multiplex", nil) mux.AddHandler("/spdystream", nil) mux.AddHandler("/yamux", nil) tpts := map[string]smux.Transport{ "/multiplex": multiplex.DefaultTransport, "/spdystream": spdy.Transport, "/yamux": yamux.DefaultTransport, } return &Transport{ mux: mux, tpts: tpts, OrderPreference: []string{"/yamux", "/spdystream", "/multiplex"}, } }
// New constructs and sets up a new *BasicHost with given Network func New(net inet.Network, opts ...interface{}) *BasicHost { h := &BasicHost{ network: net, mux: msmux.NewMultistreamMuxer(), bwc: metrics.NewBandwidthCounter(), } h.proc = goprocess.WithTeardown(func() error { if h.natmgr != nil { h.natmgr.Close() } return h.Network().Close() }) // setup host services h.ids = identify.NewIDService(h) muxh := h.Mux().Handle handle := func(s inet.Stream) { muxh(s) } h.relay = relay.NewRelayService(h, handle) for _, o := range opts { switch o := o.(type) { case Option: switch o { case NATPortMap: h.natmgr = newNatManager(h) } case metrics.Reporter: h.bwc = o } } net.SetConnHandler(h.newConnHandler) net.SetStreamHandler(h.newStreamHandler) return h }
func WrapTransportListener(ctx context.Context, ml transport.Listener, local peer.ID, sk ic.PrivKey) (Listener, error) { l := &listener{ Listener: ml, local: local, privk: sk, mux: msmux.NewMultistreamMuxer(), incoming: make(chan connErr, connAcceptBuffer), ctx: ctx, } l.proc = goprocessctx.WithContextAndTeardown(ctx, l.teardown) l.catcher.IsTemp = func(e error) bool { // ignore connection breakages up to this point. but log them if e == io.EOF { log.Debugf("listener ignoring conn with EOF: %s", e) return true } te, ok := e.(tec.Temporary) if ok { log.Debugf("listener ignoring conn with temporary err: %s", e) return te.Temporary() } return false } if EncryptConnections { l.mux.AddHandler(SecioTag, nil) } else { l.mux.AddHandler(NoEncryptionTag, nil) } go l.handleIncoming() log.Debugf("Conn Listener on %s", l.Multiaddr()) log.Event(ctx, "swarmListen", l) return l, nil }
func NewBlankTransport() *Transport { return &Transport{ mux: mss.NewMultistreamMuxer(), tpts: make(map[string]smux.Transport), } }