Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion pkg/sip/protocol.go
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,16 @@ func handleReferNotify(cseq uint32, status int, reason string, referCseq uint32,
Code: livekit.SIPStatusCode(status),
Status: reason,
}
result = psrpc.NewErrorf(psrpc.Canceled, "call transfer failed: %w", st)
// Converts SIP status to GRPC via SIPStatus.GRPCStatus(), then converts to psrpc via ErrorCodeFromGRPC()
errorCode, _ := psrpc.GetErrorCode(st)
if errorCode == psrpc.Internal || errorCode == psrpc.Unavailable {
// Temporarily overwrite the code until we support a direct SIPStatus -> psrpc.ErrorCode conversion
errorCode = psrpc.UpstreamServerError
if status < 500 || status >= 600 { // Common 6xx codes: 603 Declined, 608 Rejected
errorCode = psrpc.UpstreamClientError
}
}
result = psrpc.NewErrorf(errorCode, "call transfer failed: %w", st)
}
select {
case referDone <- result:
Expand Down Expand Up @@ -413,6 +422,10 @@ func sipStatusForErrorCode(code psrpc.ErrorCode) sip.StatusCode {
return sip.StatusServiceUnavailable
case psrpc.Unauthenticated:
return sip.StatusUnauthorized
case psrpc.UpstreamServerError:
return sip.StatusBadGateway
case psrpc.UpstreamClientError:
return sip.StatusTemporarilyUnavailable
default:
return sip.StatusInternalServerError
}
Expand Down
Loading