- added a centralized pseudo-random number function.

- changed rand() calls to get_random().
- added/fixed ssrc (RTP header) generation.


git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@252 8eb893ce-cfd4-0310-b710-fb5ebe64c474
sayer/1.4-spce2.6
Raphael Coeffic 20 years ago
parent 5b5de2b23e
commit 4a82d793a3

@ -176,7 +176,7 @@ int AmRtpStream::send( unsigned int ts, unsigned char* buffer, unsigned int size
rp.marker = false;
rp.sequence = sequence++;
rp.timestamp = ts;
rp.ssrc = 0; //l_ssrc;
rp.ssrc = l_ssrc;
rp.compile((unsigned char*)buffer,size);
rp.setAddr(&r_saddr);
@ -386,6 +386,7 @@ AmRtpStream::AmRtpStream(AmSession* _s)
l_saddr.sin_addr.s_addr = INADDR_ANY;
#endif
l_ssrc = get_random();
}
AmRtpStream::~AmRtpStream()

@ -123,7 +123,7 @@ protected:
/** the recv_offset initialized ? */
bool recv_offset_i;
// unsigned int l_ssrc;
unsigned int l_ssrc;
unsigned int r_ssrc;
bool r_ssrc_i;

@ -349,17 +349,12 @@ void AmSession::destroy()
string AmSession::getNewId()
{
static AmMutex _m;
struct timeval t;
gettimeofday(&t,NULL);
string id = "";
_m.lock();
id += int2hex(rand()) + "-";
_m.unlock();
id += int2hex(get_random()) + "-";
id += int2hex(t.tv_sec) + int2hex(t.tv_usec) + "-";
id += int2hex((unsigned int) pthread_self());

@ -59,15 +59,6 @@ void AmSessionContainer::on_stop()
void AmSessionContainer::run()
{
int seed=0;
FILE* fp_rand = fopen("/dev/random","r");
if(fp_rand){
fread(&seed,sizeof(int),1,fp_rand);
fclose(fp_rand);
}
seed += getpid();
seed += time(0);
srand(seed);
while(1){

@ -701,3 +701,30 @@ string get_header_param(const string& hdr_string,
}
return "";
}
// support for thread-safe pseudo-random numbers
static unsigned int _s_rand=0;
static AmMutex _s_rand_mut;
void init_random()
{
int seed=0;
FILE* fp_rand = fopen("/dev/random","r");
if(fp_rand){
fread(&seed,sizeof(int),1,fp_rand);
fclose(fp_rand);
}
seed += getpid();
seed += time(0);
_s_rand = seed;
}
unsigned int get_random()
{
_s_rand_mut.lock();
unsigned int r = rand_r(&_s_rand);
_s_rand_mut.unlock();
return r;
}

@ -250,6 +250,11 @@ string strip_header_params(const string& hdr_string);
// get a header parameter value
string get_header_param(const string& hdr_string, const string& param_name);
// support for thread-safe pseudo-random numbers
void init_random();
unsigned int get_random();
#endif
// Local Variables:

@ -371,6 +371,8 @@ int main(int argc, char* argv[])
if(AmPlugIn::instance()->load(AmConfig::PlugInPath, AmConfig::LoadPlugins))
return -1;
init_random();
DBG("Starting session container\n");
AmSessionContainer::instance()->start();

Loading…
Cancel
Save