00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef RTSP_PROXY_SESSION_FACTORY_H
00025
#define RTSP_PROXY_SESSION_FACTORY_H
00026
00027
#include "dictionary.h"
00028
#include "MNString.h"
00029
#include "MNMutex.h"
00030
#include "MNSelector.h"
00031
#include "SIPtr.h"
00032
00033
class ControlBase;
00034
class RTSPProxySession;
00035
00036 typedef OS::SIPtr<RTSPProxySession> ProxySessionPtr;
00037
00044 class RTSPProxySessionFactory
00045 {
00048
MNMutex _lock;
00049
int _lastSessionNumber;
00050
dictionary<int,RTSPProxySession*> _sessions_by_id;
00051
int _nextSessionIDdownstream;
00052
00053
public:
00054
RTSPProxySessionFactory( );
00055
~RTSPProxySessionFactory( );
00056
00062
ProxySessionPtr newSession(
MNSelector& slct,
int fd,
MNString url,
bool doDynReflection );
00063
ProxySessionPtr newSession(
MNSelector& slct,
int fd );
00064
00065
ProxySessionPtr getSession(
int num );
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
ProxySessionPtr findSessionWithSessionID(
ControlBase* fb, u_int64_t SessionId );
00077
00082
ProxySessionPtr findSessionWithCSeq(
ControlBase* fb,
int CSeq );
00083
00090
ProxySessionPtr assignSessionId(
ControlBase* fb,
int cseq, u_int64_t
id);
00091
00092
void assignDownstreamSessionId(
int sessionNo);
00093
00097
bool forgetSession( u_int64_t sessionId );
00098
bool forgetSession(
ProxySessionPtr Session );
00099
bool forgetSessionTeardown(
ProxySessionPtr Session);
00100
bool forgetSession(
RTSPProxySession* Session );
00101
00106
void forgetSessionsBySocket(
int fd );
00107
00108
private:
00112
RTSPProxySession* private_findOneSessionBySocket(
int fd,
bool& fromBelow );
00113
00114
void private_dumpSessions( );
00115 };
00116
00117
#endif
00118