aboutsummaryrefslogtreecommitdiffstats
path: root/multicatcher.c
diff options
context:
space:
mode:
authorGuillaume Horel <guillaume.horel@serenitascapital.com>2015-11-04 13:55:26 -0500
committerGuillaume Horel <guillaume.horel@serenitascapital.com>2015-11-04 13:55:26 -0500
commitded46d4768498c7d27fedcc438fe80a59ad63d0c (patch)
tree1158247ec3b9580a3deaa320334c2d777050b6b9 /multicatcher.c
parenta5309fed914fdaa7697f2d369e7dcd02309063ab (diff)
downloadmrsync-ded46d4768498c7d27fedcc438fe80a59ad63d0c.tar.gz
move code into a src directory
Diffstat (limited to 'multicatcher.c')
-rw-r--r--multicatcher.c181
1 files changed, 0 insertions, 181 deletions
diff --git a/multicatcher.c b/multicatcher.c
deleted file mode 100644
index 76fbc5e..0000000
--- a/multicatcher.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- Copyright (C) 2006 Renaissance Technologies Corp.
- main developer: HP Wei <hp@rentec.com>
- verision 3.0 major update
- -- large file support
- -- platform independence (between linux, unix)
- -- backup feature (as in rsync)
- -- removing meta-file-info
- -- catching slow machine as the feedback monitor
- -- mcast options
- version 3.0.[1-9] bug fixes
- -- logic flaw which under certain condition
- caused premature dropout due to
- unsuccessful EOF, CLOSE_FILE
- and caused unwanranted SIT-OUT cases.
- -- tested on Debian 64 bit arch by Nicolas Marot in France
- version 3.1.0
- -- codes for IPv6 are ready (but not tested)
- IPv4 is tested ok.
- version 3.2.0
- -- monitor change improvement
- -- handshake improvement (e.g. seq #)
- -- if one machine skips a file, all will NOT close()
-
- Copyright (C) 2005 Renaissance Technologies Corp.
- Copyright (C) 2001 Renaissance Technologies Corp.
- main developer: HP Wei <hp@rentec.com>
- This file was modified in 2001 from files in the program
- multicaster copyrighted by Aaron Hillegass as found at
- <http://sourceforge.net/projects/multicaster/>
-
- Copyright (C) 2000 Aaron Hillegass <aaron@classmax.com>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; see the file COPYING.
- If not, write to the Free Software Foundation,
- 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include "main.h"
-
-extern int machineID;
-extern int verbose;
-extern int isMonitor;
-extern char * baseDir;
-extern char * cmd_name[];
-extern char * backup_suffix;
-
-char * my_MCAST_ADDR = MCAST_ADDR;
-char * my_IFname = MCAST_IF;
-int my_FLOW_PORT = FLOW_PORT;
-int my_PORT = PORT;
-
-void usage()
-{
- fprintf(stderr,
- "multicatcher (to receive files from multicaster) version %s\n"
- " Option list:\n"
- " [ -v <verbose_level 0-2> ]\n"
- " -------- essential options ----------------------------------\n"
- " -t <destination Dirpath>\n"
- " -i <machineID 0 originated id numbers>\n"
- " -------- options for backup ---------------------------------\n"
- " [ -u <suffix> for backup files if -b is on in multicaster ]\n"
- " -------- mcast options --------------------------------------\n"
- " [ -A <my_mcast_address default=%s)> **same as for multicaster ]\n"
- " [ -P <my_PORT default=%d> **same as for multicaster ]\n"
- " [ -I <my_MCAST_IF default=NULL> ]\n",
- VERSION, MCAST_ADDR, PORT);
-}
-
-int main(int argc, char *argv[])
-{
- int old_mode; /* hp: from char to int for mode */
- int mode;
- int c;
-
- while ((c = getopt(argc, argv, "v:A:P:t:i:u:I:")) != EOF) {
- switch (c) {
- case 'v':
- verbose = atoi(optarg);
- break;
- case 'A':
- my_MCAST_ADDR = optarg;
- break;
- case 'P':
- my_PORT = atoi(optarg);
- my_FLOW_PORT = my_PORT -1;
- break;
- case 'I':
- my_IFname = optarg;
- break;
- case 't':
- baseDir = optarg;
- break;
- case 'i':
- machineID = atoi(optarg);
- break;
- case 'u':
- backup_suffix = strdup(optarg);
- break;
- case '?':
- usage();
- exit(BAD_EXIT);
- }
- }
-
- if (machineID < 0 || !baseDir) {
- fprintf(stderr, "Essential options (-t -i) should be specified. \n");
- usage();
- exit(BAD_EXIT);
- }
-
- fprintf(stderr, "my_pid= %lu\n", getpid());
-
- if (!backup_suffix) default_suffix();
- get_tmp_suffix(); /* get a unique tmp_name for the tmp file */
-
- init_page_reader();
- init_complaint_sender();
-
- /* initialize random numbers */
- srand(time(NULL) + getpid());
-
- /* set the timeout for readable() to be about 3 to 6 seconds
- Actually, this setting is arbitrary.
- The timeout of readable() does not play a role in
- the logic flow.
- */
- set_delay( 3 + rand() % 6, 0);
- mode = old_mode = TEST;
-
- /* -----------------------The main loop---------------------------
- Multicatcher simply waits for any incoming UDP,
- reads and handles it.
- If the UDP contains file content, it is placed in the right place.
- If the UDP contains an instruction, it is carried out.
-
- Multicatcher never complains unless being told so.
- For example, as it is now, multicatcher does not complain
- about the rate of incoming UDP being too fast to handle.
- If multicatcher cannot keep up with the speed, it just
- loses certain pages in a file which will be reported
- later when multicaster requests acknowledgement.
- ---------------------------------------------------------------- */
- while(1) { /* loop for all incoming pages */
- if (verbose>=2)
- fprintf(stderr, "Starting listen loop with mode %d, old_mode = %d\n", mode, old_mode);
-
- /* the major task here */
- mode = read_handle_page();
- if (verbose>=2) fprintf(stderr, "new page in mode %d\n", mode);
-
- if (mode == ALL_DONE_CMD) break;
-
- /* for debugging purpose */
- if ((old_mode != mode)) {
- if (verbose>=2 && mode <= 5) fprintf(stderr, "%s\n", cmd_name[mode]);
- }
-
- /* got no data? */
- if (mode == TIMED_OUT) {
- if (verbose>=2) fprintf(stderr, "*");
- }
-
- old_mode = mode;
- } /* end of incoming page loop */
-
- if (verbose>=1) fprintf(stderr, "Done!\n");
- return 0;
-}