improved ProcessG2()

pull/12/head
Tom Early 7 years ago
parent 8ef279a506
commit 4d02658615

@ -993,6 +993,8 @@ void CQnetGateway::ProcessSlowData(unsigned char *data, unsigned short sid)
}
void CQnetGateway::ProcessG2(ssize_t g2buflen, SDSVT &g2buf, bool is_from_g2)
// is_from_g2==true means it's coming from external port 40000
// is_from_g2==false means it's coming from the link2gate Unix socket
{
if ( (g2buflen==56 || g2buflen==27) && 0==memcmp(g2buf.title, "DSVT", 4) && (g2buf.config==0x10 || g2buf.config==0x20) && g2buf.id==0x20) {
if (g2buflen == 56) {
@ -1004,9 +1006,12 @@ void CQnetGateway::ProcessG2(ssize_t g2buflen, SDSVT &g2buf, bool is_from_g2)
// toRptr[i] is active if a remote system is talking to it or
// toRptr[i] is receiving data from a cross-band
if (0==toRptr[i].last_time && 0==band_txt[i].last_time && (Flag_is_ok(g2buf.hdr.flag[0]) || 0x01U==g2buf.hdr.flag[0] || 0x40U==g2buf.hdr.flag[0])) {
if (bool_qso_details)
printf("id=%04x G2 start, ur=%.8s r1=%.8s r2=%.8s my=%.8s/%.4s IP=%s:%u\n", ntohs(g2buf.streamid), g2buf.hdr.urcall, g2buf.hdr.rpt1, g2buf.hdr.rpt2, g2buf.hdr.mycall, g2buf.hdr.sfx, is_from_g2?inet_ntoa(fromDst4.sin_addr):"From QnetLink", is_from_g2?ntohs(fromDst4.sin_port):0);
if (bool_qso_details) {
if (is_from_g2)
printf("id=%04x G2 start, ur=%.8s r1=%.8s r2=%.8s my=%.8s/%.4s IP=%s:%u\n", ntohs(g2buf.streamid), g2buf.hdr.urcall, g2buf.hdr.rpt1, g2buf.hdr.rpt2, g2buf.hdr.mycall, g2buf.hdr.sfx, inet_ntoa(fromDst4.sin_addr), ntohs(fromDst4.sin_port));
else
printf("id=%04x G2 start, ur=%.8s r1=%.8s r2=%.8s my=%.8s/%.4s UnixSock=%s\n", ntohs(g2buf.streamid), g2buf.hdr.urcall, g2buf.hdr.rpt1, g2buf.hdr.rpt2, g2buf.hdr.mycall, g2buf.hdr.sfx, link2gate.c_str());
}
memcpy(rptrbuf.pkt_id, "DSTR", 4);
rptrbuf.counter = htons(toRptr[i].G2_COUNTER++); // bump the counter
rptrbuf.flag[0] = 0x73;
@ -1031,6 +1036,8 @@ void CQnetGateway::ProcessG2(ssize_t g2buflen, SDSVT &g2buf, bool is_from_g2)
Gate2Modem[i].Write(rptrbuf.pkt_id, 58);
/* save the header */
if (! is_from_g2)
fromDst4.sin_addr.s_addr = (unsigned long)i;
memcpy(toRptr[i].saved_hdr, rptrbuf.pkt_id, 58);
toRptr[i].saved_adr = fromDst4.sin_addr.s_addr;
@ -1154,7 +1161,7 @@ void CQnetGateway::ProcessModem()
if (recvlen == 58) {
vPacketCount = 0U;
if (bool_qso_details)
printf("id=%04x cntr=%04x start RPTR ur=%.8s r1=%.8s r2=%.8s my=%.8s/%.4s ip=%s\n", ntohs(rptrbuf.vpkt.streamid), ntohs(rptrbuf.counter), rptrbuf.vpkt.hdr.ur, rptrbuf.vpkt.hdr.r1, rptrbuf.vpkt.hdr.r2, rptrbuf.vpkt.hdr.my, rptrbuf.vpkt.hdr.nm, inet_ntoa(fromRptr.sin_addr));
printf("id=%04x cntr=%04x start RPTR ur=%.8s r1=%.8s r2=%.8s my=%.8s/%.4s\n", ntohs(rptrbuf.vpkt.streamid), ntohs(rptrbuf.counter), rptrbuf.vpkt.hdr.ur, rptrbuf.vpkt.hdr.r1, rptrbuf.vpkt.hdr.r2, rptrbuf.vpkt.hdr.my, rptrbuf.vpkt.hdr.nm);
if (0==memcmp(rptrbuf.vpkt.hdr.r1, OWNER.c_str(), 7) && Flag_is_ok(rptrbuf.vpkt.hdr.flag[0])) {
@ -1432,7 +1439,6 @@ void CQnetGateway::ProcessModem()
/* This is the active streamid */
toRptr[i].streamid = rptrbuf.vpkt.streamid;
toRptr[i].adr = fromRptr.sin_addr.s_addr;
/* time it, in case stream times out */
time(&toRptr[i].last_time);
@ -1603,7 +1609,6 @@ void CQnetGateway::ProcessModem()
/* This is the active streamid */
toRptr[i].streamid = rptrbuf.vpkt.streamid;
toRptr[i].adr = fromRptr.sin_addr.s_addr;
/* time it, in case stream times out */
time(&toRptr[i].last_time);
@ -1810,7 +1815,7 @@ void CQnetGateway::ProcessModem()
}
break;
}
else if ((toRptr[i].streamid==rptrbuf.vpkt.streamid) && (toRptr[i].adr == fromRptr.sin_addr.s_addr)) { // or maybe this is cross-banding data
else if (toRptr[i].streamid == rptrbuf.vpkt.streamid) { // or maybe this is cross-banding data
Gate2Modem[i].Write(rptrbuf.pkt_id, 29);
/* timeit */
@ -1831,7 +1836,7 @@ void CQnetGateway::ProcessModem()
}
}
if (bool_qso_details && rptrbuf.vpkt.ctrl&0x40)
if (bool_qso_details && rptrbuf.vpkt.ctrl&0x40U)
printf("id=%04x cntr=%04x END RPTR\n", ntohs(rptrbuf.vpkt.streamid), ntohs(rptrbuf.counter));
}
}

Loading…
Cancel
Save

Powered by TurnKey Linux.