| 605 | } |
| 606 | |
| 607 | bool websocket::peek_frame_head(void) |
| 608 | { |
| 609 | if (peek_buf_ == NULL) { |
| 610 | peek_buf_ = NEW string(8); |
| 611 | } |
| 612 | |
| 613 | while (true) { |
| 614 | switch (status_) { |
| 615 | case WS_HEAD_2BYTES: |
| 616 | if (!peek_head_2bytes()) { |
| 617 | return false; |
| 618 | } |
| 619 | break; |
| 620 | case WS_HEAD_LEN_2BYTES: |
| 621 | if (!peek_head_len_2bytes()) { |
| 622 | return false; |
| 623 | } |
| 624 | break; |
| 625 | case WS_HEAD_LEN_8BYTES: |
| 626 | if (!peek_head_len_8bytes()) { |
| 627 | return false; |
| 628 | } |
| 629 | break; |
| 630 | case WS_HEAD_MASKING_KEY: |
| 631 | if (!peek_head_masking_key()) { |
| 632 | return false; |
| 633 | } |
| 634 | break; |
| 635 | case WS_HEAD_FINISH: |
| 636 | return true; |
| 637 | default: |
| 638 | logger_fatal("invalid status=%d", status_); |
| 639 | break; |
| 640 | } |
| 641 | } |
| 642 | } |
| 643 | |
| 644 | bool websocket::is_head_finish(void) const |
| 645 | { |