http://gimel.esc.cam.ac.uk/james/rpld/src/rpld-1.5.tar.gz
[rpld.git] / protocol.c
index c7558e2..4af3e7f 100644 (file)
@@ -2,9 +2,9 @@
 *     rpld - an IBM style RIPL server            *
 *************************************************/
 
-/* Copyright (c) 1999, James McKenzie.
+/* Copyright (c) 1999,2000, James McKenzie.
  *                      All rights reserved
- * Copyright (c) 1998, Christopher Lightfoot.
+ * Copyright (c) 1998,2000, Christopher Lightfoot.
  *                      All rights reserved
  *
  * By using this file, you agree to the terms and conditions set
  */
 
 
-static char rcsid[] = "$Id: protocol.c,v 1.9 1999/09/13 11:17:35 root Exp $";
+static char rcsid[] =
+  "$Id: protocol.c,v 1.19 2000/07/29 23:25:25 root Exp root $";
 
 /*
  * $Log: protocol.c,v $
+ * Revision 1.19  2000/07/29 23:25:25  root
+ * #
+ *
+ * Revision 1.18  2000/07/29 23:20:02  root
+ * #
+ *
+ * Revision 1.17  2000/07/23 19:07:49  root
+ * #
+ *
+ * Revision 1.16  2000/07/17 11:59:45  root
+ * #
+ *
+ * Revision 1.15  2000/07/17 10:49:20  root
+ * #
+ *
+ * Revision 1.14  2000/07/17 10:45:38  root
+ * #
+ *
+ * Revision 1.13  2000/07/17 10:43:54  root
+ * #
+ *
+ * Revision 1.12  2000/07/17 10:43:34  root
+ * #
+ *
+ * Revision 1.11  2000/07/16 14:05:28  root
+ * #
+ *
+ * Revision 1.10  2000/07/16 13:18:10  root
+ * #
+ *
+ * Revision 1.1  2000/07/16 13:16:33  root
+ * #
+ *
  * Revision 1.9  1999/09/13 11:17:35  root
  * \#
  *
@@ -55,7 +89,9 @@ find_frame (struct nit *n, struct rpl_packet *in)
 
   out.type = RPL_PK_FOUND;
 
-  out.flags = RPL_FL_TMZ | RPL_FL_TSZ | RPL_FL_YOUMAC | RPL_FL_MYMAC | RPL_FL_FRAMELEN | RPL_FL_WHOAMI | RPL_FL_SAP;
+  out.flags =
+    RPL_FL_TMZ | RPL_FL_TSZ | RPL_FL_YOUMAC | RPL_FL_MYMAC | RPL_FL_FRAMELEN |
+    RPL_FL_WHOAMI | RPL_FL_SAP;
 
   out.themightyzero = in->themightyzero;
   out.thesmallzero = 0;
@@ -72,7 +108,8 @@ find_frame (struct nit *n, struct rpl_packet *in)
       c->blocklen &= ~0x7;
     }
 
-  c->framelen = out.framelen = (in->framelen > c->framelen) ? c->framelen : in->framelen;
+  c->framelen = out.framelen =
+    (in->framelen > c->framelen) ? c->framelen : in->framelen;
   out.sap = RPL_SAP;
 
   bcopy (in->mymac, out.youmac, ETH_ALEN);
@@ -122,7 +159,10 @@ file_data_frame (struct nit *n, struct client *c)
     }
   else
     {
-      out.addr.flags = RPL_AD_FLAGS_MORE;
+      if (c->nospew)
+        out.addr.flags = RPL_AD_FLAGS_ASK_MORE;
+      else
+        out.addr.flags = RPL_AD_FLAGS_MORE;
     }
 
 
@@ -152,7 +192,8 @@ send_file_frame (struct nit *n, struct rpl_packet *in)
   c->blocknum = in->block;
   c->framelen = in->framelen;
 
-  syslog (LOG_ERR, "client %s requested block %d", ethtoa (c->mac), c->blocknum);
+  syslog (LOG_ERR, "client %s requested block %d", ethtoa (c->mac),
+          c->blocknum);
 
   client_calc_offsets (c);
 
@@ -160,13 +201,9 @@ send_file_frame (struct nit *n, struct rpl_packet *in)
 
   clients_check_status ();      /* This will upgrade our condition to downloading */
 
-/*
-   while (c->state == ST_FILEDATA)
-   {
-   file_data_frame (n, c);
-   usleep (1000);
-   }
- */
+
+  if (c->nospew)
+    file_data_frame (n, c);
 
 
 }
@@ -197,7 +234,8 @@ rpl_packet_recvd_callback (struct nit *n, struct rpl_packet *p)
         }
       else
         {
-          syslog (LOG_ERR, "Incomplete SEND.FILE.REQUEST frame 0x%x vs 0x%x\n",
+          syslog (LOG_ERR,
+                  "Incomplete SEND.FILE.REQUEST frame 0x%x vs 0x%x\n",
                   p->flags, RPL_SEND_FILE_FLAGS);
         }
       break;