-/*
- *
- * Bacula Director -- routines to receive network data and
- * handle network signals. These routines handle the connections
- * to the Storage daemon and the File daemon.
- *
- * Kern Sibbald, August MM
- *
- * This routine runs as a thread and must be thread reentrant.
- *
- * Basic tasks done here:
- * Handle network signals (signals).
- * Signals always have return status 0 from bnet_recv() and
- * a zero or negative message length.
- * Pass appropriate messages back to the caller (responses).
- * Responses always have a digit as the first character.
- * Handle requests for message and catalog services (requests).
- * Requests are any message that does not begin with a digit.
- * In affect, they are commands.
- *
- * Version $Id$
- */
/*
Bacula® - The Network Backup Solution
- Copyright (C) 2000-2006 Free Software Foundation Europe e.V.
+ Copyright (C) 2000-2007 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
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Bacula® is a registered trademark of John Walker.
+ Bacula® is a registered trademark of Kern Sibbald.
The licensor of Bacula is the Free Software Foundation Europe
(FSFE), Fiduciary Program, Sumatrastrasse 25, 8006 Zürich,
Switzerland, email:ftf@fsfeurope.org.
*/
+/*
+ *
+ * Bacula Director -- routines to receive network data and
+ * handle network signals. These routines handle the connections
+ * to the Storage daemon and the File daemon.
+ *
+ * Kern Sibbald, August MM
+ *
+ * This routine runs as a thread and must be thread reentrant.
+ *
+ * Basic tasks done here:
+ * Handle network signals (signals).
+ * Signals always have return status 0 from bnet_recv() and
+ * a zero or negative message length.
+ * Pass appropriate messages back to the caller (responses).
+ * Responses always have a digit as the first character.
+ * Handle requests for message and catalog services (requests).
+ * Requests are any message that does not begin with a digit.
+ * In affect, they are commands.
+ *
+ * Version $Id$
+ */
#include "bacula.h"
#include "dird.h"
static char OK_msg[] = "1000 OK\n";
+
+void set_jcr_sd_job_status(JCR *jcr, int SDJobStatus)
+{
+ bool set_waittime=false;
+ Dmsg2(800, "set_jcr_sd_job_status(%s, %c)\n", jcr->Job, SDJobStatus);
+ /* if wait state is new, we keep current time for watchdog MaxWaitTime */
+ switch (SDJobStatus) {
+ case JS_WaitMedia:
+ case JS_WaitMount:
+ case JS_WaitMaxJobs:
+ set_waittime = true;
+ default:
+ break;
+ }
+
+ if (job_waiting(jcr)) {
+ set_waittime = false;
+ }
+
+ if (set_waittime) {
+ /* set it before JobStatus */
+ Dmsg0(800, "Setting wait_time\n");
+ jcr->wait_time = time(NULL);
+ }
+ jcr->SDJobStatus = SDJobStatus;
+}
+
/*
* Get a message
* Call appropriate processing routine
for (;;) {
n = bs->recv();
- Dmsg2(900, "bget_dirmsg %d: %s", n, bs->msg);
+ Dmsg2(100, "bget_dirmsg %d: %s\n", n, bs->msg);
if (is_bnet_stop(bs)) {
return n; /* error or terminate */
bs->fsend(OK_msg);/* send response */
return n; /* end of data */
case BNET_TERMINATE:
- bs->m_terminated = 1;
+ bs->set_terminated();
return n;
case BNET_POLL:
bs->fsend(OK_msg); /* send response */
free_jcr(jcr);
continue;
}
- if (bs->msg[0] == 'U') { /* Catalog update */
+ if (bs->msg[0] == 'U') { /* SD sending attributes */
Dmsg2(900, "Catalog upd jcr 0x%x: %s", jcr, bs->msg);
catalog_update(jcr, bs);
Dmsg1(900, "Calling freejcr 0x%x\n", jcr);
int JobStatus;
char Job[MAX_NAME_LENGTH];
if (sscanf(bs->msg, Job_status, &Job, &JobStatus) == 2) {
- jcr->SDJobStatus = JobStatus; /* current status */
+ set_jcr_sd_job_status(jcr,JobStatus); /* current status */
} else {
Emsg1(M_ERROR, 0, _("Malformed message: %s\n"), bs->msg);
}