2002-09-27 23:43:29 +00:00
|
|
|
// The contents of this file are subject to the Mozilla 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://www.mozilla.org/MPL/
|
|
|
|
//
|
|
|
|
// 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):
|
|
|
|
//
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include "client_state.h"
|
|
|
|
#include "error_numbers.h"
|
|
|
|
#include "file_names.h"
|
|
|
|
#include "filesys.h"
|
2003-05-14 21:49:53 +00:00
|
|
|
#include "util.h"
|
2002-09-27 23:43:29 +00:00
|
|
|
|
|
|
|
#include "account.h"
|
|
|
|
|
|
|
|
int CLIENT_STATE::parse_account_files() {
|
|
|
|
DIRREF dir;
|
|
|
|
char name[256];
|
|
|
|
PROJECT* project;
|
|
|
|
FILE* f;
|
|
|
|
|
|
|
|
dir = dir_open(".");
|
2003-03-11 00:49:07 +00:00
|
|
|
while (dir_scan(name, dir, sizeof(name)) == 0) {
|
2002-09-27 23:43:29 +00:00
|
|
|
if (is_account_file(name)) {
|
|
|
|
f = fopen(name, "r");
|
|
|
|
if (!f) continue;
|
|
|
|
project = new PROJECT;
|
|
|
|
project->parse_account(f);
|
|
|
|
projects.push_back(project);
|
|
|
|
fclose(f);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
dir_close(dir);
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2003-02-13 22:49:26 +00:00
|
|
|
int CLIENT_STATE::add_project(char* master_url, char* authenticator) {
|
2003-06-03 22:47:15 +00:00
|
|
|
char path[256];
|
2002-12-06 19:44:31 +00:00
|
|
|
PROJECT* project;
|
|
|
|
FILE* f;
|
2003-02-06 19:01:49 +00:00
|
|
|
int retval;
|
2002-12-06 19:44:31 +00:00
|
|
|
|
2003-06-06 22:08:46 +00:00
|
|
|
case_format_url(master_url);
|
2003-06-06 17:43:45 +00:00
|
|
|
|
2003-02-06 19:01:49 +00:00
|
|
|
// check if this project is already running
|
2003-02-13 22:49:26 +00:00
|
|
|
//
|
2003-05-21 17:59:10 +00:00
|
|
|
if (lookup_project(master_url)) {
|
2003-06-03 22:47:15 +00:00
|
|
|
msg_printf(0, MSG_ERROR, "Already attached to %s", master_url);
|
2003-05-21 17:59:10 +00:00
|
|
|
return ERR_ALREADY_ATTACHED;
|
|
|
|
}
|
2002-12-06 19:44:31 +00:00
|
|
|
|
2003-02-06 19:01:49 +00:00
|
|
|
// create project state
|
2003-02-13 22:49:26 +00:00
|
|
|
//
|
2003-05-13 18:55:07 +00:00
|
|
|
project = new PROJECT;
|
|
|
|
strcpy(project->master_url, master_url);
|
|
|
|
strcpy(project->authenticator, authenticator);
|
2003-06-06 22:08:46 +00:00
|
|
|
strip_whitespace(project->authenticator);
|
2003-05-15 17:10:26 +00:00
|
|
|
|
2003-05-13 18:55:07 +00:00
|
|
|
project->tentative = true;
|
|
|
|
retval = project->write_account_file();
|
2003-03-08 23:48:05 +00:00
|
|
|
if (retval) return retval;
|
2003-05-13 18:55:07 +00:00
|
|
|
|
2002-12-06 19:44:31 +00:00
|
|
|
get_account_filename(master_url, path);
|
|
|
|
f = fopen(path, "r");
|
|
|
|
if (!f) return ERR_FOPEN;
|
|
|
|
retval = project->parse_account(f);
|
|
|
|
fclose(f);
|
2003-05-13 18:55:07 +00:00
|
|
|
if (retval) return retval;
|
2002-12-06 19:44:31 +00:00
|
|
|
|
2003-02-06 19:01:49 +00:00
|
|
|
// remove any old files
|
2003-02-13 22:49:26 +00:00
|
|
|
//
|
2003-02-06 19:01:49 +00:00
|
|
|
retval = remove_project_dir(*project);
|
2002-12-06 19:44:31 +00:00
|
|
|
|
2003-02-06 19:01:49 +00:00
|
|
|
retval = make_project_dir(*project);
|
2003-02-13 22:49:26 +00:00
|
|
|
if (retval) return retval;
|
2002-12-06 19:44:31 +00:00
|
|
|
projects.push_back(project);
|
2003-02-06 19:01:49 +00:00
|
|
|
return 0;
|
2002-12-06 19:44:31 +00:00
|
|
|
}
|