Example #1
0
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);
}
Example #2
0
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);
    }
}
Example #3
0
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;
}