Skip to content

Commit 738ee91

Browse files
authored
R04H31 Merge to Master (#89)
* simplify and refactor peer-link packet handling; * bump version number to match dev branch; alter logging for peer-link data; * warn on packets generated over 4K; * don't clear map directly, use clear() helper; * use parens vs braces for initializers; correct case fall-thru on SysView; * for clarity relabel RPT_CLOSING and MST_CLOSING to RPT_DISC and MST_DISC; * discontinue support for TRANSFER command on the traffic port entirely; hide useAlternatePortForDiagnostics and allowActivityTransfer options in FNE configuration; add stern warnings and alerts if the FNE disabled either useAlternatePortForDiagnostics or allowActivityTransfer (these are really critical operations); alert in peer log if the master does not report support for the alternate port for diagnostics; * make oversized packet warning clearer (this warning is not a end-user warning, the user can't do antyhing about this this is a developer BUGBUG warning); * apply recv timeout on InfluxDB operations (this hopefully will prevent stuck queries if the InfluxDB server dies while query is in progress); * prevent InfluxDB query from becoming stuck in a tight infinite loop within select(); * don't bother handling responses from the influx query, remove fluxQL (we don't make queries with this library); * cleanup unused vars; * generate an error log if a fluxql worker fails to write data to influx; * implement support to save/retain configuration pushed from peer link connections; * fix memory leak caused by not deleting unused packetbuffer; * refactor ACL updates; * refactor log messages for channels to be <channel ID>-<channel No> in most cases where applicable; * add more <channel ID>-<channel No> changes; * whoops wrong variable type; * correct fatal bug where update lookup timer was never started; * check the RF state at the bottom of a talkgroup hang expiration timer for RF talkgroup activity, if the state is not listening, handle the end of call as if it was a frame loss; * fix potential memory leak in PacketBuffer fragmenter, the encoder was not deleting the storage buffer before end of scope; * ensure decompressed buffer is deleted; * ensure decompressed buffer is deleted in error conditions too; * add support to disable adjacent site broadcast; * lay the groundwork for explicit channel configuration; * [EXPERIMENTAL] implement experimental support for a CC to define explicit channel identity information for voice channels (NOTE: this does *NOT* implement support for hotspots to operate in explicit channel mode!); * don't use the concurrent::unordered_map for this (this gives me great pause for a problem...); * add some extra debug trace; * add some extra debug trace; * display MI data during calibration; update modem submodule; * this is ugly, and I hate it, but to fix very strange WIN32 deadlock situations, we'll selectively use our concurrent unordered_map on non-WIN32, and on WIN32 use the std unordered_map + a local mutex; * update modem submodule; change P25 Voice MI logging messages from DEBUG to MESSAGE; fix issue in HostSetup/HostCal where PDU header decoding was broken; * only dump MI data if the call is encrypted (don't bother displaying zeros for a clear call); * whoops check right variable; * cleanup and clarify MI logging; * cleanup and clarify MI logging (again LDU2 was out of log sequence); * hate me later, dont use a colon as the string separator for the MI bytes, use equals; * log DMR PI MI dta; * refactor debug messaging for HDU; * reorganize core meta-programming macros, move class property macros into ClassProperties.h, move bit manipulation into BitManipulation.h, move VLA into VariableLengthArray.h; rename meta-programming macros for clarity most of these macros declare some sort of variable and/or functions, as such I'm dropping the notation for __BLAHBLAH and using DECLARE_BLAHBLAH instead; better document class property meta-programming macros; refactor __GET/__SET_UINT16 into __GET/__SET_UINT24 these macros set 24-bit values from and to buffers, this will reduce programming confusion; * add property documentation for some KMM classes; * correct file copyright headers; * change commenting to reflect section more clearly; * use proper GPL license for file; * detect arch and properly update internal variable; * handle instance where the system does not return a valid processor type for arch detection; * display target arch along side host arch if we're cross compiling; * strip newlines; * fix missing parens around response encoding;
1 parent 5e31e9a commit 738ee91

221 files changed

Lines changed: 2946 additions & 2437 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CMakeLists.txt

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,33 @@ option(COMPILE_WIN32 "Compile for Win32" off)
4242
if (COMPILE_WIN32)
4343
set(ARCH amd64)
4444
set(CMAKE_SYSTEM_PROCESSOR amd64)
45+
message(CHECK_START "Detect Host Architecture - ${ARCH}")
4546

4647
# No TUI for this
4748
set(ENABLE_TUI_SUPPORT OFF)
4849
message(CHECK_START "Enable TUI support - no; for simplicity WIN32 does not support TUI.")
4950
else()
5051
set(CMAKE_C_COMPILER /usr/bin/gcc CACHE STRING "C compiler")
5152
set(CMAKE_CXX_COMPILER /usr/bin/g++ CACHE STRING "C++ compiler")
53+
54+
# detect and set architecture
5255
set(ARCH amd64)
56+
57+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
58+
set(ARCH amd64)
59+
set(CMAKE_SYSTEM_PROCESSOR amd64)
60+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64)
61+
else()
62+
if (CMAKE_SYSTEM_PROCESSOR MATCHES "")
63+
execute_process(COMMAND uname -m OUTPUT_VARIABLE CMAKE_SYSTEM_PROCESSOR)
64+
string(REGEX REPLACE "\n$" "" CMAKE_SYSTEM_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
65+
set(ARCH ${CMAKE_SYSTEM_PROCESSOR})
66+
else()
67+
set(ARCH ${CMAKE_SYSTEM_PROCESSOR})
68+
endif (CMAKE_SYSTEM_PROCESSOR MATCHES "")
69+
endif (CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
70+
message(CHECK_START "Detect Host Architecture - ${ARCH}")
71+
5372
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE amd64)
5473
endif (COMPILE_WIN32)
5574

@@ -60,6 +79,7 @@ if (CROSS_COMPILE_ARM)
6079
set(CMAKE_SYSTEM_PROCESSOR armhf)
6180
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE armhf)
6281
set(OPENSSL_ROOT_DIR /usr/lib/arm-linux-gnueabihf)
82+
message(CHECK_START "Target Architecture - ${ARCH}")
6383
message(CHECK_START "Cross compiling for 32-bit ARM - ${CMAKE_C_COMPILER}")
6484
endif (CROSS_COMPILE_ARM)
6585
if (CROSS_COMPILE_AARCH64)
@@ -69,6 +89,7 @@ if (CROSS_COMPILE_AARCH64)
6989
set(CMAKE_SYSTEM_PROCESSOR arm64)
7090
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE arm64)
7191
set(OPENSSL_ROOT_DIR /usr/lib/aarch64-linux-gnu)
92+
message(CHECK_START "Target Architecture - ${ARCH}")
7293
message(CHECK_START "Cross compiling for 64-bit ARM - ${CMAKE_C_COMPILER}")
7394
endif (CROSS_COMPILE_AARCH64)
7495

@@ -107,6 +128,7 @@ if (CROSS_COMPILE_RPI_ARM)
107128
set(ARCH armhf)
108129
set(CMAKE_SYSTEM_PROCESSOR armhf)
109130
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE armhf)
131+
message(CHECK_START "Target Architecture - ${ARCH}")
110132
message(CHECK_START "Cross compiling for (old RPi) 32-bit ARM - ${CMAKE_C_COMPILER}")
111133

112134
# No TUI for this

configs/config.example.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,8 @@ protocols:
224224
enableTimeDateAnn: false
225225
# Flag indicating whether or not the source ID validation before granting disabled.
226226
disableGrantSourceIdCheck: false
227+
# Flag indicating whether or not the adjacent site broadcasts are disabled.
228+
disableAdjSiteBroadcast: false
227229
# Flag indicating immediate TSDUs will be sent twice.
228230
redundantImmediate: true
229231
# Flag indicating whether redundant grant responses should be transmitted.
@@ -401,8 +403,10 @@ system:
401403
supervisor: false
402404

403405
# Channel Identity (corresponds to the appropriate entry in the iden_table file).
406+
# Note: When using explicit channels, this represents the transmit channel number.
404407
channelId: 2
405408
# Channel Number (used to calculate actual host frequency based on the identity table).
409+
# Note: When using explicit channels, this represents the transmit channel number.
406410
channelNo: 1
407411

408412
#
@@ -429,9 +433,17 @@ system:
429433
#
430434
voiceChNo:
431435
# Channel Identity (corresponds to the appropriate entry in the iden_table file).
436+
# Note: When using explicit channels, this represents the transmit channel identity.
432437
- channelId: 2
433438
# Channel Number (used to calculate actual host frequency based on the identity table).
439+
# Note: When using explicit channels, this represents the transmit channel number.
434440
channelNo: 1
441+
# Rx Channel Identity (corresponds to the appropriate entry in the iden_table file).
442+
# Note: When this is defined, the voice channel is using explicit channel frequencies.
443+
#rxChannelId: 2
444+
# Rx Channel Number (used to calculate actual host frequency based on the identity table).
445+
# Note: when this is defined, the voice channel is using explicit channel frequencies.
446+
#rxChannelNo: 2
435447
# RPC IP Address for voice channel.
436448
rpcAddress: 127.0.0.1
437449
# RPC Port number for voice channel.

configs/fne-config.example.yml

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ master:
3838
# Hostname/IP address to listen on (blank for all).
3939
address: 0.0.0.0
4040
# Port number to listen on.
41+
# NOTE: This port number includes itself for traffic, and master port + 1 for diagnostics and activity logging. (For
42+
# example, a master port of 62031 will use 62032 for diagnostic and activity messages.)
4143
port: 62031
4244
# FNE access password.
4345
password: RPT1234
@@ -211,22 +213,16 @@ system:
211213
# Maximum number of missable pings before a peer is considered disconnected.
212214
maxMissedPings: 10
213215

214-
# Time in minutes between updates of the talkgroup rules.
215-
tgRuleUpdateTime: 10
216+
# Time in minutes between updates of the ACL rules.
217+
aclRuleUpdateTime: 10
216218

217219
# Flag indicating the TGID information for this master will be sent to its peers.
218220
sendTalkgroups: true
219221

220-
# Flag indicating the FNE should use an alternate port dedicated to diagnostic and activity
221-
# log processing. This port number is always: master port + 1 (so for example, a master port
222-
# of 62031 will use 62032 for diagnostic and activity messages.)
223-
# NOTE: Disabling useAlternatePortForDiagnostics will result in some tools like, SysView, to stop working properly.
224-
# SysView requires useAlternatePortForDiagnostics to receive peer status updates.
225-
useAlternatePortForDiagnostics: true
226-
# Flag indicating whether or not the host activity log will be sent to the network.
227-
# NOTE: Disabling allowActivityTransfer will result in some tools like, SysView, to stop working properly.
228-
# SysView requires allowActivityTransfer to receive peer status updates.
229-
allowActivityTransfer: true
222+
# Flag indicating when this FNE instance receives peer link configuration updates, it will save those
223+
# peer link configurations.
224+
peerLinkSaveACL: false
225+
230226
# Flag indicating whether or not the host diagnostic log will be sent to the network.
231227
allowDiagnosticTransfer: true
232228

src/bridge/BridgeMain.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ int main(int argc, char** argv)
263263
#endif
264264

265265
uint32_t hash = ::strtoul(__GIT_VER_HASH__, 0, 16);
266-
__SET_UINT32(hash, g_gitHashBytes, 0U);
266+
SET_UINT32(hash, g_gitHashBytes, 0U);
267267

268268
if (argv[0] != nullptr && *argv[0] != 0)
269269
g_progExe = std::string(argv[0]);

src/bridge/HostBridge.cpp

Lines changed: 24 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ HostBridge::HostBridge(const std::string& confFile) :
324324
m_voxSampleLevel(30.0f),
325325
m_dropTimeMS(180U),
326326
m_localDropTime(1000U, 0U, 180U),
327-
m_udpCallClock(1000U, 0U, 80U),
327+
m_udpCallClock(1000U, 0U, 160U),
328328
m_udpHangTime(1000U, 0U, 180U),
329329
m_udpDropTime(1000U, 0U, 180U),
330330
m_detectAnalogMDC1200(false),
@@ -1100,9 +1100,6 @@ bool HostBridge::createNetwork()
11001100
if (m_udpUseULaw && m_udpMetadata)
11011101
m_udpMetadata = false; // metadata isn't supported when encoding uLaw
11021102

1103-
if (m_udpSilenceDuringHang && m_udpRTPFrames)
1104-
m_udpCallClock = Timer(1000U, 0U, 160U); // packets every 160ms
1105-
11061103
yaml::Node tekConf = networkConf["tek"];
11071104
bool tekEnable = tekConf["enable"].as<bool>(false);
11081105
std::string tekAlgo = tekConf["tekAlgo"].as<std::string>();
@@ -1326,14 +1323,13 @@ void HostBridge::processUDPAudio()
13261323
if (m_udpNoIncludeLength) {
13271324
pcmLength = length;
13281325
} else {
1329-
pcmLength = __GET_UINT32(buffer, 0U);
1326+
pcmLength = GET_UINT32(buffer, 0U);
13301327
}
13311328

13321329
if (m_udpRTPFrames || m_udpUsrp)
13331330
pcmLength = MBE_SAMPLES_LENGTH * 2U;
13341331

1335-
UInt8Array __pcm = std::make_unique<uint8_t[]>(pcmLength);
1336-
uint8_t* pcm = __pcm.get();
1332+
DECLARE_UINT8_ARRAY(pcm, pcmLength);
13371333

13381334
if (!m_udpUsrp) {
13391335
if (m_udpRTPFrames) {
@@ -1404,7 +1400,7 @@ void HostBridge::processUDPAudio()
14041400
}
14051401

14061402
if (m_udpMetadata) {
1407-
req->srcId = __GET_UINT32(buffer, pcmLength + 8U);
1403+
req->srcId = GET_UINT32(buffer, pcmLength + 8U);
14081404
}
14091405

14101406
m_udpPackets.push_back(req);
@@ -1454,8 +1450,8 @@ void HostBridge::processDMRNetwork(uint8_t* buffer, uint32_t length)
14541450
// process network message header
14551451
uint8_t seqNo = buffer[4U];
14561452

1457-
uint32_t srcId = __GET_UINT16(buffer, 5U);
1458-
uint32_t dstId = __GET_UINT16(buffer, 8U);
1453+
uint32_t srcId = GET_UINT24(buffer, 5U);
1454+
uint32_t dstId = GET_UINT24(buffer, 8U);
14591455

14601456
FLCO::E flco = (buffer[15U] & 0x40U) == 0x40U ? FLCO::PRIVATE : FLCO::GROUP;
14611457

@@ -1699,7 +1695,7 @@ void HostBridge::decodeDMRAudioFrame(uint8_t* ambe, uint32_t srcId, uint32_t dst
16991695
::memcpy(audioData, pcm, MBE_SAMPLES_LENGTH);
17001696
}
17011697
else {
1702-
__SET_UINT32(MBE_SAMPLES_LENGTH, audioData, 0U);
1698+
SET_UINT32(MBE_SAMPLES_LENGTH, audioData, 0U);
17031699
::memcpy(audioData + 4U, pcm, MBE_SAMPLES_LENGTH);
17041700
}
17051701

@@ -1720,19 +1716,19 @@ void HostBridge::decodeDMRAudioFrame(uint8_t* ambe, uint32_t srcId, uint32_t dst
17201716
}
17211717
}
17221718
else {
1723-
__SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
1719+
SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
17241720
::memcpy(audioData + 4U, pcm, MBE_SAMPLES_LENGTH * 2U);
17251721
}
17261722
}
17271723
else {
17281724
length = (MBE_SAMPLES_LENGTH * 2U) + 12U;
17291725
audioData = new uint8_t[(MBE_SAMPLES_LENGTH * 2U) + 12U]; // PCM + (4 bytes (PCM length) + 4 bytes (srcId) + 4 bytes (dstId))
1730-
__SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
1726+
SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
17311727
::memcpy(audioData + 4U, pcm, MBE_SAMPLES_LENGTH * 2U);
17321728

17331729
// embed destination and source IDs
1734-
__SET_UINT32(dstId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 4U));
1735-
__SET_UINT32(srcId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 8U));
1730+
SET_UINT32(dstId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 4U));
1731+
SET_UINT32(srcId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 8U));
17361732
}
17371733
}
17381734
else {
@@ -1743,7 +1739,7 @@ void HostBridge::decodeDMRAudioFrame(uint8_t* ambe, uint32_t srcId, uint32_t dst
17431739

17441740
m_usrpSeqNo++;
17451741
usrpHeader[15U] = 1; // set PTT state to true
1746-
__SET_UINT32(m_usrpSeqNo, usrpHeader, 4U);
1742+
SET_UINT32(m_usrpSeqNo, usrpHeader, 4U);
17471743

17481744
::memcpy(usrpHeader, "USRP", 4);
17491745
::memcpy(audioData, usrpHeader, USRP_HEADER_LENGTH); // copy USRP header into the UDP payload
@@ -1975,8 +1971,8 @@ void HostBridge::processP25Network(uint8_t* buffer, uint32_t length)
19751971
// handle LDU, TDU or TSDU frame
19761972
uint8_t lco = buffer[4U];
19771973

1978-
uint32_t srcId = __GET_UINT16(buffer, 5U);
1979-
uint32_t dstId = __GET_UINT16(buffer, 8U);
1974+
uint32_t srcId = GET_UINT24(buffer, 5U);
1975+
uint32_t dstId = GET_UINT24(buffer, 8U);
19801976

19811977
uint8_t lsd1 = buffer[20U];
19821978
uint8_t lsd2 = buffer[21U];
@@ -2026,7 +2022,7 @@ void HostBridge::processP25Network(uint8_t* buffer, uint32_t length)
20262022
if (frameType == FrameType::HDU_VALID) {
20272023
m_callAlgoId = buffer[181U];
20282024
if (m_callAlgoId != ALGO_UNENCRYPT) {
2029-
callKID = __GET_UINT16B(buffer, 182U);
2025+
callKID = GET_UINT16(buffer, 182U);
20302026

20312027
if (m_callAlgoId != m_tekAlgoId && callKID != m_tekKeyId) {
20322028
m_callAlgoId = ALGO_UNENCRYPT;
@@ -2089,7 +2085,7 @@ void HostBridge::processP25Network(uint8_t* buffer, uint32_t length)
20892085

20902086
if (duid == DUID::LDU2 && !m_ignoreCall) {
20912087
m_callAlgoId = data[88U];
2092-
callKID = __GET_UINT16B(buffer, 89U);
2088+
callKID = GET_UINT16(buffer, 89U);
20932089
}
20942090

20952091
if (m_callAlgoId != ALGO_UNENCRYPT) {
@@ -2379,7 +2375,7 @@ void HostBridge::decodeP25AudioFrame(uint8_t* ldu, uint32_t srcId, uint32_t dstI
23792375
::memcpy(audioData, pcm, MBE_SAMPLES_LENGTH);
23802376
}
23812377
else {
2382-
__SET_UINT32(MBE_SAMPLES_LENGTH, audioData, 0U);
2378+
SET_UINT32(MBE_SAMPLES_LENGTH, audioData, 0U);
23832379
::memcpy(audioData + 4U, pcm, MBE_SAMPLES_LENGTH);
23842380
}
23852381

@@ -2400,19 +2396,19 @@ void HostBridge::decodeP25AudioFrame(uint8_t* ldu, uint32_t srcId, uint32_t dstI
24002396
}
24012397
}
24022398
else {
2403-
__SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
2399+
SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
24042400
::memcpy(audioData + 4U, pcm, MBE_SAMPLES_LENGTH * 2U);
24052401
}
24062402
}
24072403
else {
24082404
length = (MBE_SAMPLES_LENGTH * 2U) + 12U;
24092405
audioData = new uint8_t[(MBE_SAMPLES_LENGTH * 2U) + 12U]; // PCM + (4 bytes (PCM length) + 4 bytes (srcId) + 4 bytes (dstId))
2410-
__SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
2406+
SET_UINT32((MBE_SAMPLES_LENGTH * 2U), audioData, 0U);
24112407
::memcpy(audioData + 4U, pcm, MBE_SAMPLES_LENGTH * 2U);
24122408

24132409
// embed destination and source IDs
2414-
__SET_UINT32(dstId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 4U));
2415-
__SET_UINT32(srcId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 8U));
2410+
SET_UINT32(dstId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 4U));
2411+
SET_UINT32(srcId, audioData, ((MBE_SAMPLES_LENGTH * 2U) + 8U));
24162412
}
24172413
}
24182414
else {
@@ -2423,7 +2419,7 @@ void HostBridge::decodeP25AudioFrame(uint8_t* ldu, uint32_t srcId, uint32_t dstI
24232419

24242420
m_usrpSeqNo++;
24252421
usrpHeader[15U] = 1; // set PTT state to true
2426-
__SET_UINT32(m_usrpSeqNo, usrpHeader, 4U);
2422+
SET_UINT32(m_usrpSeqNo, usrpHeader, 4U);
24272423

24282424
::memcpy(usrpHeader, "USRP", 4);
24292425
::memcpy(audioData, usrpHeader, USRP_HEADER_LENGTH); // copy USRP header into the UDP payload
@@ -2669,8 +2665,7 @@ void HostBridge::generatePreambleTone()
26692665
ma_waveform_set_frequency(&m_maSineWaveform, m_preambleTone);
26702666

26712667
ma_uint32 pcmBytes = frameCount * ma_get_bytes_per_frame(m_maDevice.capture.format, m_maDevice.capture.channels);
2672-
UInt8Array __sine = std::make_unique<uint8_t[]>(pcmBytes);
2673-
uint8_t* sine = __sine.get();
2668+
DECLARE_UINT8_ARRAY(sine, pcmBytes);
26742669

26752670
ma_waveform_read_pcm_frames(&m_maSineWaveform, sine, frameCount, NULL);
26762671

@@ -2956,8 +2951,7 @@ void* HostBridge::threadAudioProcess(void* arg)
29562951

29572952
if (bridge->m_audioDetect && !bridge->m_callInProgress) {
29582953
ma_uint32 pcmBytes = MBE_SAMPLES_LENGTH * ma_get_bytes_per_frame(bridge->m_maDevice.capture.format, bridge->m_maDevice.capture.channels);
2959-
UInt8Array __pcm = std::make_unique<uint8_t[]>(pcmBytes);
2960-
uint8_t* pcm = __pcm.get();
2954+
DECLARE_UINT8_ARRAY(pcm, pcmBytes);
29612955

29622956
int pcmIdx = 0;
29632957
for (uint32_t smpIdx = 0; smpIdx < MBE_SAMPLES_LENGTH; smpIdx++) {
@@ -3095,7 +3089,6 @@ void* HostBridge::threadUDPAudioProcess(void* arg)
30953089
}
30963090
}
30973091

3098-
bridge->m_inputAudio.addData(samples, MBE_SAMPLES_LENGTH);
30993092
bridge->m_trafficFromUDP = true;
31003093

31013094
// force start a call if one isn't already in progress

src/bridge/mdc/mdc_common.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* GPLv2 Open Source. Use is subject to license terms.
55
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66
*
7+
* Copyright (c) 2011 Matthew Kaufman
8+
*
79
*/
810
/*-
911
* mdc_common.c

src/bridge/mdc/mdc_decode.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* GPLv2 Open Source. Use is subject to license terms.
55
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66
*
7+
* Copyright (c) 2011 Matthew Kaufman
8+
*
79
*/
810
/*-
911
* mdc_decode.c

src/bridge/mdc/mdc_decode.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* GPLv2 Open Source. Use is subject to license terms.
55
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66
*
7+
* Copyright (c) 2011 Matthew Kaufman
8+
*
79
*/
810
/**
911
* @file mdc_decode.h

src/bridge/mdc/mdc_encode.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* GPLv2 Open Source. Use is subject to license terms.
55
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66
*
7+
* Copyright (c) 2011 Matthew Kaufman
8+
*
79
*/
810
/*-
911
* mdc_encode.c

src/bridge/mdc/mdc_encode.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* GPLv2 Open Source. Use is subject to license terms.
55
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
66
*
7+
* Copyright (c) 2011 Matthew Kaufman
8+
*
79
*/
810
/**
911
* @file mdc_encode.h

0 commit comments

Comments
 (0)