Index: trunk/ntripserver/NtripLinuxServer.c
===================================================================
--- trunk/ntripserver/NtripLinuxServer.c	(revision 44)
+++ trunk/ntripserver/NtripLinuxServer.c	(revision 45)
@@ -41,5 +41,5 @@
  */
 
-/* $Id: NtripLinuxServer.c,v 1.15 2006/04/27 09:44:27 stoecker Exp $
+/* $Id: NtripLinuxServer.c,v 1.16 2006/05/24 10:12:52 stoecker Exp $
  * Changes - Version 0.7
  * Sep 22 2003  Steffen Tschirpke <St.Tschirpke@actina.de>
@@ -77,6 +77,19 @@
  *
  * Changes - Version 0.14
- * Apr 27 2006  Dirk Stoecker <soft@dstoecker.de>
+ * May 16 2006  Andrea Stuerze <andrea.stuerze@bkg.bund.de>
+ *           - bug fix in base64_encode-function
+ *
+ * Changes - Version 0.15
+ * Jun 02 2006  Georg Weber <georg.weber@bkg.bund.de>
+ *           - modification for SISNeT 3.1 protocol
+ *
+ * Changes - Version 0.16
+ * Jul 06 2006 Andrea Stuerze <andrea.stuerze@bkg.bund.de>
+ *           - more flexible caster's response
+ *
+ * Changes - Version 0.17
+ * Jul 27 2006  Dirk Stoecker <soft@dstoecker.de>
  *           - fixed some problems with caster download
+ *           - some minor cosmetic changes
  *
  */
@@ -108,5 +121,5 @@
 CASTER = 6};
 
-#define VERSION         "NTRIP NtripServerLinux/0.13"
+#define VERSION         "NTRIP NtripServerLinux/0.17"
 #define BUFSZ           1024
 
@@ -129,10 +142,10 @@
 static const char *filepath    = "/dev/stdin";
 static enum MODE mode          = INFILE;
-static int sisnetv3            = 0;
+static int sisnet              = 31;
 static int gpsfd               = -1;
 
 /* Forward references */
 static int openserial(const char * tty, int blocksz, int baud);
-static void send_receive_loop(int sock, int fd, int sisnet);
+static void send_receive_loop(int sock, int fd);
 static void usage(int);
 static int encode(char *buf, int size, const char *user, const char *pwd);
@@ -227,10 +240,13 @@
       break;
     case 'V':
-      if(!strcmp("3.0", optarg)) sisnetv3 = 1;
-      else if(strcmp("2.1", optarg))
+      if(!strcmp("3.0", optarg)) sisnet = 30;
+      else if(!strcmp("3.1", optarg)) sisnet = 31;
+      else if(!strcmp("2.1", optarg)) sisnet = 20;
+      else
       {
         fprintf(stderr, "ERROR: unknown SISNeT version %s\n", optarg);
         usage(-2);
       }
+      break;
     case 'b':                  /* serial ttyin speed */
       ttybaud = atoi(optarg);
@@ -341,6 +357,5 @@
   case INFILE:
     {
-      gpsfd = open(filepath, O_RDONLY);
-      if(!gpsfd)
+      if((gpsfd = open(filepath, O_RDONLY)) < 0)
       {
         perror("ERROR: opening input file");
@@ -406,5 +421,5 @@
       inport, stream_name ? "stream = " : "", stream_name ? stream_name : "",
       initfile ? ", initfile = " : "", initfile ? initfile : "",
-      bindmode ? " binding mode" : "");
+      bindmode ? "binding mode" : "");
 
       if(bindmode)
@@ -533,5 +548,5 @@
       char buffer[1024];
 
-      i = snprintf(buffer, sizeof(buffer), sisnetv3 ? "AUTH,%s,%s\r\n"
+      i = snprintf(buffer, sizeof(buffer), sisnet >= 30 ? "AUTH,%s,%s\r\n"
         : "AUTH,%s,%s", sisnetuser, sisnetpassword);
       if((send(gpsfd, buffer, (size_t)i, 0)) != i)
@@ -540,5 +555,5 @@
         exit(1);
       }
-      i = sisnetv3 ? 7 : 5;
+      i = sisnet >= 30 ? 7 : 5;
       if((j = recv(gpsfd, buffer, i, 0)) != i && strncmp("*AUTH", buffer, 5))
       {
@@ -553,4 +568,12 @@
         fprintf(stderr, "\n");
         exit(1);
+      }
+      if(sisnet >= 31)
+      {
+        if((send(gpsfd, "START\r\n", 7, 0)) != i)
+        {
+          perror("ERROR: sending start command");
+          exit(1);
+        }
       }
     }
@@ -615,5 +638,5 @@
     nBufferBytes = recv(sock_id, szSendBuffer, sizeof(szSendBuffer), 0);
     szSendBuffer[nBufferBytes] = '\0';
-    if(strcmp(szSendBuffer, "OK\r\n"))
+    if(!strstr(szSendBuffer, "OK"))
     {
       char *a;
@@ -629,10 +652,10 @@
     }
     printf("connection successfull\n");
-    send_receive_loop(sock_id, gpsfd, mode == SISNET);
+    send_receive_loop(sock_id, gpsfd);
   }
   exit(0);
 }
 
-static void send_receive_loop(int sock, int fd, int sisnet)
+static void send_receive_loop(int sock, int fd)
 {
   char buffer[BUFSZ] = { 0 };
@@ -647,5 +670,5 @@
     if(!nBufferBytes)
     {
-      if(sisnet)
+      if(mode == SISNET && sisnet <= 30)
       {
         int i;
@@ -655,5 +678,5 @@
         select(0, 0, 0, 0, &tv);
         memcpy(sisnetbackbuffer, buffer, sizeof(sisnetbackbuffer));
-        i = (sisnetv3 ? 5 : 3);
+        i = (sisnet >= 30 ? 5 : 3);
         if((send(gpsfd, "MSG\r\n", i, 0)) != i)
         {
@@ -667,4 +690,5 @@
       {
         printf("WARNING: no data received from input\n");
+	sleep(3);
         continue;
       }
@@ -676,5 +700,5 @@
       /* we can compare the whole buffer, as the additional bytes
          remain unchanged */
-      if(sisnet && !memcmp(sisnetbackbuffer, buffer, sizeof(sisnetbackbuffer)))
+      if(mode == SISNET && !memcmp(sisnetbackbuffer, buffer, sizeof(sisnetbackbuffer)))
       {
         nBufferBytes = 0;
@@ -885,5 +909,5 @@
   fprintf(stderr, "    -u username\n");
   fprintf(stderr, "    -l password\n");
-  fprintf(stderr, "    -V version [2.1 or 3.0] (default: 2.1)\n");
+  fprintf(stderr, "    -V version [2.1, 3.0 or 3.1] (default: 3.1)\n");
   fprintf(stderr, "  Mode = caster:\n");
   fprintf(stderr, "    -P SourceCaster port (default: %d)\n", NTRIP_PORT);
