]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/dird/getmsg.c
Fix: clock diff, Dan's patch, Nic's patch, segfault
[bacula/bacula] / bacula / src / dird / getmsg.c
index 0676e1d092380a1d6243acfdf6773f8090fc7b27..014c82b7e61f74af79af7d8545032014e9219fe9 100644 (file)
@@ -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 */
@@ -83,35 +83,42 @@ int32_t bget_msg(BSOCK *bs, int rtn)
       if (n == BNET_SIGNAL) {         /* handle signal */
         /* BNET_SIGNAL (-1) return from bnet_recv() => network signal */
         switch (bs->msglen) {
-           case BNET_EOD:            /* end of data */
-              return n;
-           case BNET_EOD_POLL:
-              bnet_fsend(bs, OK_msg);/* send response */
-              return n;              /* end of data */
-           case BNET_TERMINATE:
-              bs->terminated = 1;
-              return n;
-           case BNET_POLL:
-              bnet_fsend(bs, OK_msg); /* send response */
-              break;
-           case BNET_HEARTBEAT:
-              bnet_sig(bs, BNET_HB_RESPONSE);
-              break;
-           case BNET_STATUS:
-              /* *****FIXME***** Implement */
-               bnet_fsend(bs, "Status OK\n");
-              bnet_sig(bs, BNET_EOD);
-              break;
-           default:
-               Emsg1(M_WARNING, 0, _("bget_msg: unknown signal %d\n"), bs->msglen);
-              return n;
+        case BNET_EOD:            /* end of data */
+           return n;
+        case BNET_EOD_POLL:
+           bnet_fsend(bs, OK_msg);/* send response */
+           return n;              /* end of data */
+        case BNET_TERMINATE:
+           bs->terminated = 1;
+           return n;
+        case BNET_POLL:
+           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 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_dirmsg: unknown bnet signal %d\n"), bs->msglen);
+           return n;
         }
         continue;
       }
      
       /* 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;
 }