19 #ifndef NS_SKELETON_HEADER_INCLUDED 20 #define NS_SKELETON_HEADER_INCLUDED 22 #define NS_SKELETON_VERSION "2.1.0" 24 #undef UNICODE // Use ANSI WinAPI functions 25 #undef _UNICODE // Use multibyte encoding on Windows 26 #define _MBCS // Use multibyte encoding on Windows 27 #define _INTEGRAL_MAX_BITS 64 // Enable _stati64() on Windows 28 #define _CRT_SECURE_NO_WARNINGS // Disable deprecation warning in VS2005+ 29 #undef WIN32_LEAN_AND_MEAN // Let windows.h always include winsock2.h 30 #define _XOPEN_SOURCE 600 // For flockfile() on Linux 31 #define __STDC_FORMAT_MACROS // <inttypes.h> wants this for C++ 32 #define __STDC_LIMIT_MACROS // C++ wants that for INT64_MAX 33 #ifndef _LARGEFILE_SOURCE 34 #define _LARGEFILE_SOURCE // Enable fseeko() and ftello() functions 36 #define _FILE_OFFSET_BITS 64 // Enable 64-bit file offsets 39 #pragma warning (disable : 4127) // FD_SET() emits warning, disable it 40 #pragma warning (disable : 4204) // missing c99 support 43 #include <sys/types.h> 59 #pragma comment(lib, "ws2_32.lib") // Linking with winsock library 64 #define EINPROGRESS WSAEINPROGRESS 67 #define EWOULDBLOCK WSAEWOULDBLOCK 71 #define STR(x) STRX(x) 72 #define __func__ __FILE__ ":" STR(__LINE__) 75 #define va_copy(x,y) x = y 76 #endif // MINGW #defines va_copy 77 #define snprintf _snprintf 78 #define vsnprintf _vsnprintf 79 #define sleep(x) Sleep((x) * 1000) 80 #define to64(x) _atoi64(x) 81 typedef int socklen_t;
82 typedef unsigned char uint8_t;
83 typedef unsigned int uint32_t;
84 typedef unsigned short uint16_t;
85 typedef unsigned __int64 uint64_t;
86 typedef __int64 int64_t;
90 #define S_ISDIR(x) ((x) & _S_IFDIR) 99 #include <arpa/inet.h> 100 #include <netinet/in.h> 101 #include <sys/socket.h> 102 #include <sys/select.h> 103 #define closesocket(x) close(x) 105 #define INVALID_SOCKET (-1) 106 #define to64(x) strtoll(x, NULL, 10) 111 #ifdef NS_ENABLE_DEBUG 112 #define DBG(x) do { printf("%-20s ", __func__); printf x; putchar('\n'); \ 113 fflush(stdout); } while(0) 119 #define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) 124 #pragma GCC diagnostic ignored "-Wdeprecated-declarations" 126 #include <openssl/ssl.h> 134 #endif // __cplusplus 139 #ifdef NS_ENABLE_IPV6 140 struct sockaddr_in6
sin6;
171 #define NS_POLL 0 // Sent to each connection on each call to ns_mgr_poll() 172 #define NS_ACCEPT 1 // New connection accept()-ed. union socket_address *addr 173 #define NS_CONNECT 2 // connect() succeeded or failed. int *success_status 174 #define NS_RECV 3 // Data has benn received. int *num_bytes 175 #define NS_SEND 4 // Data has been written to a socket. int *num_bytes 176 #define NS_CLOSE 5 // Connection is closed. NULL 204 #define NSF_FINISHED_SENDING_DATA (1 << 0) 205 #define NSF_BUFFER_BUT_DONT_SEND (1 << 1) 206 #define NSF_SSL_HANDSHAKE_DONE (1 << 2) 207 #define NSF_CONNECTING (1 << 3) 208 #define NSF_CLOSE_IMMEDIATELY (1 << 4) 209 #define NSF_WANT_READ (1 << 5) 210 #define NSF_WANT_WRITE (1 << 6) 211 #define NSF_LISTENING (1 << 7) 212 #define NSF_UDP (1 << 8) 214 #define NSF_USER_1 (1 << 20) 215 #define NSF_USER_2 (1 << 21) 216 #define NSF_USER_3 (1 << 22) 217 #define NSF_USER_4 (1 << 23) 218 #define NSF_USER_5 (1 << 24) 219 #define NSF_USER_6 (1 << 25) 247 int ns_resolve(
const char *domain_name,
char *ip_addr_buf,
size_t buf_len);
251 #endif // __cplusplus 253 #endif // NS_SKELETON_HEADER_INCLUDED struct ns_connection * ns_next(struct ns_mgr *, struct ns_connection *)
void ns_set_close_on_exec(sock_t)
void iobuf_init(struct iobuf *, size_t initial_size)
int stat(const char *path, struct stat *buffer)
struct ns_connection * active_connections
void iobuf_remove(struct iobuf *, size_t data_size)
time_t ns_mgr_poll(struct ns_mgr *, int milli)
void ns_sock_to_str(sock_t sock, char *buf, size_t len, int flags)
int ns_send(struct ns_connection *, const void *buf, int len)
int ns_vprintf(struct ns_connection *, const char *fmt, va_list ap)
void * ns_start_thread(void *(*f)(void *), void *p)
const char * hexdump_file
int ns_avprintf(char **buf, size_t size, const char *fmt, va_list ap)
int ns_hexdump(const void *buf, int len, char *dst, int dst_len)
struct ns_connection * listener
void(* ns_callback_t)(struct ns_connection *, int event_num, void *evp)
struct ns_connection * prev
struct ns_connection * ns_bind(struct ns_mgr *, const char *, ns_callback_t, void *)
struct ns_connection * ns_add_sock(struct ns_mgr *, sock_t, ns_callback_t, void *)
int ns_socketpair(sock_t[2])
void ns_mgr_free(struct ns_mgr *)
size_t iobuf_append(struct iobuf *, const void *data, size_t data_size)
void ns_mgr_init(struct ns_mgr *, void *user_data)
void iobuf_free(struct iobuf *)
void iobuf_resize(struct iobuf *, size_t new_size)
struct ns_connection * ns_connect(struct ns_mgr *, const char *, ns_callback_t, void *)
struct ns_connection * next
int ns_printf(struct ns_connection *, const char *fmt,...)
void ns_broadcast(struct ns_mgr *, ns_callback_t, void *, size_t)
int ns_socketpair2(sock_t[2], int sock_type)
int ns_resolve(const char *domain_name, char *ip_addr_buf, size_t buf_len)