rewrote CUnixDgramWriter

pull/12/head
Tom Early 7 years ago
parent 8741e71e78
commit 2bea84e0c9

@ -252,7 +252,8 @@ static bool read_config(const char *cfgFile)
static int open_sock() static int open_sock()
{ {
if (Gate2Modem.Open(gate2modem.c_str()) || Modem2Gate.Open(modem2gate.c_str())) Modem2Gate.SetUp(modem2gate.c_str());
if (Gate2Modem.Open(gate2modem.c_str()))
return 1; return 1;
return 0; return 0;
} }
@ -648,7 +649,6 @@ int main(int argc, const char **argv)
readthread.get(); readthread.get();
Gate2Modem.Close(); Gate2Modem.Close();
Modem2Gate.Close();
printf("dvap_rptr exiting\n"); printf("dvap_rptr exiting\n");
return 0; return 0;
} }

@ -2559,7 +2559,8 @@ int main(int argc, const char **argv)
strcpy(DVCALL_and_MOD, DVCALL); strcpy(DVCALL_and_MOD, DVCALL);
DVCALL_and_MOD[7] = DVRPTR_MOD; DVCALL_and_MOD[7] = DVRPTR_MOD;
if (Gate2Modem.Open(gate2modem.c_str()) || Modem2Gate.Open(modem2gate.c_str())) Modem2Gate.SetUp(modem2gate.c_str());
if (Gate2Modem.Open(gate2modem.c_str()))
return 1; return 1;
if (RX_Inverse == true) { if (RX_Inverse == true) {
@ -3087,7 +3088,6 @@ int main(int argc, const char **argv)
} }
} }
Modem2Gate.Close();
Gate2Modem.Close(); Gate2Modem.Close();
printf("dvrptr exiting...\n"); printf("dvrptr exiting...\n");

@ -2451,14 +2451,14 @@ int CQnetGateway::Init(char *cfgfile)
} }
// Open unix sockets between qngateway and qnlink // Open unix sockets between qngateway and qnlink
if (Gate2Link.Open(gate2link.c_str())) Gate2Link.SetUp(gate2link.c_str());
return 1;
if (Link2Gate.Open(link2gate.c_str())) if (Link2Gate.Open(link2gate.c_str()))
return 1; return 1;
for (i=0; i<3; i++) { for (i=0; i<3; i++) {
if (rptr.mod[i].defined) { // open unix sockets between qngateway and each defined modem if (rptr.mod[i].defined) { // open unix sockets between qngateway and each defined modem
if (Gate2Modem[i].Open(gate2modem[i].c_str()) || Modem2Gate[i].Open(modem2gate[i].c_str())) Gate2Modem[i].SetUp(gate2modem[i].c_str());
if (Modem2Gate[i].Open(modem2gate[i].c_str()))
return 1; return 1;
} }
// recording for echotest on local repeater modules // recording for echotest on local repeater modules
@ -2536,10 +2536,8 @@ CQnetGateway::CQnetGateway()
CQnetGateway::~CQnetGateway() CQnetGateway::~CQnetGateway()
{ {
Gate2Link.Close();
Link2Gate.Close(); Link2Gate.Close();
for (int i=0; i<3; i++) { for (int i=0; i<3; i++) {
Gate2Modem[i].Close();
Modem2Gate[i].Close(); Modem2Gate[i].Close();
} }

@ -78,7 +78,8 @@ bool CQnetITAP::Initialize(const char *cfgfile)
return true; return true;
} }
if (Gate2Modem.Open(gate2modem.c_str()) || Modem2Gate.Open(modem2gate.c_str())) Modem2Gate.SetUp(modem2gate.c_str());
if (Gate2Modem.Open(gate2modem.c_str()))
return true; return true;
return false; return false;
@ -197,8 +198,7 @@ void CQnetITAP::Run(const char *cfgfile)
return; return;
int ug2m = Gate2Modem.GetFD(); int ug2m = Gate2Modem.GetFD();
int um2g = Modem2Gate.GetFD(); printf("gate2modem=%d, serial=%d\n", ug2m, serfd);
printf("gate2modem=%d, modem2gate=%d serial=%d\n", ug2m, um2g, serfd);
keep_running = true; keep_running = true;
unsigned poll_counter = 0; unsigned poll_counter = 0;
@ -300,7 +300,6 @@ void CQnetITAP::Run(const char *cfgfile)
::close(serfd); ::close(serfd);
Gate2Modem.Close(); Gate2Modem.Close();
Modem2Gate.Close();
} }
int CQnetITAP::SendTo(const unsigned char length, const unsigned char *buf) int CQnetITAP::SendTo(const unsigned char length, const unsigned char *buf)

@ -667,7 +667,8 @@ bool CQnetLink::srv_open()
} }
/* create our gateway unix sockets */ /* create our gateway unix sockets */
if (Gate2Link.Open(gate2link.c_str()) || Link2Gate.Open(link2gate.c_str())) { Link2Gate.SetUp(link2gate.c_str());
if (Gate2Link.Open(gate2link.c_str())) {
close(dcs_g2_sock); close(dcs_g2_sock);
dcs_g2_sock = -1; dcs_g2_sock = -1;
close(xrf_g2_sock); close(xrf_g2_sock);
@ -675,7 +676,6 @@ bool CQnetLink::srv_open()
close(ref_g2_sock); close(ref_g2_sock);
ref_g2_sock = -1; ref_g2_sock = -1;
Gate2Link.Close(); Gate2Link.Close();
Link2Gate.Close();
return false; return false;
} }
@ -707,7 +707,6 @@ void CQnetLink::srv_close()
} }
Gate2Link.Close(); Gate2Link.Close();
Link2Gate.Close();
if (ref_g2_sock != -1) { if (ref_g2_sock != -1) {
close(ref_g2_sock); close(ref_g2_sock);

@ -127,7 +127,8 @@ bool CQnetRelay::Run(const char *cfgfile)
if (msock < 0) if (msock < 0)
return true; return true;
if (Gate2Modem.Open(gate2modem.c_str()) || Modem2Gate.Open(modem2gate.c_str())) Modem2Gate.SetUp(modem2gate.c_str());
if (Gate2Modem.Open(gate2modem.c_str()))
return true; return true;
int fd = Gate2Modem.GetFD(); int fd = Gate2Modem.GetFD();
@ -206,7 +207,6 @@ bool CQnetRelay::Run(const char *cfgfile)
::close(msock); ::close(msock);
Gate2Modem.Close(); Gate2Modem.Close();
Modem2Gate.Close();
return false; return false;
} }

@ -198,8 +198,7 @@ int main(int argc, char *argv[])
CUnixDgramWriter ToGateway; CUnixDgramWriter ToGateway;
std::string togateway("modem2gate"); std::string togateway("modem2gate");
togateway.append(1, module-'A'+'0'); togateway.append(1, module-'A'+'0');
if (ToGateway.Open(togateway.c_str())) ToGateway.SetUp(togateway.c_str());
return 1;
SDSTR pkt; SDSTR pkt;
memcpy(pkt.pkt_id,"DSTR", 4); memcpy(pkt.pkt_id,"DSTR", 4);
@ -241,7 +240,6 @@ int main(int argc, char *argv[])
int sent = ToGateway.Write(pkt.pkt_id, 58); int sent = ToGateway.Write(pkt.pkt_id, 58);
if (sent != 58) { if (sent != 58) {
printf("%s: ERROR: Couldn't send header!\n", argv[0]); printf("%s: ERROR: Couldn't send header!\n", argv[0]);
ToGateway.Close();
return 1; return 1;
} }
@ -313,10 +311,8 @@ int main(int argc, char *argv[])
sent = ToGateway.Write(pkt.pkt_id, 29); sent = ToGateway.Write(pkt.pkt_id, 29);
if (sent != 29) { if (sent != 29) {
printf("%s: ERROR: could not send voice packet %d\n", argv[0], i); printf("%s: ERROR: could not send voice packet %d\n", argv[0], i);
ToGateway.Close();
return 1; return 1;
} }
} }
ToGateway.Close();
return 0; return 0;
} }

@ -22,7 +22,6 @@
#include <errno.h> #include <errno.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/un.h>
#include "UnixDgramSocket.h" #include "UnixDgramSocket.h"
@ -75,51 +74,36 @@ int CUnixDgramReader::GetFD()
return fd; return fd;
} }
CUnixDgramWriter::CUnixDgramWriter() : fd(-1) {} CUnixDgramWriter::CUnixDgramWriter() {}
CUnixDgramWriter::~CUnixDgramWriter() CUnixDgramWriter::~CUnixDgramWriter() {}
{
Close();
}
bool CUnixDgramWriter::Open(const char *path) // returns true on failure void CUnixDgramWriter::SetUp(const char *path) // returns true on failure
{ {
fd = socket(AF_UNIX, SOCK_DGRAM, 0); // setup the socket address
if (fd < 0) {
fprintf(stderr, "CUnixDgramWriter::Open: socket() failed: %s\n", strerror(errno));
return true;
}
struct sockaddr_un addr;
memset(&addr, 0, sizeof(addr)); memset(&addr, 0, sizeof(addr));
addr.sun_family = AF_UNIX; addr.sun_family = AF_UNIX;
strncpy(addr.sun_path+1, path, sizeof(addr.sun_path)-2); strncpy(addr.sun_path+1, path, sizeof(addr.sun_path)-2);
int rval = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
if (rval < 0) {
fprintf(stderr, "CUnixDgramWriter::Open: connect() failed: %s\n", strerror(errno));
close(fd);
fd = -1;
return true;
}
return false;
} }
ssize_t CUnixDgramWriter::Write(void *buf, size_t size) ssize_t CUnixDgramWriter::Write(void *buf, size_t size)
{ {
if (fd >= 0) // open the socket
return write(fd, buf, size); int fd = socket(AF_UNIX, SOCK_DGRAM, 0);
if (fd < 0) {
fprintf(stderr, "Failed to open socket %s\n", addr.sun_path+1);
return -1; return -1;
} }
// connect to the receiver
void CUnixDgramWriter::Close() int rval = connect(fd, (struct sockaddr *)&addr, sizeof(addr));
{ if (rval < 0) {
if (fd >= 0) fprintf(stderr, "Failed to connect to socket %s\n", addr.sun_path+1);
close(fd); close(fd);
fd = -1; return -1;
} }
int CUnixDgramWriter::GetFD() ssize_t written = write(fd, buf, size);
{
return fd; close(fd);
return written;
} }

@ -18,6 +18,7 @@
*/ */
#include <stdlib.h> #include <stdlib.h>
#include <sys/un.h>
class CUnixDgramReader class CUnixDgramReader
{ {
@ -37,10 +38,8 @@ class CUnixDgramWriter
public: public:
CUnixDgramWriter(); CUnixDgramWriter();
~CUnixDgramWriter(); ~CUnixDgramWriter();
bool Open(const char *path); void SetUp(const char *path);
ssize_t Write(void *buf, size_t size); ssize_t Write(void *buf, size_t size);
void Close();
int GetFD();
private: private:
int fd; struct sockaddr_un addr;
}; };

Loading…
Cancel
Save

Powered by TurnKey Linux.