updates.
[silc.git] / lib / silcutil / silcnet.c
index 0f6df5a88053e356500a2f2d3c76e9539edd115d..24cd562641286d6ad6e90937a41e1de74791c419 100644 (file)
@@ -36,9 +36,17 @@ int silc_net_set_socket_opt(int sock, int level, int option, int on)
   return setsockopt(sock, level, option, (void *)&on, sizeof(on));
 }
 
+/* Get socket options */
+
+int silc_net_get_socket_opt(int sock, int level, int option, 
+                           void *optval, int *opt_len)
+{
+  return getsockopt(sock, level, option, optval, opt_len);
+}
+
 /* Checks whether IP address sent as argument is valid IP address. */
 
-int silc_net_is_ip(const char *addr)
+bool silc_net_is_ip(const char *addr)
 {
   struct in_addr tmp;
   int len = sizeof(tmp);
@@ -97,7 +105,7 @@ bool silc_net_check_host_by_sock(int sock, char **hostname, char **ip)
   /* Find the address from list */
   for (i = 0; dest->h_addr_list[i]; i++)
     if (!memcmp(dest->h_addr_list[i], &remote.sin_addr, 
-              sizeof(struct in_addr)))
+               sizeof(struct in_addr)))
       break;
   if (!dest->h_addr_list[i])
     return FALSE;
@@ -207,7 +215,7 @@ uint16 silc_net_get_local_port(int sock)
 
 /* Return name of localhost. */
 
-char *silc_net_localhost()
+char *silc_net_localhost(void)
 {
   char hostname[256];
   struct hostent *dest;
@@ -221,3 +229,25 @@ char *silc_net_localhost()
 
   return strdup(dest->h_name);
 }
+
+/* Returns local IP address */
+
+char *silc_net_localip(void)
+{
+  char hostname[256];
+  struct hostent *dest;
+  struct in_addr ip;
+  char *ips;
+
+  if (gethostname(hostname, sizeof(hostname)))
+    return NULL;
+
+  dest = gethostbyname(hostname);
+  if (!dest)
+    return NULL;
+
+  memcpy(&ip.s_addr, dest->h_addr_list[0], 4);
+  ips = inet_ntoa(ip);
+
+  return strdup(ips);
+}