00001
00002 #ifndef __JBXL_NETWORK_H_
00003 #define __JBXL_NETWORK_H_
00004
00005
00018 #include "tools.h"
00019
00020 #define _WINSOCK_DEPRECATED_NO_WARNINGS
00021 #ifdef WIN32
00022
00023 #include <fcntl.h>
00024
00025 #ifndef socklen_t
00026 #define socklen_t int
00027 #endif
00028 extern WSADATA WsaData;
00029
00030 #define _WINSOCK_DEPRECATED_NO_WARNINGS
00031
00032 #else
00033
00034 #include <sys/socket.h>
00035
00036 #ifdef HAVE_UNISTD_H
00037 #ifndef _XOPEN_SOURCE
00038 #define _XOPEN_SOURCE
00039 #endif
00040 #include <unistd.h>
00041 #endif
00042
00043 #ifdef HAVE_SYS_SOCKIO_H
00044 #include <sys/sockio.h>
00045 #endif
00046
00047 #ifdef HAVE_NETINET_IN_H
00048 #include <netinet/in.h>
00049 #endif
00050 #ifdef HAVE_ARPA_INET_H
00051 #include <arpa/inet.h>
00052 #endif
00053
00054 #include <netdb.h>
00055
00056 #include <fcntl.h>
00057 #include <sys/ioctl.h>
00058 #include <net/if.h>
00059 #endif
00060
00061
00062 #define SEND_TIMEOUTED -97
00063 #define RECV_TIMEOUTED -98
00064 #define TRANS_TIMEOUTED -99
00065
00066
00067
00068
00069 #define MAXIFNO 10
00070
00071
00072
00074
00075 int init_network(void);
00076 void cleanup_network(void);
00077
00078
00080
00081
00082 int udp_server_socket(int);
00083 int udp_server_socket_setopt(int, int, const void*, int);
00084 int udp_client_socket(char*, int, struct sockaddr_in*);
00085 int udp_bind(int, int);
00086 int udp_bind_setopt(int, int, int, const void*, int);
00087
00088 int tcp_server_socket(int port);
00089 int tcp_server_socket_setopt(int port, int, const void*, int);
00090 int tcp_server_bind(int port);
00091 int tcp_server_bind_setopt(int port, int, const void*, int);
00092
00093 int tcp_client_socket(char* hname, int port);
00094 int tcp_client_bind_socket(char* host, int sport, int cport);
00095 int tcp_bind(int, int);
00096 int tcp_bind_setopt(int, int, int, const void*, int);
00097 int tcp_connect(int sock, char* host, int port);
00098
00099 int accept_intr(int, struct sockaddr*, socklen_t*);
00100 int socket_close(int sock);
00101
00102 int get_valid_udp_socket(int min, int max, unsigned short* port);
00103 int get_valid_tcp_server_socket(int min, int max, unsigned short* port);
00104 int get_valid_tcp_client_socket(int min, int max, char* hostname, unsigned short sport, unsigned short* cport);
00105
00106
00107
00108
00110
00111
00112 int udp_recv(int, char*, int, struct sockaddr_in*);
00113 int udp_send(int, char*, int, struct sockaddr_in*);
00114 int tcp_recv(int, char*, int);
00115 int tcp_send(int, char*, int);
00116
00117 int tcp_recv_wait(int sock, char* data, int sz, int tm);
00118 int udp_recv_wait(int sock, char* data, int size, struct sockaddr_in* sv_addr, int tm);
00119
00120 int tcp_send_mesgln(int, char*);
00121
00122 int tcp_recv_mstream(int sock, char* mesg, int sz, mstream* sb, int tm);
00123
00124 int recv_wait(int sock, int tm);
00125 int recv_wait_twin(int sock1, int sock2, int tm);
00126 int send_wait(int sock, int tm);
00127
00128 void udp_hole_punching(int sock, struct sockaddr_in addr, int nm);
00129
00130
00141 #define udp_send_mesg(sock, smsg, sv_addr) udp_send((sock), (smsg), 0, (sv_addr))
00142
00143
00153 #define tcp_send_mesg(sock, smsg) tcp_send((sock), (smsg), 0)
00154
00155
00156
00158
00159
00160 char* get_ipaddr(struct in_addr);
00161 char* get_ipaddr_byname(char*);
00162 char* get_mynetaddr(void);
00163 char* get_localip_bydest(char* dest);
00164
00165 char* get_hostname_bynum(unsigned char*);
00166 char* get_hostname(char*);
00167
00168 unsigned char* get_ipaddr_num(struct in_addr);
00169 unsigned char* get_ipaddr_byname_num(char*);
00170 unsigned char* get_mynetaddr_num(void);
00171
00172
00180 #define get_localip() get_localip_bydest("202.26.158.1")
00181
00182
00183 #ifdef WIN32
00184 #define get_myipaddr() get_localip_bydest("202.26.158.1")
00185 #else
00186 char* get_myipaddr(void);
00187 #endif
00188 unsigned char* get_myipaddr_num(void);
00189
00190
00191 struct sockaddr_in get_sockaddr(char* hostname, unsigned short cport);
00192 struct sockaddr_in get_sockaddr_bynum(char* ipnum, unsigned short cport);
00193 struct sockaddr_in get_local_sockaddr(unsigned short cport);
00194 int is_same_sockaddr(struct sockaddr_in addr1, struct sockaddr_in addr2);
00195
00196
00197 unsigned char* to_address_num8(char* addr, int mode);
00198 char* to_address_char8(unsigned char* addr);
00199 unsigned char* to_address_num4(char* addr, int mode);
00200 char* to_address_char4(unsigned char* addr);
00201
00202
00203 int is_same_network_num(unsigned char* addr1, unsigned char* addr2, unsigned char* mask);
00204 int is_same_network(char* addr1, char* addr2, char* mask);
00205
00206
00207 #endif
00208
00209
00210