diff --git a/pkg/liberrors/server.go b/pkg/liberrors/server.go index 0996c9a7..24e0481e 100644 --- a/pkg/liberrors/server.go +++ b/pkg/liberrors/server.go @@ -175,6 +175,14 @@ func (e ErrServerTransportHeaderInvalidInterleavedIDs) Error() string { return "invalid interleaved IDs" } +// ErrServerTransportHeaderInterleavedIDsAlreadyUsed is an error that can be returned by a server. +type ErrServerTransportHeaderInterleavedIDsAlreadyUsed struct{} + +// Error implements the error interface. +func (e ErrServerTransportHeaderInterleavedIDsAlreadyUsed) Error() string { + return "interleaved IDs already used" +} + // ErrServerTracksDifferentProtocols is an error that can be returned by a server. type ErrServerTracksDifferentProtocols struct{} diff --git a/serversession.go b/serversession.go index a1e60d8a..f599545b 100644 --- a/serversession.go +++ b/serversession.go @@ -605,8 +605,8 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base }, liberrors.ErrServerTransportHeaderNoInterleavedIDs{} } - if (inTH.InterleavedIDs[0]+1) != inTH.InterleavedIDs[1] || - (inTH.InterleavedIDs[0]%2) != 0 { + if (inTH.InterleavedIDs[0]%2) != 0 || + (inTH.InterleavedIDs[0]+1) != inTH.InterleavedIDs[1] { return &base.Response{ StatusCode: base.StatusBadRequest, }, liberrors.ErrServerTransportHeaderInvalidInterleavedIDs{} @@ -615,7 +615,7 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base if _, ok := ss.setuppedTracksByChannel[inTH.InterleavedIDs[0]]; ok { return &base.Response{ StatusCode: base.StatusBadRequest, - }, liberrors.ErrServerTransportHeaderInvalidInterleavedIDs{} + }, liberrors.ErrServerTransportHeaderInterleavedIDsAlreadyUsed{} } }