X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=src%2Fclient.c;h=5991ed76ffc6aa4bf1935ce5df6fce75c34ad405;hb=8ec8de844b14f4d48308eaf3c0fd05e080baa46a;hp=9bc3d1fc567ee848088b8ed3c46754d8fa086843;hpb=a618b3692be9e3dc8be7bf82baa4df68df8e7bb7;p=spider.git diff --git a/src/client.c b/src/client.c index 9bc3d1fc..5991ed76 100644 --- a/src/client.c +++ b/src/client.c @@ -53,7 +53,7 @@ typedef struct sel_t *sp; /* my select fcb address */ struct termios t; /* any termios associated with this cnum */ char echo; /* echo characters back to this cnum */ - char t_set; /* the termios structure is valid */ + char t_set; /* the termios structure is valid */ } fcb_t; char *node_addr = "localhost"; /* the node tcp address */ @@ -230,7 +230,9 @@ int fcb_handler(sel_t *sp, int in, int out, int err) ++p; break; default: - if (*p == nl) { + if (nl == '\n' && *p == '\r') { + p++; + } else if (*p == nl) { if (mp->inp == mp->data) *mp->inp++ = ' '; *mp->inp = 0; /* zero terminate it, but don't include it in the length */ @@ -270,6 +272,8 @@ int fcb_handler(sel_t *sp, int in, int out, int err) case 2: case 3: mp->size = (mp->size << 8) | (*p++ & 0xff); + if (mp->size > MAXBUFL) + die("Message size too big from node (%d > %d)", mp->size, MAXBUFL); mp->state++; break; default: @@ -346,11 +350,14 @@ void initargs(int argc, char *argv[]) { int i, c, err = 0; - while ((c = getopt(argc, argv, "h:x:")) > 0) { + while ((c = getopt(argc, argv, "h:p:x:")) > 0) { switch (c) { case 'h': - node_addr = optarg; - break; + node_addr = optarg; + break; + case 'p': + node_port = atoi(optarg); + break; case 'x': dbginit("client"); dbgset(atoi(optarg)); @@ -494,8 +501,10 @@ void process_node() case 'D': if (p) { int l = mp->inp - (unsigned char *) p; + if (nl == '\n' && l >= 1 && p[l-1] == '\r') /* kludge for GB7DXM */ + l--; send_text(in, p, l); - } + } break; default: break; @@ -519,21 +528,23 @@ main(int argc, char *argv[]) signal(SIGINT, terminate); signal(SIGQUIT, terminate); signal(SIGTERM, terminate); +#ifdef SIGPWR signal(SIGPWR, terminate); +#endif /* connect up stdin, stdout and message system */ in = fcb_new(0, TEXT); in->sp = sel_open(0, in, "STDIN", fcb_handler, TEXT, SEL_INPUT); if (tcgetattr(0, &in->t) < 0) { - echo = 0; - in->t_set = 0; + echo = 0; + in->t_set = 0; } else { struct termios t = in->t; t.c_lflag &= ~(ECHO|ECHONL|ICANON); if (tcsetattr(0, TCSANOW, &t) < 0) die("tcsetattr (%d)", errno); in->echo = echo; - in->t_set = 1; + in->t_set = 1; } connect_to_node();