]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/bsock.h
Doc + read_record updates
[bacula/bacula] / bacula / src / lib / bsock.h
index c9ed782bcbecc281cedc77a2c0ad99f654137a65..92aa2596c5fad3e5fe090291aa6329fc80ca5cbc 100644 (file)
@@ -9,51 +9,55 @@
  * Negative msglen, is special "signal" (no data follows).
  *   See below for SIGNAL codes.
  *
+ *   Version $Id$
  */
 /*
    Copyright (C) 2000, 2001, 2002 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
-   published by the Free Software Foundation; either version 2 of
-   the License, or (at your option) any later version.
+   This library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
-   This program is distributed in the hope that it will be useful,
+   This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-   General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
 
-   You should have received a copy of the GNU General Public
-   License along with this program; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
+   You should have received a copy of the GNU Lesser General Public
+   License along with this library; if not, write to the Free
+   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
    MA 02111-1307, USA.
 
  */
 
-typedef struct s_bsock {
+struct BSOCK {
    uint64_t read_seqno;               /* read sequence number */
-   uint32_t in_msg_no;                /* intput message number */
+   uint32_t in_msg_no;                /* input message number */
    uint32_t out_msg_no;               /* output message number */
    int fd;                            /* socket file descriptor */
    int32_t msglen;                    /* message length */
    int port;                          /* desired port */
-   int errors;                        /* set if errors on socket */
+   volatile int errors;               /* set if errors on socket */
+   volatile int suppress_error_msgs;  /* set to suppress error messages */
    int b_errno;                       /* bsock errno */
-   time_t timer_start;                /* time started read/write */
-   int timed_out;                     /* timed out in read/write */
-   int timeout;                       /* time out after this value */
-   int terminated;                    /* set when BNET_TERMINATE arrives */
+   volatile time_t timer_start;       /* time started read/write */
+   volatile int timed_out;            /* timed out in read/write */
+   volatile int timeout;              /* time out after this value */
+   volatile int terminated;           /* set when BNET_TERMINATE arrives */
    int duped;                         /* set if duped BSOCK */
-   char *msg;                         /* message pool buffer */
+   POOLMEM *msg;                      /* message pool buffer */
    char *who;                         /* Name of daemon to which we are talking */
    char *host;                        /* Host name/IP */
-   char *errmsg;                      /* edited error message (to be implemented) */
+   POOLMEM *errmsg;                   /* edited error message (to be implemented) */
    RES *res;                          /* Resource to which we are connected */
-   struct s_bsock *next;              /* next BSOCK if duped */
-} BSOCK;
+   BSOCK *next;                       /* next BSOCK if duped */
+   int spool;                         /* set for spooling */
+   FILE *spool_fd;                    /* spooling file */
+   JCR *jcr;                          /* jcr or NULL for error msgs */
+};      
 
 /* Signal definitions for use in bnet_sig() */
-#define BNET_EOF          0           /* Deprecated, use BNET_EOD */
 #define BNET_EOD         -1           /* End of data stream, new data may follow */
 #define BNET_EOD_POLL    -2           /* End of data and poll all in one */
 #define BNET_STATUS      -3           /* Send full status */
@@ -65,3 +69,46 @@ typedef struct s_bsock {
 
 #define BNET_SETBUF_READ  1           /* Arg for bnet_set_buffer_size */
 #define BNET_SETBUF_WRITE 2           /* Arg for bnet_set_buffer_size */
+
+/* Return status from bnet_recv() */
+#define BNET_SIGNAL  -1
+#define BNET_HARDEOF -2
+#define BNET_ERROR   -3
+
+/* SSL enabling values */
+#define BNET_SSL_NONE     0           /* cannot do SSL */
+#define BNET_SSL_OK       1           /* can do, but not required on my end */
+#define BNET_SSL_REQUIRED 2           /* SSL is required */
+
+/*
+ * This is the structure of the in memory BPKT
+ */
+typedef struct s_bpkt {
+   char *id;                          /* String identifier or name of field */
+   uint8_t type;                      /* field type */
+   uint32_t len;                      /* field length for string, name, bytes */
+   void *value;                       /* pointer to value */
+} BPKT;
+
+/*  
+ * These are the data types that can be sent.
+ * For all values other than string, the storage space
+ *  is assumed to be allocated in the receiving packet.
+ *  For BP_STRING if the *value is non-zero, it is a        
+ *  pointer to a POOLMEM buffer, and the Memory Pool
+ *  routines will be used to assure that the length is
+ *  adequate. NOTE!!! This pointer will be changed
+ *  if the memory is reallocated (sort of like Mmsg(&pool)
+ *  does). If the pointer is NULL, a POOLMEM
+ *  buffer will be allocated.
+ */
+#define BP_EOF       0                /* end of file */
+#define BP_CHAR      1                /* Character */
+#define BP_INT32     1                /* 32 bit integer */
+#define BP_UINT32    3                /* Unsigned 32 bit integer */
+#define BP_INT64     4                /* 64 bit integer */
+#define BP_STRING    5                /* string */
+#define BP_NAME      6                /* Name string -- limited length */
+#define BP_BYTES     7                /* Binary bytes */
+#define BP_FLOAT32   8                /* 32 bit floating point */
+#define BP_FLOAT64   9                /* 64 bit floating point */