]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/bsock.h
kes Correctly detect Ubuntu systems, and add ubuntu platform directory.
[bacula/bacula] / bacula / src / lib / bsock.h
index c363b7dc7467210def1def1f181b934f473344f3..0205accd3b6a6f0e2a1dca99885757b66122c598 100644 (file)
@@ -1,14 +1,14 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2007 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
    This program is Free Software; you can redistribute it and/or
    modify it under the terms of version two of the GNU General Public
-   License as published by the Free Software Foundation plus additions
-   that are listed in the file LICENSE.
+   License as published by the Free Software Foundation and included
+   in the file LICENSE.
 
    This program is distributed in the hope that it will be useful, but
    WITHOUT ANY WARRANTY; without even the implied warranty of
  *   Version $Id$
  */
 
+#ifndef __BSOCK_H_
+#define __BSOCK_H_
+
+struct btimer_t;                      /* forward reference */
+class BSOCK;
+btimer_t *start_bsock_timer(BSOCK *bs, uint32_t wait);
+void stop_bsock_timer(btimer_t *wid);
+
 
 class BSOCK {
 private:
    BSOCK *m_next;                     /* next BSOCK if duped */
    JCR *m_jcr;                        /* jcr or NULL for error msgs */
+   pthread_mutex_t m_mutex;           /* for locking if use_locking set */
    char *m_who;                       /* Name of daemon to which we are talking */
    char *m_host;                      /* Host name/IP */
    int m_port;                        /* desired port */
+   btimer_t *m_tid;                   /* timer id */
+   volatile bool m_timed_out: 1;      /* timed out in read/write */
+   volatile bool m_terminated: 1;     /* set when BNET_TERMINATE arrives */
+   bool m_duped: 1;                   /* set if duped BSOCK */
+   bool m_spool: 1;                   /* set for spooling */
+   bool m_use_locking: 1;             /* set to use locking */
+
+   void fin_init(JCR * jcr, int sockfd, const char *who, const char *host, int port,
+               struct sockaddr *lclient_addr);
+   bool open(JCR *jcr, const char *name, char *host, char *service,
+               int port, utime_t heart_beat, int *fatal);
    
 public:
    uint64_t read_seqno;               /* read sequence number */
@@ -61,10 +81,6 @@ public:
    int m_blocking;                    /* blocking state (0 = nonblocking, 1 = blocking) */
    volatile int errors;               /* incremented for each error on socket */
    volatile bool m_suppress_error_msgs: 1; /* set to suppress error messages */
-   volatile bool m_timed_out: 1;      /* timed out in read/write */
-   volatile bool m_terminated: 1;     /* set when BNET_TERMINATE arrives */
-   bool m_duped: 1;                   /* set if duped BSOCK */
-   bool m_spool: 1;                   /* set for spooling */
    volatile time_t timer_start;       /* time started read/write */
    volatile time_t timeout;           /* timeout BSOCK after this interval */
    POOLMEM *msg;                      /* message pool buffer */
@@ -75,6 +91,12 @@ public:
    struct sockaddr_in peer_addr;      /* peer's IP address */
 
    /* methods -- in bsock.c */
+   void init();
+   void free_bsock();
+   void free_tls();
+   bool connect(JCR * jcr, int retry_interval, utime_t max_retry_time,
+                utime_t heart_beat, const char *name, char *host, 
+                char *service, int port, int verbose);
    int32_t recv();
    bool send();
    bool fsend(const char*, ...);
@@ -88,6 +110,12 @@ public:
    int set_nonblocking();
    int set_blocking();
    void restore_blocking(int flags);
+   int wait_data(int sec);
+   int wait_data_intr(int sec);
+   bool authenticate_director(const char *name, const char *password,
+                  TLS_CONTEXT *tls_ctx, char *msg, int msglen);
+   bool set_locking();                /* in bsock.c */
+   void clear_locking();              /* in bsock.c */
 
    /* Inline functions */
    void set_jcr(JCR *jcr) { m_jcr = jcr; };
@@ -98,9 +126,21 @@ public:
    char *host() { return m_host; };
    int port() { return m_port; };
    JCR *jcr() { return m_jcr; };
+   JCR *get_jcr() { return m_jcr; };
+   bool is_spooling() { return m_spool; };
+   bool is_duped() { return m_duped; };
    bool is_terminated() { return m_terminated; };
    bool is_timed_out() { return m_timed_out; };
+   bool is_stop() { return errors || is_terminated(); }
+   bool is_error() { errno = b_errno; return errors; }
+   void set_spooling() { m_spool = true; };
+   void clear_spooling() { m_spool = false; };
+   void set_duped() { m_duped = true; };
+   void set_timed_out() { m_timed_out = true; };
+   void clear_timed_out() { m_timed_out = false; };
    void set_terminated() { m_terminated = true; };
+   void start_timer(int sec) { m_tid = start_bsock_timer(this, sec); };
+   void stop_timer() { stop_bsock_timer(m_tid); };
 };
 
 /* 
@@ -131,7 +171,10 @@ enum {
    BNET_WARNING_MSG    = -20,         /* Warning message */
    BNET_ERROR_MSG      = -21,         /* Error message -- command failed */
    BNET_INFO_MSG       = -22,         /* Info message -- status line */
-   BNET_RUN_CMD        = -23          /* Run command follows */
+   BNET_RUN_CMD        = -23,         /* Run command follows */
+   BNET_YESNO          = -24,         /* Request yes no response */
+   BNET_START_RTREE    = -25,         /* Start restore tree mode */
+   BNET_END_RTREE      = -26          /* End restore tree mode */ 
 };
 
 #define BNET_SETBUF_READ  1           /* Arg for bnet_set_buffer_size */
@@ -160,3 +203,7 @@ enum {
 
 int32_t read_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes);
 int32_t write_nbytes(BSOCK * bsock, char *ptr, int32_t nbytes);
+
+BSOCK *new_bsock();
+
+#endif /* __BSOCK_H_ */