166 lines
5.2 KiB
C
166 lines
5.2 KiB
C
/*
|
|
*
|
|
* @APPLE_LICENSE_HEADER_START@
|
|
*
|
|
* Copyright (c) 1999-2008 Apple Inc. All Rights Reserved.
|
|
*
|
|
* This file contains Original Code and/or Modifications of Original Code
|
|
* as defined in and that are subject to the Apple Public Source License
|
|
* Version 2.0 (the 'License'). You may not use this file except in
|
|
* compliance with the License. Please obtain a copy of the License at
|
|
* http://www.opensource.apple.com/apsl/ and read it before using this
|
|
* file.
|
|
*
|
|
* The Original Code and all software distributed under the License are
|
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
|
|
* Please see the License for the specific language governing rights and
|
|
* limitations under the License.
|
|
*
|
|
* @APPLE_LICENSE_HEADER_END@
|
|
*
|
|
*/
|
|
/*
|
|
* proxy_plat.h
|
|
*
|
|
*
|
|
*/
|
|
|
|
#ifndef _PLAT_H_
|
|
#define _PLAT_H_
|
|
|
|
/**********************************************/
|
|
#define bool char
|
|
#if !defined(mac)
|
|
#define true 1
|
|
#define false 0
|
|
#endif
|
|
#if !defined(WIN32)
|
|
#define INVALID_SOCKET -1
|
|
#define SOCKET_ERROR -1
|
|
#endif
|
|
|
|
/**********************************************/
|
|
#if defined(WIN32)
|
|
#define EACCES WSAEACCES
|
|
#define EINTR WSAEINTR
|
|
#define EAGAIN WSAEWOULDBLOCK /* good enough? */
|
|
#define EPIPE WSAESHUTDOWN /* good enough? */
|
|
#define ENOTCONN WSAENOTCONN
|
|
#define ECONNRESET WSAECONNRESET
|
|
#define EISCONN WSAEISCONN
|
|
#define EINPROGRESS WSAEINPROGRESS
|
|
#define EALREADY WSAEALREADY
|
|
#include "WINSOCK.H"
|
|
#elif defined(mac)
|
|
#define EACCES kEACCESErr
|
|
#define EPIPE kEPIPEErr
|
|
#define EINTR kEINTRErr
|
|
#define EAGAIN kEAGAINErr
|
|
#define ENOTCONN kENOTCONNErr
|
|
#define ECONNRESET kECONNRESETErr
|
|
#define EISCONN kEISCONNErr
|
|
#define EINPROGRESS kEINPROGRESSErr
|
|
#define EALREADY kEALREADYErr
|
|
#endif
|
|
|
|
/**********************************************/
|
|
#define MSEC_PER_SEC 1000
|
|
#define USEC_PER_SEC 1000000
|
|
#define USEC_PER_MSEC 1000
|
|
#define timer_sub(ntime,subtime,eqtime) \
|
|
if ((subtime).tv_usec > (ntime).tv_usec) { \
|
|
(eqtime).tv_sec = ((ntime).tv_sec - 1) - (subtime).tv_sec; \
|
|
(eqtime).tv_usec = (ntime).tv_usec + USEC_PER_SEC - \
|
|
(subtime).tv_usec; \
|
|
} \
|
|
else { \
|
|
(eqtime).tv_sec = (ntime).tv_sec - (subtime).tv_sec; \
|
|
(eqtime).tv_usec = (ntime).tv_usec - (subtime).tv_usec; \
|
|
}
|
|
|
|
|
|
extern char *gConfigFilePath;
|
|
extern char *gOptionsString;
|
|
extern char gOptionsChar;
|
|
|
|
typedef struct stats_chunk {
|
|
unsigned long elapsedSeconds;
|
|
unsigned long bpsReceived;
|
|
unsigned long bpsSent;
|
|
unsigned long ppsReceived;
|
|
unsigned long ppsSent;
|
|
unsigned long totalPacketsReceived;
|
|
unsigned long totalPacketsSent;
|
|
unsigned long numClients;
|
|
unsigned long numPorts;
|
|
float percentLostPackets;
|
|
} stats_chunk;
|
|
|
|
|
|
void daemonize(void);
|
|
int init_network(void);
|
|
int term_network(void);
|
|
int init_ui(void);
|
|
int service_ui(int sleep_ticks);
|
|
|
|
void sleep_milliseconds(int ms);
|
|
time_t microseconds();
|
|
#define kPENDING_ADDRESS -2
|
|
int name_to_ip_num(char *name, int *ip_num, int async);
|
|
int get_remote_address(int skt, int *port);
|
|
int get_local_address(int skt, int *port);
|
|
int get_local_ip_address(void);
|
|
bool isReadable(int fd);
|
|
bool isWritable(int fd);
|
|
|
|
int new_socket_udp(void);
|
|
int new_socket_tcp(int is_listener);
|
|
void close_socket(int skt);
|
|
void set_socket_reuse_address(int skt);
|
|
void set_socket_max_buf(int skt);
|
|
void make_socket_nonblocking(int skt);
|
|
int bind_socket_to_address(int skt, int address, int port, int is_listener);
|
|
int listen_to_socket(int skt);
|
|
int call_is_waiting(int skt, int *incoming_skt);
|
|
int accept_connection(int from, int *to);
|
|
int get_interface_addr(int skt);
|
|
#if DO_ASYNC
|
|
pascal void conn_finished_proc(void* contextPtr, OTEventCode code, OTResult /*result*/, void* /*cookie*/);
|
|
int connect_to_address(void *context, OTNotifyProcPtr proc, int skt, int address, int port);
|
|
#else
|
|
int connect_to_address(int skt, int address, int port);
|
|
#endif
|
|
|
|
int tcp_data_ready(int skt);
|
|
|
|
int recv_udp(int skt, char *buf, int amt, int *fromAddress, int *fromPort);
|
|
int send_udp(int skt, char *buf, int amt, int address, int port);
|
|
int recv_tcp(int skt, char *buf, int amt);
|
|
int send_tcp(int skt, char *buf, int amt);
|
|
|
|
// int make_udp_port_pair(int *socket1, int *socket2);
|
|
|
|
int GetLastSocketError(int skt);
|
|
void DoStats(stats_chunk *stats);
|
|
|
|
#if defined(mac) || defined(WIN32)
|
|
extern char gLastErrorString[256];
|
|
#define ErrorString(a) sprintf(gLastErrorString, a)
|
|
#define ErrorString1(a,b) sprintf(gLastErrorString, a, b)
|
|
#define ErrorStringS(a,b) sprintf(gLastErrorString, a, b)
|
|
#define DebugString(a) printf(a "\n")
|
|
#define DebugString1(a,b) printf(a "\n", b)
|
|
#define DebugStringS(a,b) printf(a "\n", b)
|
|
#else
|
|
void ErrorString(char *string);
|
|
void ErrorString1(char *string, int d);
|
|
void ErrorStringS(char *string, char *arg);
|
|
#define DebugString(a) printf(a "\n")
|
|
#define DebugString1(a,b) printf(a "\n", b)
|
|
#define DebugStringS(a,b) printf(a "\n", b)
|
|
#endif
|
|
#endif // _PLAT_H_
|
|
|