/*---------------------------------------------------------------------------*/ static void sent(struct stbroadcast_conn *stbroadcast) { struct rudolph0_conn *c = (struct rudolph0_conn *)stbroadcast; if(c->current.datalen == RUDOLPH0_DATASIZE) { c->current.h.chunk++; PRINTF("Sending data chunk %d next time\n", c->current.h.chunk); read_new_datapacket(c); } else { stbroadcast_set_timer(&c->c, STEADY_TIME); PRINTF("Steady: Sending the same data chunk next time datalen %d, %d\n", c->current.datalen, RUDOLPH0_DATASIZE); } }
/*---------------------------------------------------------------------------*/ int stbroadcast_send_stubborn(struct stbroadcast_conn *c, clock_time_t t) { if(c->buf != NULL) { queuebuf_free(c->buf); } c->buf = queuebuf_new_from_packetbuf(); if(c->buf == NULL) { return 0; } send(c); stbroadcast_set_timer(c, t); return 1; }
/*---------------------------------------------------------------------------*/ static void recv_nack(struct polite_conn *polite) { struct rudolph0_conn *c = (struct rudolph0_conn *) ((char *)polite - offsetof(struct rudolph0_conn, nackc)); struct rudolph0_datapacket *p = packetbuf_dataptr(); if(p->h.type == TYPE_NACK && c->state == STATE_SENDER) { if(p->h.version == c->current.h.version) { PRINTF("Reseting chunk to %d\n", p->h.chunk); c->current.h.chunk = p->h.chunk; } else { PRINTF("Wrong version, reseting chunk to 0\n"); c->current.h.chunk = 0; } read_new_datapacket(c); stbroadcast_set_timer(&c->c, c->send_interval); } }