57
59
while(mf.fgets(buf, sizeof(buf))) {
58
60
if (match_tag(buf, "</project_init>")) break;
59
61
else if (parse_str(buf, "<name>", name, 256)) continue;
62
else if (parse_str(buf, "<team_name>", team_name, 256)) continue;
60
63
else if (parse_str(buf, "<url>", url, 256)) {
61
64
canonicalize_master_url(url);
195
int GET_CURRENT_VERSION_OP::do_rpc() {
198
retval = gui_http->do_rpc(
199
this, config.client_version_check_url, GET_CURRENT_VERSION_FILENAME
204
error_num = ERR_IN_PROGRESS;
209
static bool is_version_newer(char* p) {
210
int maj=0, min=0, rel=0;
212
sscanf(p, "%d.%d.%d", &maj, &min, &rel);
213
if (maj > gstate.core_client_version.major) return true;
214
if (maj < gstate.core_client_version.major) return false;
215
if (min > gstate.core_client_version.minor) return true;
216
if (min < gstate.core_client_version.minor) return false;
217
if (rel > gstate.core_client_version.release) return true;
221
static bool parse_version(FILE* f, char* new_version) {
222
char buf[256], buf2[256];
223
bool same_platform = false, newer_version = false;
224
while (fgets(buf, 256, f)) {
225
if (match_tag(buf, "</version>")) {
226
return (same_platform && newer_version);
228
if (parse_str(buf, "<dbplatform>", buf2, sizeof(buf2))) {
229
same_platform = (strcmp(buf2, gstate.get_primary_platform())==0);
231
if (parse_str(buf, "<version_num>", buf2, sizeof(buf2))) {
232
newer_version = is_version_newer(buf2);
233
strcpy(new_version, buf2);
239
void GET_CURRENT_VERSION_OP::handle_reply(int http_op_retval) {
240
char buf[256], new_version[256];
241
if (http_op_retval) {
242
error_num = http_op_retval;
245
gstate.new_version_check_time = gstate.now;
246
FILE* f = boinc_fopen(GET_CURRENT_VERSION_FILENAME, "r");
248
while (fgets(buf, 256, f)) {
249
if (match_tag(buf, "<version>")) {
250
if (parse_version(f, new_version)) {
251
msg_printf(0, MSG_USER_ERROR,
252
"A new version of BOINC (%s) is available for your computer",
256
msg_printf(0, MSG_USER_ERROR,
257
"Visit %s to get it.",
258
config.client_download_url.c_str()
260
gstate.newer_version = string(new_version);
269
#define NEW_VERSION_CHECK_PERIOD (14*86400)
271
void CLIENT_STATE::new_version_check() {
272
if (( new_version_check_time == 0) ||
273
(now - new_version_check_time > NEW_VERSION_CHECK_PERIOD)) {
274
// get_current_version_op.handle_reply() will update new_version_check_time
275
get_current_version_op.do_rpc();
279
212
int GET_PROJECT_LIST_OP::do_rpc() {
283
216
sprintf(buf, "http://boinc.berkeley.edu/project_list.php");
284
217
retval = gui_http->do_rpc(
285
this, string(buf), ALL_PROJECTS_LIST_FILENAME_TEMP
218
this, buf, ALL_PROJECTS_LIST_FILENAME_TEMP, true
288
221
error_num = retval;
295
228
#define ALL_PROJECTS_LIST_CHECK_PERIOD (14*86400)
297
230
void GET_PROJECT_LIST_OP::handle_reply(int http_op_retval) {
298
232
if (http_op_retval) {
299
233
error_num = http_op_retval;
300
// if error, try again in a day
237
read_file_string(ALL_PROJECTS_LIST_FILENAME_TEMP, s);
238
if (strstr(s.c_str(), "</projects>")) {
240
ALL_PROJECTS_LIST_FILENAME_TEMP, ALL_PROJECTS_LIST_FILENAME
242
gstate.all_projects_list_check_time = gstate.now;
247
// if error, try again in a day
302
250
gstate.all_projects_list_check_time =
303
251
gstate.now - ALL_PROJECTS_LIST_CHECK_PERIOD + SECONDS_PER_DAY;
305
boinc_rename(ALL_PROJECTS_LIST_FILENAME_TEMP, ALL_PROJECTS_LIST_FILENAME);
306
gstate.all_projects_list_check_time = gstate.now;