Handle incoming Key On and Key Off events, and reduce the logging.

This commit is contained in:
Jonathan Naylor
2024-02-06 15:12:07 +00:00
parent 934827e808
commit e77fe3974c
3 changed files with 63 additions and 11 deletions

View File

@@ -125,7 +125,8 @@ m_rxLoss(0U),
m_rxFrames(0U),
m_rxDelay(0U),
m_rxDropped(0U),
m_rxOOO(0U)
m_rxOOO(0U),
m_keyed(false)
{
assert(!callsign.empty());
assert(!username.empty());
@@ -160,6 +161,10 @@ bool CFMIAXNetwork::open()
if (!ret)
return false;
m_dCallNo = 0U;
m_rxFrames = 0U;
m_keyed = false;
ret = writeNew(false);
if (!ret) {
m_socket.close();
@@ -169,9 +174,6 @@ bool CFMIAXNetwork::open()
m_status = IAXS_CONNECTING;
m_retryTimer.start();
m_dCallNo = 0U;
m_rxFrames = 0U;
return true;
}
@@ -222,9 +224,7 @@ bool CFMIAXNetwork::writeData(const float* data, unsigned int nSamples)
uLawEncode(audio, buffer + 4U, nSamples);
#if !defined(DEBUG_IAX)
if (m_debug)
#endif
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 4U + nSamples);
return m_socket.write(buffer, 4U + nSamples, m_addr, m_addrLen);
@@ -279,9 +279,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
return;
}
#if !defined(DEBUG_IAX)
if (m_debug)
#endif
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
unsigned int ts = (buffer[4U] << 24) | (buffer[5U] << 16) | (buffer[6U] << 8) | (buffer[7U] << 0);
@@ -289,6 +287,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_ACK)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX ACK received");
#endif
// Grab the destination call number if we don't have it already
@@ -296,6 +295,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
m_dCallNo = ((buffer[0U] << 8) | (buffer[1U] << 0)) & 0x7FFFU;
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_PING)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX PING received");
#endif
m_rxFrames++;
@@ -305,6 +305,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
writePong(ts);
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_PONG)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX PONG received");
#endif
m_rxFrames++;
@@ -313,6 +314,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_ACCEPT)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX ACCEPT received");
#endif
m_rxFrames++;
@@ -325,6 +327,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
m_pingTimer.start();
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REGREJ)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX REGREJ received");
#endif
LogError("Registraton rejected by the IAX gateway");
@@ -334,10 +337,13 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
m_status = IAXS_DISCONNECTED;
m_keyed = false;
m_retryTimer.stop();
m_pingTimer.stop();
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REJECT)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX REJECT received");
#endif
LogError("Command rejected by the IAX gateway");
@@ -347,10 +353,13 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
m_status = IAXS_DISCONNECTED;
m_keyed = false;
m_retryTimer.stop();
m_pingTimer.stop();
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_RINGING)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX RINGING received");
#endif
m_rxFrames++;
@@ -359,6 +368,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REGAUTH)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX REGAUTH received");
#endif
m_rxFrames++;
@@ -376,6 +386,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
}
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_AUTHREQ)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX AUTHREQ received");
#endif
m_rxFrames++;
@@ -391,6 +402,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
}
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REGACK)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX REGACK received");
#endif
m_rxFrames++;
@@ -403,6 +415,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
m_pingTimer.start();
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_HANGUP)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX HANGUP received");
#endif
LogError("Hangup from the IAX gateway");
@@ -411,10 +424,13 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
m_status = IAXS_DISCONNECTED;
m_keyed = false;
m_retryTimer.stop();
m_pingTimer.stop();
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_ANSWER)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX ANSWER received");
#endif
m_rxFrames++;
@@ -423,6 +439,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_VNAK)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX VNAK received");
#endif
LogError("Messages rejected by the IAX gateway");
@@ -432,10 +449,13 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
m_status = IAXS_DISCONNECTED;
m_keyed = false;
m_retryTimer.stop();
m_pingTimer.stop();
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_STOP_SOUNDS)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX STOP SOUNDS received");
#endif
m_rxFrames++;
@@ -444,6 +464,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_OPTION)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX OPTION received");
#endif
m_rxFrames++;
@@ -452,6 +473,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
} else if (compareFrame(buffer, AST_FRAME_TEXT, 0U)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX TEXT received - %s", buffer + 12U);
#endif
m_iSeqNo = iSeqNo + 1U;
@@ -459,6 +481,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeAck(ts);
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_LAGRQ)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX LAGRQ received");
#endif
m_rxFrames++;
@@ -468,14 +491,38 @@ void CFMIAXNetwork::clock(unsigned int ms)
writeLagRp(ts);
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_LAGRP)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX LAGRP received");
#endif
m_rxFrames++;
m_iSeqNo = iSeqNo + 1U;
writeAck(ts);
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_KEY)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX KEY received");
#endif
m_rxFrames++;
m_iSeqNo = iSeqNo + 1U;
writeAck(ts);
m_keyed = true;
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_UNKEY)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX UNKEY received");
#endif
m_rxFrames++;
m_iSeqNo = iSeqNo + 1U;
writeAck(ts);
m_keyed = false;
} else if (compareFrame(buffer, AST_FRAME_VOICE, AST_FORMAT_ULAW)) {
#if defined(DEBUG_IAX)
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
LogDebug("IAX ULAW received");
#endif
m_rxFrames++;
@@ -486,6 +533,9 @@ void CFMIAXNetwork::clock(unsigned int ms)
if (!m_enabled)
return;
if (!m_keyed)
return;
m_buffer.addData(buffer + 12U, length - 12U);
} else if ((buffer[0U] & 0x80U) == 0x00U) {
#if defined(DEBUG_IAX)
@@ -494,6 +544,9 @@ void CFMIAXNetwork::clock(unsigned int ms)
if (!m_enabled)
return;
if (!m_keyed)
return;
m_buffer.addData(buffer + 4U, length - 4U);
} else {
CUtils::dump(2U, "Unknown IAX message received", buffer, length);
@@ -1158,9 +1211,7 @@ bool CFMIAXNetwork::writeAudio(const short* audio, unsigned int length)
uLawEncode(audio, buffer + 12U, length);
#if !defined(DEBUG_IAX)
if (m_debug)
#endif
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U + length);
return m_socket.write(buffer, 12U + length, m_addr, m_addrLen);

View File

@@ -84,6 +84,7 @@ private:
unsigned short m_rxDelay;
unsigned int m_rxDropped;
unsigned int m_rxOOO;
bool m_keyed;
bool writeNew(bool retry);
bool writeAuthRep();

View File

@@ -19,6 +19,6 @@
#if !defined(VERSION_H)
#define VERSION_H
const char* VERSION = "20240204";
const char* VERSION = "20240206";
#endif