server: fix error message (#634)

Return error 'can't setup medias with different protocols' when trying
to use UDP and TCP in sequence.
This commit is contained in:
Alessandro Ros
2024-10-14 12:28:03 +02:00
committed by GitHub
parent b561229761
commit d43cce3086
2 changed files with 54 additions and 27 deletions

View File

@@ -662,15 +662,15 @@ func (ss *ServerSession) handleRequestInner(sc *ServerConn, req *base.Request) (
}, err
}
var inTSH headers.Transports
err = inTSH.Unmarshal(req.Header["Transport"])
var transportHeaders headers.Transports
err = transportHeaders.Unmarshal(req.Header["Transport"])
if err != nil {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, liberrors.ErrServerTransportHeaderInvalid{Err: err}
}
inTH := findFirstSupportedTransportHeader(ss.s, inTSH)
inTH := findFirstSupportedTransportHeader(ss.s, transportHeaders)
if inTH == nil {
return &base.Response{
StatusCode: base.StatusUnsupportedTransport,
@@ -706,16 +706,26 @@ func (ss *ServerSession) handleRequestInner(sc *ServerConn, req *base.Request) (
transport = TransportUDPMulticast
} else {
transport = TransportUDP
if inTH.ClientPorts == nil {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, liberrors.ErrServerTransportHeaderNoClientPorts{}
}
}
} else {
transport = TransportTCP
}
if ss.setuppedTransport != nil && *ss.setuppedTransport != transport {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, liberrors.ErrServerMediasDifferentProtocols{}
}
switch transport {
case TransportUDP:
if inTH.ClientPorts == nil {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, liberrors.ErrServerTransportHeaderNoClientPorts{}
}
case TransportTCP:
if inTH.InterleavedIDs != nil {
if (inTH.InterleavedIDs[0] + 1) != inTH.InterleavedIDs[1] {
return &base.Response{
@@ -731,12 +741,6 @@ func (ss *ServerSession) handleRequestInner(sc *ServerConn, req *base.Request) (
}
}
if ss.setuppedTransport != nil && *ss.setuppedTransport != transport {
return &base.Response{
StatusCode: base.StatusBadRequest,
}, liberrors.ErrServerMediasDifferentProtocols{}
}
switch ss.state {
case ServerSessionStateInitial, ServerSessionStatePrePlay: // play
if inTH.Mode != nil && *inTH.Mode != headers.TransportModePlay {