void Active_UDPInjectData ( Packet* p, EncodeFlags flags, const uint8_t* buf, uint32_t blen) { uint32_t plen = 0; const uint8_t* seg; if ( !s_attempts ) return; flags |= GetFlags(); seg = Encode_Response(ENC_UDP, flags, p, &plen, buf, blen); if ( !seg ) return; s_send(p->pkth, !(flags & ENC_FLAG_FWD ), seg , plen); }
void Active_SendData ( Packet* p, EncodeFlags flags, const uint8_t* buf, uint32_t blen) { int i; flags |= GetFlags(); for ( i = 0; i < s_attempts; i++ ) { uint32_t plen = 0; const uint8_t* seg; flags &= ~ENC_FLAG_VAL; flags |= (i & ENC_FLAG_VAL); seg = Encode_Response(ENC_TCP_FIN, flags, p, &plen, buf, blen); if ( !seg ) return; s_send(p->pkth, !(flags & ENC_FLAG_FWD), seg, plen); } }
bool Active_SendData ( Packet* p, EncodeFlags flags, const uint8_t* buf, uint32_t blen) { uint16_t toSend; uint16_t sent; uint16_t maxPayload; const uint8_t* seg; uint32_t plen; EncodeFlags tmp_flags; flags |= GetFlags(); flags &= ~ENC_FLAG_VAL; if (flags & ENC_FLAG_RST_SRVR) { plen = 0; tmp_flags = flags ^ ENC_FLAG_FWD; seg = Encode_Response(ENC_TCP_RST, tmp_flags, p, &plen, NULL, 0); if ( seg ) s_send(p->pkth, !(tmp_flags & ENC_FLAG_FWD), seg, plen); } flags |= ENC_FLAG_SEQ; sent = 0; maxPayload = Encode_GetMaxPayload(p); if(maxPayload) { do{ plen = 0; toSend = blen > maxPayload ? maxPayload : blen; flags = (flags & ~ENC_FLAG_VAL) | sent; seg = Encode_Response(ENC_TCP_PUSH, flags, p, &plen, buf, toSend); if ( !seg ) return false; s_send(p->pkth, !(flags & ENC_FLAG_FWD), seg, plen); buf += toSend; sent += toSend; } while(blen -= toSend); } plen = 0; flags = (flags & ~ENC_FLAG_VAL) | sent; seg = Encode_Response(ENC_TCP_FIN, flags, p, &plen, NULL, 0); if ( !seg ) return false; s_send(p->pkth, !(flags & ENC_FLAG_FWD), seg, plen); if (flags & ENC_FLAG_RST_CLNT) { sent++; plen = 0; flags = (flags & ~ENC_FLAG_VAL) | sent; seg = Encode_Response(ENC_TCP_RST, flags, p, &plen, NULL, 0); if ( seg ) s_send(p->pkth, !(flags & ENC_FLAG_FWD), seg, plen); } return true; }