| 536 | } |
| 537 | |
| 538 | void SendPingsIfNeeded() { |
| 539 | NHPTimer::STime tChk = PingsSendT_; |
| 540 | float deltaT = (float)NHPTimer::GetTimePassed(&tChk); |
| 541 | if (deltaT < 0.05) { |
| 542 | return; |
| 543 | } |
| 544 | PingsSendT_ = tChk; |
| 545 | deltaT = ClampVal(deltaT, 0.0f, HTTP_TIMEOUT / 3); |
| 546 | |
| 547 | { |
| 548 | for (TOutRequestHash::iterator i = OutRequests_.begin(); i != OutRequests_.end();) { |
| 549 | TOutRequestHash::iterator curIt = i++; |
| 550 | TOutRequestState& s = curIt->second; |
| 551 | const TGUID& guid = curIt->first; |
| 552 | switch (s.State) { |
| 553 | case TOutRequestState::S_WAITING: |
| 554 | s.TimePassed += deltaT; |
| 555 | if (s.TimePassed > HTTP_TIMEOUT) { |
| 556 | TAutoPtr<TRopeDataPacket> ms = new TRopeDataPacket; |
| 557 | ms->Write((char)PKT_PING); |
| 558 | ms->Write(guid); |
| 559 | int transId = SendWithHighPriority(s.Address, ms.Release()); |
| 560 | TransferHash_[transId] = TTransferPurpose(DIR_OUT, guid); |
| 561 | s.State = TOutRequestState::S_WAITING_PING_SENDING; |
| 562 | s.PingTransferId = transId; |
| 563 | } |
| 564 | break; |
| 565 | case TOutRequestState::S_WAITING_PING_SENT: |
| 566 | s.TimePassed += deltaT; |
| 567 | if (s.TimePassed > HTTP_TIMEOUT) { |
| 568 | FinishRequest(curIt, TUdpHttpResponse::FAILED, nullptr, "request failed: http timeout in state S_WAITING_PING_SENT"); |
| 569 | } |
| 570 | break; |
| 571 | default: |
| 572 | break; |
| 573 | } |
| 574 | } |
| 575 | } |
| 576 | } |
| 577 | |
| 578 | void Step() { |
| 579 | { |
nothing calls this directly
no test coverage detected