func NewTLSListener(contextName string, address string, tlsListenerConfig config.TLSListenerConfig, envelopeChan chan *events.Envelope, logger *gosteno.Logger) (Listener, error) { tlsConfig, err := NewTLSConfig(tlsListenerConfig.CertFile, tlsListenerConfig.KeyFile, tlsListenerConfig.CAFile) if err != nil { return nil, err } listener, err := tls.Listen("tcp", address, tlsConfig) if err != nil { return nil, err } return &TLSListener{ listener: listener, envelopeChan: envelopeChan, logger: logger, connections: make(map[net.Conn]struct{}), unmarshaller: dropsonde_unmarshaller.NewDropsondeUnmarshaller(logger), stopped: make(chan struct{}), listenerClosed: make(chan struct{}), receivedMessageCountMetricName: contextName + ".receivedMessageCount", receivedByteCountMetricName: contextName + ".receivedByteCount", receiveErrorCountMetricName: contextName + ".receiveErrorCount", }, nil }
func NewTCPListener(contextName string, address string, tlsListenerConfig *config.TLSListenerConfig, envelopeChan chan *events.Envelope, logger *gosteno.Logger) (Listener, error) { protocol := "TCP" listener, err := net.Listen("tcp", address) if err != nil { return nil, err } if tlsListenerConfig != nil { protocol = "TLS" tlsConfig, err := NewTLSConfig(tlsListenerConfig.CertFile, tlsListenerConfig.KeyFile, tlsListenerConfig.CAFile) if err != nil { return nil, err } listener = tls.NewListener(listener, tlsConfig) } return &TCPListener{ listener: listener, protocol: protocol, envelopeChan: envelopeChan, logger: logger, connections: make(map[net.Conn]struct{}), unmarshaller: dropsonde_unmarshaller.NewDropsondeUnmarshaller(logger), stopped: make(chan struct{}), listenerClosed: make(chan struct{}), listenerTotalMetricName: "listeners.totalReceivedMessageCount", receivedMessageCountMetricName: contextName + ".receivedMessageCount", receivedByteCountMetricName: contextName + ".receivedByteCount", receiveErrorCountMetricName: contextName + ".receiveErrorCount", }, nil }
func (cnsmr *consumer) listenForMessages(msgChan chan<- *events.Envelope) error { defer cnsmr.ws.Close() unmarshaller := dropsonde_unmarshaller.NewDropsondeUnmarshaller(gosteno.NewLogger("")) for { _, data, err := cnsmr.ws.ReadMessage() if err != nil { return err } msg, err := unmarshaller.UnmarshallMessage(data) if err != nil { continue } msgChan <- msg } }
func NewTCPListener( metricProto, address string, tlsListenerConfig *config.TLSListenerConfig, envelopeChan chan *events.Envelope, batcher Batcher, logger *gosteno.Logger, ) (*TCPListener, error) { protocol := "TCP" listener, err := net.Listen("tcp", address) if err != nil { return nil, err } if tlsListenerConfig != nil { protocol = "TLS" tlsConfig, err := NewTLSConfig(tlsListenerConfig.CertFile, tlsListenerConfig.KeyFile, tlsListenerConfig.CAFile) if err != nil { return nil, err } listener = tls.NewListener(listener, tlsConfig) } return &TCPListener{ listener: listener, protocol: protocol, envelopeChan: envelopeChan, logger: logger, batcher: batcher, metricProto: metricProto, connections: make(map[net.Conn]struct{}), unmarshaller: dropsonde_unmarshaller.NewDropsondeUnmarshaller(logger), stopped: make(chan struct{}), listenerClosed: make(chan struct{}), }, nil }
"github.com/cloudfoundry/loggregatorlib/loggertesthelper" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("DropsondeUnmarshaller", func() { var ( inputChan chan []byte outputChan chan *events.Envelope runComplete chan struct{} unmarshaller dropsonde_unmarshaller.DropsondeUnmarshaller ) Context("Unmarshall", func() { BeforeEach(func() { unmarshaller = dropsonde_unmarshaller.NewDropsondeUnmarshaller(loggertesthelper.Logger()) }) It("unmarshalls bytes", func() { input := &events.Envelope{ Origin: proto.String("fake-origin-3"), EventType: events.Envelope_Heartbeat.Enum(), Heartbeat: factories.NewHeartbeat(1, 2, 3), } message, _ := proto.Marshal(input) output, _ := unmarshaller.UnmarshallMessage(message) Expect(output).To(Equal(input)) }) It("handles bad input gracefully", func() { output, err := unmarshaller.UnmarshallMessage(make([]byte, 4))