*
* Version $Id$
*/
-
/*
Copyright (C) 2000-2005 Kern Sibbald
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.
+ modify it under the terms of the GNU General Public License
+ version 2 as amended with additional clauses defined in the
+ file LICENSE in the main source directory.
This program 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.
-
- 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,
- MA 02111-1307, USA.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ the file LICENSE for additional details.
*/
+
#ifndef __JCR_H_
#define __JCR_H_ 1
#define JT_BACKUP 'B' /* Backup Job */
#define JT_VERIFY 'V' /* Verify Job */
#define JT_RESTORE 'R' /* Restore Job */
-#define JT_CONSOLE 'C' /* console program */
+#define JT_CONSOLE 'c' /* console program */
#define JT_SYSTEM 'I' /* internal system "job" */
#define JT_ADMIN 'D' /* admin job */
#define JT_ARCHIVE 'A' /* Archive Job */
-#define JT_COPY 'Y' /* Copy Job */
-#define JT_MIGRATION 'M' /* Migration Job */
+#define JT_COPY 'C' /* Copy Job */
+#define JT_MIGRATE 'M' /* Migration Job */
#define JT_SCAN 'S' /* Scan Job */
/* Job Status. Some of these are stored in the DB */
#define SD_READ 0
/* Forward referenced structures */
-struct JCR;
+class JCR;
struct FF_PKT;
+struct B_DB;
+struct ATTR_DBR;
typedef void (JCR_free_HANDLER)(JCR *jcr);
/* Job Control Record (JCR) */
-struct JCR {
+class JCR {
+public:
+ void inc_use_count(void) {P(mutex); use_count++; V(mutex); };
+ void dec_use_count(void) {P(mutex); use_count--; V(mutex); };
+
/* Global part of JCR common to all daemons */
- JCR *next;
- JCR *prev;
+ dlink link; /* JCR chain link */
volatile int use_count; /* use count */
pthread_t my_thread_id; /* id of thread controlling jcr */
pthread_mutex_t mutex; /* jcr mutex */
void *Python_job; /* Python Job Object */
void *Python_events; /* Python Events Object */
+ bool cached_attribute; /* set if attribute is cached */
+ POOLMEM *attr; /* Attribute string from SD */
+ B_DB *db; /* database pointer */
+ ATTR_DBR *ar; /* DB attribute record */
+
/* Daemon specific part of JCR */
/* This should be empty in the library */
volatile int SDJobStatus; /* Storage Job Status */
volatile int FDJobStatus; /* File daemon Job Status */
uint32_t ExpectedFiles; /* Expected restore files */
- B_DB *db; /* database pointer */
uint32_t MediaId; /* DB record IDs associated with this job */
uint32_t PoolId; /* Pool record id */
FileId_t FileId; /* Last file id inserted */
bool write_part_after_job; /* Write part after job in SD */
bool needs_sd; /* set if SD needed by Job */
bool cloned; /* set if cloned */
- bool cached_attribute; /* set if attribute is cached */
- ATTR_DBR ar; /* DB attribute record */
- POOLMEM *attr; /* Attribute string from SD */
+ bool unlink_bsr; /* Unlink bsr file created */
#endif /* DIRECTOR_DAEMON */
uint32_t EndBlock;
pthread_t heartbeat_id; /* id of heartbeat thread */
volatile BSOCK *hb_bsock; /* duped SD socket */
+ volatile BSOCK *hb_dir_bsock; /* duped DIR socket */
POOLMEM *RunAfterJob; /* Command to run after job */
+ bool pki_sign; /* Enable PKI Signatures? */
+ bool pki_encrypt; /* Enable PKI Encryption? */
+ DIGEST *digest; /* Last file's digest context */
+ X509_KEYPAIR *pki_keypair; /* Encryption key pair */
+ alist *pki_signers; /* Trusted Signers */
+ alist *pki_readers; /* Trusted Readers */
+ CRYPTO_RECIPIENTS *pki_recipients; /* PKE Public Keys + Symmetric Session Keys */
DIRRES* director; /* Director resource */
#endif /* FILE_DAEMON */
JCR *prev_dev; /* previous JCR attached to device */
pthread_cond_t job_start_wait; /* Wait for FD to start Job */
int type;
+ DCR *read_dcr; /* device context for reading */
DCR *dcr; /* device context record */
alist *dcrs; /* list of dcrs open */
-// DEVRES *device; /* device resource to use */
POOLMEM *job_name; /* base Job name (not unique) */
POOLMEM *fileset_name; /* FileSet */
POOLMEM *fileset_md5; /* MD5 for FileSet */
bool spool_data; /* set to spool data */
int CurVol; /* Current Volume count */
DIRRES* director; /* Director resource */
+ alist *dirstore;
bool write_part_after_job; /* Set to write part after job */
- bool NewVolEachJob; /* Allow using new volume */
+ bool PreferMountedVols; /* Prefer mounted vols rather than new */
uint32_t FileId; /* Last file id inserted */
/* The following routines are found in lib/jcr.c */
extern bool init_jcr_subsystem(void);
extern JCR *new_jcr(int size, JCR_free_HANDLER *daemon_free_jcr);
-extern void free_locked_jcr(JCR *jcr);
extern JCR *get_jcr_by_id(uint32_t JobId);
extern JCR *get_jcr_by_session(uint32_t SessionId, uint32_t SessionTime);
extern JCR *get_jcr_by_partial_name(char *Job);
extern JCR *get_next_jcr(JCR *jcr);
extern void set_jcr_job_status(JCR *jcr, int JobStatus);
-#ifdef TRACE_JCR_CHAIN
-extern void b_lock_jcr_chain(const char *filen, int line);
-extern void b_unlock_jcr_chain(const char *filen, int line);
-#define lock_jcr_chain() b_lock_jcr_chain(__FILE__, __LINE__);
-#define unlock_jcr_chain() b_unlock_jcr_chain(__FILE__, __LINE__);
-#else
-extern void lock_jcr_chain();
-extern void unlock_jcr_chain();
-#endif
-
#ifdef DEBUG
extern void b_free_jcr(const char *file, int line, JCR *jcr);
#define free_jcr(jcr) b_free_jcr(__FILE__, __LINE__, (jcr))