X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=submit%2Fconnect.c;h=7f60f6df4a2ffff93f5055fc8d9f324fd869208e;hb=babd817998d5e7026a3e392024779216ab59ca94;hp=7f5709ea2616b7d5ee1992143418e8ee953ae85f;hpb=47df352e2d1782e33b09d0eacccbc6144a71fcbc;p=moe.git diff --git a/submit/connect.c b/submit/connect.c index 7f5709e..7f60f6d 100644 --- a/submit/connect.c +++ b/submit/connect.c @@ -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"); + log(L_INFO, "Waiting for initial message"); + byte 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); @@ -138,20 +156,36 @@ int main(int argc UNUSED, char **argv UNUSED) 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) + 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