On Thu, Oct 30, 2008 at 09:17:07PM +0800, Peter Cai wrote:
Hi all,
I found twisted have a module called SIP which implements parts of RFC3261, Session Initial Protocol.
Most of the SIP code in Twisted is based on the obsolete RFC 2543. A more compliant version has been developed here: http://divmod.org/trac/browser/trunk/Sine At some point this code will be moved into Twisted.
As I am going to write an experimental SIP server, this module seems to be very useful for me.
But, one problem : it's based on UDP.
I skimmed the code and I think maybe I can "Cut and Copy" some code of this module to implement my own TCP SIP server.
It's more complicated than that -- the protocol behaviour for SIP is different when transported over TCP instead of UDP. (See section 10.5.2 in RFC 3261.) But much of the code can be shared between the two.
But the idea of "cut and copy" is really annoying.
What will you do in my situation?
Contribute to Sine -- sine.sip.SIPTransport inherits from DatagramProtocol and so is UDP-only at the moment. Ideally, most of its behaviour could move to a mixin that a TCP SIP transport class could inherit from as well.
BTW, if you are going to write a protocol which supports both UDP and TCP,
what is your design going to be like?
As I described above, write a protocol class for UDP and for TCP that inherits from a common mixin class.