]> the.earth.li Git - sersniff.git/blobdiff - sersniff.c
Updated version to 0.0.5
[sersniff.git] / sersniff.c
index f12faf44de92841c28e7e339912713f4be6b7eb0..2535be7e0dea2a3c5f5dc73b7bec73592588162c 100644 (file)
@@ -4,6 +4,7 @@
        working out the protocol between a Nokia 9000i and NServer.
        Written by Jonathan McDowell for Project Purple, 1999
        Extra stuff by Cornelius Cook (cook@cpoint.net), 1999
+       OSX support and EOF support by Pete Baker (peteb4ker@gmail.com), 2011
 
        This program is free software; you can redistribute it and/or
        modify it under the terms of the GNU General Public License
        07/09/1999 - Started writing.
        21Nov1999  - Cook: added command line support and extra error checking
        27Nov1999  - Cook: added select, timer & changed output look
+       24Jun2011 - Baker: Added OSX support. Added EOF character support
 */
 
-#define VERSION "0.0.4"
+#define VERSION "0.0.5"
 
 #include <stdio.h>
 #include <string.h>
@@ -59,8 +61,9 @@ int openport(const char *device, speed_t baud, int setup)
 
        if (setup) {
                bzero(&serparams, sizeof(serparams));
-       
-               serparams.c_cflag=baud | CLOCAL | CS8 | CREAD;
+
+               cfsetspeed(&serparams, baud);
+               serparams.c_cflag |= CLOCAL | CS8 | CREAD;
 
                if (tcflush(filedes, TCIFLUSH)) {
                        fprintf(stderr,"%s: ",device);
@@ -125,10 +128,9 @@ void outputchar(unsigned char c, int port, int alpha,
        disp_outputstr(port, todisplay, usec_threshold, usec_waited, name1, name2);
 }
 
-void mainloop(int port1, int port2, int silent, int alpha, long usec_threshold, char *name1, char *name2, char *format)
+void mainloop(int port1, int port2, int silent, int alpha, int quit_on_eof, long usec_threshold, char *name1, char *name2, char *format)
 {
        unsigned char c1, c2;
-       int last;
        int rc;
        fd_set rfds;
        fd_set efds;
@@ -142,7 +144,6 @@ void mainloop(int port1, int port2, int silent, int alpha, long usec_threshold,
        /* need the largest fd for the select call */
        biggestfd=port1 > port2 ? port1 : port2;
        biggestfd++;
-       last=0;
 
        while (!quit) {
                /* reset the select set */
@@ -180,7 +181,7 @@ void mainloop(int port1, int port2, int silent, int alpha, long usec_threshold,
                                timediff=0;
                                if (!silent) write(port2,&c1,1);
                        }
-                       if (rc==0) {
+                       if (rc==0 && quit_on_eof==1) {
                                /* EOF? */
                                quit=1;
                        }
@@ -197,7 +198,7 @@ void mainloop(int port1, int port2, int silent, int alpha, long usec_threshold,
                                timediff=0;
                                if (!silent) write(port1,&c2,1);
                        }       
-                       if (rc==0) {
+                       if (rc==0 && quit_on_eof==1) {
                                /* EOF? */
                                quit=1;
                        }
@@ -247,6 +248,7 @@ void usage()
 "                      (default is %d)\n"
 "-s            Silent - don't pass data from port1 <=> port2,\n"
 "                      just display what we see from them.\n"
+"-z            Don't quit when an EOF character is received.\n"
 ,VERSION,USEC);
        exit(1);
 }
@@ -267,9 +269,10 @@ int main(int argc, char *argv[])
        int silent=0;
        long usec_threshold=USEC;
        int setup_port=1;
+       int quit_on_eof=1;
        char *format=NULL;
 
-       while ((optret=getopt(argc,argv,"hxsni:l:o:c:b:w:1:2:f:"))!=EOF) {
+       while ((optret=getopt(argc,argv,"hxsnzi:l:o:c:b:w:1:2:f:"))!=EOF) {
                switch (optret) {
                case '?': case 'h': case ':':
                        usage();
@@ -328,6 +331,9 @@ int main(int argc, char *argv[])
                case 'f':
                        format=strdup(optarg);
                        break;
+               case 'z':
+                       quit_on_eof=0;
+                       break;
                }
        }
 
@@ -359,7 +365,7 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
-       mainloop(port1, port2, silent, show_alpha, usec_threshold, name1, name2, format);
+       mainloop(port1, port2, silent, show_alpha, quit_on_eof, usec_threshold, name1, name2, format);
 
        /* Clean up */
        if (dev1) free(dev1);