00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
#ifndef RTSP_CACHE_DIR_H
00026
#define RTSP_CACHE_DIR_H
00027
00028
#include "mnstream.h"
00029
#include "MNdictionary.h"
00030
#include "MNString.h"
00031
#include "MNMutex.h"
00032
00033
class SDPSessionDescription;
00034
00035 struct SMPTE_t
00036 {
00037 int hours;
00038 int minutes;
00039 int seconds;
00040 int frames;
00041 };
00042
00043 class CacheEntry
00044 {
00045
private:
00046
int _hits;
00047
int _misses;
00048
MNString _LocalFile;
00049
SDPSessionDescription* _sdp;
00050
int nb_Tokens;
00051
bool _is_completed;
00052 u_int64_t _fileSize;
00053
00054
CacheEntry(
const CacheEntry& );
00055
CacheEntry& operator= (
const CacheEntry& );
00056
00057
00058
public:
00059
00060
CacheEntry();
00061
CacheEntry(
MNString& file,
00062
SDPSessionDescription* SDP,
00063
bool completed,
00064 u_int64_t file_size );
00065
~CacheEntry();
00066
00067
SDPSessionDescription*
getSDP()
const;
00068
void getLocalFile(
MNString& );
00069
00070
void setSDP(
SDPSessionDescription* SDP );
00071
void setLocalFile(
const MNString& LocalFile );
00072
00075
void setFileSize( u_int64_t file_size );
00076
const MNString&
getLocalFile ( );
00077
00078
void releaseToken( );
00079
void getToken( );
00080
void cacheHit( );
00081
void cacheMiss( );
00082
int get_nb_Tokens( );
00083 u_int64_t
getFileSize( );
00084
void set_is_completed(
bool is_completed );
00085
bool get_is_completed( );
00086 };
00087
00088 class CacheDictionary :
public MNdictionary<MNString, CacheEntry*>
00089 {
00090
public:
00091
virtual int compare(
MNString const& x,
MNString const& y)
const;
00092 };
00093
00094
00095 class RTSPCacheDir
00096 {
00097
00098
private:
00099
long _space;
00100
CacheDictionary _EntryList;
00101
MNMutex Mux;
00102
00103
00104 ofstream FileLogger;
00105
00106
RTSPCacheDir(
const RTSPCacheDir& );
00107
RTSPCacheDir& operator= (
const RTSPCacheDir&);
00108
void remove_incomplete_files();
00109
00110
00111
public:
00112
00113
RTSPCacheDir ();
00114
~RTSPCacheDir ();
00115
00116
bool isCached(
const MNString& URI );
00117
00118
CacheEntry*
getEntry(
const MNString& URI );
00119
00120
CacheEntry*
getEntryWithToken(
const MNString& URI );
00121
00122
CacheEntry*
getEntryByFile(
const MNString& filename );
00123
00124
bool releaseToken(
const MNString& URI );
00125
00126
bool addEntry(
const MNString& URI,
const MNString& lpmoc,
CacheEntry* Entry,
bool save =
true );
00127
00128
bool addEntry(
const MNString& URI,
00129
const MNString& file,
00130
const MNString& lpmoc,
00131
SDPSessionDescription* SDP,
00132
bool save =
true,
long file_size = 0 );
00133
00134
bool delEntry(
const MNString& URI );
00135
00136
bool setLocalFile(
MNString file );
00137
00138
bool setSDP(
const SDPSessionDescription& SDP );
00139
00140
bool setComplete(
bool complete );
00141
00157
bool checkSpace( int32_t bwidth,
00158 int32_t duration,
00159 int64_t& file_size );
00160
00161
void setFileComplete(
const char* filename,
bool comp );
00162
00163
void setSpaceBytes( u_int64_t space );
00164
00165
bool removeFirstFile( );
00166
00167
bool removeFirstUnusedFile( );
00168
00169 u_int64_t
getSpaceBytes( )
const;
00170 };
00171
00172
#endif