mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-18 07:48:14 +00:00
Do not use a FILE handle when doing SIP TCP reads.
This is used to solve an issue where a poll on a file descriptor does not necessarily correspond to the readiness of a FILE handle to be read. This change makes it so that for TCP connections, we do a recv() on the file descriptor instead. Because TCP does not guarantee that an entire message or even just one single message will arrive during a read, a loop has been introduced to ensure that we only attempt to handle a single message at a time. The tcptls_session_instance structure has also had an overflow buffer added to it so that if more than one TCP message arrives in one go, there is a place to throw the excess. Huge thanks goes out to Walter Doekes for doing extensive review on this change and finding edge cases where code could fail. (closes issue ASTERISK-20212) reported by Phil Ciccone Review: https://reviewboard.asterisk.org/r/2123 ........ Merged revisions 374905 from http://svn.asterisk.org/svn/asterisk/branches/1.8 ........ Merged revisions 374906 from http://svn.asterisk.org/svn/asterisk/branches/10 ........ Merged revisions 374914 from http://svn.asterisk.org/svn/asterisk/branches/11 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@374924 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -155,6 +155,12 @@ struct ast_tcptls_session_instance {
|
||||
int client;
|
||||
struct ast_sockaddr remote_address;
|
||||
struct ast_tcptls_session_args *parent;
|
||||
/* Sometimes, when an entity reads TCP data, multiple
|
||||
* logical messages might be read at the same time. In such
|
||||
* a circumstance, there needs to be a place to stash the
|
||||
* extra data.
|
||||
*/
|
||||
struct ast_str *overflow_buf;
|
||||
};
|
||||
|
||||
#if defined(HAVE_FUNOPEN)
|
||||
|
||||
Reference in New Issue
Block a user