X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=submit%2Fconnect.c;h=522c9c085b5881935623e1868dde7dfe6b01f0b1;hb=6cba59728737842b32077102280642d269b78d90;hp=7f5709ea2616b7d5ee1992143418e8ee953ae85f;hpb=47df352e2d1782e33b09d0eacccbc6144a71fcbc;p=moe.git diff --git a/submit/connect.c b/submit/connect.c index 7f5709e..522c9c0 100644 --- a/submit/connect.c +++ b/submit/connect.c @@ -74,7 +74,7 @@ tls_verify_cert(gnutls_session_t s) /* XXX: Neither we check host name */ /* Check certificate purpose */ - byte purp[256]; + char purp[256]; 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"); + 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); @@ -137,21 +155,37 @@ int main(int argc UNUSED, char **argv UNUSED) 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