tor  master
transports.h
Go to the documentation of this file.
1 /* Copyright (c) 2003-2004, Roger Dingledine
2  * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
3  * Copyright (c) 2007-2017, The Tor Project, Inc. */
4 /* See LICENSE for licensing information */
5 
11 #ifndef TOR_TRANSPORTS_H
12 #define TOR_TRANSPORTS_H
13 
15 typedef struct transport_t {
19  char *name;
24  uint16_t port;
27  unsigned marked_for_removal : 1;
31 } transport_t;
32 
33 void mark_transport_list(void);
34 void sweep_transport_list(void);
35 MOCK_DECL(int, transport_add_from_config,
36  (const tor_addr_t *addr, uint16_t port,
37  const char *name, int socks_ver));
38 void transport_free_(transport_t *transport);
39 #define transport_free(tr) FREE_AND_NULL(transport_t, transport_free_, (tr))
40 
41 MOCK_DECL(transport_t*, transport_get_by_name, (const char *name));
42 
43 MOCK_DECL(void, pt_kickstart_proxy,
44  (const smartlist_t *transport_list, char **proxy_argv,
45  int is_server));
46 
47 #define pt_kickstart_client_proxy(tl, pa) \
48  pt_kickstart_proxy(tl, pa, 0)
49 #define pt_kickstart_server_proxy(tl, pa) \
50  pt_kickstart_proxy(tl, pa, 1)
51 
53 
55 
57 
58 void pt_free_all(void);
59 
61 void sweep_proxy_list(void);
62 
64 char *pt_stringify_socks_args(const smartlist_t *socks_args);
65 
67  uint16_t port);
68 
69 #ifdef PT_PRIVATE
70 
71 enum pt_proto_state {
72  PT_PROTO_INFANT, /* was just born */
73  PT_PROTO_LAUNCHED, /* was just launched */
74  PT_PROTO_ACCEPTING_METHODS, /* accepting methods */
75  PT_PROTO_CONFIGURED, /* configured successfully */
76  PT_PROTO_COMPLETED, /* configure and registered its transports */
77  PT_PROTO_BROKEN, /* broke during the protocol */
78  PT_PROTO_FAILED_LAUNCH /* failed while launching */
79 };
80 
82 typedef struct {
83  enum pt_proto_state conf_state; /* the current configuration state */
84  char **argv; /* the cli arguments of this proxy */
85  int conf_protocol; /* the configuration protocol version used */
86 
87  char *proxy_uri; /* the outgoing proxy in TOR_PT_PROXY URI format */
88  unsigned int proxy_supported : 1; /* the proxy honors TOR_PT_PROXY */
89 
90  int is_server; /* is it a server proxy? */
91 
92  /* A pointer to the process handle of this managed proxy. */
93  process_handle_t *process_handle;
94 
95  int pid; /* The Process ID this managed proxy is using. */
96 
100  unsigned int marked_for_removal : 1;
101 
106  unsigned int was_around_before_config_read : 1;
107 
108  /* transports to-be-launched by this proxy */
109  smartlist_t *transports_to_launch;
110 
111  /* The 'transports' list contains all the transports this proxy has
112  launched. */
113  smartlist_t *transports;
114 } managed_proxy_t;
115 
116 STATIC transport_t *transport_new(const tor_addr_t *addr, uint16_t port,
117  const char *name, int socks_ver,
118  const char *extra_info_args);
119 STATIC int parse_cmethod_line(const char *line, managed_proxy_t *mp);
120 STATIC int parse_smethod_line(const char *line, managed_proxy_t *mp);
121 
122 STATIC int parse_version(const char *line, managed_proxy_t *mp);
123 STATIC void parse_env_error(const char *line);
124 STATIC void parse_proxy_error(const char *line);
125 STATIC void handle_proxy_line(const char *line, managed_proxy_t *mp);
126 STATIC char *get_transport_options_for_server_proxy(const managed_proxy_t *mp);
127 
128 STATIC void managed_proxy_destroy(managed_proxy_t *mp,
129  int also_terminate_process);
130 
131 STATIC managed_proxy_t *managed_proxy_create(const smartlist_t *transport_list,
132  char **proxy_argv, int is_server);
133 
134 STATIC int configure_proxy(managed_proxy_t *mp);
135 
136 STATIC char* get_pt_proxy_uri(void);
137 
138 STATIC void free_execve_args(char **arg);
139 
140 #endif /* defined(PT_PRIVATE) */
141 
142 #endif /* !defined(TOR_TRANSPORTS_H) */
143 
void pt_prepare_proxy_list_for_config_read(void)
Definition: transports.c:1479
void pt_free_all(void)
Definition: transports.c:1677
STATIC void free_execve_args(char **arg)
Definition: transports.c:1464
STATIC void managed_proxy_destroy(managed_proxy_t *mp, int also_terminate_process)
Definition: transports.c:726
Definition: address.h:56
Definition: transports.h:15
char * pt_stringify_socks_args(const smartlist_t *socks_args)
Definition: transports.c:1609
struct transport_t transport_t
STATIC void handle_proxy_line(const char *line, managed_proxy_t *mp)
Definition: transports.c:857
unsigned marked_for_removal
Definition: transports.h:27
MOCK_DECL(int, router_have_minimum_dir_info,(void))
char * name
Definition: transports.h:19
Definition: container.h:18
STATIC void parse_proxy_error(const char *line)
Definition: transports.c:1169
STATIC transport_t * transport_new(const tor_addr_t *addr, uint16_t port, const char *name, int socks_ver, const char *extra_info_args)
Definition: transports.c:139
STATIC int parse_version(const char *line, managed_proxy_t *mp)
Definition: transports.c:990
uint16_t port
Definition: transports.h:24
char * pt_get_extra_info_descriptor_string(void)
Definition: transports.c:1542
void pt_configure_remaining_proxies(void)
Definition: transports.c:556
char * extra_info_args
Definition: transports.h:30
void mark_transport_list(void)
Definition: transports.c:170
void sweep_transport_list(void)
Definition: transports.c:181
void sweep_proxy_list(void)
Definition: transports.c:1661
int socks_version
Definition: transports.h:17
STATIC void parse_env_error(const char *line)
Definition: transports.c:974
STATIC int parse_smethod_line(const char *line, managed_proxy_t *mp)
Definition: transports.c:1150
tor_addr_t addr
Definition: transports.h:22
STATIC int parse_cmethod_line(const char *line, managed_proxy_t *mp)
Definition: transports.c:1160
smartlist_t * get_transport_proxy_ports(void)
Definition: transports.c:1512
int pt_proxies_configuration_pending(void)
Definition: transports.c:364
STATIC char * get_pt_proxy_uri(void)
Definition: transports.c:758
STATIC managed_proxy_t * managed_proxy_create(const smartlist_t *with_transport_list, char **proxy_argv, int is_server)
Definition: transports.c:1383
void transport_free_(transport_t *transport)
Definition: transports.c:157
char * pt_get_socks_args_for_proxy_addrport(const tor_addr_t *addr, uint16_t port)
Definition: transports.c:1645
STATIC char * get_transport_options_for_server_proxy(const managed_proxy_t *mp)
Definition: transports.c:1186
STATIC int configure_proxy(managed_proxy_t *mp)
Definition: transports.c:613