int db2orbpkt(Dbptr db,int orb) { char srcname[ORBSRCNAME_SIZE]; static int packetsz=0,nbytes; double t; static char *packet=0; static Packet *pkt=0; int retcode = 0; if (pkt == 0) { pkt=newPkt(); } else { clrPkt(pkt); } pkt->pkttype=suffix2pkttype("db"); pkt->db=db; if (stuffPkt(pkt,srcname,&t,&packet,&nbytes,&packetsz) < 0) { complain(0,"stuffPkt failed for %s\\n",pkt->pkttype); retcode = -1; } else if (orbput(orb,srcname,t,packet,nbytes)) { complain (0, "orbput fails\n"); retcode = -1; } return retcode; }
static int dbrows2orb(Dbptr db, int orb, char *prefix) { Packet *pkt; char srcname[ORBSRCNAME_SIZE]; double time; char *packet; int nbytes, packetsize = 0; Dbptr tmpdb; long t, nrecords, r, ntables; Arr *records = NULL; Tbl *tables = NULL, *static_tables; char *thistablename; Stbl *stbl; char *s; dbuntangle(db, &records); tables = keysarr(records); ntables = maxtbl(tables); if (ntables > 0) pkt = newPkt(); if (prefix) strncpy(pkt->parts.src_net, prefix, PKT_TYPESIZE); pkt->pkttype = suffix2pkttype("db"); for (t = 0; t < ntables; t++) { thistablename = gettbl(tables, t); tmpdb = dblookup(db, 0, thistablename, 0, 0); stbl = (Stbl *) getarr(records, thistablename); nrecords = maxstbl(stbl); if (nrecords > 0) { for (r = 0; r < nrecords; r++) { tmpdb.record = (long) getstbl(stbl, r); pkt->db = tmpdb; if (stuffPkt(pkt, srcname, &time, &packet, &nbytes, &packetsize) < 0) { elog_complain(0, "stuffPkt fails for pf packet"); return (-1); } if (orbput(orb, srcname, time, packet, nbytes) < 0) { elog_complain(0, "Couldn't send packet to orb\n"); return (-1); } } } } freetbl(tables, 0); dbfree_untangle(records); freePkt(pkt); if (verbose) { elog_notify(0, "%s: %d patcket(s) sent with sourcename: %s\n", s = strtime(now()), nrecords, srcname); free(s); } return (0); }
void WriteToOrb(SERVER *orb, UINT8 *das, int verbose, BOOL UseLoc) { static int count = 0; double samprate, tstamp; char buf[256]; struct reftek_dt dt; int nbytes; char *packet; static int packetsz = 0; static char srcname[ORBSRCNAME_SIZE]; static char *fid = "WriteToOrb"; /* Only deal with DT packets for which we can get sample rate */ if (reftek_type(das) != REFTEK_DT) return; if (!reftek_dt(&dt, das, TRUE)) { rtp_log(RTP_ERR, "%s: DAS pkt dropped (can't decode)\n", fid); return; } if (!DeriveSampleRate(&dt, &samprate)) { rtp_log(RTP_ERR, "%s: DAS pkt dropped (unknown sample rate): %s\n", fid, reftek_str(das, buf) ); return; } /* Note decompression errors, if any */ if (dt.dcerr) rtp_log(RTP_ERR, "%s: decompression error %d: %s\n", fid, dt.dcerr, reftek_str(das, buf) ); /* Convert to GENC format and send to ORB */ ConvertPacket(&dt, samprate, UseLoc); if (stuffPkt(Pkt, srcname, &tstamp, &packet, &nbytes, &packetsz) < 0) { rtp_log(RTP_ERR, "stuffPkt routine failed for %s\n", Pkt->pkttype->name); return; } ++count; if (verbose) { showPkt(0, srcname, tstamp, packet, nbytes, stdout, PKT_TERSE); } if (orbput(orb->fd, srcname, dt.tstamp, packet, nbytes) != 0) { rtp_log(RTP_ERR, "orbput fails\n"); } }