| 164 | } |
| 165 | |
| 166 | int |
| 167 | Http2ClientSession::main_event_handler(int event, void *edata) |
| 168 | { |
| 169 | ink_assert(this->mutex->thread_holding == this_ethread()); |
| 170 | int retval; |
| 171 | bool set_closed = false; |
| 172 | |
| 173 | recursion++; |
| 174 | |
| 175 | Event *e = static_cast<Event *>(edata); |
| 176 | if (e == schedule_event) { |
| 177 | schedule_event = nullptr; |
| 178 | } |
| 179 | |
| 180 | switch (event) { |
| 181 | case VC_EVENT_READ_COMPLETE: |
| 182 | case VC_EVENT_READ_READY: { |
| 183 | bool is_zombie = connection_state.get_zombie_event() != nullptr; |
| 184 | retval = (this->*session_handler)(event, edata); |
| 185 | if (is_zombie && connection_state.get_zombie_event() != nullptr) { |
| 186 | Warning("Processed read event for zombie session %" PRId64, connection_id()); |
| 187 | } |
| 188 | break; |
| 189 | } |
| 190 | |
| 191 | case HTTP2_SESSION_EVENT_REENABLE: |
| 192 | // VIO will be reenableed in this handler |
| 193 | retval = (this->*session_handler)(VC_EVENT_READ_READY, static_cast<VIO *>(e->cookie)); |
| 194 | // Clear the event after calling session_handler to not reschedule REENABLE in it |
| 195 | this->_reenable_event = nullptr; |
| 196 | break; |
| 197 | |
| 198 | case VC_EVENT_ACTIVE_TIMEOUT: |
| 199 | case VC_EVENT_INACTIVITY_TIMEOUT: |
| 200 | case VC_EVENT_ERROR: |
| 201 | case VC_EVENT_EOS: |
| 202 | Http2SsnDebug("Closing event: %s", HttpDebugNames::get_event_name(event)); |
| 203 | this->set_dying_event(event); |
| 204 | this->do_io_close(); |
| 205 | retval = 0; |
| 206 | set_closed = true; |
| 207 | break; |
| 208 | |
| 209 | case VC_EVENT_WRITE_READY: |
| 210 | case VC_EVENT_WRITE_COMPLETE: |
| 211 | this->connection_state.restart_streams(); |
| 212 | if ((ink_get_hrtime() >= this->_write_buffer_last_flush + HRTIME_MSECONDS(this->_write_time_threshold))) { |
| 213 | this->flush(); |
| 214 | } |
| 215 | retval = 0; |
| 216 | break; |
| 217 | |
| 218 | case HTTP2_SESSION_EVENT_PRIO: |
| 219 | default: |
| 220 | Http2SsnDebug("unexpected event=%d edata=%p", event, edata); |
| 221 | ink_release_assert(0); |
| 222 | retval = 0; |
| 223 | break; |
nothing calls this directly
no test coverage detected