|  | #include "http2/adapter/http2_util.h" | 
|  |  | 
|  | #include "spdy/core/spdy_protocol.h" | 
|  |  | 
|  | namespace http2 { | 
|  | namespace adapter { | 
|  | namespace { | 
|  |  | 
|  | using ConnectionError = Http2VisitorInterface::ConnectionError; | 
|  | using InvalidFrameError = Http2VisitorInterface::InvalidFrameError; | 
|  |  | 
|  | }  // anonymous namespace | 
|  |  | 
|  | spdy::SpdyErrorCode TranslateErrorCode(Http2ErrorCode code) { | 
|  | switch (code) { | 
|  | case Http2ErrorCode::HTTP2_NO_ERROR: | 
|  | return spdy::ERROR_CODE_NO_ERROR; | 
|  | case Http2ErrorCode::PROTOCOL_ERROR: | 
|  | return spdy::ERROR_CODE_PROTOCOL_ERROR; | 
|  | case Http2ErrorCode::INTERNAL_ERROR: | 
|  | return spdy::ERROR_CODE_INTERNAL_ERROR; | 
|  | case Http2ErrorCode::FLOW_CONTROL_ERROR: | 
|  | return spdy::ERROR_CODE_FLOW_CONTROL_ERROR; | 
|  | case Http2ErrorCode::SETTINGS_TIMEOUT: | 
|  | return spdy::ERROR_CODE_SETTINGS_TIMEOUT; | 
|  | case Http2ErrorCode::STREAM_CLOSED: | 
|  | return spdy::ERROR_CODE_STREAM_CLOSED; | 
|  | case Http2ErrorCode::FRAME_SIZE_ERROR: | 
|  | return spdy::ERROR_CODE_FRAME_SIZE_ERROR; | 
|  | case Http2ErrorCode::REFUSED_STREAM: | 
|  | return spdy::ERROR_CODE_REFUSED_STREAM; | 
|  | case Http2ErrorCode::CANCEL: | 
|  | return spdy::ERROR_CODE_CANCEL; | 
|  | case Http2ErrorCode::COMPRESSION_ERROR: | 
|  | return spdy::ERROR_CODE_COMPRESSION_ERROR; | 
|  | case Http2ErrorCode::CONNECT_ERROR: | 
|  | return spdy::ERROR_CODE_CONNECT_ERROR; | 
|  | case Http2ErrorCode::ENHANCE_YOUR_CALM: | 
|  | return spdy::ERROR_CODE_ENHANCE_YOUR_CALM; | 
|  | case Http2ErrorCode::INADEQUATE_SECURITY: | 
|  | return spdy::ERROR_CODE_INADEQUATE_SECURITY; | 
|  | case Http2ErrorCode::HTTP_1_1_REQUIRED: | 
|  | return spdy::ERROR_CODE_HTTP_1_1_REQUIRED; | 
|  | } | 
|  | return spdy::ERROR_CODE_INTERNAL_ERROR; | 
|  | } | 
|  |  | 
|  | Http2ErrorCode TranslateErrorCode(spdy::SpdyErrorCode code) { | 
|  | switch (code) { | 
|  | case spdy::ERROR_CODE_NO_ERROR: | 
|  | return Http2ErrorCode::HTTP2_NO_ERROR; | 
|  | case spdy::ERROR_CODE_PROTOCOL_ERROR: | 
|  | return Http2ErrorCode::PROTOCOL_ERROR; | 
|  | case spdy::ERROR_CODE_INTERNAL_ERROR: | 
|  | return Http2ErrorCode::INTERNAL_ERROR; | 
|  | case spdy::ERROR_CODE_FLOW_CONTROL_ERROR: | 
|  | return Http2ErrorCode::FLOW_CONTROL_ERROR; | 
|  | case spdy::ERROR_CODE_SETTINGS_TIMEOUT: | 
|  | return Http2ErrorCode::SETTINGS_TIMEOUT; | 
|  | case spdy::ERROR_CODE_STREAM_CLOSED: | 
|  | return Http2ErrorCode::STREAM_CLOSED; | 
|  | case spdy::ERROR_CODE_FRAME_SIZE_ERROR: | 
|  | return Http2ErrorCode::FRAME_SIZE_ERROR; | 
|  | case spdy::ERROR_CODE_REFUSED_STREAM: | 
|  | return Http2ErrorCode::REFUSED_STREAM; | 
|  | case spdy::ERROR_CODE_CANCEL: | 
|  | return Http2ErrorCode::CANCEL; | 
|  | case spdy::ERROR_CODE_COMPRESSION_ERROR: | 
|  | return Http2ErrorCode::COMPRESSION_ERROR; | 
|  | case spdy::ERROR_CODE_CONNECT_ERROR: | 
|  | return Http2ErrorCode::CONNECT_ERROR; | 
|  | case spdy::ERROR_CODE_ENHANCE_YOUR_CALM: | 
|  | return Http2ErrorCode::ENHANCE_YOUR_CALM; | 
|  | case spdy::ERROR_CODE_INADEQUATE_SECURITY: | 
|  | return Http2ErrorCode::INADEQUATE_SECURITY; | 
|  | case spdy::ERROR_CODE_HTTP_1_1_REQUIRED: | 
|  | return Http2ErrorCode::HTTP_1_1_REQUIRED; | 
|  | } | 
|  | return Http2ErrorCode::INTERNAL_ERROR; | 
|  | } | 
|  |  | 
|  | absl::string_view ConnectionErrorToString(ConnectionError error) { | 
|  | switch (error) { | 
|  | case ConnectionError::kInvalidConnectionPreface: | 
|  | return "InvalidConnectionPreface"; | 
|  | case ConnectionError::kSendError: | 
|  | return "SendError"; | 
|  | case ConnectionError::kParseError: | 
|  | return "ParseError"; | 
|  | case ConnectionError::kHeaderError: | 
|  | return "HeaderError"; | 
|  | case ConnectionError::kInvalidNewStreamId: | 
|  | return "InvalidNewStreamId"; | 
|  | case ConnectionError::kWrongFrameSequence: | 
|  | return "kWrongFrameSequence"; | 
|  | case ConnectionError::kInvalidPushPromise: | 
|  | return "InvalidPushPromise"; | 
|  | } | 
|  | return "UnknownConnectionError"; | 
|  | } | 
|  |  | 
|  | absl::string_view InvalidFrameErrorToString( | 
|  | Http2VisitorInterface::InvalidFrameError error) { | 
|  | switch (error) { | 
|  | case InvalidFrameError::kProtocol: | 
|  | return "Protocol"; | 
|  | case InvalidFrameError::kRefusedStream: | 
|  | return "RefusedStream"; | 
|  | case InvalidFrameError::kHttpHeader: | 
|  | return "HttpHeader"; | 
|  | case InvalidFrameError::kHttpMessaging: | 
|  | return "HttpMessaging"; | 
|  | case InvalidFrameError::kFlowControl: | 
|  | return "FlowControl"; | 
|  | case InvalidFrameError::kStreamClosed: | 
|  | return "StreamClosed"; | 
|  | } | 
|  | return "UnknownInvalidFrameError"; | 
|  | } | 
|  |  | 
|  | }  // namespace adapter | 
|  | }  // namespace http2 |