From 19c5ce536b6e70f44a1fef1387997bf3a0e83e57 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sun, 3 May 2020 14:07:26 +0200 Subject: [PATCH] add status codes --- response.go | 4 ++-- response_test.go | 4 ++-- statuscodes.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 statuscodes.go diff --git a/response.go b/response.go index a422a794..65b091c6 100644 --- a/response.go +++ b/response.go @@ -8,7 +8,7 @@ import ( // Response is a RTSP response. type Response struct { - StatusCode int + StatusCode StatusCode Status string Header Header Content []byte @@ -34,10 +34,10 @@ func readResponse(br *bufio.Reader) (*Response, error) { statusCodeStr := string(byts[:len(byts)-1]) statusCode64, err := strconv.ParseInt(statusCodeStr, 10, 32) - res.StatusCode = int(statusCode64) if err != nil { return nil, fmt.Errorf("unable to parse status code") } + res.StatusCode = StatusCode(statusCode64) byts, err = readBytesLimited(br, '\r', 255) if err != nil { diff --git a/response_test.go b/response_test.go index 63b1cbbd..47885a14 100644 --- a/response_test.go +++ b/response_test.go @@ -21,7 +21,7 @@ var casesResponse = []struct { "\r\n", ), &Response{ - StatusCode: 200, + StatusCode: StatusOK, Status: "OK", Header: Header{ "CSeq": []string{"1"}, @@ -40,7 +40,7 @@ var casesResponse = []struct { "\r\n", ), &Response{ - StatusCode: 200, + StatusCode: StatusOK, Status: "OK", Header: Header{ "CSeq": []string{"2"}, diff --git a/statuscodes.go b/statuscodes.go new file mode 100644 index 00000000..7005e666 --- /dev/null +++ b/statuscodes.go @@ -0,0 +1,60 @@ +package gortsplib + +// StatusCode is a RTSP response status code. +type StatusCode int + +// https://tools.ietf.org/html/rfc7826#section-17 +const ( + StatusContinue StatusCode = 100 + + StatusOK = 200 + + StatusMovedPermanently = 301 + StatusFound = 302 + StatusSeeOther = 303 + StatusNotModified = 304 + StatusUseProxy = 305 + + StatusBadRequest = 400 + StatusUnauthorized = 401 + StatusPaymentRequired = 402 + StatusForbidden = 403 + StatusNotFound = 404 + StatusMethodNotAllowed = 405 + StatusNotAcceptable = 406 + StatusProxyAuthRequired = 407 + StatusRequestTimeout = 408 + StatusGone = 410 + StatusPreconditionFailed = 412 + StatusRequestEntityTooLarge = 413 + StatusRequestURITooLong = 414 + StatusUnsupportedMediaType = 415 + StatusParameterNotUnderstood = 451 + StatusIllegalConferenceIdentifier = 452 + StatusNotEnoughBandwidth = 453 + StatusSessionNotFound = 454 + StatusMethodNotValidInThisState = 455 + StatusHeaderFieldNotValidForResource = 456 + StatusInvalidRange = 457 + StatusParameterIsReadOnly = 458 + StatusAggregateOperationNotAllowed = 459 + StatusOnlyAggregateOperationAllowed = 460 + StatusUnsupportedTransport = 461 + StatusDestinationUnreachable = 462 + StatusDestinationProhibited = 463 + StatusDataTransportNotReadyYet = 464 + StatusNotificationReasonUnknown = 465 + StatusKeyManagementError = 466 + StatusConnectionAuthorizationRequired = 470 + StatusConnectionCredentialsNotAccepted = 471 + StatusFailureToEstablishSecureConnection = 472 + + StatusInternalServerError = 500 + StatusNotImplemented = 501 + StatusBadGateway = 502 + StatusServiceUnavailable = 503 + StatusGatewayTimeout = 504 + StatusRTSPVersionNotSupported = 505 + StatusOptionNotSupported = 551 + StatusProxyUnavailable = 553 +)