// NewStream opens a new stream to given peer p, and writes a p2p/protocol // header with given protocol.ID. If there is no connection to p, attempts // to create one. If ProtocolID is "", writes no header. // (Threadsafe) func (h *BasicHost) NewStream(pid protocol.ID, p peer.ID) (inet.Stream, error) { s, err := h.Network().NewStream(p) if err != nil { return nil, err } logStream := mstream.WrapStream(s, pid, h.bwc) lzcon := msmux.NewMSSelect(logStream, string(pid)) return &streamWrapper{ Stream: logStream, rw: lzcon, }, nil }
func (h *BasicHost) newStream(ctx context.Context, p peer.ID, pid protocol.ID) (inet.Stream, error) { s, err := h.Network().NewStream(ctx, p) if err != nil { return nil, err } s.SetProtocol(pid) if h.bwc != nil { s = mstream.WrapStream(s, h.bwc) } lzcon := msmux.NewMSSelect(s, string(pid)) return &streamWrapper{ Stream: s, rw: lzcon, }, nil }