home *** CD-ROM | disk | FTP | other *** search
/ Palm Utilities / Palm_Utilities_CD-ROM_2001_2001.iso / files / utils sync / JetSync 1.0 / jetsync-1.0.exe / jetsync-1.0 / src / hotsync.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-10-13  |  5.0 KB  |  233 lines

  1. #include <stdlib.h>
  2. #include "defs.h"
  3. #include "hotsync.h"
  4. #include "assert.h"
  5. #include "Random.h"
  6.  
  7. #define HSA_DEFAULT_ON '1'
  8.  
  9. /* these external variables are defind in main.c */
  10. extern char home_dir[256];
  11. extern char username[256];
  12. extern int daemon_flag, child_pid;
  13.  
  14. /* read hotsync prefs from file -- temporary buffer them onto a temp file */
  15. /* Arguments: argv[1]: username */
  16. /* Returns: error or 0 */
  17. __TCL__ int initHotSyncPrefs (ClientData clientData, Tcl_Interp *interp, 
  18.                     int argc, char **argv)
  19. {
  20.   char line[80];
  21.   char path[256];
  22.   FILE *fp, *fp2;
  23.  
  24.   strcpy((char *)username, argv[1]);
  25.   if (!strcmp(argv[1],"NULL")) return 0;
  26.  
  27.   sprintf(path,"%s/%s/%s",home_dir,username,JS_CONDUITS);
  28.   fp = fopen(path,"r");
  29.   WARN(fp)
  30.  
  31.   sprintf(path,"%s/%s/%s",home_dir,username,JS_CONDUITS_TMP);
  32.   fp2 = fopen(path,"w");
  33.   WARN(fp2)
  34.  
  35.   while (!feof(fp)) {
  36.     fgets(line,80,fp);
  37.     if (feof(fp)) break;
  38.  
  39.     fputs(line,fp2);
  40.   }
  41.  
  42.   fclose(fp);
  43.   fclose(fp2);
  44.   return 0;
  45. }
  46.  
  47.  
  48. /* get data from the file regarding a keyword */
  49. /* Arguments: argv[1]: token to look for */
  50. /* Returns: error or 0 */
  51. __TCL__ int getHotSyncPrefs (ClientData clientData, Tcl_Interp *interp, 
  52.                     int argc, char **argv)
  53. {
  54.   char line[80], *token;
  55.   char path[256];
  56.   FILE *fp;
  57.  
  58.   if (!strcmp(username,"NULL")) return 0;
  59.  
  60.   sprintf(path,"%s/%s/%s",home_dir,username,JS_CONDUITS_TMP);
  61.   fp = fopen(path,"r");
  62.   WARN(fp)
  63.  
  64.   while (!feof(fp)) {
  65.     fgets(line,80,fp);
  66.     if (feof(fp)) break;
  67.     
  68.     token = strtok(line,":");
  69.     ASSERT(token);
  70.  
  71.     if (!strcmp(argv[1],token)) {
  72.       token = strtok(NULL,":");
  73.       ASSERT(token);
  74.  
  75.       token = strtok(NULL,":"); /* get third item */
  76.       ASSERT(token);
  77.  
  78.       strcpy(interp->result,token);
  79.       fclose(fp);
  80.       return 0;
  81.     }
  82.   }
  83.  
  84.   fclose(fp);
  85.   strcpy(interp->result,"-1");
  86.   return -1;
  87. }
  88.  
  89.  
  90. /* auxiliary function to setHotSyncPrefs below - replaces a previous hotsync
  91.    config file with a new version */
  92. /* Arguments: f1, f2 filenames; old, new: 'new' token replaces 'old' */
  93. /* Returns: error or 0 */
  94. int HotSync_file_replace (char *f1, char *f2, char *old, char *new)
  95. {
  96.   char line[80], fline[80], path[256], path1[256], *token;
  97.   FILE *fp, *fp2;
  98.  
  99.   sprintf(path,"%s/%s/%s",home_dir,username,f1);
  100.   fp = fopen(path,"r");
  101.   WARN(fp)
  102.  
  103.   sprintf(path,"%s/%s/%s",home_dir,username,f2);
  104.   fp2 = fopen(path,"w");
  105.   WARN(fp2)
  106.  
  107.   while (!feof(fp)) {
  108.     fgets(fline,80,fp);
  109.     if (feof(fp)) break;
  110.  
  111.     strcpy(line,fline);    
  112.  
  113.     token = strtok(line,":");
  114.     ASSERT(token);
  115.  
  116.     if (!strcmp(old,token)) {
  117.       sprintf(fline,"%s:", token);
  118.       token = strtok(NULL,":");
  119.  
  120.       ASSERT(token);
  121.  
  122.       strcat(fline, token);
  123.       strcat(fline,":");
  124.       strtok(NULL,":"); /* ignore third item */
  125.       strcat(fline,new); /* replace with new value */
  126.       strcat(fline,":");
  127.       token = strtok(NULL,":");
  128.       ASSERT(token);
  129.  
  130.       strcat(fline, token);
  131.       strcat(fline,":");
  132.       token = strtok(NULL,":");
  133.       ASSERT(token);
  134.  
  135.       strcat(fline, token);
  136.       strcat(fline,":");
  137.       token = strtok(NULL,":");
  138.       ASSERT(token);
  139.  
  140.       strcat(fline, token);
  141.     }
  142.     fputs(fline,fp2);
  143.   }
  144.   fclose(fp);
  145.   fclose(fp2);
  146.  
  147.   sprintf(path,"%s/%s/%s",home_dir,username,f1);
  148.   sprintf(path1,"%s/%s/%s",home_dir,username,f2);
  149.   rename(path1, path);
  150.  
  151.   return 0;
  152. }
  153.  
  154.  
  155. /* sets a specific option given a conduit name */
  156. /* set  Mail  ?OPT?  ?DEF? */
  157. __TCL__ int setHotSyncPrefs (ClientData clientData, Tcl_Interp *interp, 
  158.                     int argc, char **argv)
  159. {
  160.   if (!strcmp(username,"NULL")) return 0;
  161.  
  162. /* read in defaults if necessary */
  163.   if (argv[3][0] == HSA_DEFAULT_ON)
  164.     HotSync_file_replace(JS_CONDUITS, JS_CONDUITS_TMP1, argv[1], argv[2]);
  165.  
  166.   HotSync_file_replace(JS_CONDUITS_TMP, JS_CONDUITS_TMP1, argv[1], argv[2]);
  167.  
  168.   return 0;
  169. }
  170.  
  171.  
  172. /* generates a random PC identifier for synch usage */
  173. /* Arguments: none */
  174. /* Returns: a new PC id */
  175. unsigned long generate_pc_id()
  176. {
  177.   unsigned long l = 0;
  178.   FILE *fp;
  179.   char line[80], path[256];
  180.  
  181.   sprintf(path,"%s/%s",home_dir,JS_PREFS);
  182.   fp = fopen(path,"r");
  183.   if (!fp) {
  184.     l = getrandom(ULONG_MAX);
  185.     fp = fopen(path,"w");
  186.     fprintf(fp, "PCID:%ld
  187. USER:%s
  188. MODEM:/dev/cua0
  189. MODEMSPEED:57600
  190. MODEMTYPE:Standard
  191. MODEMSTR:AT&FX4
  192. LOCAL:/dev/cua0
  193. LOCALSPEED:9600
  194. DAEMON:%d:%d\n",l,username,daemon_flag,child_pid);
  195.   }
  196.   else {
  197.     while (!feof(fp)) {
  198.       memset((char *)line, 0, 80);
  199.       fgets(line, 80, fp);
  200.       if (feof(fp)) break;
  201.  
  202.       strtok(line,":");
  203.  
  204.       if (!strcmp(line,"PCID")) {
  205.         l = atol(strtok(NULL,":"));
  206.         break;
  207.       }
  208.     }
  209.   }
  210.   fclose(fp);
  211.  
  212.   if (l <= 0) {
  213.     if (l==0)
  214.       printf("Warning: %s/%s file is corrupt. Generating a new PC ID...\n",
  215.             home_dir,JS_PREFS);
  216.     l = getrandom(ULONG_MAX);
  217.    
  218.     sprintf(path,"%s/%s",home_dir,JS_PREFS);
  219.     fp = fopen(path,"w");
  220.     fprintf(fp, "PCID:%ld
  221. USER:%s
  222. MODEM:/dev/cua0
  223. MODEMSPEED:57600
  224. MODEMTYPE:Standard
  225. MODEMSTR:AT&FX4
  226. LOCAL:/dev/cua0
  227. LOCALSPEED:9600
  228. DAEMON:%d:%d\n",l,username,daemon_flag,child_pid);
  229.     fclose(fp);
  230.   }
  231.   return l;
  232. }
  233.