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