From cba0d6ae58640eb60fdebe64accf6868ec59ea80 Mon Sep 17 00:00:00 2001 From: Tom Early Date: Sat, 7 Apr 2018 16:42:57 -0700 Subject: [PATCH] fixed dozens of compile errors, whoops! --- mmdvm_modem.cpp | 60 ++++++++++++++++++++++++++++--------------------- mmdvm_modem.h | 4 +--- 2 files changed, 35 insertions(+), 29 deletions(-) diff --git a/mmdvm_modem.cpp b/mmdvm_modem.cpp index 0d618e2..a42ed88 100644 --- a/mmdvm_modem.cpp +++ b/mmdvm_modem.cpp @@ -23,10 +23,17 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include "versions.h" #include "mmdvm_modem.h" -#include "UDPSocket.h" #include "g2_typedefs.h" std::atomic CMMDVMModem::keep_running(true); @@ -94,14 +101,14 @@ int CMMDVMModem::OpenSocket(const std::string &address, unsigned short port) } int reuse = 1; - if (::setsockopt(m_fd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) { - printf("Cannot set the UDP socket %s:%u option, err: %d, %s\n", m_port, errno, strerror(errno)); + if (::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&reuse, sizeof(reuse)) == -1) { + printf("Cannot set the UDP socket %s:%u option, err: %d, %s\n", address.c_str(), port, errno, strerror(errno)); close(fd); return -1; } - if (::bind(m_fd, (sockaddr*)&addr, sizeof(sockaddr_in)) == -1) { - printf("Cannot bind the UDP (port %u) address, err: %d, %s\n", m_port, errno, strerror(errno)); + if (::bind(fd, (sockaddr*)&addr, sizeof(sockaddr_in)) == -1) { + printf("Cannot bind the UDP socket %s:%u address, err: %d, %s\n", address.c_str(), port, errno, strerror(errno)); close(fd); return -1; } @@ -120,7 +127,7 @@ void CMMDVMModem::Run(const char *cfgfile) int gsock = OpenSocket(G2_INTERNAL_IP, G2_INTERNAL_PORT); if (gsock < 0) { - ::close(fd_m); + ::close(msock); return; } @@ -149,20 +156,21 @@ void CMMDVMModem::Run(const char *cfgfile) unsigned char buf[100]; sockaddr_in addr; memset(&addr, 0, sizeof(sockaddr_in)); + socklen_t size = sizeof(sockaddr); ssize_t len; if (FD_ISSET(msock, &readfds)) { - len = ::recvfrom(msock, buf, 100, 0, (sockaddr *)&addr, sizeof(sockaddr_in); + len = ::recvfrom(msock, buf, 100, 0, (sockaddr *)&addr, &size); if (len < 0) { printf("ERROR: RUN: recvfrom(mmdvm) return error %d, %s\n", errno, strerror(errno)); break; } - if (addr.sin_port == G2_PORT) + if (addr.sin_port == G2_INTERNAL_PORT) printf("DEBUG: Run: reading from fd_m but port was %d.\n", addr.sin_port); } else if (FD_ISSET(gsock, &readfds)) { - len = ::recvfrom(fd_g, buf, 100, 0, (sockaddr *)&addr, sizeof(sockaddr_in); + len = ::recvfrom(gsock, buf, 100, 0, (sockaddr *)&addr, &size); if (len < 0) { printf("ERROR: RUN: recvfrom(g2) return error %d, %s\n", errno, strerror(errno)); @@ -179,23 +187,23 @@ void CMMDVMModem::Run(const char *cfgfile) if (len == 0) continue; - if (addr.sin_port == MMDVM_PORT) { - if (ProcessMMDVM(buf)) + if (ntohs(addr.sin_port) == MMDVM_PORT) { + if (ProcessMMDVM(len, buf)) break; - } else if (addr.sin_port == G2_PORT) { - if (ProcessGateway(buf)) + } else if (ntohs(addr.sin_port) == G2_INTERNAL_PORT) { + if (ProcessGateway(len, buf)) break; } } - ::close(fd_m); - ::close(fd_g); + ::close(msock); + ::close(gsock); } int CMMDVMModem::SendTo(const int fd, const unsigned char *buf, const int size, const std::string &address, const unsigned short port) { sockaddr_in addr; - ::memset(&addr, 0, sizeof(sockaddr_in); + ::memset(&addr, 0, sizeof(sockaddr_in)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = ::inet_addr(address.c_str()); addr.sin_port = htons(port); @@ -206,13 +214,13 @@ int CMMDVMModem::SendTo(const int fd, const unsigned char *buf, const int size, bool CMMDVMModem::ProcessGateway(const int len, const unsigned char *raw) { SPKT buf; - ::memcpy(buf.pkt_id, buf, len); + ::memcpy(buf.pkt_id, raw, len); // if there is data, translate it and send it to the MMDVM Modem if (29==len || 58==len) { //here is dstar data SMMDVMPKT pkt; - memcpy(pkt.title, "DSRP", 4); + ::memcpy(pkt.title, "DSRP", 4); if (29 == len) { // write an AMBE packet pkt.tag = 0x21U; pkt.voice.id = buf.vpkt.streamid; @@ -223,7 +231,7 @@ bool CMMDVMModem::ProcessGateway(const int len, const unsigned char *raw) printf("DEBUG: ProcessGateway: unexpected voice sequence number %d\n", pkt.voice.seq); memcpy(pkt.voice.ambe, buf.vpkt.vasd.text, 12); - int ret = SendTo(msock, pkt.title, 21, mmdvm_addr, MMDVM_PORT)) + int ret = SendTo(msock, pkt.title, 21, MMDVM_IP, MMDVM_PORT); if (ret != 21) { printf("ERROR: ProcessGateway: Could not write AMBE mmdvm packet\n"); return true; @@ -238,7 +246,7 @@ bool CMMDVMModem::ProcessGateway(const int len, const unsigned char *raw) } memcpy(pkt.header.flag, buf.vpkt.hdr.flag, 41); - int ret = SendTo(msock, pkt.title, 49, mmdvm_addr, MMDVM_PORT); + int ret = SendTo(msock, pkt.title, 49, MMDVM_IP, MMDVM_PORT); if (ret != 49) { printf("ERROR: ProcessGateway: Could not write Header mmdvm packet\n"); return true; @@ -252,12 +260,14 @@ bool CMMDVMModem::ProcessGateway(const int len, const unsigned char *raw) bool CMMDVMModem::ProcessMMDVM(const int len, const unsigned char *raw) { SMMDVMPKT mpkt; - ::memcopy(mpkt.title, raw, len); + SPKT gpkt; + + ::memcpy(mpkt.title, raw, len); // if there is data, translate it and send it to the Gateway if (49 == len) { // sets most of the params with the header - memcpy(gpkt.pkt_id, "DSTR", 4); + ::memcpy(gpkt.pkt_id, "DSTR", 4); gpkt.counter = COUNTER++; gpkt.flag[0] = 0x72; gpkt.flag[1] = 0x12; @@ -270,7 +280,7 @@ bool CMMDVMModem::ProcessMMDVM(const int len, const unsigned char *raw) gpkt.vpkt.streamid = (rand_r(&seed) % 65535U) + 1U; gpkt.vpkt.ctrl = mpkt.header.seq; memcpy(gpkt.vpkt.hdr.flag, mpkt.header.flag, 41); - int ret = SendTo(gsock, gpkt.pkt_id, 58, g2_internal_addr, (unsigned int)G2_INTERNAL_PORT); + int ret = SendTo(gsock, gpkt.pkt_id, 58, G2_INTERNAL_IP, G2_INTERNAL_PORT); if (ret != 58) { printf("ERROR: ProcessMMDVM: Could not write gateway header packet\n"); return true; @@ -281,7 +291,7 @@ bool CMMDVMModem::ProcessMMDVM(const int len, const unsigned char *raw) gpkt.remaining = 0x16; gpkt.vpkt.ctrl = mpkt.voice.seq; memcpy(gpkt.vpkt.vasd.text, mpkt.voice.ambe, 12); - int ret = SendTo(gsock, gpkt.pkt_id, 29, g2_internal_addr, (unsigned int)G2_INTERNAL_PORT); + int ret = SendTo(gsock, gpkt.pkt_id, 29, G2_INTERNAL_IP, G2_INTERNAL_PORT); if (ret != 29) { printf("ERROR: ProcessMMDVM: Could not write gateway header packet\n"); return true; @@ -409,7 +419,6 @@ bool CMMDVMModem::ReadConfig(const char *cfgFile) if (GetValue(cfg, std::string(mmdvm_path+".internal_ip").c_str(), value, 7, IP_SIZE, "0.0.0.0")) { MMDVM_IP = value; - inet_aton(MMDVM_IP.c_str(), &mmdvm_addr); } else return true; @@ -418,7 +427,6 @@ bool CMMDVMModem::ReadConfig(const char *cfgFile) if (GetValue(cfg, "gateway.ip", value, 7, IP_SIZE, "127.0.0.1")) { G2_INTERNAL_IP = value; - inet_aton(G2_INTERNAL_IP.c_str(), &g2_internal_addr); } else return true; diff --git a/mmdvm_modem.h b/mmdvm_modem.h index 867cc8c..76f3d6f 100644 --- a/mmdvm_modem.h +++ b/mmdvm_modem.h @@ -24,8 +24,6 @@ #include -#include "UDPSocket.h" - using namespace libconfig; #define CALL_SIZE 8 @@ -49,7 +47,7 @@ private: bool ProcessGateway(const int len, const unsigned char *raw); bool ProcessMMDVM(const int len, const unsigned char *raw); int OpenSocket(const std::string &address, unsigned short port); - int SendTo(cont int fd, const unsigned char *buf, const int size, const std::string &address, const unsigned short port); + int SendTo(const int fd, const unsigned char *buf, const int size, const std::string &address, const unsigned short port); // read configuration file bool ReadConfig(const char *);