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 MN_RTP_REF_COUNTED_SOCKET_FACTORY_H
00025
#define MN_RTP_REF_COUNTED_SOCKET_FACTORY_H
00026
00027
#include <assert.h>
00028
#include <stdio.h>
00029
#include <sys/types.h>
00030
00031
#include "MNArrayList.h"
00032
#include "MNUDPServerSocket.h"
00033
#include "MNMutex.h"
00034
#include "dictionary.h"
00035
00036
class RefCountedSocket;
00037
class RefCountedSocketFactory;
00038
class RefCountingSocket;
00039
00040
00041
00042
00043
00050 class RefCountedSocketFactory
00051 {
00052
struct dict_entry
00053 {
00054
MNMutex lck;
00055
int port;
00056 RefCountedSocket* ptr;
00057
00058 dict_entry(
int p )
00059 {
00060 ptr = NULL;
00061 port = p;
00062 }
00063
00064 ~dict_entry()
00065 {
00066 lck.lock();
00067 lck.unlock();
00068 }
00069 };
00070
00091 RefCountedSocket*
find(
int port, dict_entry*& newentry );
00092
00093
MNMutex _lock;
00094
dictionary<int,dict_entry*> _existing;
00095
public:
00098 RefCountedSocket*
get(
MNSelector& sel,
int port );
00099
00102 RefCountedSocket*
get(
MNSelector& sel,
MNSocket& sock );
00103
00114
void release(
void* v );
00115
00116
void del( RefCountedSocket* r );
00117
00118
static RefCountedSocketFactory&
factory( );
00119 };
00120
00121
00122
#endif
00123