]> git.ipfire.org Git - thirdparty/asterisk.git/commit
Do not use a FILE handle when doing SIP TCP reads.
authorMark Michelson <mmichelson@digium.com>
Fri, 12 Oct 2012 16:20:15 +0000 (16:20 +0000)
committerMark Michelson <mmichelson@digium.com>
Fri, 12 Oct 2012 16:20:15 +0000 (16:20 +0000)
commitccf01fbfdc1e33384753719065c8a9e01eb80957
tree1d26797f7c6b92984fac2be90bc0c2ba843ca4bb
parent963f94e99f6cd31be77caf2362a70aec40a39fd2
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

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@374914 65c4cc65-6c06-0410-ace0-fbb531ad65f3
channels/chan_sip.c
include/asterisk/tcptls.h
main/tcptls.c