175 lines
4.0 KiB
C++
175 lines
4.0 KiB
C++
/*****************************************************************************
|
|
|
|
$Id$
|
|
|
|
File: project.h
|
|
Date: 06Apr06
|
|
|
|
Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
|
Gmail: blackhedd
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of either: 1) 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; or 2) Ruby's License.
|
|
|
|
See the file COPYING for complete licensing information.
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
#ifndef __Project__H_
|
|
#define __Project__H_
|
|
|
|
|
|
#include <iostream>
|
|
#include <map>
|
|
#include <set>
|
|
#include <vector>
|
|
#include <deque>
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <stdexcept>
|
|
|
|
|
|
#ifdef OS_UNIX
|
|
#include <signal.h>
|
|
#include <netdb.h>
|
|
#include <time.h>
|
|
#include <sys/time.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <sys/socket.h>
|
|
#include <sys/un.h>
|
|
#include <sys/resource.h>
|
|
#include <sys/wait.h>
|
|
#include <assert.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
#include <netinet/in.h>
|
|
#include <netinet/tcp.h>
|
|
#include <arpa/inet.h>
|
|
#include <pwd.h>
|
|
#include <string.h>
|
|
typedef int SOCKET;
|
|
#define INVALID_SOCKET -1
|
|
#define SOCKET_ERROR -1
|
|
#ifdef OS_SOLARIS8
|
|
#include <strings.h>
|
|
#include <sys/un.h>
|
|
#ifndef AF_LOCAL
|
|
#define AF_LOCAL AF_UNIX
|
|
#endif
|
|
// INADDR_NONE is undefined on Solaris < 8. Thanks to Brett Eisenberg and Tim Pease.
|
|
#ifndef INADDR_NONE
|
|
#define INADDR_NONE ((unsigned long)-1)
|
|
#endif
|
|
#endif /* OS_SOLARIS8 */
|
|
|
|
#ifdef _AIX
|
|
#include <strings.h>
|
|
#ifndef AF_LOCAL
|
|
#define AF_LOCAL AF_UNIX
|
|
#endif
|
|
#endif /* _AIX */
|
|
|
|
#ifdef OS_DARWIN
|
|
#include <mach/mach.h>
|
|
#include <mach/mach_time.h>
|
|
#endif /* OS_DARWIN */
|
|
|
|
#endif /* OS_UNIX */
|
|
|
|
#ifdef OS_WIN32
|
|
// 21Sep09: windows limits select() to 64 sockets by default, we increase it to 1024 here (before including winsock2.h)
|
|
// 18Jun12: fd_setsize must be changed in the ruby binary (not in this extension). redefining it also causes segvs, see eventmachine/eventmachine#333
|
|
//#define FD_SETSIZE 1024
|
|
|
|
// WIN32_LEAN_AND_MEAN excludes APIs such as Cryptography, DDE, RPC, Shell, and Windows Sockets.
|
|
#define WIN32_LEAN_AND_MEAN
|
|
|
|
#include <windows.h>
|
|
#include <winsock2.h>
|
|
#include <ws2tcpip.h>
|
|
#include <rpc.h>
|
|
#include <fcntl.h>
|
|
#include <assert.h>
|
|
|
|
// Older versions of MinGW in the Ruby Dev Kit do not provide the getaddrinfo hint flags
|
|
#ifndef AI_ADDRCONFIG
|
|
#define AI_ADDRCONFIG 0x0400
|
|
#endif
|
|
|
|
#ifndef AI_NUMERICSERV
|
|
#define AI_NUMERICSERV 0x0008
|
|
#endif
|
|
|
|
// Use the Win32 wrapper library that Ruby owns to be able to close sockets with the close() function
|
|
#define RUBY_EXPORT
|
|
#include <ruby/defines.h>
|
|
#include <ruby/win32.h>
|
|
#endif /* OS_WIN32 */
|
|
|
|
#if !defined(_MSC_VER) || _MSC_VER > 1500
|
|
#include <stdint.h>
|
|
#endif
|
|
|
|
#ifdef WITH_SSL
|
|
#include <openssl/ssl.h>
|
|
#include <openssl/err.h>
|
|
#endif
|
|
|
|
#ifdef HAVE_EPOLL
|
|
#include <sys/epoll.h>
|
|
#endif
|
|
|
|
#ifdef HAVE_KQUEUE
|
|
#include <sys/event.h>
|
|
#include <sys/queue.h>
|
|
#endif
|
|
|
|
#ifdef HAVE_INOTIFY
|
|
#include <sys/inotify.h>
|
|
#endif
|
|
|
|
#ifdef HAVE_OLD_INOTIFY
|
|
#include <sys/syscall.h>
|
|
#include <linux/inotify.h>
|
|
static inline int inotify_init (void) { return syscall (__NR_inotify_init); }
|
|
static inline int inotify_add_watch (int fd, const char *name, __u32 mask) { return syscall (__NR_inotify_add_watch, fd, name, mask); }
|
|
static inline int inotify_rm_watch (int fd, __u32 wd) { return syscall (__NR_inotify_rm_watch, fd, wd); }
|
|
#define HAVE_INOTIFY 1
|
|
#endif
|
|
|
|
#ifdef HAVE_INOTIFY
|
|
#define INOTIFY_EVENT_SIZE (sizeof(struct inotify_event))
|
|
#endif
|
|
|
|
#ifdef HAVE_WRITEV
|
|
#include <sys/uio.h>
|
|
#endif
|
|
|
|
#if __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
typedef void (*EMCallback)(const unsigned long, int, const char*, const unsigned long);
|
|
#if __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
|
#define UNUSED __attribute__ ((unused))
|
|
#else
|
|
#define UNUSED
|
|
#endif
|
|
|
|
#include "binder.h"
|
|
#include "em.h"
|
|
#include "ed.h"
|
|
#include "page.h"
|
|
#include "ssl.h"
|
|
#include "eventmachine.h"
|
|
|
|
#endif // __Project__H_
|