}
}
-void *CSV_peer( Connection_Info *stats, int ID ) {
-
- // copy the inet_ntop into temp buffers, to avoid overwriting
- char local_addr[ REPORT_ADDRLEN ];
- char remote_addr[ REPORT_ADDRLEN ];
- char *buf = malloc( REPORT_ADDRLEN*2 + 10 );
- struct sockaddr *local = ((struct sockaddr*)&stats->local);
- struct sockaddr *peer = ((struct sockaddr*)&stats->peer);
+void *CSV_peer(Connection_Info *stats, int ID)
+{
+ char laddr[REPORT_ADDRLEN],
+ daddr[REPORT_ADDRLEN],
+ *buf = malloc(2 * REPORT_ADDRLEN + 10);
+ unsigned lport = SockAddr_port(&stats->local),
+ dport = SockAddr_port(&stats->peer);
- if ( local->sa_family == AF_INET ) {
- inet_ntop( AF_INET, &((struct sockaddr_in*)local)->sin_addr,
- local_addr, REPORT_ADDRLEN);
- }
-#ifdef HAVE_IPV6
- else {
- inet_ntop( AF_INET6, &((struct sockaddr_in6*)local)->sin6_addr,
- local_addr, REPORT_ADDRLEN);
- }
-#endif
-
- if ( peer->sa_family == AF_INET ) {
- inet_ntop( AF_INET, &((struct sockaddr_in*)peer)->sin_addr,
- remote_addr, REPORT_ADDRLEN);
- }
-#ifdef HAVE_IPV6
- else {
- inet_ntop( AF_INET6, &((struct sockaddr_in6*)peer)->sin6_addr,
- remote_addr, REPORT_ADDRLEN);
- }
-#endif
+ SockAddr_name(&stats->local, laddr, sizeof(laddr));
+ SockAddr_name(&stats->peer, daddr, sizeof(daddr));
- snprintf(buf, REPORT_ADDRLEN*2+10, reportCSV_peer,
- local_addr, ( local->sa_family == AF_INET ?
- ntohs(((struct sockaddr_in*)local)->sin_port) :
-#ifdef HAVE_IPV6
- ntohs(((struct sockaddr_in6*)local)->sin6_port)),
-#else
- 0),
-#endif
- remote_addr, ( peer->sa_family == AF_INET ?
- ntohs(((struct sockaddr_in*)peer)->sin_port) :
-#ifdef HAVE_IPV6
- ntohs(((struct sockaddr_in6*)peer)->sin6_port)));
-#else
- 0));
-#endif
+ snprintf(buf, 2 * REPORT_ADDRLEN, reportCSV_peer,
+ laddr, lport, daddr, dport);
return buf;
}