]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/bnet_pkt.c
- Correct compiler complaints in wx-console and tray-monitor.
[bacula/bacula] / bacula / src / lib / bnet_pkt.c
index fb5ae14d87b82afd0bf6e68ae9cd08988bbf34a3..d84d241b5f65bc967bfc2cb0f3998141abbb41e8 100644 (file)
@@ -7,7 +7,7 @@
  *   Version $Id$
  */
 /*
-   Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+   Copyright (C) 2002-2004 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
 
  */
 
+#ifdef implemented
 
 #include "bacula.h"
 
-/* 
+/*
  * Receive a message from the other end. Each message consists of
  * two packets. The first is a header that contains the size
  * of the data that follows in the second packet.
  * Returns -1 on hard end of file (i.e. network connection close)
  * Returns -2 on error
  */
-int32_t 
-bnet_recv_pkt(BSOCK *bsock, BPKT *pkt)
+int32_t
+bnet_recv_pkt(BSOCK *bsock, BPKT *pkt, int *version)
 {
+   unser_declare;
+   short lversion;
+   int type;
+
+   unser_begin(bsock->msg, 0);
+   unser_uint16(lversion);
+   *version = (int)lversion;
+
+
+   for ( ; pkt->type != BP_EOF; pkt++) {
+      if (pkt->id) {
+        ser_int8(BP_ID);
+        ser_string((char *)pkt->id);
+      }
+      ser_int8(pkt->type);
+      switch (pkt->type) {
+      case BP_CHAR:
+        ser_int8(*(int8_t *)pkt->value);
+        break;
+      case BP_INT32:
+        ser_int32(*(int32_t *)pkt->value);
+        break;
+      case BP_UINT32:
+        break;
+        ser_unit32(*(uint32_t *)pkt->value);
+        break;
+      case BP_INT64:
+        ser_int64(*(int64_t *)pkt->value);
+        break;
+      case BP_BTIME:
+      case BP_UTIME:
+      case BP_UINT64:
+        ser_uint64(*(uint64_t *)pkt->value);
+        break;
+      case BP_POOL:
+      case BP_STRING:
+      case BP_NAME:
+        ser_string((char *)pkt->value);
+        break;
+      case BP_BYTES:
+        ser_uint32(*(uint32_t *)pkt->len);
+        ser_bytes((char *)pkt->value, pkt->len);
+        break;
+      default:
+        Emsg1(M_ABORT, 0, _("Unknown BPKT type: %d\n"), pkt->type);
+      }
+   }
+   unser_end(bsock->msg, 0);
+
 }
 
 /*
@@ -52,37 +102,52 @@ bnet_recv_pkt(BSOCK *bsock, BPKT *pkt)
  *         1 on success
  */
 int
-bnet_send_pkt(BSOCK *bsock, BPKT *pkt)
+bnet_send_pkt(BSOCK *bsock, BPKT *pkt, int version)
 {
    ser_declare;
 
    ser_begin(bsock->msg, 0);
+   ser_uint16(version);
 
-   while (pkt->type != BP_EOF) {
+   for ( ; pkt->type != BP_EOF; pkt++) {
+      if (pkt->id) {
+        ser_int8(BP_ID);
+        ser_string((char *)pkt->id);
+      }
       ser_int8(pkt->type);
       switch (pkt->type) {
       case BP_CHAR:
-        ser_int8(*((int8_t)pkt->value)));
+        ser_int8(*(int8_t *)pkt->value);
         break;
       case BP_INT32:
-        ser_int32(*(int32_t)pkt->value)));
+        ser_int32(*(int32_t *)pkt->value);
         break;
       case BP_UINT32:
         break;
+        ser_unit32(*(uint32_t *)pkt->value);
+        break;
       case BP_INT64:
+        ser_int64(*(int64_t *)pkt->value);
         break;
-      case BP_STRING:
+      case BP_BTIME:
+      case BP_UTIME:
+      case BP_UINT64:
+        ser_uint64(*(uint64_t *)pkt->value);
         break;
+      case BP_POOL:
+      case BP_STRING:
       case BP_NAME:
+        ser_string((char *)pkt->value);
         break;
       case BP_BYTES:
-        break;
-      case BP_FLOAT32:
-        break;
-      case BP_FLOAT64:
+        ser_uint32(*(uint32_t *)pkt->len);
+        ser_bytes((char *)pkt->value, pkt->len);
         break;
       default:
-         Emsg1(M_ABORT, 0, _("Unknown BPKT type: %d\n"), pkt->type);
+        Emsg1(M_ABORT, 0, _("Unknown BPKT type: %d\n"), pkt->type);
       }
-
+   }
+   ser_end(bsock->msg, 0);
 }
+
+#endif