// this method is called during the message system processAcks() to // send out any acks that did not get sent already. void LLCircuit::sendAcks(F32 collect_time) { collect_time = llclamp(collect_time, 0.f, LL_COLLECT_ACK_TIME_MAX); LLCircuitData* cd; circuit_data_map::iterator it = mSendAckMap.begin(); while (it != mSendAckMap.end()) { circuit_data_map::iterator cur_it = it++; cd = (*cur_it).second; S32 count = (S32)cd->mAcks.size(); F32 age = cd->getAgeInSeconds() - cd->mAckCreationTime; if (age > collect_time || count == 0) { if (count>0) { // send the packet acks S32 acks_this_packet = 0; for(S32 i = 0; i < count; ++i) { if(acks_this_packet == 0) { gMessageSystem->newMessageFast(_PREHASH_PacketAck); } gMessageSystem->nextBlockFast(_PREHASH_Packets); gMessageSystem->addU32Fast(_PREHASH_ID, cd->mAcks[i]); ++acks_this_packet; if(acks_this_packet > 250) { gMessageSystem->sendMessage(cd->mHost); acks_this_packet = 0; } } if(acks_this_packet > 0) { gMessageSystem->sendMessage(cd->mHost); } if(gMessageSystem->mVerboseLog) { std::ostringstream str; str << "MSG: -> " << cd->mHost << "\tPACKET ACKS:\t"; std::ostream_iterator<TPACKETID> append(str, " "); std::copy(cd->mAcks.begin(), cd->mAcks.end(), append); LL_INFOS() << str.str() << LL_ENDL; } // empty out the acks list cd->mAcks.clear(); cd->mAckCreationTime = 0.f; } // remove data map mSendAckMap.erase(cur_it); } } }
void LLFloaterMessageLog::refreshNetInfo(BOOL force) { if(mInfoPaneMode != IPANE_NET) return; LLScrollListCtrl* scrollp = getChild<LLScrollListCtrl>("net_list"); LLScrollListItem* selected_itemp = scrollp->getFirstSelected(); if(selected_itemp) { LLTextEditor* net_info = getChild<LLTextEditor>("net_info"); if(!force && (net_info->hasSelection() || net_info->hasFocus())) return; LLNetListItem* itemp = findNetListItem(selected_itemp->getUUID()); if(itemp) { std::string info(llformat("%s, %d\n--------------------------------\n\n", itemp->mName.c_str(), itemp->mHandle)); if(itemp->mCircuitData) { LLCircuitData* cdp = itemp->mCircuitData; info.append("Circuit\n--------------------------------\n"); info.append(llformat(" * Host: %s\n", cdp->getHost().getString().c_str())); S32 seconds = (S32)cdp->getAgeInSeconds(); S32 minutes = seconds / 60; seconds = seconds % 60; S32 hours = minutes / 60; minutes = minutes % 60; info.append(llformat(" * Age: %dh %dm %ds\n", hours, minutes, seconds)); info.append(llformat(" * Alive: %s\n", cdp->isAlive() ? "yes" : "no")); info.append(llformat(" * Blocked: %s\n", cdp->isBlocked() ? "yes" : "no")); info.append(llformat(" * Allow timeout: %s\n", cdp->getAllowTimeout() ? "yes" : "no")); info.append(llformat(" * Trusted: %s\n", cdp->getTrusted() ? "yes" : "no")); info.append(llformat(" * Ping delay: %d\n", cdp->getPingDelay())); info.append(llformat(" * Packets out: %d\n", cdp->getPacketsOut())); info.append(llformat(" * Bytes out: %d\n", cdp->getBytesOut())); info.append(llformat(" * Packets in: %d\n", cdp->getPacketsIn())); info.append(llformat(" * Bytes in: %d\n", cdp->getBytesIn())); info.append(llformat(" * Endpoint ID: %s\n", cdp->getLocalEndPointID().asString().c_str())); info.append(llformat(" * Remote ID: %s\n", cdp->getRemoteID().asString().c_str())); info.append(llformat(" * Remote session ID: %s\n", cdp->getRemoteSessionID().asString().c_str())); info.append("\n"); } childSetText("net_info", info); } else childSetText("net_info", std::string("")); } else childSetText("net_info", std::string("")); }