]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/getmsg.c
Fix mount not releasing job
[bacula/bacula] / bacula / src / dird / getmsg.c
index 8383a7ab5b7e139731db5c908383a07b1ae3c7af..f0da7debfbd79db3172c7801ee6ee33e38c6aa51 100644 (file)
@@ -21,7 +21,7 @@
  *   Version $Id$
  */
 /*
-   Copyright (C) 2000, 2001, 2002 Kern Sibbald and John Walker
+   Copyright (C) 2000-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
@@ -64,7 +64,7 @@ static char OK_msg[] = "1000 OK\n";
  *      any message beginning with Jmsg will be processed.
  *
  */
-int32_t bget_msg(BSOCK *bs, int rtn)
+int bget_dirmsg(BSOCK *bs)
 {
    int32_t n;
    char Job[MAX_NAME_LENGTH];
@@ -75,7 +75,7 @@ int32_t bget_msg(BSOCK *bs, int rtn)
 
    for (;;) {
       n = bnet_recv(bs);
-      Dmsg2(120, "bget_msg %d: %s\n", n, bs->msg);
+      Dmsg2(120, "bget_dirmsg %d: %s\n", n, bs->msg);
 
       if (is_bnet_stop(bs)) {
         return n;                    /* error or terminate */
@@ -95,15 +95,22 @@ int32_t bget_msg(BSOCK *bs, int rtn)
            bnet_fsend(bs, OK_msg); /* send response */
            break;
         case BNET_HEARTBEAT:
+//         encode_time(time(NULL), Job);
+//          Dmsg1(100, "%s got heartbeat.\n", Job);
+           break;
         case BNET_HB_RESPONSE:
            break;
         case BNET_STATUS:
-           /* *****FIXME***** Implement */
+           /* *****FIXME***** Implement more completely */
             bnet_fsend(bs, "Status OK\n");
            bnet_sig(bs, BNET_EOD);
            break;
+        case BNET_BTIME:             /* send Bacula time */
+           char ed1[50];
+            bnet_fsend(bs, "btime %s\n", edit_uint64(get_current_btime(),ed1));
+           break;
         default:
-            Emsg1(M_WARNING, 0, _("bget_msg: unknown signal %d\n"), bs->msglen);
+            Emsg1(M_WARNING, 0, _("bget_dirmsg: unknown bnet signal %d\n"), bs->msglen);
            return n;
         }
         continue;
@@ -111,7 +118,7 @@ int32_t bget_msg(BSOCK *bs, int rtn)
      
       /* Handle normal data */
 
-      if (B_ISDIGIT(bs->msg[0])) {     /* response? */
+      if (n > 0 && B_ISDIGIT(bs->msg[0])) {     /* response? */
         return n;                    /* yes, return it */
       }
        
@@ -207,25 +214,25 @@ static char *find_msg_start(char *msg)
  *  Returns: 0 on failure
  *          1 on success
  */
-int response(BSOCK *fd, char *resp, char *cmd, int prtmsg)
+int response(JCR *jcr, BSOCK *fd, char *resp, char *cmd, e_prtmsg prtmsg)
 {
    int n;
 
    if (is_bnet_error(fd)) {
       return 0;
    }
-   if ((n = bget_msg(fd, 0)) >= 0) {
+   if ((n = bget_dirmsg(fd)) >= 0) {
       Dmsg0(110, fd->msg);
       if (strcmp(fd->msg, resp) == 0) {
         return 1;
       }
-      if (prtmsg) {
-         Emsg3(M_FATAL, 0, _("FD gave bad response to %s command: wanted %s got: %s\n"),
+      if (prtmsg == DISPLAY_ERROR) {
+         Jmsg(jcr, M_FATAL, 0, _("FD gave bad response to %s command: wanted %s got: %s\n"),
            cmd, resp, fd->msg);
       }
       return 0;
    } 
-   Emsg2(M_FATAL, 0, _("Socket error from Filed on %s command: ERR=%s\n"),
+   Jmsg(jcr, M_FATAL, 0, _("Socket error from Filed on %s command: ERR=%s\n"),
         cmd, bnet_strerror(fd));
    return 0;
 }