AST-2014-007: Fix of fix to allow AMI and SIP TCP to send messages.

ASTERISK-23673 #close
Reported by: Richard Mudgett

Review: https://reviewboard.asterisk.org/r/3617/
........

Merged revisions 416066 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 416067 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 416070 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@416071 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Richard Mudgett
2014-06-13 05:16:34 +00:00
parent 9ec5064383
commit 13e697f8c0
5 changed files with 46 additions and 2 deletions

View File

@@ -77,6 +77,8 @@ struct ast_tcptls_stream {
* feature to work correctly.
*/
int timeout;
/*! TRUE if stream can exclusively wait for fd input. */
int exclusive_input;
};
void ast_tcptls_stream_set_timeout_disable(struct ast_tcptls_stream *stream)
@@ -102,6 +104,13 @@ void ast_tcptls_stream_set_timeout_sequence(struct ast_tcptls_stream *stream, st
stream->timeout = timeout;
}
void ast_tcptls_stream_set_exclusive_input(struct ast_tcptls_stream *stream, int exclusive_input)
{
ast_assert(stream != NULL);
stream->exclusive_input = exclusive_input;
}
/*!
* \internal
* \brief fopencookie()/funopen() stream read function.
@@ -151,6 +160,11 @@ static HOOK_T tcptls_stream_read(void *cookie, char *buf, LEN_T size)
ast_debug(1, "TLS clean shutdown alert reading data\n");
return 0;
case SSL_ERROR_WANT_READ:
if (!stream->exclusive_input) {
/* We cannot wait for data now. */
errno = EAGAIN;
return -1;
}
while ((ms = ast_remaining_ms(start, stream->timeout))) {
res = ast_wait_for_input(stream->fd, ms);
if (0 < res) {
@@ -202,7 +216,8 @@ static HOOK_T tcptls_stream_read(void *cookie, char *buf, LEN_T size)
for (;;) {
res = read(stream->fd, buf, size);
if (0 <= res) {
if (0 <= res || !stream->exclusive_input) {
/* Got data or we cannot wait for it. */
return res;
}
if (errno != EINTR && errno != EAGAIN) {