// newStreamHandler is the remote-opened stream handler for inet.Network // TODO: this feels a bit wonky func (h *BasicHost) newStreamHandler(s inet.Stream) { before := time.Now() protoID, handle, err := h.Mux().Negotiate(s) took := time.Now().Sub(before) if err != nil { if err == io.EOF { logf := log.Debugf if took > time.Second*10 { logf = log.Warningf } logf("protocol EOF: %s (took %s)", s.Conn().RemotePeer(), took) } else { log.Warning("protocol mux failed: %s (took %s)", err, took) } return } s.SetProtocol(protocol.ID(protoID)) if h.bwc != nil { s = mstream.WrapStream(s, h.bwc) } log.Debugf("protocol negotiation took %s", took) go handle(protoID, s) }
func EchoStreamHandler(stream inet.Stream) { c := stream.Conn() log.Debugf("%s echoing %s", c.LocalPeer(), c.RemotePeer()) go func() { defer stream.Close() io.Copy(stream, stream) }() }
func (ids *IDService) ResponseHandler(s inet.Stream) { defer s.Close() c := s.Conn() r := ggio.NewDelimitedReader(s, 2048) mes := pb.Identify{} if err := r.ReadMsg(&mes); err != nil { return } ids.consumeMessage(&mes, c) log.Debugf("%s received message from %s %s", ID, c.RemotePeer(), c.RemoteMultiaddr()) }
func (ids *IDService) RequestHandler(s inet.Stream) { defer s.Close() c := s.Conn() bwc := ids.Host.GetBandwidthReporter() s = mstream.WrapStream(s, bwc) w := ggio.NewDelimitedWriter(s) mes := pb.Identify{} ids.populateMessage(&mes, s.Conn()) w.WriteMsg(&mes) log.Debugf("%s sent message to %s %s", ID, c.RemotePeer(), c.RemoteMultiaddr()) }
// newStreamHandler is the remote-opened stream handler for inet.Network // TODO: this feels a bit wonky func (h *BasicHost) newStreamHandler(s inet.Stream) { before := time.Now() if h.NegotiateTimeout != 0 { if err := s.SetDeadline(time.Now().Add(h.NegotiateTimeout)); err != nil { log.Error("setting stream deadline: ", err) s.Close() return } } protoID, handle, err := h.Mux().Negotiate(s) took := time.Now().Sub(before) if err != nil { if err == io.EOF { logf := log.Debugf if took > time.Second*10 { logf = log.Warningf } logf("protocol EOF: %s (took %s)", s.Conn().RemotePeer(), took) } else { log.Warning("protocol mux failed: %s (took %s)", err, took) } s.Close() return } if h.NegotiateTimeout != 0 { if err := s.SetDeadline(time.Time{}); err != nil { log.Error("resetting stream deadline: ", err) s.Close() return } } s.SetProtocol(protocol.ID(protoID)) if h.bwc != nil { s = mstream.WrapStream(s, h.bwc) } log.Debugf("protocol negotiation took %s", took) go handle(protoID, s) }