Skip to content

Commit

Permalink
feat: remove status code as enum
Browse files Browse the repository at this point in the history
  • Loading branch information
emiago committed Mar 11, 2025
1 parent 39fc08e commit 6ffeb52
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 65 deletions.
2 changes: 1 addition & 1 deletion dialog_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ func (s *DialogServerSession) Close() error {
// 2xx for creating dialog or other code in case failure
//
// In case Cancel request received: ErrDialogCanceled is responded
func (s *DialogServerSession) Respond(statusCode sip.StatusCode, reason string, body []byte, headers ...sip.Header) error {
func (s *DialogServerSession) Respond(statusCode int, reason string, body []byte, headers ...sip.Header) error {
// Must copy Record-Route headers. Done by this command
res := sip.NewResponseFromRequest(s.InviteRequest, statusCode, reason, body)

Expand Down
4 changes: 2 additions & 2 deletions server_integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ func TestIntegrationClientServer(t *testing.T) {
require.NoError(t, err)

res := <-tx.Responses()
assert.Equal(t, sip.StatusCode(200), res.StatusCode)
assert.Equal(t, 200, res.StatusCode)

tx.Terminate()
})
Expand Down Expand Up @@ -288,7 +288,7 @@ func BenchmarkIntegrationClientServer(t *testing.B) {
require.NoError(t, err)

res := <-tx.Responses()
assert.Equal(t, sip.StatusCode(200), res.StatusCode)
assert.Equal(t, 200, res.StatusCode)

tx.Terminate()
}
Expand Down
109 changes: 53 additions & 56 deletions sip/message.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,64 +10,61 @@ type RequestMethod string

func (r RequestMethod) String() string { return string(r) }

// StatusCode - response status code: 1xx - 6xx
type StatusCode int

const (
// https://datatracker.ietf.org/doc/html/rfc3261#section-21
StatusTrying StatusCode = 100
StatusRinging StatusCode = 180
StatusCallIsForwarded StatusCode = 181
StatusQueued StatusCode = 182
StatusSessionInProgress StatusCode = 183

StatusOK StatusCode = 200
StatusAccepted StatusCode = 202

StatusMovedPermanently StatusCode = 301
StatusMovedTemporarily StatusCode = 302
StatusUseProxy StatusCode = 305

StatusBadRequest StatusCode = 400
StatusUnauthorized StatusCode = 401
StatusPaymentRequired StatusCode = 402
StatusForbidden StatusCode = 403
StatusNotFound StatusCode = 404
StatusMethodNotAllowed StatusCode = 405
StatusNotAcceptable StatusCode = 406
StatusProxyAuthRequired StatusCode = 407
StatusRequestTimeout StatusCode = 408
StatusConflict StatusCode = 409
StatusGone StatusCode = 410
StatusRequestEntityTooLarge StatusCode = 413
StatusRequestURITooLong StatusCode = 414
StatusUnsupportedMediaType StatusCode = 415
StatusRequestedRangeNotSatisfiable StatusCode = 416
StatusBadExtension StatusCode = 420
StatusExtensionRequired StatusCode = 421
StatusIntervalToBrief StatusCode = 423
StatusTemporarilyUnavailable StatusCode = 480
StatusCallTransactionDoesNotExists StatusCode = 481
StatusLoopDetected StatusCode = 482
StatusTooManyHops StatusCode = 483
StatusAddressIncomplete StatusCode = 484
StatusAmbiguous StatusCode = 485
StatusBusyHere StatusCode = 486
StatusRequestTerminated StatusCode = 487
StatusNotAcceptableHere StatusCode = 488

StatusInternalServerError StatusCode = 500
StatusNotImplemented StatusCode = 501
StatusBadGateway StatusCode = 502
StatusServiceUnavailable StatusCode = 503
StatusGatewayTimeout StatusCode = 504
StatusVersionNotSupported StatusCode = 505
StatusMessageTooLarge StatusCode = 513

StatusGlobalBusyEverywhere StatusCode = 600
StatusGlobalDecline StatusCode = 603
StatusGlobalDoesNotExistAnywhere StatusCode = 604
StatusGlobalNotAcceptable StatusCode = 606
StatusTrying = 100
StatusRinging = 180
StatusCallIsForwarded = 181
StatusQueued = 182
StatusSessionInProgress = 183

StatusOK = 200
StatusAccepted = 202

StatusMovedPermanently = 301
StatusMovedTemporarily = 302
StatusUseProxy = 305

StatusBadRequest = 400
StatusUnauthorized = 401
StatusPaymentRequired = 402
StatusForbidden = 403
StatusNotFound = 404
StatusMethodNotAllowed = 405
StatusNotAcceptable = 406
StatusProxyAuthRequired = 407
StatusRequestTimeout = 408
StatusConflict = 409
StatusGone = 410
StatusRequestEntityTooLarge = 413
StatusRequestURITooLong = 414
StatusUnsupportedMediaType = 415
StatusRequestedRangeNotSatisfiable = 416
StatusBadExtension = 420
StatusExtensionRequired = 421
StatusIntervalToBrief = 423
StatusTemporarilyUnavailable = 480
StatusCallTransactionDoesNotExists = 481
StatusLoopDetected = 482
StatusTooManyHops = 483
StatusAddressIncomplete = 484
StatusAmbiguous = 485
StatusBusyHere = 486
StatusRequestTerminated = 487
StatusNotAcceptableHere = 488

StatusInternalServerError = 500
StatusNotImplemented = 501
StatusBadGateway = 502
StatusServiceUnavailable = 503
StatusGatewayTimeout = 504
StatusVersionNotSupported = 505
StatusMessageTooLarge = 513

StatusGlobalBusyEverywhere = 600
StatusGlobalDecline = 603
StatusGlobalDoesNotExistAnywhere = 604
StatusGlobalNotAcceptable = 606
)

// method names are defined here as constants for convenience.
Expand Down
4 changes: 2 additions & 2 deletions sip/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ func parseRequestLine(requestLine string, recipient *Uri) (
// SIP/2.0 200 OK
// SIP/1.0 403 Forbidden
func parseStatusLine(statusLine string) (
sipVersion string, statusCode StatusCode, reasonPhrase string, err error) {
sipVersion string, statusCode int, reasonPhrase string, err error) {
parts := strings.Split(statusLine, " ")
if len(parts) < 3 {
err = fmt.Errorf("status line has too few spaces: '%s'", statusLine)
Expand All @@ -300,7 +300,7 @@ func parseStatusLine(statusLine string) (

sipVersion = parts[0]
statusCodeRaw, err := strconv.ParseUint(parts[1], 10, 16)
statusCode = StatusCode(statusCodeRaw)
statusCode = int(statusCodeRaw)
reasonPhrase = strings.Join(parts[2:], " ")

return
Expand Down
8 changes: 4 additions & 4 deletions sip/response.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,13 @@ import (
type Response struct {
MessageData

Reason string // e.g. "200 OK"
StatusCode StatusCode // e.g. 200
Reason string // e.g. "200 OK"
StatusCode int // e.g. 200
}

// NewResponse creates base structure of response.
func NewResponse(
statusCode StatusCode,
statusCode int,
reason string,
) *Response {
res := &Response{}
Expand Down Expand Up @@ -192,7 +192,7 @@ func (res *Response) Destination() string {
// RFC 3261 - 8.2.6
func NewResponseFromRequest(
req *Request,
statusCode StatusCode,
statusCode int,
reason string,
body []byte,
) *Response {
Expand Down

0 comments on commit 6ffeb52

Please sign in to comment.