[reSIProcate] Transport logging patch
Dear resip devels,
I have a strong requirement to print sip messages just before it is sent
to transport and just after it has been received by any transport.
Could you please provide any kind of callback from TRansport level?
I have attached quick example, could you please look at it?
Sincerely tez.
diff --git resip/stack/Transport.cxx resip/stack/Transport.cxx
index e11f3a0..cc0fe23 100644
--- resip/stack/Transport.cxx
+++ resip/stack/Transport.cxx
@@ -381,6 +381,11 @@ Transport::stampReceived(SipMessage* message)
}
DebugLog (<< "incoming from: " << message->getSource());
StackLog (<< endl << endl << *message);
+
+ if( getTransportLoggingDecorator() )
+ {
+ getTransportLoggingDecorator()->print( *message );
+ }
}
@@ -453,6 +458,13 @@ resip::operator<<(EncodeStream& strm, const resip::Transport& rhs)
return strm;
}
+Transport::TransportLoggingDecorator* Transport::getTransportLoggingDecorator()
+{
+ return 0 != mLogDecorator.get() ? mLogDecorator.get() : 0;
+}
+
+SharedPtr<Transport::TransportLoggingDecorator> Transport::mLogDecorator;
+
/* ====================================================================
* The Vovida Software License, Version 1.0
*
diff --git resip/stack/Transport.hxx resip/stack/Transport.hxx
index d2573d3..930b6ed 100644
--- resip/stack/Transport.hxx
+++ resip/stack/Transport.hxx
@@ -10,7 +10,7 @@
#include "resip/stack/NameAddr.hxx"
#include "resip/stack/Compression.hxx"
#include "resip/stack/SendData.hxx"
-
+#include "rutil/SharedPtr.hxx"
namespace resip
{
@@ -72,6 +72,16 @@ class FdPollGrp;
class Transport : public FdSetIOObserver
{
public:
+ class TransportLoggingDecorator
+ {
+ public:
+ virtual ~TransportLoggingDecorator(){}
+ virtual void print( SipMessage &msg, const Tuple &source, const Tuple &destination ) = 0;
+ virtual void print( SipMessage &msg ) = 0;
+ };
+
+ static TransportLoggingDecorator* getTransportLoggingDecorator();
+ static void setTransportLoggingDecorator( resip::SharedPtr<TransportLoggingDecorator> d ){ mLogDecorator = d; }
/**
@@ -374,6 +384,7 @@ class Transport : public FdSetIOObserver
friend EncodeStream& operator<<(EncodeStream& strm, const Transport& rhs);
Data mTlsDomain;
+ static resip::SharedPtr<TransportLoggingDecorator> mLogDecorator;
protected:
AfterSocketCreationFuncPtr mSocketFunc;
Compression &mCompression;
diff --git resip/stack/TransportSelector.cxx resip/stack/TransportSelector.cxx
index 62295d5..324d749 100644
--- resip/stack/TransportSelector.cxx
+++ resip/stack/TransportSelector.cxx
@@ -1153,9 +1153,15 @@ TransportSelector::transmit(SipMessage* msg, Tuple& target, SendData* sendData)
// Call back anyone who wants to perform outbound decoration
msg->callOutboundDecorators(source, target,remoteSigcompId);
+ Transport::TransportLoggingDecorator* d = Transport::getTransportLoggingDecorator();
- std::auto_ptr<SendData> send(new SendData(target,
- resip::Data::Empty,
+ if( d )
+ {
+ d->beforeSend( *msg, source, target );
+ }
+
+ std::auto_ptr<SendData> send(new SendData(target,
+ resip::Data::Empty,
msg->getTransactionId(),
remoteSigcompId));