unsigned char *dns_name(const unsigned char *full, int fulllen, BSB *inbsb, int *namelen) { static unsigned char name[8000]; BSB nbsb; int didPointer = 0; BSB tmpbsb; BSB *curbsb; BSB_INIT(nbsb, name, sizeof(name)); curbsb = inbsb; while (BSB_REMAINING(*curbsb)) { unsigned char ch = 0; BSB_IMPORT_u08(*curbsb, ch); if (ch == 0) break; BSB_EXPORT_rewind(*curbsb, 1); if (ch & 0xc0) { if (didPointer > 5) return 0; didPointer++; int tpos = 0; BSB_IMPORT_u16(*curbsb, tpos); tpos &= 0x3fff; BSB_INIT(tmpbsb, full+tpos, fulllen - tpos); curbsb = &tmpbsb; continue; } if (BSB_LENGTH(nbsb)) { BSB_EXPORT_u08(nbsb, '.'); } if (dns_name_element(&nbsb, curbsb) && BSB_LENGTH(nbsb)) BSB_EXPORT_rewind(nbsb, 1); // Remove last . } *namelen = BSB_LENGTH(nbsb); BSB_EXPORT_u08(nbsb, 0); return name; }
void netflow_send() { BSB hbsb; BSB_INIT(hbsb, buf, headerSize); uint32_t sys_uptime = (bufTime.tv_sec - initialPacket.tv_sec)*1000; /*+ (bufTIme.tv_usec - initialPacket.tv_usec)/1000;*/ /* Header */ BSB_EXPORT_u16(hbsb, netflowVersion); BSB_EXPORT_u16(hbsb, bufCount); // count BSB_EXPORT_u32(hbsb, sys_uptime); // sys_uptime BSB_EXPORT_u32(hbsb, bufTime.tv_sec); BSB_EXPORT_u32(hbsb, bufTime.tv_usec); switch (netflowVersion) { case 5: BSB_EXPORT_u32(hbsb, totalFlows); // flow_sequence BSB_EXPORT_u08(hbsb, 0); // engine_type BSB_EXPORT_u08(hbsb, 0); // engine_id BSB_EXPORT_u16(hbsb, 0); // mode/interval break; case 7: BSB_EXPORT_u32(hbsb, totalFlows); // flow_sequence BSB_EXPORT_u32(hbsb, 0); // reserved break; } int i; for (i = 0; i < numDests; i++) { int rc; if ((rc = send(dests[i].fd, buf, BSB_LENGTH(bsb)+headerSize, 0)) < BSB_LENGTH(bsb)+headerSize) { LOG("Failed to send rc=%d size=%ld", rc, BSB_LENGTH(bsb)+headerSize); } } totalFlows += bufCount; BSB_INIT(bsb, buf + headerSize, sizeof(buf) - headerSize); bufCount = 0; }
LOCAL void wise_flush_locked() { if (!iRequest || iRequest->numItems == 0) return; inflight += iRequest->numItems; if (moloch_http_send(wiseService, "POST", "/get", 4, iBuf, BSB_LENGTH(iRequest->bsb), NULL, TRUE, wise_cb, iRequest) != 0) { LOG("Wise - request failed %p for %d items", iRequest, iRequest->numItems); wise_cb(500, NULL, 0, iRequest); } iRequest = 0; iBuf = 0; }
gboolean wise_flush(gpointer UNUSED(user_data)) { if (!iRequest || iRequest->numItems == 0) return TRUE; inflight += iRequest->numItems; if (moloch_http_send(wiseService, "POST", "/get", 4, iBuf, BSB_LENGTH(iRequest->bsb), NULL, TRUE, wise_cb, iRequest) != 0) { LOG("Wise - request failed %p for %d items", iRequest, iRequest->numItems); wise_cb(NULL, 0, iRequest); } iRequest = 0; iBuf = 0; return TRUE; }