]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/cmd/aan.c
awk: make empty FS unicodely-correct.
[plan9front.git] / sys / src / cmd / aan.c
index bf7456279b8d2372e78052c3a738f0b5cc8be7e6..7508720f824df8c4eeadd57f225c1daa7894d2b5 100644 (file)
@@ -36,7 +36,8 @@ static Channel        *unsent;
 static Channel *unacked;
 static Channel *empty;
 static int     netfd;
-static int     inmsg;
+static ulong   inmsg;
+static ulong   outmsg;
 static char    *devdir;
 static int     debug;
 static int     done;
@@ -58,10 +59,7 @@ static void          fromnet(void*);
 static void            fromclient(void*);
 static int             reconnect(int);
 static void            synchronize(void);
-static int             sendcommand(ulong, ulong);
-static void            showmsg(int, char *, Buf *);
 static int             writen(int, uchar *, int);
-static void            dmessage(int, char *, ...);
 static void            timerproc(void *);
 
 static void
@@ -85,13 +83,13 @@ catch(void *, char *s)
 static void*
 emalloc(int n)
 {
-       ulong pc;
+       uintptr pc;
        void *v;
 
        pc = getcallerpc(&n);
        v = malloc(n);
        if(v == nil)
-               sysfatal("Cannot allocate memory; pc=%lux", pc);
+               sysfatal("Cannot allocate memory; pc=%#p", pc);
        setmalloctag(v, pc);
        return v;
 }
@@ -137,8 +135,6 @@ threadmain(int argc, char **argv)
                dup(fd, 2);
        }
 
-       fmtinstall('F', fcallfmt);
-
        atnotify(catch, 1);
 
        /*
@@ -178,10 +174,10 @@ Restart:
        failed = 0;
        lostsync = 0;
        while (!done) {
-               if (failed) {
+               if (netfd < 0 || failed) {
                        // Wait for the netreader to die.
                        while (netfd >= 0) {
-                               dmessage(1, "main; waiting for netreader to die\n");
+                               if(debug) fprint(2, "main; waiting for netreader to die\n");
                                threadint(reader);
                                sleep(1000);
                        }
@@ -202,13 +198,12 @@ Restart:
                        PBIT32(hdr.msg, -1);
 
                        if (writen(netfd, (uchar *)&hdr, Hdrsz) < 0) {
-                               dmessage(2, "main; writen failed; %r\n");
                                failed = 1;
                                continue;
                        }
 
                        if(++lostsync > 2){
-                               dmessage(2, "main; lost sync\n");
+                               syslog(0, Logname, "connection seems hung up...");
                                failed = 1;
                                continue;
                        }
@@ -218,21 +213,20 @@ Restart:
                case Unsent:
                        sendp(unacked, b);
 
-                       PBIT32(b->hdr.acked, inmsg);
+                       if (netfd < 0)
+                               break;
 
-                       if (writen(netfd, (uchar *)&b->hdr, Hdrsz) < 0) {
-                               dmessage(2, "main; writen failed; %r\n");
-                               failed = 1;
-                       }
+                       PBIT32(b->hdr.acked, inmsg);
 
-                       n = GBIT32(b->hdr.nb);
-                       if (writen(netfd, b->buf, n) < 0) {
-                               dmessage(2, "main; writen failed; %r\n");
+                       if (writen(netfd, (uchar *)&b->hdr, Hdrsz) < 0)
                                failed = 1;
+                       else {
+                               n = GBIT32(b->hdr.nb);
+                               if (writen(netfd, b->buf, n) < 0)
+                                       failed = 1;
+                               if (n == 0)
+                                       done = 1;
                        }
-
-                       if (n == 0)
-                               done = 1;
                        break;
                }
        }
@@ -244,7 +238,6 @@ Restart:
 static void
 fromclient(void*)
 {
-       static int outmsg;
        int n;
        Buf *b;
 
@@ -253,16 +246,10 @@ fromclient(void*)
        do {
                b = recvp(empty);
                n = read(0, b->buf, Bufsize);
-               if (n <= 0) {
-                       if (n < 0)
-                               dmessage(2, "fromclient; Cannot read 9P message; %r\n");
-                       else
-                               dmessage(2, "fromclient; Client terminated\n");
+               if (n < 0)
                        n = 0;
-               }
                PBIT32(b->hdr.nb, n);
                PBIT32(b->hdr.msg, outmsg);
-               showmsg(1, "fromclient", b);
                sendp(unsent, b);
                outmsg++;
        } while(n > 0);
@@ -272,8 +259,8 @@ static void
 fromnet(void*)
 {
        extern void _threadnote(void *, char *);
-       static int lastacked;
-       int n, m, len, acked;
+       ulong m, acked, lastacked = 0;
+       int n, len;
        Buf *b;
 
        notify(_threadnote);
@@ -285,17 +272,19 @@ fromnet(void*)
                while (netfd < 0) {
                        if(done)
                                return;
-                       dmessage(1, "fromnet; waiting for connection... (inmsg %d)\n", inmsg);
+                       if(debug) fprint(2, "fromnet; waiting for connection... (inmsg %lud)\n", inmsg);
                        sleep(1000);
                }
 
                // Read the header.
                len = readn(netfd, (uchar *)&b->hdr, Hdrsz);
                if (len <= 0) {
-                       if (len < 0)
-                               dmessage(1, "fromnet; (hdr) network failure; %r\n");
-                       else
-                               dmessage(1, "fromnet; (hdr) network closed\n");
+                       if (debug) {
+                               if (len < 0)
+                                       fprint(2, "fromnet; (hdr) network failure; %r\n");
+                               else
+                                       fprint(2, "fromnet; (hdr) network closed\n");
+                       }
                        close(netfd);
                        netfd = -1;
                        continue;
@@ -304,55 +293,48 @@ fromnet(void*)
                n = GBIT32(b->hdr.nb);
                m = GBIT32(b->hdr.msg);
                acked = GBIT32(b->hdr.acked);
-               dmessage(2, "fromnet: Got message, size %d, nb %d, msg %d, acked %d, lastacked %d\n",
-                       len, n, m, acked, lastacked);
-
                if (n == 0) {
-                       if (m >= 0) {
-                               dmessage(1, "fromnet; network closed\n");
-                               break;
-                       }
-                       continue;
-               }
-
-               if (n > Bufsize) {
-                       dmessage(1, "fromnet; message too big %d > %d\n", n, Bufsize);
+                       if (m == (ulong)-1)
+                               continue;
+                       if(debug) fprint(2, "fromnet; network closed\n");
+                       break;
+               } else if (n < 0 || n > Bufsize) {
+                       if(debug) fprint(2, "fromnet; message too big %d > %d\n", n, Bufsize);
                        break;
                }
 
                len = readn(netfd, b->buf, n);
                if (len <= 0 || len != n) {
                        if (len == 0)
-                               dmessage(1, "fromnet; network closed\n");
+                               if(debug) fprint(2, "fromnet; network closed\n");
                        else
-                               dmessage(1, "fromnet; network failure; %r\n");
+                               if(debug) fprint(2, "fromnet; network failure; %r\n");
                        close(netfd);
                        netfd = -1;
                        continue;
                }
 
-               if (m < inmsg) {
-                       dmessage(1, "fromnet; skipping message %d, currently at %d\n", m, inmsg);
+               if (m != inmsg) {
+                       if(debug) fprint(2, "fromnet; skipping message %lud, currently at %lud\n", m, inmsg);
                        continue;
                }                       
+               inmsg++;
 
                // Process the acked list.
-               while(lastacked != acked) {
+               while((long)(acked - lastacked) > 0) {
                        Buf *rb;
 
-                       rb = recvp(unacked);
+                       if((rb = recvp(unacked)) == nil)
+                               break;
                        m = GBIT32(rb->hdr.msg);
                        if (m != lastacked) {
-                               dmessage(1, "fromnet; rb %p, msg %d, lastacked %d\n", rb, m, lastacked);
+                               if(debug) fprint(2, "fromnet; rb %p, msg %lud, lastacked %lud\n", rb, m, lastacked);
                                sysfatal("fromnet; bug");
                        }
                        PBIT32(rb->hdr.msg, -1);
                        sendp(empty, rb);
                        lastacked++;
                } 
-               inmsg++;
-
-               showmsg(1, "fromnet", b);
 
                if (writen(1, b->buf, len) < 0) 
                        sysfatal("fromnet; cannot write to client; %r");
@@ -376,10 +358,10 @@ reconnect(int secs)
                        err[0] = '\0';
                        errstr(err, sizeof err);
                        if (strstr(err, "connection refused")) {
-                               dmessage(1, "reconnect; server died...\n");
+                               if(debug) fprint(2, "reconnect; server died...\n");
                                threadexitsall("server died...");
                        }
-                       dmessage(1, "reconnect: dialed %s; %s\n", dialstring, err);
+                       if(debug) fprint(2, "reconnect: dialed %s; %s\n", dialstring, err);
                        sleep(1000);
                }
                alarm(0);
@@ -428,22 +410,6 @@ synchronize(void)
        unacked = tmp;
 }
 
-static void
-showmsg(int level, char *s, Buf *b)
-{
-       int n;
-
-       if (b == nil) {
-               dmessage(level, "%s; b == nil\n", s);
-               return;
-       }
-       n = GBIT32(b->hdr.nb);
-       dmessage(level, "%s;  (len %d) %X %X %X %X %X %X %X %X %X (%p)\n", s, n, 
-                       b->buf[0], b->buf[1], b->buf[2],
-                       b->buf[3], b->buf[4], b->buf[5],
-                       b->buf[6], b->buf[7], b->buf[8], b);
-}
-
 static int
 writen(int fd, uchar *buf, int nb)
 {
@@ -456,10 +422,9 @@ writen(int fd, uchar *buf, int nb)
                        return -1;
 
                if ((n = write(fd, buf, nb)) < 0) {
-                       dmessage(1, "writen; Write failed; %r\n");
+                       if(debug) fprint(2, "writen; Write failed; %r\n");
                        return -1;
                }
-               dmessage(2, "writen: wrote %d bytes\n", n);
 
                buf += n;
                nb -= n;
@@ -479,16 +444,3 @@ timerproc(void *x)
                sendp(timer, "timer");
        }
 }
-
-static void
-dmessage(int level, char *fmt, ...)
-{
-       va_list arg; 
-
-       if (level > debug) 
-               return;
-
-       va_start(arg, fmt);
-       vfprint(2, fmt, arg);
-       va_end(arg);
-}