27#if defined(WIN32) && !defined(__GNUC__)
28#pragma warning( disable : 4355 )
35#define RESIPROCATE_SUBSYSTEM ReconSubsystem::RECON
38 std::shared_ptr<ConfigParse> configParse)
40 mMediaStackAdapter(mediaStackAdapter),
41 mConfigParse(configParse),
43 mCurrentConversationHandle(1),
44 mCurrentParticipantHandle(1)
48 std::vector<int> intervals;
49 if(configParse->getConfigValue(
"KeyframeIntervals", intervals))
51 mKeyframeIntervals = intervals;
60 InfoLog(<<
"ConversationManager::~ConversationManager destroying BridgeMixer...");
62 InfoLog(<<
"ConversationManager::~ConversationManager destroying MediaStackAdapter...");
63 mMediaStackAdapter.reset();
64 InfoLog(<<
"ConversationManager::~ConversationManager complete.");
76 return "MediaResource";
78 return "RemoteIMPager";
80 return "RemoteIMSession";
89 mUserAgent = userAgent;
90 mMediaStackAdapter->setUserAgent(userAgent);
94ConversationManager::shutdown()
96 InfoLog(<<
"ConversationManager::shutting down. Ending any active conversations and participants...");
101 ConversationMap tempConvs = mConversations;
102 ConversationMap::iterator i;
103 for(i = tempConvs.begin(); i != tempConvs.end(); i++)
105 InfoLog(<<
"Destroying conversation: " << i->second->getHandle());
106 i->second->destroy();
110 ParticipantMap tempParts = mParticipants;
111 ParticipantMap::iterator j;
112 for(j = tempParts.begin(); j != tempParts.end(); j++)
114 InfoLog(<<
"Destroying participant: " << j->second->getParticipantHandle());
115 j->second->destroyParticipant();
118 if(mMediaStackAdapter.get())
120 InfoLog(<<
"ConversationManager::shutting down MediaStackAdapter...");
121 mMediaStackAdapter->shutdown();
124 InfoLog(<<
"ConversationManager::shutdown.");
128ConversationManager::process()
132 mMediaStackAdapter->process();
139 if (mShuttingDown)
return 0;
164 if (mShuttingDown)
return 0;
176 if (mShuttingDown)
return 0;
188 if (mShuttingDown)
return 0;
200 if (mShuttingDown)
return 0;
212 if (mShuttingDown)
return 0;
223 WarningLog(<<
"createLocalParticipant called when local audio support is disabled.");
331 post(cmd, std::chrono::milliseconds(durationMs));
344 return mCurrentConversationHandle++;
348ConversationManager::registerConversation(
Conversation *conversation)
350 mConversations[conversation->
getHandle()] = conversation;
352 std::lock_guard<std::mutex> lock(mConversationHandlesMutex);
353 mConversationHandles.insert(conversation->
getHandle());
357ConversationManager::unregisterConversation(
Conversation *conversation)
359 mConversations.erase(conversation->
getHandle());
361 std::lock_guard<std::mutex> lock(mConversationHandlesMutex);
362 mConversationHandles.erase(conversation->
getHandle());
368 return mCurrentParticipantHandle++;
372ConversationManager::registerParticipant(
Participant *participant)
376 std::lock_guard<std::mutex> lock(mParticipantHandlesMutex);
381ConversationManager::unregisterParticipant(
Participant *participant)
386 std::lock_guard<std::mutex> lock(mParticipantHandlesMutex);
404 mUserAgent->
post(message, duration);
429 ParticipantMap::iterator i = mParticipants.find(partHandle);
430 if(i != mParticipants.end())
443 ConversationMap::iterator i = mConversations.find(convHandle);
444 if(i != mConversations.end())
454std::set<ConversationHandle>
457 std::lock_guard<std::mutex> lock(mConversationHandlesMutex);
458 return mConversationHandles;
461std::set<ParticipantHandle>
464 std::lock_guard<std::mutex> lock(mParticipantHandlesMutex);
465 std::set<ParticipantHandle> participantHandles;
466 auto it = mParticipantHandlesByType.find(participantType);
467 if (it != mParticipantHandlesByType.end())
469 participantHandles = it->second;
471 return participantHandles;
477 mMediaResourceCache.
addToCache(name, buffer, type);
483 return mMediaResourceCache.
getFromCache(name, buffer, type);
510 Participant* participant = getParticipant(partHandle);
533ConversationManager::notifyDtmfEvent(
ParticipantHandle partHandle,
int dtmf,
int duration,
bool up)
578 mMediaStackAdapter = mediaStackAdapter;
579 if(mediaStackAdapter)
581 mediaStackAdapter->conversationManagerReady(
this);
760 if(remoteParticipantDialogSet)
762 remoteParticipantDialogSet->
onTrying(h, msg);
766 InfoLog(<<
"onTrying(AppDialogSetHandle): " << msg.
brief());
774 if(remoteParticipantDialogSet)
780 InfoLog(<<
"onNonDialogCreatingProvisional(AppDialogSetHandle): " << msg.
brief());
829 InfoLog(<<
"onNewSubscription(ServerSubscriptionHandle): " << msg.
brief());
835 InfoLog(<<
"onNewSubscriptionFromRefer(ServerSubscriptionHandle): " << msg.
brief());
842 if(msg.
exists(h_TargetDialog))
844 pair<InviteSessionHandle, int> presult;
850 participantToRefer->
onRefer(presult.first, ss, msg);
871 WarningLog(<<
"not an instance of ConversationProfile, not calling onRequestOutgoingParticipant");
882 WarningLog(<<
"onNewSubscriptionFromRefer exception: " << e);
886 WarningLog(<<
"onNewSubscriptionFromRefer unknown exception");
893 InfoLog(<<
"onRefresh(ServerSubscriptionHandle): " << msg.
brief());
899 InfoLog(<<
"onTerminated(ServerSubscriptionHandle)");
910 WarningLog(<<
"onNotifyRejected(ServerSubscriptionHandle): " << msg.
brief());
922 InfoLog(<<
"onExpiredByClient(ServerSubscriptionHandle): " << notify.
brief());
928 InfoLog(<<
"onExpired(ServerSubscriptionHandle): " << msg.
brief());
949 InfoLog(<<
"onSuccess(ClientOutOfDialogReqHandle): " << msg.
brief());
955 InfoLog(<<
"onFailure(ClientOutOfDialogReqHandle): " << msg.
brief());
961 InfoLog(<<
"onReceivedRequest(ServerOutOfDialogReqHandle): " << msg.
brief());
967 auto optionsAnswer = ood->answerOptions();
974 buildSdpOffer(convProfile, sdp);
975 optionsAnswer->setContents(&sdp);
978 ood->send(optionsAnswer);
989 if(msg.
exists(h_TargetDialog))
991 pair<InviteSessionHandle, int> presult;
998 ood->send(ood->accept(202 ));
1022 WarningLog(<<
"not an instance of ConversationProfile, not calling onRequestOutgoingParticipant");
1027 WarningLog (<<
"onReceivedRequest(ServerOutOfDialogReqHandle): Received refer w/out a Refer-To: " << msg.
brief());
1028 ood->send(ood->reject(400));
1033 WarningLog(<<
"onReceivedRequest(ServerOutOfDialogReqHandle): exception " << e);
1037 WarningLog(<<
"onReceivedRequest(ServerOutOfDialogReqHandle): unknown exception");
1053 InfoLog(<<
"onRedirectReceived(AppDialogSetHandle): " << msg.
brief());
1059 InfoLog(<<
"onTryingNextTarget(AppDialogSetHandle): " << msg.
brief());
1091 for (ParticipantMap::iterator i = mParticipants.begin(); i != mParticipants.end(); i++)
1094 if (remoteIMPagerParticipant !=
nullptr && remoteIMPagerParticipant->
doesMessageMatch(message))
1099 remoteIMPagerParticipant =
nullptr;
1103 if (remoteIMPagerParticipant ==
nullptr && mUserAgent !=
nullptr)
1110 if (remoteIMPagerParticipant)
1116 h->send(h->reject(500));
#define WarningLog(args_)
#define resip_assert(x)
This file needs to work for both C and C++ code.
virtual void onConnectedConfirmed(resip::InviteSessionHandle, const resip::SipMessage &msg)
called when ACK (with out an answer) is received for initial invite (UAS)
virtual void onReferNoSub(resip::InviteSessionHandle, const resip::SipMessage &msg)
virtual void onMediaResourceParticipantFailed(ParticipantHandle partHandle)
Notifies an application about a failure in a media resource participant.
virtual bool getBufferFromMediaResourceCache(const resip::Data &name, resip::Data **buffer, int *type)
This function is used to retrieve a chunk of memory from the media/prompt cache.
virtual void onMessage(resip::InviteSessionHandle, const resip::SipMessage &msg)
called when MESSAGE message is received
virtual void onMessageFailure(resip::InviteSessionHandle, const resip::SipMessage &msg)
friend class HoldParticipantCmd
virtual void joinConversation(ConversationHandle sourceConvHandle, ConversationHandle destConvHandle)
Joins all participants from source conversation into destination conversation and destroys source con...
virtual void onError(resip::ServerSubscriptionHandle, const resip::SipMessage &msg)
friend class RedirectParticipantCmd
virtual ParticipantHandle createRemoteIMSessionParticipant(const resip::NameAddr &destination, ParticipantForkSelectMode forkSelectMode=ForkSelectAutomatic, const std::shared_ptr< ConversationProfile > &callerProfile=nullptr, const std::multimap< resip::Data, resip::Data > &extraHeaders=std::multimap< resip::Data, resip::Data >())
Creates a new remote IM participant that will attempted to be reached immediately at the specified ad...
virtual void redirectParticipant(ParticipantHandle partHandle, const resip::NameAddr &destination, unsigned int redirectCode=302, RedirectSuccessCondition successCondition=RedirectSuccessOnConnected)
Redirects the participant to another endpoint.
virtual void startApplicationTimer(unsigned int timerId, unsigned int timerData1, unsigned int timerData2, unsigned int durationMs)
This function is used to start a timer on behalf of recon based application.
virtual ParticipantHandle createMediaResourceParticipant(ConversationHandle convHandle, const resip::Uri &mediaUrl, const std::shared_ptr< resip::Data > &playAudioBuffer=std::shared_ptr< resip::Data >(), void *recordingCircularBuffer=0)
Creates a new media resource participant in the specified conversation.
virtual void onReferAccepted(resip::InviteSessionHandle, resip::ClientSubscriptionHandle, const resip::SipMessage &msg)
called when an REFER message receives an accepted response
std::set< ParticipantHandle > getParticipantHandlesByType(ParticipantType participantType) const
friend class RemoteIMSessionParticipant
virtual bool onTryingNextTarget(resip::AppDialogSetHandle, const resip::SipMessage &request)
friend class RemoteIMPagerParticipant
virtual void requestKeyframeFromPeer(ParticipantHandle partHandle, std::chrono::duration< double > durationMs)
virtual void onFailure(resip::ClientInviteSessionHandle h, const resip::SipMessage &msg)
Received a failure response from UAS.
virtual void onNonDialogCreatingProvisional(resip::AppDialogSetHandle, const resip::SipMessage &msg)
friend class ModifyParticipantContributionCmd
friend class RejectParticipantCmd
friend class MoveParticipantCmd
virtual void moveParticipant(ParticipantHandle partHandle, ConversationHandle sourceConvHandle, ConversationHandle destConvHandle)
Removed the specified participant from the specified conversation.
virtual void onConnected(resip::ClientInviteSessionHandle h, const resip::SipMessage &msg)
called when a dialog initiated as a UAC enters the connected state
friend class JoinConversationCmd
virtual void onExpiredByClient(resip::ServerSubscriptionHandle, const resip::SipMessage &sub, resip::SipMessage ¬ify)
virtual bool hasDefaultExpires() const
dcm! – a bit clunky, but really want these objects to not have state
friend class AlertParticipantCmd
virtual void setMediaStackAdapter(std::shared_ptr< MediaStackAdapter > mediaStackAdapter)
virtual void onOfferRequired(resip::InviteSessionHandle, const resip::SipMessage &msg)
called when an Invite w/out offer is sent, or any other context which requires an offer from the user
virtual void answerParticipant(ParticipantHandle partHandle)
Signal to the participant that the call is answered.
virtual void setUserAgent(UserAgent *userAgent)
friend class CreateRemoteParticipantCmd
friend class RedirectToParticipantCmd
friend class DestroyConversationCmd
virtual void onInfoSuccess(resip::InviteSessionHandle, const resip::SipMessage &msg)
called when response to INFO message is received
friend class RemoveParticipantCmd
virtual void onUpdateExtension(resip::ClientSubscriptionHandle, const resip::SipMessage ¬ify, bool outOfOrder)
void post(resip::Message *message)
virtual void onRedirected(resip::ClientInviteSessionHandle, const resip::SipMessage &msg)
called when a 3xx with valid targets is encountered in an early dialog This is different then getti...
virtual void modifyParticipantRecordChannel(ParticipantHandle partHandle, unsigned int channelNum)
If the participant is mixed to a multi-channel recording resource, then this controls if a participan...
ParticipantHandle getNewParticipantHandle()
virtual void onRefer(resip::InviteSessionHandle, resip::ServerSubscriptionHandle, const resip::SipMessage &msg)
called when an REFER message is received.
virtual void rejectParticipant(ParticipantHandle partHandle, unsigned int rejectCode)
Rejects an incoming remote participant with the specified code.
virtual void onMessageSuccess(resip::InviteSessionHandle, const resip::SipMessage &msg)
called when response to MESSAGE message is received
virtual void onAnswer(resip::InviteSessionHandle, const resip::SipMessage &msg, const resip::SdpContents &)
called when an answer is received - has nothing to do with user answering the call
virtual void onProvisional(resip::ClientInviteSessionHandle, const resip::SipMessage &msg)
called when dialog enters the Early state - typically after getting 18x
MediaStackAdapter & getMediaStackAdapter()
virtual void sendIMToParticipant(ParticipantHandle partHandle, std::unique_ptr< resip::Contents > contents)
Sends a MESSAGE with specified Contents to RemoteParticipant, RemoteIMPagerParticipant,...
virtual void onUpdatePending(resip::ClientSubscriptionHandle h, const resip::SipMessage ¬ify, bool outOfOrder)
virtual void onSuccess(resip::ClientOutOfDialogReqHandle, const resip::SipMessage &response)
virtual ParticipantHandle createRemoteParticipant(ConversationHandle convHandle, const resip::NameAddr &destination, ParticipantForkSelectMode forkSelectMode=ForkSelectAutomatic, const std::shared_ptr< ConversationProfile > &conversationProfile=nullptr, const std::multimap< resip::Data, resip::Data > &extraHeaders=std::multimap< resip::Data, resip::Data >())
Creates a new remote participant in the specified conversation that is attempted to be reached at the...
virtual void onUpdateActive(resip::ClientSubscriptionHandle h, const resip::SipMessage ¬ify, bool outOfOrder)
virtual void requestKeyframe(ParticipantHandle partHandle, std::chrono::duration< double > durationMs)
virtual void onTrying(resip::AppDialogSetHandle, const resip::SipMessage &msg)
static const char * participantTypeToString(ParticipantType partType)
friend class CreateMediaResourceParticipantCmd
virtual void onExpired(resip::ServerSubscriptionHandle, resip::SipMessage ¬ify)
virtual void destroyParticipant(ParticipantHandle partHandle)
Ends connections to the participant and removes it from all active conversations.
virtual void onForkDestroyed(resip::ClientInviteSessionHandle)
called when a fork that was created through a 1xx never receives a 2xx because another fork answered ...
virtual void onInfo(resip::InviteSessionHandle, const resip::SipMessage &msg)
called when INFO message is received the application must call acceptNIT() or rejectNIT() once it is ...
virtual void redirectToParticipant(ParticipantHandle partHandle, ParticipantHandle destPartHandle, RedirectSuccessCondition successCondition=RedirectSuccessOnConnected)
This is used for attended transfer scenarios where both participants are no longer managed by the con...
virtual void onOffer(resip::InviteSessionHandle handle, const resip::SipMessage &msg, const resip::SdpContents &offer)
called when an offer is received - must send an answer soon after this
virtual void onNotifyRejected(resip::ServerSubscriptionHandle, const resip::SipMessage &msg)
virtual void addBufferToMediaResourceCache(const resip::Data &name, const resip::Data &buffer, int type)
This function is used to add a chunk of memory to a media/prompt cache.
virtual void onDtmfEvent(ParticipantHandle partHandle, int dtmf, int duration, bool up)=0
Notifies an application when an RFC2833 DTMF event is received from a particular remote participant.
Conversation * getConversation(ConversationHandle convHandle)
virtual void removeParticipant(ConversationHandle convHandle, ParticipantHandle partHandle)
Removed the specified participant from the specified conversation.
virtual void alertParticipant(ParticipantHandle partHandle, bool earlyFlag=true)
Signal to the participant that it should provide ringback.
virtual void requestKeyframeFromPeerRecurring(ParticipantHandle partHandle, std::chrono::duration< double > interval)
ConversationManager(std::shared_ptr< MediaStackAdapter > mediaStackAdapter, std::shared_ptr< resip::ConfigParse > configParse=std::shared_ptr< resip::ConfigParse >())
virtual void addParticipant(ConversationHandle convHandle, ParticipantHandle partHandle)
Adds the specified participant to the specified conversation.
friend class SendIMToParticipantCmd
virtual void onRequestOutgoingParticipant(ParticipantHandle partHandle, const resip::SipMessage &msg, ConversationProfile &conversationProfile)=0
Notifies an application about a new remote participant that is trying to be contacted.
friend class AnswerParticipantCmd
virtual ~ConversationManager()
virtual void onOfferRequestRejected(resip::InviteSessionHandle, const resip::SipMessage &msg)
Called when an error response is received for a reinvite-nobody request (via requestOffer)
friend class CreateConversationCmd
virtual void onReadyToSend(resip::ServerSubscriptionHandle, resip::SipMessage &)
virtual void onReferRejected(resip::InviteSessionHandle, const resip::SipMessage &msg)
called when an REFER message receives a failure response
virtual void destroyConversation(ConversationHandle convHandle)
Destroys an existing Conversation, and ends all participants that solely belong to this conversation.
ConversationHandle getNewConversationHandle()
virtual RemoteParticipant * createAppropriateRemoteParticipantInstance(resip::DialogUsageManager &dum, RemoteParticipantDialogSet &rpds)
virtual void onRemoteSdpChanged(resip::InviteSessionHandle, const resip::SipMessage &msg, const resip::SdpContents &sdp)
called when a modified body is received in a 2xx response to a session-timer reINVITE.
virtual void onRefresh(resip::ServerSubscriptionHandle, const resip::SipMessage &sub)
virtual void holdParticipant(ParticipantHandle partHandle, bool hold)
Manually puts a paricipant on hold, or takes off hold without needing to move it in and out of any co...
friend class AddParticipantCmd
virtual void onOfferRejected(resip::InviteSessionHandle, const resip::SipMessage *msg)
called if an offer in a UPDATE or re-INVITE was rejected - not real useful.
virtual ParticipantHandle createRemoteIMPagerParticipant(const resip::NameAddr &destination, const std::shared_ptr< ConversationProfile > &conversationProfile=nullptr)
Creates a new remote IM participant that will be attempted to be reached when sendIMToParticipant is ...
virtual void onNewSession(resip::ClientInviteSessionHandle h, resip::InviteSession::OfferAnswerType oat, const resip::SipMessage &msg)
called when an initial INVITE or the intial response to an outoing invite
virtual void onMessageArrived(resip::ServerPagerMessageHandle, const resip::SipMessage &message)
virtual void onTerminated(resip::InviteSessionHandle h, resip::InviteSessionHandler::TerminatedReason reason, const resip::SipMessage *msg)
@ ParticipantType_RemoteIMPager
@ ParticipantType_MediaResource
@ ParticipantType_RemoteIMSession
virtual void onReceivedRequest(resip::ServerOutOfDialogReqHandle, const resip::SipMessage &request)
friend class OutputBridgeMixWeightsCmd
virtual void onNewSubscription(resip::ClientSubscriptionHandle h, const resip::SipMessage ¬ify)
virtual uint32_t getDefaultExpires() const
friend class DestroyParticipantCmd
ParticipantForkSelectMode
friend class CreateLocalParticipantCmd
virtual ConversationHandle createConversation(AutoHoldMode autoHoldMode=AutoHoldEnabled)
Create a new empty Conversation to which participants can be added.
friend class CreateRemoteIMPagerParticipantCmd
friend class ModifyParticipantRecordChannelCmd
virtual void modifyParticipantContribution(ConversationHandle convHandle, ParticipantHandle partHandle, unsigned int inputGain, unsigned int outputGain)
Modifies how the participant contributes to the particular conversation.
std::set< ConversationHandle > getConversationHandles() const
virtual ParticipantHandle createLocalParticipant()
Creates a new local participant in the specified conversation (if supported).
virtual void onParticipantVoiceActivity(recon::ParticipantHandle partHandle, bool on, bool inbound)
Notifies an application when voice activity is detected to on or off from a remote participant.
virtual void onInfoFailure(resip::InviteSessionHandle, const resip::SipMessage &msg)
virtual void onStaleCallTimeout(resip::ClientInviteSessionHandle)
UAC gets no final response within the stale call timeout (default is 3 minutes).
virtual void onEarlyMedia(resip::ClientInviteSessionHandle, const resip::SipMessage &, const resip::SdpContents &)
called when an in-dialog provisional response is received that contains a body
virtual void onRedirectReceived(resip::AppDialogSetHandle, const resip::SipMessage &response)
virtual int onRequestRetry(resip::ClientSubscriptionHandle h, int retryMinimum, const resip::SipMessage ¬ify)
virtual void outputBridgeMatrix(ConversationHandle convHandle=0)
Logs a multiline representation of the current state of the mixing matrix.
virtual void onNewSubscriptionFromRefer(resip::ServerSubscriptionHandle, const resip::SipMessage &sub)
virtual RemoteParticipantDialogSet * createRemoteIMSessionParticipantDialogSetInstance(ConversationManager::ParticipantForkSelectMode forkSelectMode=ConversationManager::ForkSelectAutomatic, std::shared_ptr< ConversationProfile > conversationProfile=nullptr)
This class extends the resip UserProfile to include Conversation Manager specific settings.
virtual resip::SdpContents & sessionCaps()
Get/Set the session capabilities.
This class is used to manage membership of participants.
ConversationHandle getHandle()
The classes defined here are used to pass commands from the application thread to the UserAgent threa...
This is the base class for a RemoteParticipant, LocalParticipant and a MediaResourceParticipant.
virtual ParticipantHandle getParticipantHandle()
virtual ConversationManager::ParticipantType getParticipantType()
This class is used by Invite DialogSets used for IM Sessions only (m=message SDP).
This class is used by Invite DialogSets.
virtual void onNonDialogCreatingProvisional(resip::AppDialogSetHandle, const resip::SipMessage &msg)
virtual void onTrying(resip::AppDialogSetHandle, const resip::SipMessage &msg)
virtual RemoteParticipant * createUACOriginalRemoteParticipant(ParticipantHandle handle)
This class represent a remote participant.
virtual void onRefer(resip::InviteSessionHandle, resip::ServerSubscriptionHandle, const resip::SipMessage &msg)
virtual void setPendingOODReferInfo(resip::ServerOutOfDialogReqHandle ood, const resip::SipMessage &referMsg)
virtual void doReferNoSub(const resip::SipMessage &msg)
This class is one of two main classes of concern to an application using the UserAgent library.
resip::DialogUsageManager & getDialogUsageManager()
virtual void post(resip::Message *msg)
A base-class for messages used by applications.
The abstract base-class for all exceptions thrown by resip code.
An alternative to std::string, encapsulates an arbitrary buffer of bytes.
InviteSessionHandle findInviteSession(const DialogId &id)
std::shared_ptr< UserProfile > getUserProfile() const
AppDialogHandle getAppDialog() const
static Handle< InviteSession > NotValid()
TerminatedReason
called when an dialog enters the terminated state - this can happen after getting a BYE,...
The base-class used for message-passing.
virtual Brief brief() const
return a facet for brief encoding of message
Represents the "name-addr" and the "addr-spec" elements in the RFC 3261 grammar.
const uint64_t & getVersion() const
returns the session version
const uint64_t & getSessionId() const
returns the session ID
std::list< std::reference_wrapper< Medium > > getMediaByType(const Data &type)
return session Media lines filtered by type
const Origin & origin() const
return session Origin line
const MediumContainer & media() const
return session Media lines
Provides an interface to process and generate SDP bodies (MIME content-type application/sdp).
Session & session()
get the parsed SDP
void send(std::shared_ptr< SipMessage > msg) override
std::shared_ptr< SipMessage > reject(int responseCode)
Represents a SIP message.
const RequestLine & header(const RequestLineType &l) const
Returns the RequestLine. This is only valid for request messages.
bool exists(const HeaderBase &headerType) const
Returns true if the given header field is present, false otherwise.
resip::MethodTypes method() const
returns the method type of the message
static uint64_t getTimeMicroSec()
Returns the current clock time in microseconds.
void post(Message *msg)
Posts a Message to this TransactionUser's fifo.
Represents the "SIP-URI" and "SIPS-URI" elements in the RFC 3261 grammar.
unsigned int ConversationHandle
unsigned int ParticipantHandle
dcm! – add UnusedChecking(_enum) below;
unsigned __int64 uint64_t