r2944 - in trunk/libmsip: include/libmsip source
erik at minisip.org
erik at minisip.org
Mon Nov 20 14:42:25 CET 2006
Author: erik
Date: 2006-11-20 14:42:24 +0100 (Mon, 20 Nov 2006)
New Revision: 2944
Modified:
trunk/libmsip/include/libmsip/SipLayerTransport.h
trunk/libmsip/source/SipLayerTransport.cxx
Log:
- If UDP had not been started, and the stack only ran TCP,
the default was still to try to send the message using UDP which resulted
in a transport error.
This fix makes "getDestination" aware of what servers have been
started. By default, UDP is preferred over TCP, and TCP
over TLS.
I moved "getDestination" from being a static function to a
private member of SipLayerTransport so that it can ask what
servers are running.
Modified: trunk/libmsip/include/libmsip/SipLayerTransport.h
===================================================================
--- trunk/libmsip/include/libmsip/SipLayerTransport.h 2006-11-19 21:51:02 UTC (rev 2943)
+++ trunk/libmsip/include/libmsip/SipLayerTransport.h 2006-11-20 13:42:24 UTC (rev 2944)
@@ -49,10 +49,8 @@
class SipLayerTransport : public SipSMCommandReceiver {
public:
- SipLayerTransport(
- MRef<certificate_chain *> cchain=NULL,
- MRef<ca_db *> cert_db =
-NULL
+ SipLayerTransport( MRef<certificate_chain *> cchain=NULL,
+ MRef<ca_db *> cert_db = NULL
);
virtual ~SipLayerTransport();
@@ -92,6 +90,8 @@
virtual MRef<Socket *> findServerSocket( int32_t type, bool ipv6);
private:
+ bool getDestination(MRef<SipMessage*> pack, string &destAddr,
+ int32_t &destPort, string &destTransport);
void addViaHeader( MRef<SipMessage*> pack, MRef<SipSocketServer*> server, MRef<Socket *> socket, std::string branch );
MRef<StreamSocket *> findStreamSocket(IPAddress&, uint16_t);
bool findSocket(const std::string &transport,
Modified: trunk/libmsip/source/SipLayerTransport.cxx
===================================================================
--- trunk/libmsip/source/SipLayerTransport.cxx 2006-11-19 21:51:02 UTC (rev 2943)
+++ trunk/libmsip/source/SipLayerTransport.cxx 2006-11-20 13:42:24 UTC (rev 2944)
@@ -560,7 +560,7 @@
// Impl RFC 3263 (partly)
-static bool getDestination(MRef<SipMessage*> pack, /*MRef<IPAddress*>*/ string &destAddr,
+bool SipLayerTransport::getDestination(MRef<SipMessage*> pack, string &destAddr,
int32_t &destPort, string &destTransport)
{
if( pack->getType() == SipResponse::type ){
@@ -628,8 +628,20 @@
if( destTransport.length() == 0 ){
if( uri.getProtocolId() == "sips" )
destTransport = "TLS";
- else
- destTransport = "UDP";
+ else{
+ if (findServerSocket(SOCKET_TYPE_UDP, false)){
+ destTransport="UDP";
+ }else
+ if (findServerSocket(SOCKET_TYPE_TCP, false)){
+ destTransport="TCP";
+ }else
+ if (findServerSocket(SOCKET_TYPE_TLS, false)){
+ destTransport = "TLS";
+ }else{
+ merr << "SipMessateTransport: Warning: could not find any supported transport - trying UDP"<<endl;
+ destTransport = "UDP"; // this should not happen
+ }
+ }
}
return lookupDestIpPort(uri, destTransport,
destAddr, destPort);
More information about the Minisip-devel
mailing list