| 280 | return true; |
| 281 | } |
| 282 | void StartSend(TPtrArg<TIBPeer> peer, const TGUID& packetGuid, TIBMsgHandle msgHandle, TRopeDataPacket* data) { |
| 283 | int sz = data->GetSize(); |
| 284 | if (sz <= TCmdDataTiny::GetMaxDataSize()) { |
| 285 | TCmdDataTiny dataTiny; |
| 286 | dataTiny.Header.Command = CMD_DATA_TINY; |
| 287 | dataTiny.Header.Size = (ui16)sz; |
| 288 | dataTiny.Header.PacketGuid = packetGuid; |
| 289 | TBlockChainIterator bc(data->GetChain()); |
| 290 | bc.Read(dataTiny.Data, sz); |
| 291 | |
| 292 | peer->PostSend(BP, &dataTiny, sizeof(dataTiny.Header) + sz, TCompleteInfo::CI_DATA_TINY, msgHandle); |
| 293 | //printf("Send CMD_DATA_TINY\n"); |
| 294 | } else { |
| 295 | MemPool->CopyData(data, msgHandle, peer, CopyResults); |
| 296 | peer->SendQueue.push_back(TQueuedSend(packetGuid, msgHandle)); |
| 297 | { |
| 298 | TQueuedSend& msg = peer->SendQueue.back(); |
| 299 | TCmdDataInit dataInit; |
| 300 | dataInit.Command = CMD_DATA_INIT; |
| 301 | dataInit.PacketGuid = msg.PacketGuid; |
| 302 | dataInit.Size = data->GetSize(); |
| 303 | peer->PostSend(BP, &dataInit, sizeof(dataInit), TCompleteInfo::CI_IGNORE, 0); |
| 304 | //printf("Send CMD_DATA_INIT\n"); |
| 305 | } |
| 306 | } |
| 307 | ++peer->SendCount; |
| 308 | } |
| 309 | void SendCompleted(TPtrArg<TIBPeer> peer, TIBMsgHandle msgHandle) { |
| 310 | SendResults.push_back(TIBSendResult(msgHandle, true)); |
| 311 | if (--peer->SendCount < MAX_SEND_COUNT) { |