1
#include "source/common/grpc/status.h"
2

            
3
namespace Envoy {
4
namespace Grpc {
5

            
6
468
Status::GrpcStatus Utility::httpToGrpcStatus(uint64_t http_response_status) {
7
  // From
8
  // https://github.com/grpc/grpc/blob/master/doc/http-grpc-status-mapping.md.
9
468
  switch (http_response_status) {
10
12
  case 400:
11
12
    return Status::WellKnownGrpcStatus::Internal;
12
6
  case 401:
13
6
    return Status::WellKnownGrpcStatus::Unauthenticated;
14
7
  case 403:
15
7
    return Status::WellKnownGrpcStatus::PermissionDenied;
16
14
  case 404:
17
14
    return Status::WellKnownGrpcStatus::Unimplemented;
18
6
  case 429:
19
56
  case 502:
20
366
  case 503:
21
382
  case 504:
22
382
    return Status::WellKnownGrpcStatus::Unavailable;
23
47
  default:
24
47
    return Status::WellKnownGrpcStatus::Unknown;
25
468
  }
26
468
}
27

            
28
636
uint64_t Utility::grpcToHttpStatus(Status::GrpcStatus grpc_status) {
29
  // From https://cloud.google.com/apis/design/errors#handling_errors.
30
636
  switch (grpc_status) {
31
489
  case Status::WellKnownGrpcStatus::Ok:
32
489
    return 200;
33
9
  case Status::WellKnownGrpcStatus::Canceled:
34
    // Client closed request.
35
9
    return 499;
36
1
  case Status::WellKnownGrpcStatus::Unknown:
37
    // Internal server error.
38
1
    return 500;
39
22
  case Status::WellKnownGrpcStatus::InvalidArgument:
40
    // Bad request.
41
22
    return 400;
42
2
  case Status::WellKnownGrpcStatus::DeadlineExceeded:
43
    // Gateway Time-out.
44
2
    return 504;
45
31
  case Status::WellKnownGrpcStatus::NotFound:
46
    // Not found.
47
31
    return 404;
48
2
  case Status::WellKnownGrpcStatus::AlreadyExists:
49
    // Conflict.
50
2
    return 409;
51
2
  case Status::WellKnownGrpcStatus::PermissionDenied:
52
    // Forbidden.
53
2
    return 403;
54
9
  case Status::WellKnownGrpcStatus::ResourceExhausted:
55
    //  Too many requests.
56
9
    return 429;
57
6
  case Status::WellKnownGrpcStatus::FailedPrecondition:
58
    // Bad request.
59
6
    return 400;
60
1
  case Status::WellKnownGrpcStatus::Aborted:
61
    // Conflict.
62
1
    return 409;
63
1
  case Status::WellKnownGrpcStatus::OutOfRange:
64
    // Bad request.
65
1
    return 400;
66
1
  case Status::WellKnownGrpcStatus::Unimplemented:
67
    // Not implemented.
68
1
    return 501;
69
49
  case Status::WellKnownGrpcStatus::Internal:
70
    // Internal server error.
71
49
    return 500;
72
4
  case Status::WellKnownGrpcStatus::Unavailable:
73
    // Service unavailable.
74
4
    return 503;
75
1
  case Status::WellKnownGrpcStatus::DataLoss:
76
    // Internal server error.
77
1
    return 500;
78
2
  case Status::WellKnownGrpcStatus::Unauthenticated:
79
    // Unauthorized.
80
2
    return 401;
81
3
  case Status::WellKnownGrpcStatus::InvalidCode:
82
4
  default:
83
    // Internal server error.
84
4
    return 500;
85
636
  }
86
636
}
87

            
88
51
std::string Utility::grpcStatusToString(Status::GrpcStatus grpc_status) {
89
51
  switch (grpc_status) {
90
5
  case Status::WellKnownGrpcStatus::Ok:
91
5
    return "OK";
92
5
  case Status::WellKnownGrpcStatus::Canceled:
93
5
    return "Canceled";
94
2
  case Status::WellKnownGrpcStatus::Unknown:
95
2
    return "Unknown";
96
2
  case Status::WellKnownGrpcStatus::InvalidArgument:
97
2
    return "InvalidArgument";
98
2
  case Status::WellKnownGrpcStatus::DeadlineExceeded:
99
2
    return "DeadlineExceeded";
100
2
  case Status::WellKnownGrpcStatus::NotFound:
101
2
    return "NotFound";
102
2
  case Status::WellKnownGrpcStatus::AlreadyExists:
103
2
    return "AlreadyExists";
104
2
  case Status::WellKnownGrpcStatus::PermissionDenied:
105
2
    return "PermissionDenied";
106
2
  case Status::WellKnownGrpcStatus::ResourceExhausted:
107
2
    return "ResourceExhausted";
108
2
  case Status::WellKnownGrpcStatus::FailedPrecondition:
109
2
    return "FailedPrecondition";
110
2
  case Status::WellKnownGrpcStatus::Aborted:
111
2
    return "Aborted";
112
2
  case Status::WellKnownGrpcStatus::OutOfRange:
113
2
    return "OutOfRange";
114
2
  case Status::WellKnownGrpcStatus::Unimplemented:
115
2
    return "Unimplemented";
116
2
  case Status::WellKnownGrpcStatus::Internal:
117
2
    return "Internal";
118
2
  case Status::WellKnownGrpcStatus::Unavailable:
119
2
    return "Unavailable";
120
2
  case Status::WellKnownGrpcStatus::DataLoss:
121
2
    return "DataLoss";
122
2
  case Status::WellKnownGrpcStatus::Unauthenticated:
123
2
    return "Unauthenticated";
124
7
  case Status::WellKnownGrpcStatus::InvalidCode:
125
11
  default:
126
11
    return "InvalidCode";
127
51
  }
128
51
}
129

            
130
} // namespace Grpc
131
} // namespace Envoy