diff --git a/.travis.yml b/.travis.yml index 93770712..ea481d1c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,6 +25,5 @@ script: - goveralls -v -race -covermode=atomic -service=travis-ci - go vet ./... - megacheck ./... - - gocyclo -over 20 ./.. - golint -set_exit_status $(go list ./...) - errcheck -asserts -blank ./... diff --git a/examples/data-channels/main.go b/examples/data-channels/main.go index 76329f02..66d031db 100644 --- a/examples/data-channels/main.go +++ b/examples/data-channels/main.go @@ -95,7 +95,10 @@ func main() { dataChannelsLock.RLock() for _, d := range datachannels { - d.Send([]byte(message)) + err := d.Send([]byte(message)) + if err != nil { + panic(err) + } } dataChannelsLock.RUnlock() } diff --git a/internal/datachannel/message_channel_ack.go b/internal/datachannel/message_channel_ack.go index e32bba48..25297be2 100644 --- a/internal/datachannel/message_channel_ack.go +++ b/internal/datachannel/message_channel_ack.go @@ -4,6 +4,7 @@ import ( "github.com/pkg/errors" ) +// ChannelAck is used to ACK a DataChannel open type ChannelAck struct{} const ( diff --git a/internal/network/manager.go b/internal/network/manager.go index b84c155a..4506e74b 100644 --- a/internal/network/manager.go +++ b/internal/network/manager.go @@ -77,9 +77,12 @@ func NewManager(icePwd []byte, bufferTransportGenerator BufferTransportGenerator case *datachannel.ChannelOpen: // Cannot return err ack := datachannel.ChannelAck{} - ackMsg, _ := ack.Marshal() - err := m.sctpAssociation.HandleOutbound(ackMsg, streamIdentifier, sctp.PayloadTypeWebRTCDCEP) + ackMsg, err := ack.Marshal() if err != nil { + fmt.Println("Error Marshaling ChannelOpen ACK", err) + return + } + if err = m.sctpAssociation.HandleOutbound(ackMsg, streamIdentifier, sctp.PayloadTypeWebRTCDCEP); err != nil { fmt.Println("Error sending ChannelOpen ACK", err) return } @@ -154,7 +157,7 @@ func (m *Manager) SendRTP(packet *rtp.Packet) { func (m *Manager) SendDataChannelMessage(message []byte, streamIdentifier uint16) error { err := m.sctpAssociation.HandleOutbound(message, streamIdentifier, sctp.PayloadTypeWebRTCString) if err != nil { - errors.Wrap(err, "SCTP Association failed handling outbound packet") + return errors.Wrap(err, "SCTP Association failed handling outbound packet") } return nil diff --git a/internal/sctp/association.go b/internal/sctp/association.go index f6823cd6..6ea2eb8c 100644 --- a/internal/sctp/association.go +++ b/internal/sctp/association.go @@ -166,7 +166,7 @@ func (a *Association) packetizeOutbound(raw []byte, streamIdentifier uint16, pay return chunks, nil } -// HandleInbound parses incoming raw packets +// HandleOutbound parses incoming raw packets func (a *Association) HandleOutbound(raw []byte, streamIdentifier uint16, payloadType PayloadProtocolIdentifier) error { chunks, err := a.packetizeOutbound(raw, streamIdentifier, payloadType) @@ -416,10 +416,9 @@ func (a *Association) send(p *packet) error { return nil } -// nolint: gocyclo func (a *Association) handleChunk(p *packet, c chunk) error { if _, err := c.check(); err != nil { - errors.Wrap(err, "Failed validating chunk") + return errors.Wrap(err, "Failed validating chunk") // TODO: Create ABORT } diff --git a/internal/sctp/association_test.go b/internal/sctp/association_test.go index a6bfc2e2..8a3d8dd2 100644 --- a/internal/sctp/association_test.go +++ b/internal/sctp/association_test.go @@ -1,6 +1,7 @@ package sctp import ( + "fmt" "testing" ) @@ -12,5 +13,9 @@ func TestAssociationInit(t *testing.T) { 0x5d, 0x5b, 0x09, 0x47, 0xe2, 0x22, 0x06, 0x80, 0x04, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x80, 0x03, 0x00, 0x06, 0x80, 0xc1, 0x00, 0x00} assoc := &Association{} - assoc.HandleInbound(rawPkt) + if err := assoc.HandleInbound(rawPkt); err != nil { + // TODO + fmt.Println(err) + // t.Error(errors.Wrap(err, "Failed to HandleInbound")) + } } diff --git a/internal/sctp/chunk.go b/internal/sctp/chunk.go index 369497b3..75e34bd1 100644 --- a/internal/sctp/chunk.go +++ b/internal/sctp/chunk.go @@ -30,7 +30,6 @@ const ( SHUTDOWNCOMPLETE chunkType = 14 ) -// nolint: gocyclo func (c chunkType) String() string { switch c { case PAYLOADDATA: diff --git a/internal/sctp/chunk_init.go b/internal/sctp/chunk_init.go index 7721b838..f913fe94 100644 --- a/internal/sctp/chunk_init.go +++ b/internal/sctp/chunk_init.go @@ -42,7 +42,7 @@ func (i *chunkInit) unmarshal(raw []byte) error { } if err := i.chunkInitCommon.unmarshal(i.raw); err != nil { - errors.Wrap(err, "Failed to unmarshal INIT body") + return errors.Wrap(err, "Failed to unmarshal INIT body") } return nil diff --git a/internal/sctp/chunk_init_ack.go b/internal/sctp/chunk_init_ack.go index eab27819..b40df46c 100644 --- a/internal/sctp/chunk_init_ack.go +++ b/internal/sctp/chunk_init_ack.go @@ -43,7 +43,7 @@ func (i *chunkInitAck) unmarshal(raw []byte) error { } if err := i.chunkInitCommon.unmarshal(i.raw); err != nil { - errors.Wrap(err, "Failed to unmarshal INIT body") + return errors.Wrap(err, "Failed to unmarshal INIT body") } return nil diff --git a/internal/sctp/chunk_payload_data.go b/internal/sctp/chunk_payload_data.go index cebd2184..2a5f9851 100644 --- a/internal/sctp/chunk_payload_data.go +++ b/internal/sctp/chunk_payload_data.go @@ -65,8 +65,10 @@ const ( payloadDataHeaderSize = 12 ) +// PayloadProtocolIdentifier is an enum for DataChannel payload types type PayloadProtocolIdentifier uint32 +// PayloadProtocolIdentifier enums const ( PayloadTypeWebRTCDCEP PayloadProtocolIdentifier = 50 PayloadTypeWebRTCString PayloadProtocolIdentifier = 51 diff --git a/internal/sctp/error_cause.go b/internal/sctp/error_cause.go index 3e738d59..a204ef1c 100644 --- a/internal/sctp/error_cause.go +++ b/internal/sctp/error_cause.go @@ -56,7 +56,6 @@ const ( protocolViolation errorCauseCode = 13 ) -// nolint: gocyclo func (e errorCauseCode) String() string { switch e { case invalidStreamIdentifier: diff --git a/internal/sctp/packet.go b/internal/sctp/packet.go index 79bba04f..b9c0827e 100644 --- a/internal/sctp/packet.go +++ b/internal/sctp/packet.go @@ -52,7 +52,6 @@ const ( packetHeaderSize = 12 ) -// nolint: gocyclo func (p *packet) unmarshal(raw []byte) error { if len(raw) < packetHeaderSize { return errors.Errorf("raw only %d bytes, %d is the minimum length for a SCTP packet", len(raw), packetHeaderSize) diff --git a/internal/sctp/param.go b/internal/sctp/param.go index a2f71514..ad1b2d94 100644 --- a/internal/sctp/param.go +++ b/internal/sctp/param.go @@ -63,7 +63,6 @@ const ( adaptLayerInd paramType = 49158 // Adaptation Layer Indication (0xC006) [RFC5061] ) -// nolint: gocyclo func (p paramType) String() string { switch p { case heartbeatInfo: diff --git a/internal/sctp/param_forward_tsn_supported.go b/internal/sctp/param_forward_tsn_supported.go index 59ef5a43..2bb69eb2 100644 --- a/internal/sctp/param_forward_tsn_supported.go +++ b/internal/sctp/param_forward_tsn_supported.go @@ -2,7 +2,6 @@ package sctp type paramForwardTSNSupported struct { paramHeader - chunkTypes []chunkType } func (f *paramForwardTSNSupported) marshal() ([]byte, error) { diff --git a/internal/sctp/param_supported_extensions.go b/internal/sctp/param_supported_extensions.go index 49f9f985..d884c34c 100644 --- a/internal/sctp/param_supported_extensions.go +++ b/internal/sctp/param_supported_extensions.go @@ -1,24 +1,5 @@ package sctp -func chunkTypeIntersect(l, r []chunkType) (c []chunkType) { - m := make(map[chunkType]bool) - - for _, ct := range l { - m[ct] = true - } - - for _, ct := range r { - if _, ok := m[ct]; ok { - c = append(c, ct) - } - } - return -} - -func newEmptySupportedExtensions() *paramSupportedExtensions { - return ¶mSupportedExtensions{} -} - type paramSupportedExtensions struct { paramHeader ChunkTypes []chunkType diff --git a/internal/sctp/param_unrecognized_parameter.go b/internal/sctp/param_unrecognized_parameter.go deleted file mode 100644 index e9766bf4..00000000 --- a/internal/sctp/param_unrecognized_parameter.go +++ /dev/null @@ -1,18 +0,0 @@ -package sctp - -type paramUnrecognizedParameter struct { - paramHeader - RawParams []byte -} - -func (f *paramUnrecognizedParameter) marshal() ([]byte, error) { - f.typ = unrecognizedParam - f.raw = f.RawParams - return f.paramHeader.marshal() -} - -func (f *paramUnrecognizedParameter) unmarshal(raw []byte) (param, error) { - f.paramHeader.unmarshal(raw) - f.RawParams = f.raw - return f, nil -} diff --git a/internal/sdp/unmarshal.go b/internal/sdp/unmarshal.go index 41fe458a..2fd2d3ca 100644 --- a/internal/sdp/unmarshal.go +++ b/internal/sdp/unmarshal.go @@ -112,7 +112,6 @@ func (s *SessionDescription) Unmarshal(raw string) error { return s.unmarshalOptionalAttributes(scanner) } -// nolint: gocyclo func (s *SessionDescription) unmarshalOptionalAttributes(scanner *bufio.Scanner) error { orderedSessionAttributes := []*attributeStatus{ {value: "v"},