Here I am discussing some problems which I faced while sending SIP Requests with TCP mode enabled.
Regards : Basit { theTechnoCreative(); }
- SIP Request is not hitting the SIP Servlet.
 - Some time it happens that when you write -t t1 (enable transport as TCP) in command your Request does not hit the servlet, but when you are not enable TCP i.e. not writing -t t1 in your command Request works fine.
 - It might be because of some Request headers are missing in your scenario file. When enabling TCP mode, Content-Type header becomes compulsory - check if it is there in your Request header (Courtesy - Sameer Saurabh). Similarly check for other headers as well. Also check for special characters in your scenario file, these should not be there (Courtesy - Sri Narayanan).
 - SIP Request is behaving abnormally in your SIP Servlet.
 - Sometime it happens your Request is reaching to your SIP Servlet but behaving abnormally means not doing the JOB intended to be done.
 - There might be many reasons for this, check the log carefully. The problem that I found was in the Contact header of my Request there is no "transport=tcp" written, which must be there in your Contact header if TCP mode is enabled.
 - For Example : Contact: <sip:127.0.0.1:5060;transport=tcp;fid=server_1> (Just for fun - there is no place called 127.0.0.1)
 - Success log is printing but Request is not sent by SIP Servlet.
 - Suppose in your logs you will see that "Request successfully sent" or something like that as per your logging, but still Request is not received at other end.
 - Again there could be many reasons for this, the one that encountered by me is the one while adding the address of my client in Route Header.
 - For your information, for sending the created request from you SIP Servlet to any client you have to give real client address (IP:PORT) either in Request-Uri Header by using sipServletRequest.setRequestUri("IP:PORT") method or in Route Header by using sipServletRequest.pushRoute(Address/SipUri). Actually pushRoute has two overloaded versions, one takes javax.servlet.sip.Address and the other takes javax.servlet.sip.SipURI.
 - Now if you are using second approach (Route Header) then take care of the real address in hand, if it is in the format sip:IP:Port then use pushRoute(javax.servlet.sip.Address) and if it is in the format IP:Port then use pushRoute(javax.servlet.sip.SipURI) overloaded method. Taking care of this would possibly help you.
 - Runtime exception (java.lang.IllegalStateException: Message cannot be modified.) is coming.
 - While executing SIP Servlet you are encountered with Runtime Exception java.lang.IllegalStateException : Message cannot be modified. Then there could be two (probable more, but I am aware of only two) reasons for this :
 - It seems that when dispatching an ACK response on a 200OK which included a contact without a transport parameter results in this exception. For more info visit : http://old.nabble.com/handling-a-contact-without-a-transport-param-td29462668.html. (Courtesy - Shantnu Jain)
 - Another one which is encountered by me is : Whenever you create a request whether in-session or out-of-session, whether Dialog Initiation Request or Dialog Inside Request, you have to set real client address either in Route header or in Request-Uri header. In UDP mode if you are creating a request with linked session or in-dialog session, then setting real address in Route header or Request-Uri header is not mandatory, it will take it from the session by which you created the request, but in TCP you have to set the real address explicitly.
 
Regards : Basit { theTechnoCreative(); }

