sp_int32 Connection::sendPacket(OutgoingPacket* packet) { packet->PrepareForWriting(); if (registerForWrite() != 0) return -1; mOutstandingPackets.push_back(packet); mNumOutstandingBytes += packet->GetTotalPacketSize(); if (!hasCausedBackPressure()) { // Are we above the threshold? if (mNumOutstandingBytes >= mOptions->high_watermark_) { // Have we been above the threshold enough number of times? if (++mNumEnqueuesWithBufferFull > __SYSTEM_MIN_NUM_ENQUEUES_WITH_BUFFER_FULL__) { mNumEnqueuesWithBufferFull = 0; if (mOnConnectionBufferFull) { mOnConnectionBufferFull(this); } } } else { mNumEnqueuesWithBufferFull = 0; } } return 0; }
sp_int32 Connection::sendPacket(OutgoingPacket* packet, VCallback<NetworkErrorCode> cb) { packet->PrepareForWriting(); if (registerForWrite() != 0) return -1; mOutstandingPackets.push_back(std::make_pair(packet, std::move(cb))); mNumOutstandingPackets++; mNumOutstandingBytes += packet->GetTotalPacketSize(); if (!hasCausedBackPressure()) { // Are we above the threshold? if (mNumOutstandingBytes >= systemHWMOutstandingBytes) { // Have we been above the threshold enough number of times? if (++mNumEnqueuesWithBufferFull > __SYSTEM_MIN_NUM_ENQUEUES_WITH_BUFFER_FULL__) { mNumEnqueuesWithBufferFull = 0; if (mOnConnectionBufferFull) { mOnConnectionBufferFull(this); } } } else { mNumEnqueuesWithBufferFull = 0; } } return 0; }