File: main.cc

package info (click to toggle)
ftpgrab 0.1.5-6
  • links: PTS, VCS
  • area: main
  • in suites: buster, sid
  • size: 444 kB
  • sloc: cpp: 2,906; makefile: 103
file content (135 lines) | stat: -rw-r--r-- 2,982 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef _FGSTRING_H
#include "fgstring.h"
#endif

#ifndef _FGFILELIST_H
#include "fgfilelist.h"
#endif

#ifndef _FGLOGGER_H
#include "fglogger.h"
#endif

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <string.h>

#include <sys/utsname.h>

// Globals
#ifndef _FGGLOB_H
#include "fgglob.h"
#endif

#ifndef _FGEXC_H
#include "fgexc.h"
#endif

FGString FGGlob::gHostName;
bool FGGlob::gLogDisabled = false;
int FGGlob::gMaxThreads = 5;
bool FGGlob::gVerbose = false;

void
usage(void)
{
  fprintf(stderr, "This is ftpgrab v0.1.2\n");
  fprintf(stderr, "Usage:\n");
  fprintf(stderr, "ftpgrab [-n]\n");
  fprintf(stderr, "-h             : Display this message\n");
  fprintf(stderr, "-n             : Do not output information to a log file\n");
  fprintf(stderr, "-l <filename>  : Output log to <filename> rather than default location\n");
  fprintf(stderr, "-r <filename>  : Use <filename> as rcfile rather than default\n");
  fprintf(stderr, "-t <num>       : Use up to <num> concurrent threads (1<=num<=50)\n");
  fprintf(stderr, "-v             : Output progress to console\n");
  fflush(stderr);
  exit(1);
}

int
main(int argc, char* const argv[])
{
  // Parse command line options
  char option;
  FGString rcFileName("ftpgrabrc");

  while ((option = getopt(argc, argv, "hnvl:r:t:")) != EOF) {
    switch (option) {
    case '?':
    case ':':
    case 'h':
      usage();
      break;
    case 'n':
      FGGlob::gLogDisabled = true;
      break;
    case 'l':
      FGLogger::SetLogName(optarg);
      break;
    case 'r':
      rcFileName = optarg;
      break;
    case 't':
      {
        int threads = atoi(optarg);
        if (threads < 1 || threads > 50) {
          usage();
        }
        FGGlob::gMaxThreads = threads;
      }
      break;
    case 'v':
      FGGlob::gVerbose = true;
      break;
    }
  }

  {
    // Initialize signal handling
    struct sigaction pipeAction;
    // Safety
    memset(&pipeAction, '\0', sizeof(pipeAction));
    pipeAction.sa_handler = SIG_IGN;
    sigemptyset(&pipeAction.sa_mask);

    sigaction(SIGPIPE, &pipeAction, NULL);
  }

  {
    // Get the current hostname
    struct utsname machineDetails;
    uname(&machineDetails);

    FGGlob::gHostName = machineDetails.nodename;
  }

  try {
    (void) FGLogger::GetLogger();
  }
  catch (FGException& e) {
    fprintf(stderr, "Failed to initialize logger - bailing!\n");
    exit(1);
  }

  FGLogger& log = FGLogger::GetLogger();
  log.LogMsg("ftpgrab startup", FGLogger::kFGLLInfo);

  log.LogMsg("Attempting to parse config file", FGLogger::kFGLLVerbose);
  FGFileList list;
  try {
    list.LoadConfig(rcFileName);
  }
  catch (FGException& e) {
    log.LogException(e);
    log.LogMsg("Failed to parse config file - bailing", FGLogger::kFGLLErr);
    exit(1);
  }
  log.LogMsg("Successfully parsed config file", FGLogger::kFGLLVerbose);
  list.GetAllFiles();

  log.LogMsg("ftpgrab exiting", FGLogger::kFGLLInfo);

  exit(0);
}