mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 23:45:49 +08:00
Set the incoming sequence number correctly.
This commit is contained in:
@@ -285,6 +285,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
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);
|
unsigned int ts = (buffer[4U] << 24) | (buffer[5U] << 16) | (buffer[6U] << 8) | (buffer[7U] << 0);
|
||||||
|
unsigned char iSeqNo = buffer[8U];
|
||||||
|
|
||||||
if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_ACK)) {
|
if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_ACK)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
@@ -298,6 +299,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogDebug("IAX PING received");
|
LogDebug("IAX PING received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
writePong(ts);
|
writePong(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_PONG)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_PONG)) {
|
||||||
@@ -305,6 +308,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogDebug("IAX PONG received");
|
LogDebug("IAX PONG received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_ACCEPT)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_ACCEPT)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
@@ -315,6 +320,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_dCallNo = ((buffer[0U] << 8) | (buffer[1U] << 0)) & 0x7FFFU;
|
m_dCallNo = ((buffer[0U] << 8) | (buffer[1U] << 0)) & 0x7FFFU;
|
||||||
|
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
m_retryTimer.stop();
|
m_retryTimer.stop();
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REGREJ)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REGREJ)) {
|
||||||
@@ -340,6 +347,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogDebug("IAX RINGING received");
|
LogDebug("IAX RINGING received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REGAUTH)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_REGAUTH)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
@@ -357,6 +366,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_seed = std::string((char*)(buffer + 18U), buffer[17U]);
|
m_seed = std::string((char*)(buffer + 18U), buffer[17U]);
|
||||||
|
|
||||||
m_status = IAXS_REGISTERING;
|
m_status = IAXS_REGISTERING;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
m_retryTimer.start();
|
m_retryTimer.start();
|
||||||
writeRegReq();
|
writeRegReq();
|
||||||
}
|
}
|
||||||
@@ -376,6 +387,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_seed = std::string((char*)(buffer + 18U), buffer[17U]);
|
m_seed = std::string((char*)(buffer + 18U), buffer[17U]);
|
||||||
|
|
||||||
m_status = IAXS_AUTHORISING;
|
m_status = IAXS_AUTHORISING;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
m_retryTimer.start();
|
m_retryTimer.start();
|
||||||
writeAuthRep();
|
writeAuthRep();
|
||||||
}
|
}
|
||||||
@@ -384,6 +397,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogDebug("IAX REGACK received");
|
LogDebug("IAX REGACK received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
|
|
||||||
if (m_status == IAXS_CONNECTING)
|
if (m_status == IAXS_CONNECTING)
|
||||||
@@ -393,6 +408,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogDebug("IAX HANGUP received");
|
LogDebug("IAX HANGUP received");
|
||||||
#endif
|
#endif
|
||||||
LogError("Hangup from the IAX gateway");
|
LogError("Hangup from the IAX gateway");
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
|
|
||||||
m_status = IAXS_DISCONNECTED;
|
m_status = IAXS_DISCONNECTED;
|
||||||
@@ -406,6 +423,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
if (m_dCallNo == 0U)
|
if (m_dCallNo == 0U)
|
||||||
m_dCallNo = ((buffer[0U] << 8) | (buffer[1U] << 0)) & 0x7FFFU;
|
m_dCallNo = ((buffer[0U] << 8) | (buffer[1U] << 0)) & 0x7FFFU;
|
||||||
|
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
|
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
@@ -417,29 +436,39 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogDebug("IAX VNAK received");
|
LogDebug("IAX VNAK received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_STOP_SOUNDS)) {
|
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_STOP_SOUNDS)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX STOP SOUNDS received");
|
LogDebug("IAX STOP SOUNDS received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_OPTION)) {
|
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_OPTION)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX OPTION received");
|
LogDebug("IAX OPTION received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_TEXT, 0U)) {
|
} else if (compareFrame(buffer, AST_FRAME_TEXT, 0U)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX TEXT received - %s", buffer + 12U);
|
LogDebug("IAX TEXT received - %s", buffer + 12U);
|
||||||
#endif
|
#endif
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_LAGRQ)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_LAGRQ)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX LAGRQ received");
|
LogDebug("IAX LAGRQ received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
writeLagRp(ts);
|
writeLagRp(ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_VOICE, AST_FORMAT_ULAW)) {
|
} else if (compareFrame(buffer, AST_FRAME_VOICE, AST_FORMAT_ULAW)) {
|
||||||
@@ -447,6 +476,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogDebug("IAX ULAW received");
|
LogDebug("IAX ULAW received");
|
||||||
#endif
|
#endif
|
||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(ts);
|
||||||
|
|
||||||
if (!m_enabled)
|
if (!m_enabled)
|
||||||
|
|||||||
Reference in New Issue
Block a user