ssl_iostream_unref(&ssl_io);
}
-static int openssl_iostream_bio_output(struct ssl_iostream *ssl_io)
+static int openssl_iostream_bio_output_real(struct ssl_iostream *ssl_io)
{
size_t bytes, max_bytes;
ssize_t sent;
fully succeed or completely fail due to some error. */
sent = o_stream_send(ssl_io->plain_output, buffer, bytes);
if (sent < 0) {
- i_assert(ssl_io->plain_output->stream_errno != 0);
- i_free(ssl_io->plain_stream_errstr);
- ssl_io->plain_stream_errstr =
- i_strdup(o_stream_get_error(ssl_io->plain_output));
- ssl_io->plain_stream_errno =
- ssl_io->plain_output->stream_errno;
- ssl_io->closed = TRUE;
result = -1;
break;
}
return result;
}
+static int openssl_iostream_bio_output(struct ssl_iostream *ssl_io)
+{
+ int ret;
+
+ ret = openssl_iostream_bio_output_real(ssl_io);
+ if (ret < 0) {
+ i_assert(ssl_io->plain_output->stream_errno != 0);
+ i_free(ssl_io->plain_stream_errstr);
+ ssl_io->plain_stream_errstr =
+ i_strdup(o_stream_get_error(ssl_io->plain_output));
+ ssl_io->plain_stream_errno =
+ ssl_io->plain_output->stream_errno;
+ ssl_io->closed = TRUE;
+ }
+ return ret;
+}
+
static ssize_t
openssl_iostream_read_more(struct ssl_iostream *ssl_io,
enum openssl_iostream_sync_type type, size_t wanted,