tweaking how the TC socket deals with errors

main
Tom Early 2 years ago
parent 07509bd347
commit 71aff90304

@ -47,7 +47,7 @@ bool CController::Start()
usrp_rx_num = calcNumerator(g_Conf.GetGain(EGainType::usrprx)); usrp_rx_num = calcNumerator(g_Conf.GetGain(EGainType::usrprx));
usrp_tx_num = calcNumerator(g_Conf.GetGain(EGainType::usrptx)); usrp_tx_num = calcNumerator(g_Conf.GetGain(EGainType::usrptx));
if (InitVocoders() || tcClient.Initialize(g_Conf.GetAddress(), g_Conf.GetTCMods(), g_Conf.GetPort())) if (InitVocoders() || tcClient.Open(g_Conf.GetAddress(), g_Conf.GetTCMods(), g_Conf.GetPort()))
{ {
keep_running = false; keep_running = false;
return true; return true;
@ -250,44 +250,48 @@ void CController::ReadReflectorThread()
{ {
while (keep_running) while (keep_running)
{ {
tcClient.ReConnect();
std::queue<std::unique_ptr<STCPacket>> queue; std::queue<std::unique_ptr<STCPacket>> queue;
// wait up to 100 ms to read something on the unix port // wait up to 100 ms to read something on the unix port
if (tcClient.Receive(queue, 100)) if (tcClient.Receive(queue, 100))
{ {
while (! queue.empty()) if (tcClient.ReConnect())
{
std::cerr << "Unrecoverable ERROR! Quitting..." << std::endl;
exit(1);
}
}
while (! queue.empty())
{
// create a shared pointer to a new packet
// there is only one CTranscoderPacket created for each new STCPacket received from the reflector
auto packet = std::make_shared<CTranscoderPacket>(*queue.front());
queue.pop();
switch (packet->GetCodecIn())
{ {
// create a shared pointer to a new packet case ECodecType::dstar:
// there is only one CTranscoderPacket created for each new STCPacket received from the reflector dstar_device->AddPacket(packet);
auto packet = std::make_shared<CTranscoderPacket>(*queue.front()); break;
queue.pop(); case ECodecType::dmr:
switch (packet->GetCodecIn())
{
case ECodecType::dstar:
dstar_device->AddPacket(packet);
break;
case ECodecType::dmr:
#ifdef USE_SW_AMBE2 #ifdef USE_SW_AMBE2
swambe2_queue.push(packet); swambe2_queue.push(packet);
#else #else
dmrsf_device->AddPacket(packet); dmrsf_device->AddPacket(packet);
#endif #endif
break; break;
case ECodecType::p25: case ECodecType::p25:
imbe_queue.push(packet); imbe_queue.push(packet);
break; break;
case ECodecType::usrp: case ECodecType::usrp:
usrp_queue.push(packet); usrp_queue.push(packet);
break; break;
case ECodecType::c2_1600: case ECodecType::c2_1600:
case ECodecType::c2_3200: case ECodecType::c2_3200:
codec2_queue.push(packet); codec2_queue.push(packet);
break; break;
default: default:
Dump(packet, "ERROR: Received a reflector packet with unknown Codec:"); Dump(packet, "ERROR: Received a reflector packet with unknown Codec:");
break; break;
}
} }
} }
} }
@ -602,7 +606,14 @@ void CController::ProcessUSRPThread()
void CController::SendToReflector(std::shared_ptr<CTranscoderPacket> packet) void CController::SendToReflector(std::shared_ptr<CTranscoderPacket> packet)
{ {
// send the packet over the socket // send the packet over the socket
tcClient.Send(packet->GetTCPacket()); while (tcClient.Send(packet->GetTCPacket()))
{
if (tcClient.ReConnect())
{
std::cerr << "Unrecoverable ERROR, quiting!" << std::endl;
exit(1);
}
}
packet->Sent(); packet->Sent();
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.