commit - 56d32bb51aa0b660b4a8d53c3d74f3ea0798a1eb
commit + 39273368555fdc9eefcc349ae31a0f21efcac6f2
blob - d3b781af8a9a75fa134602ad7c945738b5f63e44
blob + cc5bd218c4bbae6b431cf8ffc00f01b66f47f57e
--- titan.c
+++ titan.c
err(1, "fseeko");
return fp;
+}
+
+static int
+parse_response(char *r)
+{
+ int code;
+
+ if (r[0] < '0' || r[0] > '9' ||
+ r[1] < '0' || r[1] > '9' ||
+ r[2] != ' ')
+ errx(1, "illegal response");
+
+ code = (r[0] - '0') * 10 + (r[1] - '0');
+ if (code < 10 || code >= 70)
+ errx(1, "invalid response code: %d", code);
+ if (code >= 20 && code < 30)
+ return 0;
+ if (code >= 30 && code < 40) {
+ puts(r + 3);
+ return 0;
+ }
+ warnx("server error: %s", r + 3);
+ return 2;
}
static void __dead
char iribuf[1025];
char resbuf[1025];
char *req;
- int sock, ch;
+ int sock, ch, ret = 0;
if (pledge("stdio rpath tmppath inet dns", NULL) == -1)
err(1, "pledge");
if ((m = memmem(resbuf, w, "\r\n", 2)) == NULL)
errx(1, "invalid reply");
*m = '\0';
- /* XXX parse */
- puts(resbuf);
+ ret = parse_response(resbuf);
break;
}
}
/* fallthrough */
default:
tls_free(ctx);
- return (0);
+ return (ret);
}
}
}