| 928 | } |
| 929 | |
| 930 | H2ParseResult H2Context::OnPing( |
| 931 | butil::IOBufBytesIterator& it, const H2FrameHead& frame_head) { |
| 932 | if (frame_head.payload_size != 8) { |
| 933 | LOG(ERROR) << "Invalid payload_size=" << frame_head.payload_size; |
| 934 | return MakeH2Error(H2_FRAME_SIZE_ERROR); |
| 935 | } |
| 936 | if (frame_head.stream_id != 0) { |
| 937 | LOG(ERROR) << "Invalid stream_id=" << frame_head.stream_id; |
| 938 | return MakeH2Error(H2_PROTOCOL_ERROR); |
| 939 | } |
| 940 | if (frame_head.flags & H2_FLAGS_ACK) { |
| 941 | return MakeH2Message(NULL); |
| 942 | } |
| 943 | |
| 944 | char pongbuf[FRAME_HEAD_SIZE + 8]; |
| 945 | SerializeFrameHead(pongbuf, 8, H2_FRAME_PING, H2_FLAGS_ACK, 0); |
| 946 | it.copy_and_forward(pongbuf + FRAME_HEAD_SIZE, 8); |
| 947 | if (WriteAck(_socket, pongbuf, sizeof(pongbuf)) != 0) { |
| 948 | LOG(WARNING) << "Fail to send ack of PING to " << *_socket; |
| 949 | return MakeH2Error(H2_PROTOCOL_ERROR); |
| 950 | } |
| 951 | return MakeH2Message(NULL); |
| 952 | } |
| 953 | |
| 954 | static void* ProcessHttpResponseWrapper(void* void_arg) { |
| 955 | ProcessHttpResponse(static_cast<InputMessageBase*>(void_arg)); |
nothing calls this directly
no test coverage detected