@@ -66,7 +66,8 @@ m_height(0),
66
66
m_location(),
67
67
m_description(),
68
68
m_url(),
69
- m_beacon(false )
69
+ m_beacon(false ),
70
+ m_random()
70
71
{
71
72
assert (!address.empty ());
72
73
assert (port > 0U );
@@ -85,11 +86,13 @@ m_beacon(false)
85
86
m_id[2U ] = id >> 8 ;
86
87
m_id[3U ] = id >> 0 ;
87
88
88
- CStopWatch stopWatch;
89
- ::srand (stopWatch.start());
89
+ std::random_device rd;
90
+ std::mt19937 mt (rd ());
91
+ m_random = mt;
90
92
91
- m_streamId[0U ] = ::rand () + 1U ;
92
- m_streamId[1U ] = ::rand () + 1U ;
93
+ std::uniform_int_distribution<uint32_t > dist (0x00000001 , 0xfffffffe );
94
+ m_streamId[0U ] = dist (m_random);
95
+ m_streamId[1U ] = dist (m_random);
93
96
}
94
97
95
98
CDMRNetwork::~CDMRNetwork ()
@@ -246,17 +249,18 @@ bool CDMRNetwork::write(const CDMRData& data)
246
249
247
250
unsigned int slotIndex = slotNo - 1U ;
248
251
252
+ std::uniform_int_distribution<uint32_t > dist (0x00000001 , 0xfffffffe );
249
253
unsigned char dataType = data.getDataType ();
250
254
if (dataType == DT_VOICE_SYNC) {
251
255
buffer[15U ] |= 0x10U ;
252
256
} else if (dataType == DT_VOICE) {
253
257
buffer[15U ] |= data.getN ();
254
258
} else {
255
259
if (dataType == DT_VOICE_LC_HEADER)
256
- m_streamId[slotIndex] = :: rand () + 1U ;
260
+ m_streamId[slotIndex] = dist (m_random) ;
257
261
258
262
if (dataType == DT_CSBK || dataType == DT_DATA_HEADER)
259
- m_streamId[slotIndex] = :: rand () + 1U ;
263
+ m_streamId[slotIndex] = dist (m_random) ;
260
264
261
265
buffer[15U ] |= (0x20U | dataType);
262
266
}
0 commit comments