home *** CD-ROM | disk | FTP | other *** search
- #include <stdlib.h>
- #include "defs.h"
- #include "hotsync.h"
- #include "assert.h"
- #include "Random.h"
-
- #define HSA_DEFAULT_ON '1'
-
- /* these external variables are defind in main.c */
- extern char home_dir[256];
- extern char username[256];
- extern int daemon_flag, child_pid;
-
- /* read hotsync prefs from file -- temporary buffer them onto a temp file */
- /* Arguments: argv[1]: username */
- /* Returns: error or 0 */
- __TCL__ int initHotSyncPrefs (ClientData clientData, Tcl_Interp *interp,
- int argc, char **argv)
- {
- char line[80];
- char path[256];
- FILE *fp, *fp2;
-
- strcpy((char *)username, argv[1]);
- if (!strcmp(argv[1],"NULL")) return 0;
-
- sprintf(path,"%s/%s/%s",home_dir,username,JS_CONDUITS);
- fp = fopen(path,"r");
- WARN(fp)
-
- sprintf(path,"%s/%s/%s",home_dir,username,JS_CONDUITS_TMP);
- fp2 = fopen(path,"w");
- WARN(fp2)
-
- while (!feof(fp)) {
- fgets(line,80,fp);
- if (feof(fp)) break;
-
- fputs(line,fp2);
- }
-
- fclose(fp);
- fclose(fp2);
- return 0;
- }
-
-
- /* get data from the file regarding a keyword */
- /* Arguments: argv[1]: token to look for */
- /* Returns: error or 0 */
- __TCL__ int getHotSyncPrefs (ClientData clientData, Tcl_Interp *interp,
- int argc, char **argv)
- {
- char line[80], *token;
- char path[256];
- FILE *fp;
-
- if (!strcmp(username,"NULL")) return 0;
-
- sprintf(path,"%s/%s/%s",home_dir,username,JS_CONDUITS_TMP);
- fp = fopen(path,"r");
- WARN(fp)
-
- while (!feof(fp)) {
- fgets(line,80,fp);
- if (feof(fp)) break;
-
- token = strtok(line,":");
- ASSERT(token);
-
- if (!strcmp(argv[1],token)) {
- token = strtok(NULL,":");
- ASSERT(token);
-
- token = strtok(NULL,":"); /* get third item */
- ASSERT(token);
-
- strcpy(interp->result,token);
- fclose(fp);
- return 0;
- }
- }
-
- fclose(fp);
- strcpy(interp->result,"-1");
- return -1;
- }
-
-
- /* auxiliary function to setHotSyncPrefs below - replaces a previous hotsync
- config file with a new version */
- /* Arguments: f1, f2 filenames; old, new: 'new' token replaces 'old' */
- /* Returns: error or 0 */
- int HotSync_file_replace (char *f1, char *f2, char *old, char *new)
- {
- char line[80], fline[80], path[256], path1[256], *token;
- FILE *fp, *fp2;
-
- sprintf(path,"%s/%s/%s",home_dir,username,f1);
- fp = fopen(path,"r");
- WARN(fp)
-
- sprintf(path,"%s/%s/%s",home_dir,username,f2);
- fp2 = fopen(path,"w");
- WARN(fp2)
-
- while (!feof(fp)) {
- fgets(fline,80,fp);
- if (feof(fp)) break;
-
- strcpy(line,fline);
-
- token = strtok(line,":");
- ASSERT(token);
-
- if (!strcmp(old,token)) {
- sprintf(fline,"%s:", token);
- token = strtok(NULL,":");
-
- ASSERT(token);
-
- strcat(fline, token);
- strcat(fline,":");
- strtok(NULL,":"); /* ignore third item */
- strcat(fline,new); /* replace with new value */
- strcat(fline,":");
- token = strtok(NULL,":");
- ASSERT(token);
-
- strcat(fline, token);
- strcat(fline,":");
- token = strtok(NULL,":");
- ASSERT(token);
-
- strcat(fline, token);
- strcat(fline,":");
- token = strtok(NULL,":");
- ASSERT(token);
-
- strcat(fline, token);
- }
- fputs(fline,fp2);
- }
- fclose(fp);
- fclose(fp2);
-
- sprintf(path,"%s/%s/%s",home_dir,username,f1);
- sprintf(path1,"%s/%s/%s",home_dir,username,f2);
- rename(path1, path);
-
- return 0;
- }
-
-
- /* sets a specific option given a conduit name */
- /* set Mail ?OPT? ?DEF? */
- __TCL__ int setHotSyncPrefs (ClientData clientData, Tcl_Interp *interp,
- int argc, char **argv)
- {
- if (!strcmp(username,"NULL")) return 0;
-
- /* read in defaults if necessary */
- if (argv[3][0] == HSA_DEFAULT_ON)
- HotSync_file_replace(JS_CONDUITS, JS_CONDUITS_TMP1, argv[1], argv[2]);
-
- HotSync_file_replace(JS_CONDUITS_TMP, JS_CONDUITS_TMP1, argv[1], argv[2]);
-
- return 0;
- }
-
-
- /* generates a random PC identifier for synch usage */
- /* Arguments: none */
- /* Returns: a new PC id */
- unsigned long generate_pc_id()
- {
- unsigned long l = 0;
- FILE *fp;
- char line[80], path[256];
-
- sprintf(path,"%s/%s",home_dir,JS_PREFS);
- fp = fopen(path,"r");
- if (!fp) {
- l = getrandom(ULONG_MAX);
- fp = fopen(path,"w");
- fprintf(fp, "PCID:%ld
- USER:%s
- MODEM:/dev/cua0
- MODEMSPEED:57600
- MODEMTYPE:Standard
- MODEMSTR:AT&FX4
- LOCAL:/dev/cua0
- LOCALSPEED:9600
- DAEMON:%d:%d\n",l,username,daemon_flag,child_pid);
- }
- else {
- while (!feof(fp)) {
- memset((char *)line, 0, 80);
- fgets(line, 80, fp);
- if (feof(fp)) break;
-
- strtok(line,":");
-
- if (!strcmp(line,"PCID")) {
- l = atol(strtok(NULL,":"));
- break;
- }
- }
- }
- fclose(fp);
-
- if (l <= 0) {
- if (l==0)
- printf("Warning: %s/%s file is corrupt. Generating a new PC ID...\n",
- home_dir,JS_PREFS);
- l = getrandom(ULONG_MAX);
-
- sprintf(path,"%s/%s",home_dir,JS_PREFS);
- fp = fopen(path,"w");
- fprintf(fp, "PCID:%ld
- USER:%s
- MODEM:/dev/cua0
- MODEMSPEED:57600
- MODEMTYPE:Standard
- MODEMSTR:AT&FX4
- LOCAL:/dev/cua0
- LOCALSPEED:9600
- DAEMON:%d:%d\n",l,username,daemon_flag,child_pid);
- fclose(fp);
- }
- return l;
- }
-