mirror of
https://github.com/g4klx/MMDVMHost
synced 2025-12-21 15:09:23 +08:00
Further changes for IAX based on tracing by Lenny.
This commit is contained in:
30
Conf.cpp
30
Conf.cpp
@@ -290,9 +290,10 @@ m_pocsagNetworkModeHang(3U),
|
|||||||
m_pocsagNetworkDebug(false),
|
m_pocsagNetworkDebug(false),
|
||||||
m_fmNetworkEnabled(false),
|
m_fmNetworkEnabled(false),
|
||||||
m_fmNetworkProtocol("USRP"),
|
m_fmNetworkProtocol("USRP"),
|
||||||
m_fmNetworkUsername("Dave"),
|
m_fmNetworkDomain("register.allstarlink.org"),
|
||||||
m_fmNetworkPassword("PASSWORD"),
|
m_fmNetworkPassword(),
|
||||||
m_fmNetworkNode("Node1"),
|
m_fmNetworkSource(),
|
||||||
|
m_fmNetworkDestination(),
|
||||||
m_fmNetworkSampleRate(48000U),
|
m_fmNetworkSampleRate(48000U),
|
||||||
m_fmNetworkSquelchFile(),
|
m_fmNetworkSquelchFile(),
|
||||||
m_fmGatewayAddress(),
|
m_fmGatewayAddress(),
|
||||||
@@ -1041,12 +1042,14 @@ bool CConf::read()
|
|||||||
m_fmNetworkEnabled = ::atoi(value) == 1;
|
m_fmNetworkEnabled = ::atoi(value) == 1;
|
||||||
else if (::strcmp(key, "Protocol") == 0)
|
else if (::strcmp(key, "Protocol") == 0)
|
||||||
m_fmNetworkProtocol = value;
|
m_fmNetworkProtocol = value;
|
||||||
else if (::strcmp(key, "Username") == 0)
|
else if (::strcmp(key, "Domain") == 0)
|
||||||
m_fmNetworkUsername = value;
|
m_fmNetworkDomain = value;
|
||||||
else if (::strcmp(key, "Password") == 0)
|
else if (::strcmp(key, "Password") == 0)
|
||||||
m_fmNetworkPassword = value;
|
m_fmNetworkPassword = value;
|
||||||
else if (::strcmp(key, "Node") == 0)
|
else if (::strcmp(key, "Source") == 0)
|
||||||
m_fmNetworkNode = value;
|
m_fmNetworkSource = value;
|
||||||
|
else if (::strcmp(key, "Destination") == 0)
|
||||||
|
m_fmNetworkDestination = value;
|
||||||
else if (::strcmp(key, "SampleRate") == 0)
|
else if (::strcmp(key, "SampleRate") == 0)
|
||||||
m_fmNetworkSampleRate = (unsigned int)::atoi(value);
|
m_fmNetworkSampleRate = (unsigned int)::atoi(value);
|
||||||
else if (::strcmp(key, "SquelchFile") == 0)
|
else if (::strcmp(key, "SquelchFile") == 0)
|
||||||
@@ -2297,9 +2300,9 @@ std::string CConf::getFMNetworkProtocol() const
|
|||||||
return m_fmNetworkProtocol;
|
return m_fmNetworkProtocol;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CConf::getFMNetworkUsername() const
|
std::string CConf::getFMNetworkDomain() const
|
||||||
{
|
{
|
||||||
return m_fmNetworkUsername;
|
return m_fmNetworkDomain;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CConf::getFMNetworkPassword() const
|
std::string CConf::getFMNetworkPassword() const
|
||||||
@@ -2307,9 +2310,14 @@ std::string CConf::getFMNetworkPassword() const
|
|||||||
return m_fmNetworkPassword;
|
return m_fmNetworkPassword;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string CConf::getFMNetworkNode() const
|
std::string CConf::getFMNetworkSource() const
|
||||||
{
|
{
|
||||||
return m_fmNetworkNode;
|
return m_fmNetworkSource;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CConf::getFMNetworkDestination() const
|
||||||
|
{
|
||||||
|
return m_fmNetworkDestination;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int CConf::getFMNetworkSampleRate() const
|
unsigned int CConf::getFMNetworkSampleRate() const
|
||||||
|
|||||||
10
Conf.h
10
Conf.h
@@ -303,9 +303,10 @@ public:
|
|||||||
// The FM Network section
|
// The FM Network section
|
||||||
bool getFMNetworkEnabled() const;
|
bool getFMNetworkEnabled() const;
|
||||||
std::string getFMNetworkProtocol() const;
|
std::string getFMNetworkProtocol() const;
|
||||||
std::string getFMNetworkUsername() const;
|
std::string getFMNetworkDomain() const;
|
||||||
std::string getFMNetworkPassword() const;
|
std::string getFMNetworkPassword() const;
|
||||||
std::string getFMNetworkNode() const;
|
std::string getFMNetworkSource() const;
|
||||||
|
std::string getFMNetworkDestination() const;
|
||||||
unsigned int getFMNetworkSampleRate() const;
|
unsigned int getFMNetworkSampleRate() const;
|
||||||
std::string getFMNetworkSquelchFile() const;
|
std::string getFMNetworkSquelchFile() const;
|
||||||
std::string getFMGatewayAddress() const;
|
std::string getFMGatewayAddress() const;
|
||||||
@@ -628,9 +629,10 @@ private:
|
|||||||
|
|
||||||
bool m_fmNetworkEnabled;
|
bool m_fmNetworkEnabled;
|
||||||
std::string m_fmNetworkProtocol;
|
std::string m_fmNetworkProtocol;
|
||||||
std::string m_fmNetworkUsername;
|
std::string m_fmNetworkDomain;
|
||||||
std::string m_fmNetworkPassword;
|
std::string m_fmNetworkPassword;
|
||||||
std::string m_fmNetworkNode;
|
std::string m_fmNetworkSource;
|
||||||
|
std::string m_fmNetworkDestination;
|
||||||
unsigned int m_fmNetworkSampleRate;
|
unsigned int m_fmNetworkSampleRate;
|
||||||
std::string m_fmNetworkSquelchFile;
|
std::string m_fmNetworkSquelchFile;
|
||||||
std::string m_fmGatewayAddress;
|
std::string m_fmGatewayAddress;
|
||||||
|
|||||||
148
FMIAXNetwork.cpp
148
FMIAXNetwork.cpp
@@ -126,20 +126,21 @@ const unsigned int BUFFER_LENGTH = 1500U;
|
|||||||
#define MD5_DIGEST_STRING_LENGTH 16
|
#define MD5_DIGEST_STRING_LENGTH 16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
CFMIAXNetwork::CFMIAXNetwork(const std::string& callsign, const std::string& username, const std::string& password, const std::string& node, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) :
|
CFMIAXNetwork::CFMIAXNetwork(const std::string& domain, const std::string& password, const std::string& source, const std::string& destination, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug) :
|
||||||
m_callsign(callsign),
|
|
||||||
m_username(username),
|
|
||||||
m_password(password),
|
m_password(password),
|
||||||
m_node(node),
|
m_source(source),
|
||||||
|
m_destination(destination),
|
||||||
m_socket(localAddress, localPort),
|
m_socket(localAddress, localPort),
|
||||||
m_addr(),
|
m_domainAddr(),
|
||||||
m_addrLen(0U),
|
m_domainAddrLen(0U),
|
||||||
|
m_serverAddr(),
|
||||||
|
m_serverAddrLen(0U),
|
||||||
m_debug(debug),
|
m_debug(debug),
|
||||||
m_enabled(false),
|
m_enabled(false),
|
||||||
m_buffer(2000U, "FM Network"),
|
m_buffer(2000U, "FM Network"),
|
||||||
m_status(IAXS_DISCONNECTED),
|
m_status(IAXS_DISCONNECTED),
|
||||||
m_retryTimer(1000U, 0U, 500U),
|
m_retryTimer(1000U, 0U, 500U),
|
||||||
m_pingTimer(1000U, 20U),
|
m_pingTimer(1000U, 2U),
|
||||||
m_seed(),
|
m_seed(),
|
||||||
m_timestamp(),
|
m_timestamp(),
|
||||||
m_sCallNo(0U),
|
m_sCallNo(0U),
|
||||||
@@ -159,20 +160,18 @@ m_random()
|
|||||||
, m_provider(0UL)
|
, m_provider(0UL)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
assert(!callsign.empty());
|
assert(!domain.empty());
|
||||||
assert(!username.empty());
|
|
||||||
assert(!password.empty());
|
assert(!password.empty());
|
||||||
assert(!node.empty());
|
assert(!source.empty());
|
||||||
|
assert(!destination.empty());
|
||||||
assert(gatewayPort > 0U);
|
assert(gatewayPort > 0U);
|
||||||
assert(!gatewayAddress.empty());
|
assert(!gatewayAddress.empty());
|
||||||
|
|
||||||
if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_addr, m_addrLen) != 0)
|
if (CUDPSocket::lookup(domain, gatewayPort, m_domainAddr, m_domainAddrLen) != 0)
|
||||||
m_addrLen = 0U;
|
m_domainAddrLen = 0U;
|
||||||
|
|
||||||
// Remove any trailing letters in the callsign
|
if (CUDPSocket::lookup(gatewayAddress, gatewayPort, m_serverAddr, m_serverAddrLen) != 0)
|
||||||
size_t pos = callsign.find_first_of(' ');
|
m_serverAddrLen = 0U;
|
||||||
if (pos != std::string::npos)
|
|
||||||
m_callsign = callsign.substr(0U, pos);
|
|
||||||
|
|
||||||
std::random_device rd;
|
std::random_device rd;
|
||||||
std::mt19937 mt(rd());
|
std::mt19937 mt(rd());
|
||||||
@@ -185,8 +184,13 @@ CFMIAXNetwork::~CFMIAXNetwork()
|
|||||||
|
|
||||||
bool CFMIAXNetwork::open()
|
bool CFMIAXNetwork::open()
|
||||||
{
|
{
|
||||||
if (m_addrLen == 0U) {
|
if (m_domainAddrLen == 0U) {
|
||||||
LogError("Unable to resolve the address of the FM Gateway");
|
LogError("Unable to resolve the address of the ASL Registration Server");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_serverAddrLen == 0U) {
|
||||||
|
LogError("Unable to resolve the address of the IAX Gateway");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +203,7 @@ bool CFMIAXNetwork::open()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bool ret = m_socket.open(m_addr);
|
bool ret = m_socket.open(m_domainAddr);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -291,20 +295,21 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
|
|
||||||
m_pingTimer.clock(ms);
|
m_pingTimer.clock(ms);
|
||||||
if (m_pingTimer.isRunning() && m_pingTimer.hasExpired()) {
|
if (m_pingTimer.isRunning() && m_pingTimer.hasExpired()) {
|
||||||
writePing();
|
writePing(m_serverAddr, m_serverAddrLen);
|
||||||
m_pingTimer.start();
|
m_pingTimer.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char buffer[BUFFER_LENGTH];
|
unsigned char buffer[BUFFER_LENGTH];
|
||||||
|
|
||||||
sockaddr_storage addr;
|
sockaddr_storage addr;
|
||||||
unsigned int addrlen;
|
unsigned int addrLen;
|
||||||
int length = m_socket.read(buffer, BUFFER_LENGTH, addr, addrlen);
|
int length = m_socket.read(buffer, BUFFER_LENGTH, addr, addrLen);
|
||||||
if (length <= 0)
|
if (length <= 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Check if the data is for us
|
// Check if the data is for us
|
||||||
if (!CUDPSocket::match(addr, m_addr, IMT_ADDRESS_AND_PORT)) {
|
if (!CUDPSocket::match(addr, m_domainAddr, IMT_ADDRESS_AND_PORT) &&
|
||||||
|
!CUDPSocket::match(addr, m_serverAddr, IMT_ADDRESS_AND_PORT)) {
|
||||||
LogMessage("FM IAX packet received from an invalid source");
|
LogMessage("FM IAX packet received from an invalid source");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -334,8 +339,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
writePong(ts);
|
writePong(addr, addrLen, ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_PONG)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_PONG)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -344,7 +349,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_CALLTOKEN)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_CALLTOKEN)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -363,7 +368,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
|
|
||||||
LogMessage("IAX ACCEPT received");
|
LogMessage("IAX ACCEPT received");
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
m_status = IAXS_CONNECTED;
|
m_status = IAXS_CONNECTED;
|
||||||
m_retryTimer.stop();
|
m_retryTimer.stop();
|
||||||
@@ -377,7 +382,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
|
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
m_status = IAXS_DISCONNECTED;
|
m_status = IAXS_DISCONNECTED;
|
||||||
m_keyed = false;
|
m_keyed = false;
|
||||||
@@ -392,7 +397,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
|
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
m_status = IAXS_DISCONNECTED;
|
m_status = IAXS_DISCONNECTED;
|
||||||
m_keyed = false;
|
m_keyed = false;
|
||||||
@@ -407,7 +412,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
uint16_t method = getIEUInt16(buffer, length, IAX_IE_AUTHMETHODS);
|
uint16_t method = getIEUInt16(buffer, length, IAX_IE_AUTHMETHODS);
|
||||||
if ((method & IAX_AUTH_MD5) == 0x00U) {
|
if ((method & IAX_AUTH_MD5) == 0x00U) {
|
||||||
@@ -435,17 +440,15 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
m_status = IAXS_REGISTERED;
|
m_status = IAXS_REGISTERED;
|
||||||
m_retryTimer.stop();
|
|
||||||
m_pingTimer.start();
|
|
||||||
|
|
||||||
writeNew();
|
writeNew();
|
||||||
|
|
||||||
m_status = IAXS_CONNECTING;
|
m_status = IAXS_CONNECTING;
|
||||||
m_retryTimer.stop();
|
m_retryTimer.start();
|
||||||
m_pingTimer.start();
|
m_pingTimer.stop();
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_HANGUP)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_HANGUP)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -453,7 +456,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
LogError("Hangup from the IAX gateway");
|
LogError("Hangup from the IAX gateway");
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
m_status = IAXS_DISCONNECTED;
|
m_status = IAXS_DISCONNECTED;
|
||||||
m_keyed = false;
|
m_keyed = false;
|
||||||
@@ -469,7 +472,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
|
|
||||||
LogMessage("IAX ANSWER received");
|
LogMessage("IAX ANSWER received");
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_VNAK)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_VNAK)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -479,7 +482,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, 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)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -488,7 +491,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
|
|
||||||
LogMessage("IAX TEXT received - %.*s", length - 12U, buffer + 12U);
|
LogMessage("IAX TEXT received - %.*s", length - 12U, buffer + 12U);
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, 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)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -497,8 +500,8 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeLagRq();
|
writeLagRq(addr, addrLen);
|
||||||
writeLagRp(ts);
|
writeLagRp(addr, addrLen, ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_LAGRP)) {
|
} else if (compareFrame(buffer, AST_FRAME_IAX, IAX_COMMAND_LAGRP)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -507,7 +510,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_KEY)) {
|
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_KEY)) {
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Received", buffer, length);
|
||||||
@@ -516,7 +519,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
m_keyed = true;
|
m_keyed = true;
|
||||||
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_UNKEY)) {
|
} else if (compareFrame(buffer, AST_FRAME_CONTROL, AST_CONTROL_UNKEY)) {
|
||||||
@@ -527,7 +530,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
m_keyed = false;
|
m_keyed = false;
|
||||||
} else if (compareFrame(buffer, AST_FRAME_VOICE, AST_FORMAT_ULAW)) {
|
} else if (compareFrame(buffer, AST_FRAME_VOICE, AST_FORMAT_ULAW)) {
|
||||||
@@ -538,7 +541,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
|
|
||||||
if (!m_enabled)
|
if (!m_enabled)
|
||||||
return;
|
return;
|
||||||
@@ -564,7 +567,7 @@ void CFMIAXNetwork::clock(unsigned int ms)
|
|||||||
m_rxFrames++;
|
m_rxFrames++;
|
||||||
m_iSeqNo = iSeqNo + 1U;
|
m_iSeqNo = iSeqNo + 1U;
|
||||||
|
|
||||||
writeAck(ts);
|
writeAck(addr, addrLen, ts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -665,9 +668,9 @@ bool CFMIAXNetwork::writeNew()
|
|||||||
|
|
||||||
unsigned int pos = 0U;
|
unsigned int pos = 0U;
|
||||||
setIEUInt16(buffer, pos, IAX_IE_VERSION, IAX_PROTO_VERSION);
|
setIEUInt16(buffer, pos, IAX_IE_VERSION, IAX_PROTO_VERSION);
|
||||||
setIEString(buffer, pos, IAX_IE_CALLED_NUMBER, m_node);
|
setIEString(buffer, pos, IAX_IE_CALLED_NUMBER, m_destination);
|
||||||
setIEString(buffer, pos, IAX_IE_CODEC_PREFS, "DMLC");
|
setIEString(buffer, pos, IAX_IE_CODEC_PREFS, "DMLC");
|
||||||
setIEString(buffer, pos, IAX_IE_CALLING_NUMBER, m_username);
|
setIEString(buffer, pos, IAX_IE_CALLING_NUMBER, m_source);
|
||||||
setIEUInt8(buffer, pos, IAX_IE_CALLINGPRES, 0U);
|
setIEUInt8(buffer, pos, IAX_IE_CALLINGPRES, 0U);
|
||||||
setIEUInt8(buffer, pos, IAX_IE_CALLINGTON, 0U);
|
setIEUInt8(buffer, pos, IAX_IE_CALLINGTON, 0U);
|
||||||
setIEUInt16(buffer, pos, IAX_IE_CALLINGTNS, 0U);
|
setIEUInt16(buffer, pos, IAX_IE_CALLINGTNS, 0U);
|
||||||
@@ -688,7 +691,7 @@ bool CFMIAXNetwork::writeNew()
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, length);
|
||||||
|
|
||||||
return m_socket.write(buffer, length, m_addr, m_addrLen);
|
return m_socket.write(buffer, length, m_serverAddr, m_serverAddrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writeKey(bool key)
|
bool CFMIAXNetwork::writeKey(bool key)
|
||||||
@@ -727,11 +730,13 @@ bool CFMIAXNetwork::writeKey(bool key)
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
||||||
|
|
||||||
return m_socket.write(buffer, 12U, m_addr, m_addrLen);
|
return m_socket.write(buffer, 12U, m_serverAddr, m_serverAddrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writePing()
|
bool CFMIAXNetwork::writePing(const sockaddr_storage& addr, unsigned int addrLen)
|
||||||
{
|
{
|
||||||
|
assert(addrLen > 0U);
|
||||||
|
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX PING sent");
|
LogDebug("IAX PING sent");
|
||||||
#endif
|
#endif
|
||||||
@@ -766,11 +771,13 @@ bool CFMIAXNetwork::writePing()
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
||||||
|
|
||||||
return m_socket.write(buffer, 12U, m_addr, m_addrLen);
|
return m_socket.write(buffer, 12U, addr, addrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writePong(unsigned int ts)
|
bool CFMIAXNetwork::writePong(const sockaddr_storage& addr, unsigned int addrLen, unsigned int ts)
|
||||||
{
|
{
|
||||||
|
assert(addrLen > 0U);
|
||||||
|
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX PONG sent");
|
LogDebug("IAX PONG sent");
|
||||||
#endif
|
#endif
|
||||||
@@ -817,11 +824,13 @@ bool CFMIAXNetwork::writePong(unsigned int ts)
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 46U);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 46U);
|
||||||
|
|
||||||
return m_socket.write(buffer, 46U, m_addr, m_addrLen);
|
return m_socket.write(buffer, 46U, addr, addrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writeAck(unsigned int ts)
|
bool CFMIAXNetwork::writeAck(const sockaddr_storage& addr, unsigned int addrLen, unsigned int ts)
|
||||||
{
|
{
|
||||||
|
assert(addrLen > 0U);
|
||||||
|
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX ACK sent");
|
LogDebug("IAX ACK sent");
|
||||||
#endif
|
#endif
|
||||||
@@ -853,11 +862,13 @@ bool CFMIAXNetwork::writeAck(unsigned int ts)
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
||||||
|
|
||||||
return m_socket.write(buffer, 12U, m_addr, m_addrLen);
|
return m_socket.write(buffer, 12U, addr, addrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writeLagRp(unsigned int ts)
|
bool CFMIAXNetwork::writeLagRp(const sockaddr_storage& addr, unsigned int addrLen, unsigned int ts)
|
||||||
{
|
{
|
||||||
|
assert(addrLen > 0U);
|
||||||
|
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX LAGRP sent");
|
LogDebug("IAX LAGRP sent");
|
||||||
#endif
|
#endif
|
||||||
@@ -891,11 +902,13 @@ bool CFMIAXNetwork::writeLagRp(unsigned int ts)
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
||||||
|
|
||||||
return m_socket.write(buffer, 12U, m_addr, m_addrLen);
|
return m_socket.write(buffer, 12U, addr, addrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writeLagRq()
|
bool CFMIAXNetwork::writeLagRq(const sockaddr_storage& addr, unsigned int addrLen)
|
||||||
{
|
{
|
||||||
|
assert(addrLen > 0U);
|
||||||
|
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX LAGRQ sent");
|
LogDebug("IAX LAGRQ sent");
|
||||||
#endif
|
#endif
|
||||||
@@ -930,7 +943,7 @@ bool CFMIAXNetwork::writeLagRq()
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U);
|
||||||
|
|
||||||
return m_socket.write(buffer, 12U, m_addr, m_addrLen);
|
return m_socket.write(buffer, 12U, addr, addrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writeHangup()
|
bool CFMIAXNetwork::writeHangup()
|
||||||
@@ -967,7 +980,7 @@ bool CFMIAXNetwork::writeHangup()
|
|||||||
buffer[11U] = IAX_COMMAND_HANGUP;
|
buffer[11U] = IAX_COMMAND_HANGUP;
|
||||||
|
|
||||||
unsigned int pos = 0U;
|
unsigned int pos = 0U;
|
||||||
unsigned int length = setIEString(buffer, pos, IAX_IE_CAUSE, REASON);
|
unsigned int length = setIEUInt8(buffer, pos, IAX_IE_CAUSE, 0x00U);
|
||||||
|
|
||||||
#if !defined(DEBUG_IAX)
|
#if !defined(DEBUG_IAX)
|
||||||
if (m_debug)
|
if (m_debug)
|
||||||
@@ -975,7 +988,7 @@ bool CFMIAXNetwork::writeHangup()
|
|||||||
|
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, length);
|
||||||
|
|
||||||
return m_socket.write(buffer, length, m_addr, (unsigned int)m_addrLen);
|
return m_socket.write(buffer, length, m_serverAddr, m_serverAddrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFMIAXNetwork::uLawEncode(const short* audio, unsigned char* buffer, unsigned int length) const
|
void CFMIAXNetwork::uLawEncode(const short* audio, unsigned char* buffer, unsigned int length) const
|
||||||
@@ -1071,7 +1084,7 @@ bool CFMIAXNetwork::writeRegReq()
|
|||||||
buffer[11U] = IAX_COMMAND_REGREQ;
|
buffer[11U] = IAX_COMMAND_REGREQ;
|
||||||
|
|
||||||
unsigned int pos = 0U;
|
unsigned int pos = 0U;
|
||||||
setIEString(buffer, pos, IAX_IE_USERNAME, m_username);
|
setIEString(buffer, pos, IAX_IE_USERNAME, m_source);
|
||||||
|
|
||||||
setIEUInt16(buffer, pos, IAX_IE_REFRESH, REFRESH_TIME);
|
setIEUInt16(buffer, pos, IAX_IE_REFRESH, REFRESH_TIME);
|
||||||
|
|
||||||
@@ -1120,11 +1133,14 @@ bool CFMIAXNetwork::writeRegReq()
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, length);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, length);
|
||||||
|
|
||||||
return m_socket.write(buffer, length, m_addr, m_addrLen);
|
return m_socket.write(buffer, length, m_domainAddr, m_domainAddrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writeAudio(const short* audio, unsigned int length)
|
bool CFMIAXNetwork::writeAudio(const short* audio, unsigned int length)
|
||||||
{
|
{
|
||||||
|
assert(audio != NULL);
|
||||||
|
assert(length > 0U);
|
||||||
|
|
||||||
#if defined(DEBUG_IAX)
|
#if defined(DEBUG_IAX)
|
||||||
LogDebug("IAX ULAW sent");
|
LogDebug("IAX ULAW sent");
|
||||||
#endif
|
#endif
|
||||||
@@ -1161,7 +1177,7 @@ bool CFMIAXNetwork::writeAudio(const short* audio, unsigned int length)
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U + length);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 12U + length);
|
||||||
|
|
||||||
return m_socket.write(buffer, 12U + length, m_addr, m_addrLen);
|
return m_socket.write(buffer, 12U + length, m_serverAddr, m_serverAddrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::writeMiniFrame(const short* audio, unsigned int length)
|
bool CFMIAXNetwork::writeMiniFrame(const short* audio, unsigned int length)
|
||||||
@@ -1189,7 +1205,7 @@ bool CFMIAXNetwork::writeMiniFrame(const short* audio, unsigned int length)
|
|||||||
#endif
|
#endif
|
||||||
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 4U + length);
|
CUtils::dump(1U, "FM IAX Network Data Sent", buffer, 4U + length);
|
||||||
|
|
||||||
return m_socket.write(buffer, 4U + length, m_addr, m_addrLen);
|
return m_socket.write(buffer, 4U + length, m_serverAddr, m_serverAddrLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CFMIAXNetwork::compareFrame(const unsigned char* buffer, unsigned char type1, unsigned char type2) const
|
bool CFMIAXNetwork::compareFrame(const unsigned char* buffer, unsigned char type1, unsigned char type2) const
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ enum IAX_STATUS {
|
|||||||
|
|
||||||
class CFMIAXNetwork : public IFMNetwork {
|
class CFMIAXNetwork : public IFMNetwork {
|
||||||
public:
|
public:
|
||||||
CFMIAXNetwork(const std::string& callsign, const std::string& username, const std::string& password, const std::string& node, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug);
|
CFMIAXNetwork(const std::string& domain, const std::string& password, const std::string& source, const std::string& destination, const std::string& localAddress, unsigned short localPort, const std::string& gatewayAddress, unsigned short gatewayPort, bool debug);
|
||||||
virtual ~CFMIAXNetwork();
|
virtual ~CFMIAXNetwork();
|
||||||
|
|
||||||
virtual bool open();
|
virtual bool open();
|
||||||
@@ -67,13 +67,14 @@ public:
|
|||||||
virtual void clock(unsigned int ms);
|
virtual void clock(unsigned int ms);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_callsign;
|
|
||||||
std::string m_username;
|
|
||||||
std::string m_password;
|
std::string m_password;
|
||||||
std::string m_node;
|
std::string m_source;
|
||||||
|
std::string m_destination;
|
||||||
CUDPSocket m_socket;
|
CUDPSocket m_socket;
|
||||||
sockaddr_storage m_addr;
|
sockaddr_storage m_domainAddr;
|
||||||
unsigned int m_addrLen;
|
unsigned int m_domainAddrLen;
|
||||||
|
sockaddr_storage m_serverAddr;
|
||||||
|
unsigned int m_serverAddrLen;
|
||||||
bool m_debug;
|
bool m_debug;
|
||||||
bool m_enabled;
|
bool m_enabled;
|
||||||
CRingBuffer<unsigned char> m_buffer;
|
CRingBuffer<unsigned char> m_buffer;
|
||||||
@@ -101,11 +102,11 @@ private:
|
|||||||
|
|
||||||
bool writeNew();
|
bool writeNew();
|
||||||
bool writeKey(bool key);
|
bool writeKey(bool key);
|
||||||
bool writePing();
|
bool writePing(const sockaddr_storage& addr, unsigned int addrLen);
|
||||||
bool writePong(unsigned int ts);
|
bool writePong(const sockaddr_storage& addr, unsigned int addrLen, unsigned int ts);
|
||||||
bool writeAck(unsigned int ts);
|
bool writeAck(const sockaddr_storage& addr, unsigned int addrLen, unsigned int ts);
|
||||||
bool writeLagRq();
|
bool writeLagRq(const sockaddr_storage& addr, unsigned int addrLen);
|
||||||
bool writeLagRp(unsigned int ts);
|
bool writeLagRp(const sockaddr_storage& addr, unsigned int addrLen, unsigned int ts);
|
||||||
bool writeHangup();
|
bool writeHangup();
|
||||||
bool writeRegReq();
|
bool writeRegReq();
|
||||||
bool writeAudio(const short* audio, unsigned int length);
|
bool writeAudio(const short* audio, unsigned int length);
|
||||||
|
|||||||
35
MMDVM.ini
35
MMDVM.ini
@@ -44,7 +44,7 @@ Time=24
|
|||||||
|
|
||||||
[Modem]
|
[Modem]
|
||||||
# Valid values are "null", "uart", "udp", and (on Linux) "i2c"
|
# Valid values are "null", "uart", "udp", and (on Linux) "i2c"
|
||||||
Protocol=uart
|
Protocol=null
|
||||||
# The port and speed used for a UART connection
|
# The port and speed used for a UART connection
|
||||||
# UARTPort=\\.\COM4
|
# UARTPort=\\.\COM4
|
||||||
# UARTPort=/dev/ttyACM0
|
# UARTPort=/dev/ttyACM0
|
||||||
@@ -94,7 +94,7 @@ LocalPort=40095
|
|||||||
# SendFrameType=0
|
# SendFrameType=0
|
||||||
|
|
||||||
[D-Star]
|
[D-Star]
|
||||||
Enable=1
|
Enable=0
|
||||||
Module=C
|
Module=C
|
||||||
SelfOnly=0
|
SelfOnly=0
|
||||||
AckReply=1
|
AckReply=1
|
||||||
@@ -106,7 +106,7 @@ RemoteGateway=0
|
|||||||
WhiteList=
|
WhiteList=
|
||||||
|
|
||||||
[DMR]
|
[DMR]
|
||||||
Enable=1
|
Enable=0
|
||||||
Beacons=0
|
Beacons=0
|
||||||
BeaconInterval=60
|
BeaconInterval=60
|
||||||
BeaconDuration=3
|
BeaconDuration=3
|
||||||
@@ -124,7 +124,7 @@ TXHang=4
|
|||||||
# OVCM=0
|
# OVCM=0
|
||||||
|
|
||||||
[System Fusion]
|
[System Fusion]
|
||||||
Enable=1
|
Enable=0
|
||||||
LowDeviation=0
|
LowDeviation=0
|
||||||
SelfOnly=0
|
SelfOnly=0
|
||||||
TXHang=4
|
TXHang=4
|
||||||
@@ -132,7 +132,7 @@ RemoteGateway=0
|
|||||||
# ModeHang=10
|
# ModeHang=10
|
||||||
|
|
||||||
[P25]
|
[P25]
|
||||||
Enable=1
|
Enable=0
|
||||||
NAC=293
|
NAC=293
|
||||||
SelfOnly=0
|
SelfOnly=0
|
||||||
OverrideUIDCheck=0
|
OverrideUIDCheck=0
|
||||||
@@ -141,7 +141,7 @@ TXHang=5
|
|||||||
# ModeHang=10
|
# ModeHang=10
|
||||||
|
|
||||||
[NXDN]
|
[NXDN]
|
||||||
Enable=1
|
Enable=0
|
||||||
RAN=1
|
RAN=1
|
||||||
SelfOnly=0
|
SelfOnly=0
|
||||||
RemoteGateway=0
|
RemoteGateway=0
|
||||||
@@ -149,14 +149,14 @@ TXHang=5
|
|||||||
# ModeHang=10
|
# ModeHang=10
|
||||||
|
|
||||||
[M17]
|
[M17]
|
||||||
Enable=1
|
Enable=0
|
||||||
CAN=0
|
CAN=0
|
||||||
SelfOnly=0
|
SelfOnly=0
|
||||||
TXHang=5
|
TXHang=5
|
||||||
# ModeHang=10
|
# ModeHang=10
|
||||||
|
|
||||||
[POCSAG]
|
[POCSAG]
|
||||||
Enable=1
|
Enable=0
|
||||||
Frequency=439987500
|
Frequency=439987500
|
||||||
|
|
||||||
[FM]
|
[FM]
|
||||||
@@ -206,7 +206,7 @@ ExtAudioBoost=1
|
|||||||
# ModeHang=10
|
# ModeHang=10
|
||||||
|
|
||||||
[AX.25]
|
[AX.25]
|
||||||
Enable=1
|
Enable=0
|
||||||
TXDelay=300
|
TXDelay=300
|
||||||
RXTwist=6
|
RXTwist=6
|
||||||
SlotTime=30
|
SlotTime=30
|
||||||
@@ -288,11 +288,11 @@ Debug=0
|
|||||||
[FM Network]
|
[FM Network]
|
||||||
Enable=1
|
Enable=1
|
||||||
# Protocol may be USRP, RAW, or IAX
|
# Protocol may be USRP, RAW, or IAX
|
||||||
Protocol=USRP
|
Protocol=IAX
|
||||||
LocalAddress=127.0.0.1
|
# LocalAddress=127.0.0.1
|
||||||
LocalPort=3810
|
LocalPort=4569
|
||||||
GatewayAddress=127.0.0.1
|
GatewayAddress=209.112.244.27
|
||||||
GatewayPort=4810
|
GatewayPort=4569
|
||||||
PreEmphasis=1
|
PreEmphasis=1
|
||||||
DeEmphasis=1
|
DeEmphasis=1
|
||||||
TXAudioGain=1.0
|
TXAudioGain=1.0
|
||||||
@@ -303,10 +303,11 @@ Debug=0
|
|||||||
SampleRate=48000
|
SampleRate=48000
|
||||||
# The squelch file is optional
|
# The squelch file is optional
|
||||||
SquelchFile=/tmp/sql
|
SquelchFile=/tmp/sql
|
||||||
# Username, Password, and Node are IAX only options
|
# Domain, Password, Source, and Destination are IAX only options
|
||||||
Username=Dave
|
Domain=register.allstarlink.org
|
||||||
Password=PASSWORD
|
Password=PASSWORD
|
||||||
Node=Node1
|
Source=12345
|
||||||
|
Destination=54321
|
||||||
|
|
||||||
[AX.25 Network]
|
[AX.25 Network]
|
||||||
Enable=1
|
Enable=1
|
||||||
|
|||||||
@@ -1888,9 +1888,10 @@ bool CMMDVMHost::createPOCSAGNetwork()
|
|||||||
bool CMMDVMHost::createFMNetwork()
|
bool CMMDVMHost::createFMNetwork()
|
||||||
{
|
{
|
||||||
std::string callsign = m_conf.getFMCallsign();
|
std::string callsign = m_conf.getFMCallsign();
|
||||||
std::string username = m_conf.getFMNetworkUsername();
|
std::string domain = m_conf.getFMNetworkDomain();
|
||||||
std::string password = m_conf.getFMNetworkPassword();
|
std::string password = m_conf.getFMNetworkPassword();
|
||||||
std::string node = m_conf.getFMNetworkNode();
|
std::string source = m_conf.getFMNetworkSource();
|
||||||
|
std::string destination = m_conf.getFMNetworkDestination();
|
||||||
std::string protocol = m_conf.getFMNetworkProtocol();
|
std::string protocol = m_conf.getFMNetworkProtocol();
|
||||||
unsigned int sampleRate = m_conf.getFMNetworkSampleRate();
|
unsigned int sampleRate = m_conf.getFMNetworkSampleRate();
|
||||||
std::string squelchFile = m_conf.getFMNetworkSquelchFile();
|
std::string squelchFile = m_conf.getFMNetworkSquelchFile();
|
||||||
@@ -1923,8 +1924,9 @@ bool CMMDVMHost::createFMNetwork()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (protocol == "IAX") {
|
if (protocol == "IAX") {
|
||||||
LogInfo(" Username: %s", username.c_str());
|
LogInfo(" Domain: %s", domain.c_str());
|
||||||
LogInfo(" Node: %s", node.c_str());
|
LogInfo(" Source: %s", source.c_str());
|
||||||
|
LogInfo(" Destiation: %s", destination.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (protocol == "USRP") {
|
if (protocol == "USRP") {
|
||||||
@@ -1932,7 +1934,7 @@ bool CMMDVMHost::createFMNetwork()
|
|||||||
} else if (protocol == "RAW") {
|
} else if (protocol == "RAW") {
|
||||||
m_fmNetwork = new CFMRAWNetwork(localAddress, localPort, gatewayAddress, gatewayPort, sampleRate, squelchFile, debug);
|
m_fmNetwork = new CFMRAWNetwork(localAddress, localPort, gatewayAddress, gatewayPort, sampleRate, squelchFile, debug);
|
||||||
} else if (protocol == "IAX") {
|
} else if (protocol == "IAX") {
|
||||||
m_fmNetwork = new CFMIAXNetwork(callsign, username, password, node, localAddress, localPort, gatewayAddress, gatewayPort, debug);
|
m_fmNetwork = new CFMIAXNetwork(domain, password, source, destination, localAddress, localPort, gatewayAddress, gatewayPort, debug);
|
||||||
} else {
|
} else {
|
||||||
LogError("Invalid FM network protocol specified - %s", protocol.c_str());
|
LogError("Invalid FM network protocol specified - %s", protocol.c_str());
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
Reference in New Issue
Block a user