-static void ssh_protocol(unsigned char *in, int inlen, int ispkt);
-static void ssh_size(void);
+ crBegin(sp->gd_line);
+
+#ifdef FWHACK
+ /* Should wait for "SSH-" */
+#endif
+ sp->sversion = smalloc(16); /* enough for "SSH-1.5-1.2.27\n" */
+ sp->sversion_space = 16;
+ sp->sversion_len = 0;
+ do {
+
+ while (datalen == 0)
+ crReturnV(sp->gd_line);
+ eol = memchr(data, '\n', datalen);
+ if (eol != NULL)
+ fraglen = eol + 1 - data; /* include \n */
+ if (sp->sversion_len + fraglen > sp->sversion_space) {
+ /* FIXME Sanity-check length */
+ srealloc(sp->sversion, sp->sversion_len + fraglen);
+ sp->sversion_space = sp->sversion_len + fraglen;
+ }
+ memcpy(sp->sversion + sp->sversion_len, data, fraglen);
+ data += fraglen; datalen -= fraglen;
+ } while (eol == NULL);
+ sp->sversion[sp->sversion_len - 1] = '\0';
+
+ if (sp->sversion_len < 4 || memcmp(sp->sversion, "SSH-", 4) != 0)
+ /* XXX explode! */;
+
+ /*
+ * We ignore the rest of the banner on the grounds that we only
+ * speak SSH 1.5 anyway. If the server can't, that's its problem.
+ */
+
+ s_write(sess, (unsigned char *)vstring, strlen(vstring));