for (th = h->th_head; NULL != th; th = th->next)
{
t = th->tunnel;
- if (GNUNET_NO == th_is_payload (th) ||
- GNUNET_NO == GMC_is_pid_bigger(t->next_send_pid, t->max_send_pid))
+ if (GNUNET_NO == th_is_payload (th))
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG, " message internal\n");
return th->size;
+ }
+ if (GNUNET_NO == GMC_is_pid_bigger(t->next_send_pid, t->max_send_pid))
+ {
+ LOG (GNUNET_ERROR_TYPE_DEBUG, " message payload ok (%u <= %u)\n",
+ t->next_send_pid, t->max_send_pid);
+ return th->size;
+ }
}
return 0;
}
{
t->tid = tid;
}
- t->max_send_pid = 1;
+ t->max_send_pid = INITIAL_WINDOW_SIZE - 1;
+ t->last_recv_pid = (uint32_t) -1;
return t;
}
LOG (GNUNET_ERROR_TYPE_DEBUG,
"Sending ACK on tunnel %X: %u\n",
- t->tid, t->last_recv_pid + 1);
+ t->tid, t->last_recv_pid + INITIAL_WINDOW_SIZE);
msg.header.type = htons (GNUNET_MESSAGE_TYPE_MESH_LOCAL_ACK);
msg.header.size = htons (sizeof (msg));
msg.tunnel_id = htonl (t->tid);
- msg.max_pid = t->last_recv_pid + 1;
+ msg.max_pid = htonl (t->last_recv_pid + INITIAL_WINDOW_SIZE);
send_packet (h, &msg.header, t);
return;
*/
continue;
}
+ t->next_send_pid = 0;
+ t->max_send_pid = INITIAL_WINDOW_SIZE - 1;
+ t->last_recv_pid = (uint32_t) -1;
tmsg.header.type = htons (GNUNET_MESSAGE_TYPE_MESH_LOCAL_TUNNEL_CREATE);
tmsg.header.size = htons (sizeof (struct GNUNET_MESH_TunnelMessage));
tmsg.tunnel_id = htonl (t->tid);
LOG (GNUNET_ERROR_TYPE_DEBUG, " ignored!\n");
return GNUNET_YES;
}
- if (GMC_is_pid_bigger(pid, t->last_recv_pid + 1))
+ if (GNUNET_YES ==
+ GMC_is_pid_bigger(pid, t->last_recv_pid + INITIAL_WINDOW_SIZE))
{
GNUNET_break (0);
LOG (GNUNET_ERROR_TYPE_WARNING, " unauthorized message!\n");
}
ack = ntohl (msg->max_pid);
LOG (GNUNET_ERROR_TYPE_DEBUG, " on tunnel %X, ack %u!\n", t->tid, ack);
- if (ack > t->max_send_pid || PID_OVERFLOW (t->max_send_pid, ack))
+ if (GNUNET_YES == GMC_is_pid_bigger(ack, t->max_send_pid))
t->max_send_pid = ack;
else
return;
if (GNUNET_YES == th_is_payload (th))
{
LOG (GNUNET_ERROR_TYPE_DEBUG, " payload\n");
- if (t->max_send_pid < t->next_send_pid && GNUNET_NO == PID_OVERFLOW (t->next_send_pid, t->max_send_pid))
+ if (GNUNET_YES == GMC_is_pid_bigger(t->next_send_pid, t->max_send_pid))
{
/* This tunnel is not ready to transmit yet, try next message */
next = th->next;
struct GNUNET_MESH_TransmitHandle *th;
size_t msize;
+ LOG (GNUNET_ERROR_TYPE_DEBUG, " Sending message to service: %s\n",
+ GNUNET_MESH_DEBUG_M2S(ntohs(msg->type)));
msize = ntohs (msg->size);
th = GNUNET_malloc (sizeof (struct GNUNET_MESH_TransmitHandle) + msize);
th->timeout = GNUNET_TIME_UNIT_FOREVER_ABS;
th->tunnel = tunnel;
memcpy (&th[1], msg, msize);
add_to_queue (h, th);
+ LOG (GNUNET_ERROR_TYPE_DEBUG, " queued\n");
if (NULL != h->th)
return;
- LOG (GNUNET_ERROR_TYPE_DEBUG, " calling ntfy tmt rdy for %u bytes\n", msize);
+ LOG (GNUNET_ERROR_TYPE_DEBUG, " calling ntfy tmt rdy for %u bytes\n", msize);
h->th =
GNUNET_CLIENT_notify_transmit_ready (h->client, msize,
GNUNET_TIME_UNIT_FOREVER_REL,
add_to_queue (tunnel->mesh, th);
if (NULL != tunnel->mesh->th)
return th;
- if (GNUNET_NO == PID_OVERFLOW(tunnel->next_send_pid, tunnel->max_send_pid) &&
- tunnel->max_send_pid <= tunnel->next_send_pid)
+ if (GMC_is_pid_bigger(tunnel->next_send_pid, tunnel->max_send_pid))
return th;
LOG (GNUNET_ERROR_TYPE_DEBUG, " call notify tmt rdy\n");
tunnel->mesh->th =