⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.h

📁 穿越防火墙技术代码
💻 H
字号:
/*common.hCopyright (C) 1999 Lars Brinkhoff.  See COPYING for terms and conditions.*/#ifndef COMMON_H#define COMMON_H#include "config.h"#include <errno.h>#include <fcntl.h>#include <stdio_.h>#include <unistd_.h>#include <string.h>#include <syslog_.h>#include <getopt.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <stdarg.h>#include "tunnel.h"#define DEFAULT_HOST_PORT 8888#define DEFAULT_CONTENT_LENGTH (100 * 1024) /* bytes */#define DEFAULT_KEEP_ALIVE 5 /* seconds */#define DEFAULT_MAX_CONNECTION_AGE 300 /* seconds */#define BUG_REPORT_EMAIL "bug-httptunnel@gnu.org"#ifndef TRUE#define TRUE 1#define FALSE 0#endif#if defined (LOG_ERR) && !defined (LOG_ERROR)#define LOG_ERROR LOG_ERR#endifextern int debug_level;extern FILE *debug_file;extern void log_exit (int status);extern void log_notice (char *fmt0, ...);extern void log_error (char *fmt0, ...);#ifdef DEBUG_MODEextern void log_debug (char *fmt0, ...);extern void log_verbose (char *fmt0, ...);extern void log_annoying (char *fmt0, ...);#elsestatic inline void log_debug () {}static inline void log_verbose () {}static inline void log_annoying () {}#endifextern int server_socket (int port, int backlog);extern int set_address (struct sockaddr_in *address,			const char *host, int port);extern int open_device (char *device);extern int handle_device_input (Tunnel *tunnel, int fd, int events);extern int handle_tunnel_input (Tunnel *tunnel, int fd, int events);extern void name_and_port (const char *nameport, char **name, int *port);extern int atoi_with_postfix (const char *s_);extern RETSIGTYPE log_sigpipe (int);void dump_buf (FILE *f, unsigned char *buf, size_t len);static inline ssize_tread_all (int fd, void *buf, size_t len){  ssize_t n, m, r;  long flags;  char *rbuf = buf;  flags = fcntl (fd, F_GETFL);  fcntl (fd, F_SETFL, flags & ~O_NONBLOCK);  r = len;  for (n = 0; n < len; n += m)    {      log_annoying ("read (%d, %p, %d) ...", fd, rbuf + n, len - n);      m = read (fd, rbuf + n, len - n);      log_annoying ("... = %d", m);      if (m == 0)	{	  r = 0;	  break;	}      else if (m == -1)	{	  if (errno != EAGAIN)	    {	      r = -1;	      break;	    }	  else	    m = 0;	}    }  fcntl (fd, F_SETFL, flags);  return r;}static inline ssize_twrite_all (int fd, void *data, size_t len){  ssize_t n, m;  char *wdata = data;  for (n = 0; n < len; n += m)    {      log_annoying ("write (%d, %p, %d) ...", fd, wdata + n, len - n);      m = write (fd, wdata + n, len - n);      log_annoying ("... = %d", m);      if (m == 0)	return 0;      else if (m == -1)	{	  if (errno != EAGAIN)	    return -1;	  else	    m = 0;	}    }  return len;}static inline intdo_connect (struct sockaddr_in *address){  int fd;  fd = socket (AF_INET, SOCK_STREAM, 0);  if (fd == -1)    return -1;  if (connect (fd, (struct sockaddr *)address,	       sizeof (struct sockaddr_in)) == -1)    {      close (fd);      return -1;    }  return fd;}static inline voidhandle_input (const char *type, Tunnel *tunnel, int fd, int events,	      int (*handler)(Tunnel *tunnel, int fd, int events),	      int *closed){  if (events)    {      ssize_t n;      n = handler (tunnel, fd, events);      if (n == 0 || (n == -1 && errno != EAGAIN))	{	  if (n == 0)	    log_debug ("%s closed", type);	  else	    log_error ("%s read error: %s", type, strerror (errno));	  *closed = TRUE;	}		    }}#endif /* COMMON_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -