/usr/include/resip/dum/DialogEventStateManager.hxx is in libresiprocate-1.9-dev 1.9.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #if !defined(RESIP_DialogEventStateManager_HXX)
#define RESIP_DialogEventStateManager_HXX
#include "resip/dum/DialogEventInfo.hxx"
#include "resip/dum/DialogEventHandler.hxx"
#include "resip/dum/InviteSessionHandler.hxx"
#include "resip/dum/Dialog.hxx"
#include "resip/dum/DialogSet.hxx"
namespace resip
{
/**
* Implements the FSM for dialog state as spec'd in RFC 4235.
* Called from DialogSet, ClientInviteSession, and ServerInviteSession.
*/
class DialogEventStateManager
{
public:
typedef std::vector<DialogEventInfo> DialogEventInfos;
DialogEventInfos getDialogEventInfo() const;
virtual ~DialogEventStateManager();
private:
DialogEventStateManager();
void onTryingUas(Dialog& dialog, const SipMessage& invite);
void onTryingUac(DialogSet& dialogSet, const SipMessage& invite);
void onProceedingUac(const DialogSet& dialogSet, const SipMessage& response);
//?dcm? how is direction determined when the onEarly is the first use of
//this dialog?
void onEarly(const Dialog& dialog, InviteSessionHandle is);
void onConfirmed(const Dialog& dialog, InviteSessionHandle is);
void onTerminated(const Dialog& dialog, const SipMessage& msg, InviteSessionHandler::TerminatedReason reason);
void onTerminated(const DialogSet& dialogSet, const SipMessage& msg, InviteSessionHandler::TerminatedReason reason);
// order by DialogSet, such that the following ordering occurs
// DialogSetId remoteTag
// a null
// a 1
// a 2
// b 1
// b 2
class DialogIdComparator
{
public:
bool operator()(const DialogId& x, const DialogId& y) const
{
if (x.getDialogSetId() == y.getDialogSetId())
{
return (x.getRemoteTag() < y.getRemoteTag());
}
return (x.getDialogSetId() < y.getDialogSetId());
}
};
DialogEventInfo* findOrCreateDialogInfo(const Dialog& dialog);
void onDialogSetTerminatedImpl(const DialogSetId& dialogSetId, const SipMessage& msg, InviteSessionHandler::TerminatedReason reason);
TerminatedDialogEvent* onDialogTerminatedImpl(DialogEventInfo* eventInfo, InviteSessionHandler::TerminatedReason reason,
int responseCode = 0, Uri* remoteTarget = NULL);
static int getResponseCode(const SipMessage& msg);
static Uri* getFrontContact(const SipMessage& msg);
private:
friend class DialogUsageManager;
friend class ServerInviteSession;
friend class ClientInviteSession;
friend class InviteSession;
friend class DialogSet;
// disabled
DialogEventStateManager(const DialogEventStateManager& orig);
// .jjg. we'll only have the DialogSetId if we aren't yet in the 'early' state;
// once we get to early, we'll remove the DialogSetId in favour of the DialogId.
// The comparator/key of the map must have an ordering so that a key can be
// contructed which points to the beginning of a dialogSet. This could be done by
// no remote tag being always, which might be the existing behaviour, but
// shouldn't be relied on.
std::map<DialogId, DialogEventInfo*, DialogIdComparator> mDialogIdToEventInfo;
DialogEventHandler* mDialogEventHandler;
};
}
#endif
|