+#include "silc.h"
+
+/* Returns bound port from listener */
+
+SilcUInt16 *silc_net_listener_get_port(SilcNetListener listener,
+ SilcUInt32 *port_count)
+{
+ SilcUInt16 *ports;
+ int i;
+
+ ports = silc_calloc(listener->socks_count, sizeof(*ports));
+ if (!ports)
+ return NULL;
+
+ for (i = 0; i < listener->socks_count; i++)
+ ports[i] = silc_net_get_local_port(listener->socks[i]);
+
+ if (port_count)
+ *port_count = listener->socks_count;
+
+ return ports;
+}
+
+/* Return bound IP from listener */
+
+char **silc_net_listener_get_ip(SilcNetListener listener,
+ SilcUInt32 *ip_count)
+{
+ char **ips = NULL, *ip;
+ int i, k;
+
+ ips = silc_calloc(listener->socks_count, sizeof(*ips));
+ if (!ips)
+ return NULL;
+
+ for (i = 0, k = 0; i < listener->socks_count; i++) {
+ if (silc_net_check_local_by_sock(listener->socks[i], NULL, &ip))
+ ips[k++] = ip;
+ }
+
+ if (ip_count)
+ *ip_count = k;
+
+ return ips;
+}
+
+/* Return bound hostname from listener */
+
+char **silc_net_listener_get_hostname(SilcNetListener listener,
+ SilcUInt32 *hostname_count)
+{
+ char **hs = NULL, *h;
+ int i, k;
+
+ hs = silc_calloc(listener->socks_count, sizeof(*hs));
+ if (!hs)
+ return NULL;
+
+ for (i = 0, k = 0; i < listener->socks_count; i++) {
+ if (silc_net_check_local_by_sock(listener->socks[i], &h, NULL))
+ hs[k++] = h;
+ }
+
+ if (hostname_count)
+ *hostname_count = k;
+
+ return hs;
+}