std::string packetToString(const NetherPacket &packet) { std::stringstream stream; stream << "ID="; stream << packet.id; stream << " SECCTX="; stream << packet.securityContext; stream << " OUTDEV="; stream << packet.outdevName; stream << " UID="; stream << packet.uid; stream << " GID="; stream << packet.gid; stream << " PROTO="; stream << protocolToString(packet.protocolType); stream << " TRANSPORT="; stream << transportToString(packet.transportType); stream << " SADDR="; stream << ipAddressToString(&packet.localAddress[0], packet.protocolType); stream << ":"; stream << packet.localPort; stream << " DADDR="; stream << ipAddressToString(&packet.remoteAddress[0], packet.protocolType); stream << ":"; stream << packet.remotePort; return (stream.str()); }
static void writeTraceRecord(int fd, bool isRead, const uint8_t *contents, uint16_t length, struct sockaddr *remoteAddress) { FdTrace *fdTrace = findFdTrace(fd); if (fdTrace != NULL && traceFile != NULL) { uint16_t i; char addressString[100] = {0}; char realAddress[16] = {0}; if (remoteAddress != NULL) { memcpy(realAddress, ((struct sockaddr_in6 *) remoteAddress)->sin6_addr.s6_addr, 16); } // i don't like having an #ifdef here, but it's easier than // pulling in ip-address.c to the tls and pana tests #ifdef UNIX_SCRIPTED_HOST ipAddressToString(realAddress, addressString, sizeof(addressString)); #else strcpy(addressString, "0000:0000:0000:0000:0000:0000:0000:0000"); #endif fprintf(traceFile, "%c %u %s %d", (isRead ? fdTrace->readTag : fdTrace->writeTag), fdTrace->port, addressString, length); for (i = 0; i < length; i++) { fprintf(traceFile, "%s%02X", (i % 16 == 0 ? "\n" : " "), contents[i]); } fprintf(traceFile, "\n"); fflush(traceFile); } }