make sure it happens on a login as well
[spider.git] / src / client.c
index 7864e9d13dc70cfab79b90f3f98e118ea7c7e47d..74670241615d1ce8d12fca3fbe3b17b17770b4a2 100644 (file)
@@ -44,7 +44,7 @@
 #define MAXPATHLEN 256
 #endif
 
-#define DEFPACLEN 128
+#define DEFPACLEN 236
 #define MAXPACLEN 236
 #define MAXCALLSIGN 9
 
@@ -300,6 +300,26 @@ void send_msg(fcb_t *f, char let, UC *s, int l)
        f->sp->flags |= SEL_OUTPUT;
 }
 
+/* 
+ * send a file out to the user
+ */
+void send_file(char *name)
+{
+       int i;
+       char buf[MAXPACLEN+1];
+       
+       FILE *f = xopen("data", name, "r");
+       if (f) {
+               while (fgets(buf, paclen, f)) {
+                       i = strlen(buf);
+                       if (i && buf[i-1] == '\n') 
+                               buf[--i] = 0;
+                       send_text(in, buf, i, 1);
+               }
+               fclose(f);
+       }
+}
+
 /*
  * the callback (called by sel_run) that handles all the inputs and outputs
  */
@@ -387,6 +407,8 @@ int fcb_handler(sel_t *sp, int in, int out, int err)
                                default:
                                        if (nl == '\n' && *p == '\r') {   /* ignore \r in telnet mode (ugh) */
                                                p++;
+                                       } else if (nl == '\r' && *p == '\n') {  /* and ignore \n in ax25 mode (double ugh) */
+                                               p++;
                                        } else if (*p == nl) {
                                                if (mp->inp == mp->data)
                                                        *mp->inp++ = ' ';
@@ -450,10 +472,8 @@ int fcb_handler(sel_t *sp, int in, int out, int err)
                                                c = (ch - '0') << 4;
                                        else if (ch >= 'A' && ch <= 'F')
                                                c = (ch - 'A' + 10) << 4;
-                                       else if (ch >= 'a' && ch <= 'a')
-                                               c = (ch - 'a' + 10) << 4;
                                        else {
-                                               dbg(DMSG, "Illegal hex char (%c) received in state %d", ch, mp->state);
+                                               dbg(DMSG, "Illegal hex char (%c) received in state 1", ch);
                                                mp->inp = mp->data;
                                                mp->state = 0;
                                        }
@@ -464,10 +484,8 @@ int fcb_handler(sel_t *sp, int in, int out, int err)
                                                *mp->inp++ = c | (ch - '0');
                                        else if (ch >= 'A' && ch <= 'F')
                                                *mp->inp++ = c | (ch - 'A' + 10);
-                                       else if (ch >= 'a' && ch <= 'a')
-                                               *mp->inp++ = c | (ch - 'a' + 10);
                                        else {
-                                               dbg(DMSG, "Illegal hex char (%c) received in state %d", ch, mp->state);
+                                               dbg(DMSG, "Illegal hex char (%c) received in state 2", ch);
                                                mp->inp = mp->data;
                                        }
                                        mp->state = 0;
@@ -603,6 +621,7 @@ void process_stdin()
                        send_msg(node, 'A', connsort, strlen(connsort));
                        
                        chgstate(CONNECTED);
+                       send_file("connected");
                }
 
                cmsg_callback(mp, 0);
@@ -854,19 +873,7 @@ main(int argc, char *argv[])
 
        /* is this a login? */
        if (eq(call, "LOGIN") || eq(call, "login")) {
-       
-               char buf[MAXPACLEN+1];
-               int r, i;
-               FILE *f = xopen("data", "issue", "r");
-               if (f) {
-                       while (fgets(buf, paclen, f)) {
-                               i = strlen(buf);
-                               if (i && buf[i-1] == '\n') 
-                                       buf[--i] = 0;
-                               send_text(in, buf, i, 1);
-                       }
-                       fclose(f);
-               }
+               send_file("issue");
                signal(SIGALRM, login_timeout);
                alarm(timeout);
                send_text(in, "login: ", 7, 0);
@@ -882,6 +889,7 @@ main(int argc, char *argv[])
                send_msg(node, 'A', connsort, strlen(connsort));
        
                chgstate(CONNECTED);
+               send_file("connected");
        }