static void lgtd_libevent_log(int severity, const char *msg) { switch (severity) { case EVENT_LOG_DEBUG: lgtd_debug("%s", msg); break; case EVENT_LOG_MSG: lgtd_info("%s", msg); break; case EVENT_LOG_WARN: lgtd_warnx("%s", msg); break; case EVENT_LOG_ERR: lgtd_warnx("%s", msg); break; default: break; } }
char * lgtd_sockaddrtoa(const struct sockaddr *peer, char *buf, int buflen) { assert(peer); assert(buf); assert(buflen > 1); const char *printed = NULL; int i = 0; switch (peer->sa_family) { case AF_INET: (void)0; const struct sockaddr_in *in_peer = (const struct sockaddr_in *)peer; LGTD_SNPRINTF_APPEND(buf, i, buflen, "[::ffff:"); printed = inet_ntop(AF_INET, &in_peer->sin_addr, &buf[i], buflen - i); if (printed) { i += strlen(printed); LGTD_SNPRINTF_APPEND( buf, i, buflen, "]:%hu", ntohs(in_peer->sin_port) ); } break; case AF_INET6: (void)0; const struct sockaddr_in6 *in6_peer = (const struct sockaddr_in6 *)peer; LGTD_SNPRINTF_APPEND(buf, i, buflen, "["); printed = inet_ntop(AF_INET6, &in6_peer->sin6_addr, &buf[i], buflen - i); if (printed) { i += strlen(printed); LGTD_SNPRINTF_APPEND( buf, i, buflen, "]:%hu", ntohs(in6_peer->sin6_port) ); } break; case AF_UNIX: (void)0; const struct sockaddr_un *un_path = (const struct sockaddr_un *)peer; LGTD_SNPRINTF_APPEND(buf, i, buflen, "at %s", un_path->sun_path); printed = buf; break; default: break; } if (!printed) { buf[0] = 0; lgtd_warnx("not enough space to log an ip address"); #ifndef NDEBUG abort(); #endif } return buf; }