2004-03-27 00:45:27 +00:00
|
|
|
// The contents of this file are subject to the BOINC Public License
|
|
|
|
// Version 1.0 (the "License"); you may not use this file except in
|
|
|
|
// compliance with the License. You may obtain a copy of the License at
|
|
|
|
// http://boinc.berkeley.edu/license_1.0.txt
|
|
|
|
//
|
|
|
|
// Software distributed under the License is distributed on an "AS IS"
|
|
|
|
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
|
|
|
|
// License for the specific language governing rights and limitations
|
|
|
|
// under the License.
|
|
|
|
//
|
|
|
|
// The Original Code is the Berkeley Open Infrastructure for Network Computing.
|
|
|
|
//
|
|
|
|
// The Initial Developer of the Original Code is the SETI@home project.
|
|
|
|
// Portions created by the SETI@home project are Copyright (C) 2002
|
|
|
|
// University of California at Berkeley. All Rights Reserved.
|
|
|
|
//
|
|
|
|
// Contributor(s):
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef _PROXY_
|
|
|
|
#define _PROXY_
|
|
|
|
|
|
|
|
#include "net_xfer.h"
|
2004-06-16 23:16:08 +00:00
|
|
|
#include "miofile.h"
|
2004-03-27 00:45:27 +00:00
|
|
|
|
|
|
|
struct PROXY_INFO {
|
|
|
|
bool use_http_proxy;
|
|
|
|
bool use_socks_proxy;
|
2004-06-13 04:47:20 +00:00
|
|
|
bool use_http_auth;
|
2004-03-27 00:45:27 +00:00
|
|
|
int socks_version;
|
|
|
|
char socks_server_name[256];
|
|
|
|
char http_server_name[256];
|
|
|
|
int socks_server_port;
|
|
|
|
int http_server_port;
|
2004-06-13 04:47:20 +00:00
|
|
|
char http_user_name[256];
|
|
|
|
char http_user_passwd[256];
|
2004-03-27 00:45:27 +00:00
|
|
|
char socks5_user_name[256];
|
|
|
|
char socks5_user_passwd[256];
|
|
|
|
|
2004-06-12 04:45:36 +00:00
|
|
|
int parse(MIOFILE&);
|
|
|
|
int write(MIOFILE&);
|
2004-03-27 00:45:27 +00:00
|
|
|
void clear();
|
|
|
|
};
|
|
|
|
|
|
|
|
class PROXY : public NET_XFER {
|
|
|
|
public:
|
|
|
|
PROXY();
|
|
|
|
~PROXY();
|
|
|
|
|
|
|
|
PROXY_INFO pi;
|
|
|
|
char proxy_data[256];
|
|
|
|
int proxy_state;
|
|
|
|
int proxy_retval;
|
|
|
|
char dest_serv_name[256];
|
|
|
|
int dest_serv_port;
|
|
|
|
|
|
|
|
void init(char *dst_host, int port);
|
|
|
|
bool proxy_poll();
|
|
|
|
bool proxy_negotiated();
|
|
|
|
int proxy_failed(int failure_code);
|
|
|
|
char *get_proxy_server_name(char *regular_server);
|
|
|
|
int get_proxy_port(int regular_port);
|
|
|
|
int set_proxy(PROXY_INFO *new_pd);
|
|
|
|
int socks_prepare_method_req(char *buf);
|
|
|
|
int socks_prepare_user_pass(char *buf);
|
|
|
|
int socks_prepare_connect_req(char *buf, int ns_port, int ip_addr, char *domain_name);
|
|
|
|
int socks_parse_method_ack(char *buf);
|
|
|
|
int socks_parse_user_pass_ack(char *buf);
|
|
|
|
int socks_parse_connect_ack(char *buf);
|
|
|
|
};
|
|
|
|
|
|
|
|
void print_buf(char *buf, int n);
|
|
|
|
|
|
|
|
#define PROXY_STATE_CONNECTING 0
|
|
|
|
#define PROXY_STATE_SOCKS_SEND_METHOD_REQ 1
|
|
|
|
#define PROXY_STATE_SOCKS_PARSE_METHOD_ACK 2
|
|
|
|
#define PROXY_STATE_SOCKS_SEND_USER_PASS 3
|
|
|
|
#define PROXY_STATE_SOCKS_PARSE_USER_PASS_ACK 4
|
|
|
|
#define PROXY_STATE_SOCKS_SEND_CONNECT_REQ 5
|
|
|
|
#define PROXY_STATE_SOCKS_PARSE_CONNECT_ACK 6
|
|
|
|
#define PROXY_STATE_DONE 7
|
|
|
|
|
|
|
|
// SOCKS #defines
|
|
|
|
#define SOCKS_VERSION_4 0x04
|
|
|
|
#define SOCKS_VERSION_5 0x05
|
|
|
|
|
|
|
|
#define SOCKS_AUTH_NONE_NEEDED 0x00
|
|
|
|
#define SOCKS_AUTH_GSSAPI 0x01
|
|
|
|
#define SOCKS_AUTH_USER_PASS 0x02
|
|
|
|
#define SOCKS_AUTH_NONE_ACCEPTABLE 0xFF
|
|
|
|
|
|
|
|
#define SOCKS4_REQ_GRANTED 90
|
|
|
|
#define SOCKS4_REQ_REJECTED 91
|
|
|
|
#define SOCKS4_REQ_NO_IDENTD 92
|
|
|
|
#define SOCKS4_REQ_BAD_USER_PASS 93
|
|
|
|
|
|
|
|
#define SOCKS5_ADDR_TYPE_IPV4 0x01
|
|
|
|
#define SOCKS5_ADDR_TYPE_DOMAIN_NAME 0x03
|
|
|
|
#define SOCKS5_ADDR_TYPE_IPV6 0x04
|
|
|
|
|
|
|
|
#define SOCKS5_CONNECTION_SUCCEEDED 0x00
|
|
|
|
#define SOCKS5_ERR_SERVER_FAILURE 0x01
|
|
|
|
#define SOCKS5_ERR_NOT_ALLOWED 0x02
|
|
|
|
#define SOCKS5_ERR_NETWORK_UNREACHABLE 0x03
|
|
|
|
#define SOCKS5_ERR_HOST_UNREACHABLE 0x04
|
|
|
|
#define SOCKS5_ERR_CONNECTION_REFUSED 0x05
|
|
|
|
#define SOCKS5_ERR_TTL_EXPIRED 0x06
|
|
|
|
#define SOCKS5_ERR_COMMAND_UNSUPPORTED 0x07
|
|
|
|
#define SOCKS5_ERR_ADDR_TYPE_UNSUPPORTED 0x08
|
|
|
|
|
|
|
|
#define SOCKS5_USER_SUBNEG_VERSION_1 1
|
|
|
|
|
|
|
|
#endif
|