]> mj.ucw.cz Git - moe.git/blobdiff - submit/connect.c
Replaced FREE_PASCAL_RTE by a generic EXIT_CODE_HOOK.
[moe.git] / submit / connect.c
index 7f5709ea2616b7d5ee1992143418e8ee953ae85f..522c9c085b5881935623e1868dde7dfe6b01f0b1 100644 (file)
@@ -74,7 +74,7 @@ tls_verify_cert(gnutls_session_t s)
   /* XXX: Neither we check host name */
 
   /* Check certificate purpose */
   /* XXX: Neither we check host name */
 
   /* Check certificate purpose */
-  byte purp[256];
+  char purp[256];
   int purpi = 0;
   do
     {
   int purpi = 0;
   do
     {
@@ -121,6 +121,24 @@ int main(int argc UNUSED, char **argv UNUSED)
   if (connect(sk, (struct sockaddr *) &sa, sizeof(sa)) < 0)
     die("Cannot connect: %m");
 
   if (connect(sk, (struct sockaddr *) &sa, sizeof(sa)) < 0)
     die("Cannot connect: %m");
 
+  log(L_INFO, "Waiting for initial message");
+  char msg[256];
+  int i = 0;
+  do
+    {
+      if (i >= (int)sizeof(msg))
+       die("Response too long");
+      int c = read(sk, msg+i, sizeof(msg)-i);
+      if (c <= 0)
+       die("Connection broken");
+      i += c;
+    }
+  while (msg[i-1] != '\n');
+  msg[i-1] = 0;
+  if (msg[0] != '+')
+    die("%s", msg);
+  log(L_INFO, "%s", msg);
+
   gnutls_session_t s;
   gnutls_init(&s, GNUTLS_CLIENT);
   gnutls_set_default_priority(s);
   gnutls_session_t s;
   gnutls_init(&s, GNUTLS_CLIENT);
   gnutls_set_default_priority(s);
@@ -137,21 +155,37 @@ int main(int argc UNUSED, char **argv UNUSED)
   log(L_INFO, "Session established");
   for (;;)
     {
   log(L_INFO, "Session established");
   for (;;)
     {
-      byte buf[1024];
-      if (!fgets(buf, sizeof(buf), stdin))
-       break;
-      int len = strlen(buf);
-      err = gnutls_record_send(s, buf, len); TLS_CHECK(gnutls_record_send);
-      err = gnutls_record_recv(s, buf, len); TLS_CHECK(gnutls_record_recv);
-      if (!err)
+      char buf[1024];
+      do
+       {
+         if (!fgets(buf, sizeof(buf), stdin))
+           goto done;
+         int len = strlen(buf);
+         err = gnutls_record_send(s, buf, len); TLS_CHECK(gnutls_record_send);
+       }
+      while (buf[0] != '\n');
+      int last = 0;
+      for (;;)
        {
        {
-         log(L_INFO, "Connection closed");
-         break;
+         err = gnutls_record_recv(s, buf, sizeof(buf)); TLS_CHECK(gnutls_record_recv);
+         if (!err)
+           {
+             log(L_INFO, "Connection closed");
+             break;
+           }
+         fwrite(buf, 1, err, stdout);
+         for (int i=0; i<err; i++)
+           {
+             if (buf[i] == '\n' && last == '\n')
+               goto next;
+             last = buf[i];
+           }
        }
        }
-      fwrite(buf, 1, err, stdout);
+next:
       fflush(stdout);
     }
 
       fflush(stdout);
     }
 
+done:
   gnutls_bye(s, GNUTLS_SHUT_RDWR);
   close(sk);
   gnutls_deinit(s);
   gnutls_bye(s, GNUTLS_SHUT_RDWR);
   close(sk);
   gnutls_deinit(s);