aboutsummaryrefslogtreecommitdiffstats
path: root/main/tcptls.c
AgeCommit message (Collapse)AuthorFilesLines
2009-10-22Merged revisions 225445 via svnmerge from dvossel1-27/+41
https://origsvn.digium.com/svn/asterisk/trunk ........ r225445 | dvossel | 2009-10-22 14:55:51 -0500 (Thu, 22 Oct 2009) | 50 lines SIP TCP/TLS: move client connection setup/write into tcp helper thread, various related locking/memory fixes. What this patch fixes 1.Moves sip TCP/TLS connection setup into the TCP helper thread: Connection setup takes awhile and before this it was being done while holding the monitor lock. 2.Moves TCP/TLS writing to the TCP helper thread: Through the use of a packet queue and an alert pipe, the TCP helper thread can now be woken up to write data as well as read data. 3.Locking error: sip_xmit returned an XMIT_ERROR without giving up the tcptls_session lock. This lock has been completely removed from sip_xmit and placed in the new sip_tcptls_write() function. 4.Memory leak: When creating a tcptls_client the tls_cfg was alloced but never freed unless the tcptls_session failed to start. Now the session_args for a sip client are an ao2 object which frees the tls_cfg on destruction. 5.Pointer to stack variable: During sip_prepare_socket the creation of a client's ast_tcptls_session_args was done on the stack and stored as a pointer in the newly created tcptls_session. Depending on the events that followed, there was a slight possibility that pointer could have been accessed after the stack returned. Given the new changes, it is always accessed after the stack returns which is why I found it. Notable code changes 1.I broke tcptls.c's ast_tcptls_client_start() function into two functions. One for creating and allocating the new tcptls_session, and a separate one for starting and handling the new connection. This allowed me to create the tcptls_session, launch the helper thread, and then establish the connection within the helper thread. 2.Writes to a tcptls_session are now done within the helper thread. This is done by using an alert pipe to wake up the thread if new data needs to be sent. The thread's sip_threadinfo object contains the alert pipe as well as the packet queue. 3.Since the threadinfo object contains the alert pipe, it must now be accessed outside of the helper thread for every write (queuing of a packet). For easy lookup, I moved the threadinfo objects from a linked list to an ao2_container. (closes issue #13136) Reported by: pabelanger Tested by: dvossel, whys (closes issue #15894) Reported by: dvossel Tested by: dvossel Review: https://reviewboard.asterisk.org/r/380/ ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@225490 f38db490-d61c-443f-a65b-d21fe96a405b
2009-09-24Merged revisions 220365 via svnmerge from dvossel1-2/+7
https://origsvn.digium.com/svn/asterisk/trunk ........ r220365 | dvossel | 2009-09-24 15:37:20 -0500 (Thu, 24 Sep 2009) | 8 lines fixes tcptls_session memory leak caused by ref count error (closes issue #15939) Reported by: dvossel Review: https://reviewboard.asterisk.org/r/375/ ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@220371 f38db490-d61c-443f-a65b-d21fe96a405b
2009-03-09Merged revisions 180719 via svnmerge from jpeeler1-9/+0
https://origsvn.digium.com/svn/asterisk/trunk ........ r180719 | jpeeler | 2009-03-09 15:58:17 -0500 (Mon, 09 Mar 2009) | 16 lines Add Doxygen documentation for API changes from 1.6.0 to 1.6.1 Copied from my review board description: This is a continuation of the API changes documentation started for describing changes between releases. Most of the API changes were pretty simple needing only to be brought to attention via the new "Asterisk API Changes" list. However, if you see anything that needs further explanation feel free to supplement what is there. The current method of documenting is to add (in the header file): \version <ver number> <description of changes> and then to add the function to the change list in doxyref.h on the AstAPIChanges page. I also made sure all the functions that were newly added were tagged with \since 1.6.1. I think this is a good habit to start both for the historical aspect as well as for the future ability to easily add a "New Asterisk API" page. Review: http://reviewboard.digium.com/r/190/ ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@180740 f38db490-d61c-443f-a65b-d21fe96a405b
2009-02-04Merged revisions 173458 via svnmerge from tilghman1-1/+3
https://origsvn.digium.com/svn/asterisk/trunk ........ r173458 | tilghman | 2009-02-04 12:48:06 -0600 (Wed, 04 Feb 2009) | 9 lines When using a socket as a FILE *, the stdio functions will sometimes try to do an fseek() on the stream, which is an invalid operation for a socket. Turning off buffering explicitly lets the stdio functions know they cannot do this, thus avoiding a potential error. (closes issue #14400) Reported by: fnordian Patches: tcptls.patch uploaded by fnordian (license 110) ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@173459 f38db490-d61c-443f-a65b-d21fe96a405b
2009-01-21Merged revisions 169620 via svnmerge from russell1-1/+1
https://origsvn.digium.com/svn/asterisk/trunk ........ r169620 | russell | 2009-01-21 04:26:07 -0600 (Wed, 21 Jan 2009) | 10 lines Fix a regression in TCP support. This patch fixes a problem that caused chan_sip to think that every open TCP session was to a remote address of 0.0.0.0:0. (closes issue #14287) Reported by: jamesgolovich Patches: bug-14287.diff.txt uploaded by jamesgolovich (license 176) ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@169622 f38db490-d61c-443f-a65b-d21fe96a405b
2009-01-17Merged revisions 169080 via svnmerge from twilson1-4/+4
https://origsvn.digium.com/svn/asterisk/trunk ........ r169080 | twilson | 2009-01-16 19:56:36 -0600 (Fri, 16 Jan 2009) | 8 lines Fix qualify for TCP peer (closes issue #14192) Reported by: pabelanger Patches: asterisk-bug14192.diff.txt uploaded by jamesgolovich (license 176) Tested by: jamesgolovich ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@169082 f38db490-d61c-443f-a65b-d21fe96a405b
2008-12-12Merged revisions 163670 via svnmerge from russell1-61/+61
https://origsvn.digium.com/svn/asterisk/trunk ........ r163670 | russell | 2008-12-12 12:45:03 -0600 (Fri, 12 Dec 2008) | 6 lines Rename a number of tcptls_session variables. There are no functional changes here. The name "ser" was used in a lot of places. However, it is a relic from when the struct was a server_instance, not a session_instance. It was renamed since it represents both a server or client connection. ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@163672 f38db490-d61c-443f-a65b-d21fe96a405b
2008-10-19Merged revisions 151101 via svnmerge from kpfleming1-121/+136
https://origsvn.digium.com/svn/asterisk/trunk ........ r151101 | kpfleming | 2008-10-19 22:11:28 +0300 (Sun, 19 Oct 2008) | 13 lines cleaup of the TCP/TLS socket API: 1) rename 'struct server_args' to 'struct ast_tcptls_session_args', to follow coding guidelines 2) make ast_make_file_from_fd() static and rename it to something that indicates what it really is for (again coding guidelines) 3) rename address variables inside 'struct ast_tcptls_session_args' to be more descriptive (dare i say it... coding guidelines) 4) change ast_tcptls_client_start() to use the new 'remote_address' field of the session args for the destination of the connection, and use the 'local_address' field to bind() the socket to the proper source address, if one is supplied 5) in chan_sip, ensure that we pass in the PP address we are bound to when creating outbound (client) connections, so that our connections will appear from the correct address ........ git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.1@151135 f38db490-d61c-443f-a65b-d21fe96a405b
2008-06-18Fix a crash in tcp and tls connections related to reference counts.bbryant1-1/+2
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@123692 f38db490-d61c-443f-a65b-d21fe96a405b
2008-06-17Updates all usages of ast_tcptls_session_instance to be managed by reference ↵bbryant1-9/+27
counts so that they only get destroyed when all threads are done using them, and memory does not get free'd causing strange issues with SIP. This code was originally written by russellb in the team/group/issue_11972/ branch. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@123546 f38db490-d61c-443f-a65b-d21fe96a405b
2008-03-12Rename ast_tcptls_server_instance to session_instance, since this pertains torussell1-7/+7
server and client usage. git-svn-id: http://svn.digium.com/svn/asterisk/trunk@108295 f38db490-d61c-443f-a65b-d21fe96a405b
2008-03-04add a destroy API call for a server instancerussell1-0/+6
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@105804 f38db490-d61c-443f-a65b-d21fe96a405b
2008-03-04More public API name changes to use an appropriate ast_ prefixrussell1-7/+7
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@105785 f38db490-d61c-443f-a65b-d21fe96a405b
2008-03-04Rename public object server_instance to ast_tcptls_server_instancerussell1-6/+6
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@105773 f38db490-d61c-443f-a65b-d21fe96a405b
2008-02-05Get rid of any remaining ast_verbose calls in the code in favor of mmichelson1-8/+7
ast_verb (closes issue #11934) Reported by: mvanbaak Patches: 20080205_astverb-2.diff.txt uploaded by mvanbaak (license 7) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@102525 f38db490-d61c-443f-a65b-d21fe96a405b
2008-01-23Fix tcptls build when openssl isn't installedrussell1-6/+6
(closes issue #11813) Reported by: tzafrir Patches: asterisk-tcptls.diff.txt uploaded by jamesgolovich (license 176) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@99922 f38db490-d61c-443f-a65b-d21fe96a405b
2008-01-22Doxygen updatesoej1-25/+22
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@99464 f38db490-d61c-443f-a65b-d21fe96a405b
2008-01-18Merge changes from team/group/sip-tcptlsrussell1-0/+452
This set of changes introduces TCP and TLS support for chan_sip. There are various new options in configs/sip.conf.sample that are used to enable these features. Also, there is a document, doc/siptls.txt that describes some things in more detail. This code was implemented by Brett Bryant and James Golovich. It was reviewed by Joshua Colp and myself. A number of other people participated in the testing of this code, but since it was done outside of the bug tracker, I do not have their names. If you were one of them, thanks a lot for the help! (closes issue #4903, but with completely different code that what exists there.) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@99085 f38db490-d61c-443f-a65b-d21fe96a405b