ssize_t tcp_stream_next(struct tcp_stream *stream, unsigned *way_)
{
    unsigned way;

    if (stream->past_len[0] >= stream->len) {
        if (stream->past_len[1] >= stream->len) {
            if (! stream->fin_acked[0]) {
                way = 1;
            } else if (! stream->fin_acked[1]) {
                way = 0;
            } else {    // nothing left to be done
                return 0;
            }
        } else {
            way = 1;
        }
    } else if (stream->past_len[1] >= stream->len) {
        way = 0;
    } else if (stream->past_len[0] == 0 && stream->past_len[1] == 0) {
        way = 0;    // we want client to be way=0
    } else if (stream->past_len[0] == 1 && stream->past_len[1] == 0) {
        way = 1;    // synack
    } else if (stream->past_len[0] == 1 && stream->past_len[1] == 1) {
        way = 0;    // ack of synack (+ first datas)
    } else {
        way = !!(rand() & 0x100);
    }

    if (way_) *way_ = way;

    return stream_packet(stream, way);
}
Exemple #2
0
void testSlipMsg() {
	char* test = "Hola. Test!";	
	stream_packet(&chargeter,test);
}