Main Page | Modules | Data Structures | Directories | File List | Data Fields | Globals | Related Pages

socket.h

Go to the documentation of this file.
00001 
00012 // $Id: socket.h 230 2006-02-09 00:52:46Z MagicalTux $
00013 // original : core.h 2003/03/14 11:55:25 Rev 1.4
00014 
00015 #ifndef OA_SOCKET_H
00016 #define OA_SOCKET_H
00017 
00018 #include <stdio.h>
00019 
00020 #ifdef _WIN32
00021 #define __USE_W32_SOCKETS
00022 #include <windows.h>
00023 #else
00024 #include <sys/types.h>
00025 #include <sys/socket.h>
00026 #include <netinet/in.h>
00027 #endif
00028 
00029 
00030 #define RFIFOP(fd,pos)          \
00031         (session[fd]->rdata + session[fd]->rdata_pos + (pos))
00032 
00033 #define RFIFOB(fd,pos)          \
00034         (*(unsigned char*)      \
00035          (session[fd]->rdata + session[fd]->rdata_pos + (pos)))
00036 
00037 #define RFIFOW(fd,pos)          \
00038         (*(unsigned short*)     \
00039          (session[fd]->rdata + session[fd]->rdata_pos + (pos)))
00040 
00041 #define RFIFOL(fd,pos)          \
00042         (*(unsigned int*)       \
00043          (session[fd]->rdata + session[fd]->rdata_pos + (pos)))
00044 
00045 #ifdef __DEBUG
00046 #define RFIFOSKIP(fd,len)                                       \
00047         do {                                                    \
00048                 if (session[fd]->rdata_size                     \
00049                     - session[fd]->rdata_pos - (len) < 0) {     \
00050                         fprintf(stderr,                         \
00051                                 "Too many skips at %s:%d.\n",   \
00052                                         __FILE__, __LINE__);    \
00053                         exit(1);                                \
00054                 } else {                                        \
00055                         session[fd]->rdata_pos += (len);        \
00056                 }                                               \
00057         } while (0)
00058                 
00059 #else
00060 #define RFIFOSKIP(fd,len)       \
00061         (session[fd]->rdata_pos += (len))
00062 #endif // __DEBUG
00063 
00064 #define RFIFOREST(fd)           \
00065         (session[fd]->rdata_size - session[fd]->rdata_pos)
00066 
00067 #define RFIFOFLUSH(fd)                                          \
00068         do {                                                    \
00069                 memmove(session[fd]->rdata,                     \
00070                         RFIFOP(fd,0), RFIFOREST(fd));           \
00071                 session[fd]->rdata_size = RFIFOREST(fd);        \
00072                 session[fd]->rdata_pos = 0;                     \
00073         } while (0)
00074 
00075 #define RFIFOSPACE(fd) \
00076         (session[fd]->max_rdata - session[fd]->rdata_size)
00077 
00078 #define RBUFP(p,pos) \
00079         (((unsigned char*)(p)) + (pos))
00080 
00081 #define RBUFB(p,pos) \
00082         (*(unsigned char*)((p) + (pos)))
00083 
00084 #define RBUFW(p,pos) \
00085         (*(unsigned short*)((p) + (pos)))
00086 
00087 #define RBUFL(p,pos) \
00088         (*(unsigned int*)((p) + (pos)))
00089 
00090 #define WFIFOSPACE(fd) \
00091         (session[fd]->max_wdata - session[fd]->wdata_size)
00092 
00098 char WPACKETBUF[65536];
00099 
00107 #define WPACKETP(pos) \
00108         (WPACKETBUF + (pos))
00109 
00117 #define WPACKETB(pos) \
00118         (*(unsigned char*)(WPACKETBUF + (pos)))
00119 
00125 #define WPACKETW(pos) \
00126         (*(unsigned short*)(WPACKETBUF + (pos)))
00127 
00133 #define WPACKETL(pos) \
00134         (*(unsigned int*)(WPACKETBUF + (pos)))
00135 
00136 #if 0 
00137 
00143 #define SENDPACKET(fd,len)                                      \
00144         (memcpy(session[fd]->wdata + session[fd]->wdata_size,   \
00145                 WFIFOBUF, len);                                 \
00146          session[fd]->wdata_size = session[fd]->wdata_size + (len);)
00147 
00148 #define WFIFOP(fd,pos)                                          \
00149         (session[fd]->wdata + session[fd]->wdata_size + (pos))
00150 
00151 #define WFIFOB(fd,pos)                                          \
00152         (*(unsigned char*)                                      \
00153          (session[fd]->wdata + session[fd]->wdata_size + (pos)))
00154 
00155 #define WFIFOW(fd,pos)                                          \
00156         (*(unsigned short*)                                     \
00157          (session[fd]->wdata + session[fd]->wdata_size + (pos)))
00158 
00159 #define WFIFOL(fd,pos)                                          \
00160         (*(unsigned int*)                                       \
00161          (session[fd]->wdata + session[fd]->wdata_size + (pos)))
00162 
00163 #define WFIFOSET(fd,len)                                        \
00164         (session[fd]->wdata_size =                              \
00165          (session[fd]->wdata_size + (len) + 2048 < session[fd]->max_wdata)\
00166          ? session[fd]->wdata_size + len : session[fd]->wdata_size)
00167 
00170 #endif // 0
00171 
00172 #define WBUFP(p,pos) \
00173         (((unsigned char*)(p)) + (pos))
00174 
00175 #define WBUFB(p,pos) \
00176         (*(unsigned char*)((p) + (pos)))
00177 
00178 #define WBUFW(p,pos) \
00179         (*(unsigned short*)((p) + (pos)))
00180 
00181 #define WBUFL(p,pos) \
00182         (*(unsigned int*)((p) + (pos)))
00183 
00184 #ifdef __INTERIX
00185 #define FD_SETSIZE 4096
00186 #endif // __INTERIX
00187 
00188 /* Removed Cygwin FD_SETSIZE declarations, now are directly passed on to the compiler through Makefile [Valaris] */
00189 /* Removed LCCWIN32 FD_SETSIZE declarations, must be passed directly to the compiler while compiling [MagicalTux] */
00190 
00191 // Struct declaration
00192 
00196 struct socket_data{
00197         unsigned char eof;                      
00198         unsigned char not_used_big_rdata;       
00199         unsigned char not_used_big_wdata;       
00200         char *rdata, *wdata;
00201         int max_rdata, max_wdata;
00202         int rdata_size, wdata_size;
00203         int rdata_pos;
00204         struct sockaddr_in client_addr;
00205         int (*func_recv)(int);
00206         int (*func_send)(int);
00207         int (*func_parse)(int);
00208         int (*func_console)(char*);
00209         void* session_data;
00210 };
00211 
00212 // Data prototype declaration
00213 
00214 extern struct socket_data *session[FD_SETSIZE];
00215 
00216 int fd_max;
00217 
00218 extern char listen_ip[16]; // 15 + NULL
00219 
00220 // Function prototype declaration
00221 
00222 int make_listen_port(int);
00223 int make_connection(long, int);
00224 int delete_session(int);
00225 int realloc_fifo(int fd, int rfifo_size, int wfifo_size);
00226 void SENDPACKET(const int fd, const int len);
00227 //int WFIFOSET(int fd, unsigned int len);
00228 //int RFIFOSKIP(int fd, int len);
00229 #ifdef HAVE_ARES_LIB
00230 void set_proxy_dnsbl(const char *dnsbl);
00231 #endif
00232 
00233 void flush_fifos(void);
00234 int do_sendrecv(int next);
00235 int do_parsepacket(void);
00236 void do_socket(void);
00237 
00238 int start_console(int (*parse_console_func)(char*));
00239 
00240 void set_defaultparse(int (*defaultparse)(int));
00241 
00242 int Net_Init(void);
00243 
00244 unsigned int addr_[16]; /* ip addresses of local host (host byte order) */
00245 unsigned int naddr_; /* # of ip addresses */
00246 
00249 #endif // OA_SOCKET_H
00250 

Generated on Fri Apr 28 10:20:04 2006 for OpenAthena by  doxygen 1.4.4