59
70
" --insecure disable app sandboxing (Unix)\n"
61
72
" --launched_by_manager client was launched by Manager\n"
73
" --master_fetch_interval N limiting period of master retry\n"
62
74
" --master_fetch_period N reload master URL after N RPC failures\n"
63
75
" --master_fetch_retry_cap N exponential backoff limit\n"
64
" --master_fetch_interval N limiting period of master retry\n"
76
" --no_gpus don't check for GPUs\n"
65
77
" --no_gui_rpc don't allow GUI RPC, don't make socket\n"
78
" --no_info_fetch don't fetch project list or client version info\n"
79
" --no_priority_change run apps at same priority as client\n"
66
80
" --pers_giveup N giveup time for persistent file xfer\n"
81
" --pers_retry_delay_max N max for file xfer exponential backoff\n"
67
82
" --pers_retry_delay_min N min for file xfer exponential backoff\n"
68
" --pers_retry_delay_max N max for file xfer exponential backoff\n"
83
" --redirectio redirect stdout and stderr to log files\n"
69
84
" --reset_project <URL> reset (clear) a project\n"
70
" --redirectio redirect stdout and stderr to log files\n"
71
85
" --retry_cap N exponential backoff limit\n"
72
86
" --run_cpu_benchmarks run the CPU benchmarks\n"
73
87
" --run_by_updater set by updater\n"
74
88
" --saver client was launched by screensaver\n"
89
" --sched_retry_delay_max N max for RPC exponential backoff\n"
75
90
" --sched_retry_delay_min N min for RPC exponential backoff\n"
76
" --sched_retry_delay_max N max for RPC exponential backoff\n"
77
91
" --show_projects show attached projects\n"
78
92
" --skip_cpu_benchmarks don't run CPU benchmarks\n"
79
93
" --start_delay X delay starting apps for X secs\n"
94
" --unsigned_apps_ok allow unsigned apps (for testing)\n"
80
95
" --update_prefs <URL> contact a project to update preferences\n"
81
96
" --version show version info\n"
100
115
bool show_options = false;
117
// NOTE: if you change or add anything, make the same chane
118
// in show_options() (above) and in doc/client.php
102
120
for (i=1; i<argc; i++) {
103
if (ARG(exit_when_idle)) {
104
exit_when_idle = true;
105
config.report_results_immediately = true;
106
} else if (ARG(exit_before_start)) {
107
exit_before_start = true;
108
} else if (ARG(exit_after_finish)) {
109
exit_after_finish = true;
122
} else if (ARG(abort_jobs_on_exit)) {
123
config.abort_jobs_on_exit = true;
124
} else if (ARG(allow_multiple_clients)) {
125
config.allow_multiple_clients = true;
126
} else if (ARG(allow_remote_gui_rpc)) {
127
config.allow_remote_gui_rpc = true;
128
} else if (ARG(attach_project)) {
132
safe_strcpy(attach_project_url, argv[++i]);
133
safe_strcpy(attach_project_auth, argv[++i]);
110
135
} else if (ARG(check_all_logins)) {
111
136
check_all_logins = true;
112
137
} else if (ARG(daemon)) {
113
138
executing_as_daemon = true;
114
} else if (ARG(skip_cpu_benchmarks)) {
115
skip_cpu_benchmarks = true;
116
} else if (ARG(exit_after_app_start)) {
117
if (i == argc-1) show_options = true;
118
else exit_after_app_start_secs = atoi(argv[++i]);
119
} else if (ARG(file_xfer_giveup_period)) {
120
if (i == argc-1) show_options = true;
121
else file_xfer_giveup_period = atoi(argv[++i]);
122
} else if (ARG(saver)) {
123
started_by_screensaver = true;
124
} else if (!strncmp(argv[i], "-psn_", strlen("-psn_"))) {
125
// ignore -psn argument on Mac OS X
126
} else if (ARG(exit_before_upload)) {
127
exit_before_upload = true;
128
// The following are only used for testing to alter scheduler/file transfer
130
} else if (ARG(master_fetch_period)) {
131
if (i == argc-1) show_options = true;
132
else master_fetch_period = atoi(argv[++i]);
133
} else if (ARG(retry_cap)) {
134
if (i == argc-1) show_options = true;
135
else retry_cap = atoi(argv[++i]);
136
} else if (ARG(master_fetch_retry_cap)) {
137
if (i == argc-1) show_options = true;
138
else master_fetch_retry_cap = atoi(argv[++i]);
139
} else if (ARG(master_fetch_interval)) {
140
if (i == argc-1) show_options = true;
141
else master_fetch_interval = atoi(argv[++i]);
142
} else if (ARG(sched_retry_delay_min)) {
143
if (i == argc-1) show_options = true;
144
else sched_retry_delay_min = atoi(argv[++i]);
145
} else if (ARG(sched_retry_delay_max)) {
146
if (i == argc-1) show_options = true;
147
else sched_retry_delay_max = atoi(argv[++i]);
148
} else if (ARG(pers_retry_delay_min)) {
149
if (i == argc-1) show_options = true;
150
else pers_retry_delay_min = atoi(argv[++i]);
151
} else if (ARG(pers_retry_delay_max)) {
152
if (i == argc-1) show_options = true;
153
else pers_retry_delay_max = atoi(argv[++i]);
154
} else if (ARG(pers_giveup)) {
155
if (i == argc-1) show_options = true;
156
else pers_giveup = atoi(argv[++i]);
157
139
} else if (ARG(detach_phase_two)) {
158
140
detach_console = true;
160
// the above options are private (i.e. not shown by -help)
161
// Public options follow.
162
// NOTE: if you change or add anything, make the same chane
163
// in show_options() (above) and in doc/client.php
165
} else if (ARG(show_projects)) {
166
show_projects = true;
167
141
} else if (ARG(detach_project)) {
168
142
if (i == argc-1) show_options = true;
169
143
else safe_strcpy(detach_project_url, argv[++i]);
170
} else if (ARG(reset_project)) {
171
if (i == argc-1) show_options = true;
172
else safe_strcpy(reset_project_url, argv[++i]);
173
} else if (ARG(update_prefs)) {
174
if (i == argc-1) show_options = true;
175
else safe_strcpy(update_prefs_url, argv[++i]);
176
} else if (ARG(run_cpu_benchmarks)) {
177
run_cpu_benchmarks = true;
178
} else if (ARG(attach_project)) {
182
safe_strcpy(attach_project_url, argv[++i]);
183
safe_strcpy(attach_project_auth, argv[++i]);
185
} else if (ARG(version)) {
186
printf(BOINC_VERSION_STRING " " HOSTTYPE "\n");
188
} else if (ARG(allow_remote_gui_rpc)) {
189
allow_remote_gui_rpc = true;
190
} else if (ARG(gui_rpc_port)) {
191
cmdline_gui_rpc_port = atoi(argv[++i]);
192
} else if (ARG(redirectio)) {
194
} else if (ARG(help)) {
195
print_options(argv[0]);
197
144
} else if (ARG(dir)) {
198
145
if (i == argc-1) {
199
146
show_options = true;
206
} else if (ARG(no_gui_rpc)) {
153
} else if (ARG(exit_after_app_start)) {
154
if (i == argc-1) show_options = true;
155
else exit_after_app_start_secs = atoi(argv[++i]);
156
} else if (ARG(exit_after_finish)) {
157
config.exit_after_finish = true;
158
} else if (ARG(exit_before_start)) {
159
exit_before_start = true;
160
} else if (ARG(exit_before_upload)) {
161
exit_before_upload = true;
162
} else if (ARG(exit_when_idle)) {
163
config.exit_when_idle = true;
164
config.report_results_immediately = true;
165
} else if (ARG(fetch_minimal_work)) {
166
config.fetch_minimal_work = true;
167
} else if (ARG(file_xfer_giveup_period)) {
168
if (i == argc-1) show_options = true;
169
else file_xfer_giveup_period = atoi(argv[++i]);
170
} else if (ARG(gui_rpc_port)) {
171
cmdline_gui_rpc_port = atoi(argv[++i]);
172
} else if (ARG(help)) {
173
print_options(argv[0]);
208
175
} else if (ARG(insecure)) {
210
177
g_use_sandbox = false;
212
179
} else if (ARG(launched_by_manager)) {
213
180
launched_by_manager = true;
181
} else if (ARG(master_fetch_interval)) {
182
if (i == argc-1) show_options = true;
183
else master_fetch_interval = atoi(argv[++i]);
184
} else if (ARG(master_fetch_period)) {
185
if (i == argc-1) show_options = true;
186
else master_fetch_period = atoi(argv[++i]);
187
} else if (ARG(master_fetch_retry_cap)) {
188
if (i == argc-1) show_options = true;
189
else master_fetch_retry_cap = atoi(argv[++i]);
190
} else if (ARG(no_gpus)) {
191
config.no_gpus = true;
192
} else if (ARG(no_gui_rpc)) {
194
} else if (ARG(no_info_fetch)) {
195
config.no_info_fetch = true;
196
} else if (ARG(no_priority_change)) {
197
config.no_priority_change = true;
198
} else if (ARG(pers_giveup)) {
199
if (i == argc-1) show_options = true;
200
else pers_giveup = atoi(argv[++i]);
201
} else if (ARG(pers_retry_delay_max)) {
202
if (i == argc-1) show_options = true;
203
else pers_retry_delay_max = atoi(argv[++i]);
204
} else if (ARG(pers_retry_delay_min)) {
205
if (i == argc-1) show_options = true;
206
else pers_retry_delay_min = atoi(argv[++i]);
207
} else if (!strncmp(argv[i], "-psn_", strlen("-psn_"))) {
208
// ignore -psn argument on Mac OS X
209
} else if (ARG(redirectio)) {
211
} else if (ARG(reset_project)) {
212
if (i == argc-1) show_options = true;
213
else safe_strcpy(reset_project_url, argv[++i]);
214
} else if (ARG(retry_cap)) {
215
if (i == argc-1) show_options = true;
216
else retry_cap = atoi(argv[++i]);
214
217
} else if (ARG(run_by_updater)) {
215
218
run_by_updater = true;
219
} else if (ARG(run_cpu_benchmarks)) {
220
run_cpu_benchmarks = true;
221
} else if (ARG(saver)) {
222
started_by_screensaver = true;
223
} else if (ARG(sched_retry_delay_max)) {
224
if (i == argc-1) show_options = true;
225
else sched_retry_delay_max = atoi(argv[++i]);
226
} else if (ARG(sched_retry_delay_min)) {
227
if (i == argc-1) show_options = true;
228
else sched_retry_delay_min = atoi(argv[++i]);
229
} else if (ARG(show_projects)) {
230
show_projects = true;
231
} else if (ARG(skip_cpu_benchmarks)) {
232
config.skip_cpu_benchmarks = true;
216
233
} else if (ARG(start_delay)) {
217
234
if (i == argc-1) show_options = true;
218
235
else config.start_delay = atof(argv[++i]);
219
} else if (ARG(allow_multiple_clients)) {
220
config.allow_multiple_clients = true;
236
} else if (ARG(unsigned_apps_ok)) {
237
config.unsigned_apps_ok = true;
238
} else if (ARG(update_prefs)) {
239
if (i == argc-1) show_options = true;
240
else safe_strcpy(update_prefs_url, argv[++i]);
241
} else if (ARG(version)) {
242
#if (defined (__APPLE__) && (defined(__i386__) || defined(__x86_64__)))
244
cs.detect_platforms();
245
printf(BOINC_VERSION_STRING " %s\n", HOSTTYPE);
247
printf(BOINC_VERSION_STRING " " HOSTTYPE "\n");
222
251
printf("Unknown option: %s\n", argv[i]);
223
252
show_options = true;
235
264
void CLIENT_STATE::parse_env_vars() {
238
268
p = getenv("HTTP_PROXY");
239
269
if (p && strlen(p) > 0) {
240
proxy_info.use_http_proxy = true;
241
parse_url(p, proxy_info.http_server_name, proxy_info.http_server_port, temp);
271
switch (purl.protocol) {
272
case URL_PROTOCOL_HTTP:
273
case URL_PROTOCOL_HTTPS:
274
env_var_proxy_info.present = true;
275
env_var_proxy_info.use_http_proxy = true;
276
strcpy(env_var_proxy_info.http_user_name, purl.user);
277
strcpy(env_var_proxy_info.http_user_passwd, purl.passwd);
278
strcpy(env_var_proxy_info.http_server_name, purl.host);
279
env_var_proxy_info.http_server_port = purl.port;
282
msg_printf_notice(0, false,
283
"http://boinc.berkeley.edu/manager_links.php?target=notice&controlid=proxy_env",
284
_("The HTTP_PROXY environment variable must specify an HTTP proxy")
243
288
p = getenv("HTTP_USER_NAME");
245
proxy_info.use_http_auth = true;
246
safe_strcpy(proxy_info.http_user_name, p);
290
env_var_proxy_info.use_http_auth = true;
291
strcpy(env_var_proxy_info.http_user_name, p);
247
292
p = getenv("HTTP_USER_PASSWD");
249
safe_strcpy(proxy_info.http_user_passwd, p);
294
strcpy(env_var_proxy_info.http_user_passwd, p);
253
proxy_info.socks_version = SOCKS_VERSION_5;
254
if (getenv("SOCKS4_SERVER")) {
255
proxy_info.socks_version = SOCKS_VERSION_4;
258
p = getenv("SOCKS4_SERVER");
259
if (p && strlen(p)) {
260
proxy_info.use_socks_proxy = true;
261
parse_url(p, proxy_info.socks_server_name, proxy_info.socks_server_port, temp);
264
298
p = getenv("SOCKS_SERVER");
265
299
if (!p) p = getenv("SOCKS5_SERVER");
266
300
if (p && strlen(p)) {
267
proxy_info.use_socks_proxy = true;
268
parse_url(p, proxy_info.socks_server_name, proxy_info.socks_server_port, temp);
302
env_var_proxy_info.present = true;
303
env_var_proxy_info.use_socks_proxy = true;
304
strcpy(env_var_proxy_info.socks5_user_name, purl.user);
305
strcpy(env_var_proxy_info.socks5_user_passwd, purl.passwd);
306
strcpy(env_var_proxy_info.socks_server_name, purl.host);
307
env_var_proxy_info.socks_server_port = purl.port;
271
310
p = getenv("SOCKS5_USER");
272
311
if (!p) p = getenv("SOCKS_USER");
274
safe_strcpy(proxy_info.socks5_user_name, p);
313
strcpy(env_var_proxy_info.socks5_user_name, p);
277
316
p = getenv("SOCKS5_PASSWD");
279
safe_strcpy(proxy_info.socks5_user_passwd, p);
318
strcpy(env_var_proxy_info.socks5_user_passwd, p);