- use window size client<->server, x4 faster
[oweals/gnunet.git] / src / mesh / mesh_api.c
index 0c96e2281a05c5f4cbf42e79bf2289e117aef951..46747a0d4c8649c2d39f19675aefbfa900124dd3 100644 (file)
@@ -454,7 +454,8 @@ create_tunnel (struct GNUNET_MESH_Handle *h, MESH_TunnelNumber tid)
   {
     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;
 }
 
@@ -697,11 +698,11 @@ send_ack (struct GNUNET_MESH_Handle *h, struct GNUNET_MESH_Tunnel *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;
@@ -835,6 +836,9 @@ do_reconnect (struct GNUNET_MESH_Handle *h)
        */
       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);
@@ -1124,7 +1128,8 @@ process_incoming_data (struct GNUNET_MESH_Handle *h,
     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");
@@ -1190,7 +1195,7 @@ process_ack (struct GNUNET_MESH_Handle *h,
   }
   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;
@@ -2051,8 +2056,7 @@ GNUNET_MESH_notify_transmit_ready (struct GNUNET_MESH_Tunnel *tunnel, int cork,
   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 =