From: Pekka Riikonen Date: Sat, 23 Jun 2001 14:52:03 +0000 (+0000) Subject: updates. X-Git-Tag: 1.2.beta1~2129 X-Git-Url: http://git.silcnet.org/gitweb/?a=commitdiff_plain;h=2ed9dcbb8fb101fca8b02901b97273adb16fa8e1;p=crypto.git updates. --- diff --git a/CHANGES b/CHANGES index 2deed3e7..f33d7505 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,10 @@ Sat Jun 23 16:01:00 EEST 2001 Pekka Riikonen and created lib/silcutil/win32 directory for WIN32 based scheduler. + * Added Unix specific network routines to the + lib/silcutil/unix/silcunixnet.c and the old + lib/silcutil/silcnet.c includes now only generic routines. + Fri Jun 22 10:44:14 EEST 2001 Pekka Riikonen * Do not handle JOIN notify in the server if the target client diff --git a/lib/silcutil/silcnet.c b/lib/silcutil/silcnet.c index 0f6df5a8..f8e75fd0 100644 --- a/lib/silcutil/silcnet.c +++ b/lib/silcutil/silcnet.c @@ -38,7 +38,7 @@ int silc_net_set_socket_opt(int sock, int level, int option, int on) /* 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); diff --git a/lib/silcutil/silcnet.h b/lib/silcutil/silcnet.h index b9ebab20..5b35a066 100644 --- a/lib/silcutil/silcnet.h +++ b/lib/silcutil/silcnet.h @@ -1,42 +1,230 @@ -/* - - silcnet.h - - Author: Pekka Riikonen - - Copyright (C) 1997 - 2001 Pekka Riikonen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - -*/ +/****h* silcutil/silcnet.h + * + * NAME + * + * silcnet.h + * + * COPYRIGHT + * + * Author: Pekka Riikonen + * + * Copyright (C) 1997 - 2001 Pekka Riikonen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ #ifndef SILCNET_H #define SILCNET_H /* Prototypes */ + +/****f* silcutil/SilcNetAPI/silc_net_create_server + * + * SYNOPSIS + * + * int silc_net_create_server(int port, char *ip_addr); + * + * DESCRIPTION + * + * This function creates server or daemon or listener or what ever. This + * does not fork a new process, it must be done by the caller if caller + * wants to create a child process. This is used by the SILC server. + * If argument `ip_addr' is NULL `any' address will be used. Returns + * the created socket or -1 on error. + * + ***/ int silc_net_create_server(int port, char *ip_addr); + +/****f* silcutil/SilcNetAPI/silc_net_close_server + * + * SYNOPSIS + * + * void silc_net_close_server(int sock); + * + * DESCRIPTION + * + * Closes the server by closing the socket connection. + * + ***/ void silc_net_close_server(int sock); + +/****f* silcutil/SilcNetAPI/silc_net_create_connection + * + * SYNOPSIS + * + * int silc_net_create_connection(int port, char *host); + * + * DESCRIPTION + * + * Creates a connection (TCP/IP) to a remote host. Returns the connection + * socket or -1 on error. This blocks the process while trying to create + * the connection. + * + ***/ int silc_net_create_connection(int port, char *host); + +/****f* silcutil/SilcNetAPI/silc_net_create_connection_async + * + * SYNOPSIS + * + * int silc_net_create_connection_async(int port, char *host); + * + * DESCRIPTION + * + * Creates a connection (TCP/IP) to a remote host. Returns the connection + * socket or -1 on error. This creates non-blocking socket hence the + * connection returns directly. To get the result of the connect() one + * must select() the socket and read the result after it's ready. + * + ***/ int silc_net_create_connection_async(int port, char *host); + +/****f* silcutil/SilcNetAPI/silc_net_close_connection + * + * SYNOPSIS + * + * void silc_net_close_connection(int sock); + * + * DESCRIPTION + * + * Closes the connection by closing the socket connection. + * + ***/ void silc_net_close_connection(int sock); + +/****f* silcutil/SilcNetAPI/silc_net_accept_connection + * + * SYNOPSIS + * + * int silc_net_accept_connection(int sock); + * + * DESCRIPTION + * + * Accepts a connection from a particular socket. + * + ***/ int silc_net_accept_connection(int sock); -int silc_net_set_socket_nonblock(int sock); + +/****f* silcutil/SilcNetAPI/silc_net_set_socket_opt + * + * SYNOPSIS + * + * int silc_net_set_socket_opt(int sock, int level, int option, int on); + * + * DESCRIPTION + * + * Sets a option for a socket. This function can be used to set + * various options for the socket. Some of the options might be + * system specific. + * + ***/ int silc_net_set_socket_opt(int sock, int level, int option, int on); -int silc_net_is_ip(const char *addr); + +/****f* silcutil/SilcNetAPI/silc_net_is_ip + * + * SYNOPSIS + * + * bool silc_net_is_ip(const char *addr); + * + * DESCRIPTION + * + * Checks whether IP address sent as argument is valid IP address. + * + ***/ +bool silc_net_is_ip(const char *addr); + +/****f* silcutil/SilcNetAPI/silc_net_addr2bin + * + * SYNOPSIS + * + * bool silc_net_addr2bin(const char *addr, unsigned char *bin, + * uint32 bin_len); + * + * DESCRIPTION + * + * Converts the IP number string from numbers-and-dots notation to + * binary form. + * + ***/ bool silc_net_addr2bin(const char *addr, unsigned char *bin, uint32 bin_len); + +/****f* silcutil/SilcNetAPI/silc_net_check_host_by_sock + * + * SYNOPSIS + * + * bool silc_net_check_host_by_sock(int sock, char **hostname, char **ip); + * + * DESCRIPTION + * + * Performs lookups for remote name and IP address. This peforms reverse + * lookup as well to verify that the IP has FQDN. + * + ***/ bool silc_net_check_host_by_sock(int sock, char **hostname, char **ip); + +/****f* silcutil/SilcNetAPI/silc_net_check_local_by_sock + * + * SYNOPSIS + * + * bool silc_net_check_local_by_sock(int sock, char **hostname, char **ip); + * + * DESCRIPTION + * + * Performs lookups for local name and IP address. This peforms reverse + * lookup as well to verify that the IP has FQDN. + * + ***/ bool silc_net_check_local_by_sock(int sock, char **hostname, char **ip); + +/****f* silcutil/SilcNetAPI/silc_net_get_remote_port + * + * SYNOPSIS + * + * uint16 silc_net_get_remote_port(int sock); + * + * DESCRIPTION + * + * Return remote port by socket. + * + ***/ uint16 silc_net_get_remote_port(int sock); + +/****f* silcutil/SilcNetAPI/silc_net_get_local_port + * + * SYNOPSIS + * + * uint16 silc_net_get_local_port(int sock); + * + * DESCRIPTION + * + * Return local port by socket. + * + ***/ uint16 silc_net_get_local_port(int sock); + +/****f* silcutil/SilcNetAPI/silc_net_localhost + * + * SYNOPSIS + * + * char *silc_net_localhost(); + * + * DESCRIPTION + * + * Return name of localhost. This will also attempt to resolve + * the real hostname by the local host's IP address. If unsuccessful + * the first found hostname is returned. + * + ***/ char *silc_net_localhost(); #endif diff --git a/lib/silcutil/unix/Makefile.am b/lib/silcutil/unix/Makefile.am index 3eb7f7d2..c0ab8480 100644 --- a/lib/silcutil/unix/Makefile.am +++ b/lib/silcutil/unix/Makefile.am @@ -20,8 +20,9 @@ AUTOMAKE_OPTIONS = 1.0 no-dependencies foreign noinst_LIBRARIES = libsilcunixutil.a -libsilcunixutil_a_SOURCES = \ - silcunixschedule.c +libsilcunixutil_a_SOURCES = \ + silcunixschedule.c \ + silcunixnet.c EXTRA_DIST = *.h diff --git a/lib/silcutil/unix/silcunixnet.c b/lib/silcutil/unix/silcunixnet.c index 7b2ef02d..1abb7a0c 100644 --- a/lib/silcutil/unix/silcunixnet.c +++ b/lib/silcutil/unix/silcunixnet.c @@ -22,6 +22,8 @@ #include "silcincludes.h" #include "silcnet.h" +int silc_net_set_socket_nonblock(int sock); + /* This function creates server or daemon or listener or what ever. This does not fork a new process, it must be done by the caller if caller wants to create a child process. This is used by the SILC server. @@ -84,6 +86,8 @@ int silc_net_create_server(int port, char *ip_addr) return sock; } +/* Closes the server by closing the socket connection. */ + void silc_net_close_server(int sock) { shutdown(sock, 2); @@ -199,7 +203,7 @@ int silc_net_create_connection_async(int port, char *host) return sock; } -/* Closes the connection */ +/* Closes the connection by closing the socket connection. */ void silc_net_close_connection(int sock) { diff --git a/lib/silcutil/win32/Makefile.am b/lib/silcutil/win32/Makefile.am index e66c847b..53b09b9b 100644 --- a/lib/silcutil/win32/Makefile.am +++ b/lib/silcutil/win32/Makefile.am @@ -20,7 +20,8 @@ AUTOMAKE_OPTIONS = 1.0 no-dependencies foreign noinst_LIBRARIES = libsilcwin32util.a -libsilcwin32util_a_SOURCES = +libsilcwin32util_a_SOURCES = \ + silcwin32net.c EXTRA_DIST = *.h diff --git a/lib/silcutil/win32/silcwin32net.c b/lib/silcutil/win32/silcwin32net.c index 13032ce7..d3ff0474 100644 --- a/lib/silcutil/win32/silcwin32net.c +++ b/lib/silcutil/win32/silcwin32net.c @@ -186,3 +186,10 @@ bool silc_net_addr2bin(const char *addr, unsigned char *bin, return ret != INADDR_NONE; } + +/* Set socket to non-blocking mode. */ + +int silc_net_set_socket_nonblock(int sock) +{ + return 0; +}