| 458 | } |
| 459 | |
| 460 | int |
| 461 | Http3Transaction::state_stream_open(int event, Event *edata) |
| 462 | { |
| 463 | // TODO: should check recursive call? |
| 464 | ink_release_assert(this->_thread == this_ethread()); |
| 465 | SCOPED_MUTEX_LOCK(lock, this->mutex, this_ethread()); |
| 466 | |
| 467 | switch (event) { |
| 468 | case VC_EVENT_READ_READY: |
| 469 | Http3TransVDebug("%s (%d)", get_vc_event_name(event), event); |
| 470 | this->_close_read_ready_event(edata); |
| 471 | // if no progress, don't need to signal |
| 472 | if (this->_process_read_vio() > 0) { |
| 473 | this->_signal_read_event(); |
| 474 | } |
| 475 | this->_info.read_vio->reenable(); |
| 476 | break; |
| 477 | case VC_EVENT_READ_COMPLETE: |
| 478 | Http3TransVDebug("%s (%d)", get_vc_event_name(event), event); |
| 479 | this->_close_read_complete_event(edata); |
| 480 | this->_process_read_vio(); |
| 481 | if (!this->_header_handler->is_complete()) { |
| 482 | // Delay processing READ_COMPLETE |
| 483 | this->_schedule_read_complete_event(); |
| 484 | break; |
| 485 | } |
| 486 | this->_data_handler->finalize(); |
| 487 | // always signal regardless of progress |
| 488 | this->_signal_read_event(); |
| 489 | this->_info.read_vio->reenable(); |
| 490 | break; |
| 491 | case VC_EVENT_WRITE_READY: |
| 492 | this->_close_write_ready_event(edata); |
| 493 | Http3TransVDebug("%s (%d)", get_vc_event_name(event), event); |
| 494 | // if no progress, don't need to signal |
| 495 | if (this->_process_write_vio() > 0) { |
| 496 | this->_signal_write_event(); |
| 497 | } |
| 498 | this->_info.write_vio->reenable(); |
| 499 | break; |
| 500 | case VC_EVENT_WRITE_COMPLETE: |
| 501 | this->_close_write_complete_event(edata); |
| 502 | Http3TransVDebug("%s (%d)", get_vc_event_name(event), event); |
| 503 | this->_process_write_vio(); |
| 504 | // always signal regardless of progress |
| 505 | this->_signal_write_event(); |
| 506 | this->_info.write_vio->reenable(); |
| 507 | break; |
| 508 | case VC_EVENT_EOS: |
| 509 | case VC_EVENT_ERROR: |
| 510 | case VC_EVENT_INACTIVITY_TIMEOUT: |
| 511 | case VC_EVENT_ACTIVE_TIMEOUT: { |
| 512 | Http3TransVDebug("%s (%d)", get_vc_event_name(event), event); |
| 513 | this->_signal_event(event, edata); |
| 514 | break; |
| 515 | } |
| 516 | default: |
| 517 | Http3TransDebug("Unknown event %d", event); |
nothing calls this directly
no test coverage detected