/* Copyright (C) 2007-2008 The Android Open Source Project ** ** This software is licensed under the terms of the GNU General Public ** License version 2, as published by the Free Software Foundation, and ** may be copied, distributed, and modified under those terms. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. */ #ifndef _PROXY_COMMON_H_ #define _PROXY_COMMON_H_ #include "sockets.h" #ifdef _WIN32 #include <winsock2.h> #else #include <sys/select.h> #endif /* types and definitions used by all proxy connections */ typedef enum { PROXY_EVENT_NONE, PROXY_EVENT_CONNECTED, PROXY_EVENT_CONNECTION_REFUSED, PROXY_EVENT_SERVER_ERROR } ProxyEvent; /* event can't be NONE when this callback is called */ typedef void (*ProxyEventFunc)( void* opaque, int fd, ProxyEvent event ); extern void proxy_set_verbose(int mode); typedef enum { PROXY_OPTION_AUTH_USERNAME = 1, PROXY_OPTION_AUTH_PASSWORD, PROXY_OPTION_HTTP_NOCACHE = 100, PROXY_OPTION_HTTP_KEEPALIVE, PROXY_OPTION_HTTP_USER_AGENT, PROXY_OPTION_MAX } ProxyOptionType; typedef struct { ProxyOptionType type; const char* string; int string_len; } ProxyOption; /* add a new proxified socket connection to the manager's list. the event function * will be called when the connection is established or refused. * * only IPv4 is supported at the moment, since our slirp code cannot handle IPv6 * * returns 0 on success, or -1 if there is no proxy service for this type of connection */ extern int proxy_manager_add( SockAddress* address, SocketType sock_type, ProxyEventFunc ev_func, void* ev_opaque ); /* remove an on-going proxified socket connection from the manager's list. * this is only necessary when the socket connection must be canceled before * the connection accept/refusal occured */ extern void proxy_manager_del( void* ev_opaque ); /* this function is called to update the select file descriptor sets * with those of the proxified connection sockets that are currently managed */ extern void proxy_manager_select_fill( int *pcount, fd_set* read_fds, fd_set* write_fds, fd_set* err_fds); /* this function is called to act on proxified connection sockets when network events arrive */ extern void proxy_manager_poll( fd_set* read_fds, fd_set* write_fds, fd_set* err_fds ); /* this function checks that one can connect to a given proxy. It will simply try to connect() * to it, for a specified timeout, in milliseconds, then close the connection. * * returns 0 in case of success, and -1 in case of error. errno will be set to ETIMEDOUT in * case of timeout, or ECONNREFUSED if the connection is refused. */ extern int proxy_check_connection( const char* proxyname, int proxyname_len, int proxyport, int timeout_ms ); #endif /* END */