summaryrefslogtreecommitdiffabout
path: root/src/iiid.cc
Side-by-side diff
Diffstat (limited to 'src/iiid.cc') (more/less context) (show whitespace changes)
-rw-r--r--src/iiid.cc86
1 files changed, 86 insertions, 0 deletions
diff --git a/src/iiid.cc b/src/iiid.cc
new file mode 100644
index 0000000..6c23790
--- a/dev/null
+++ b/src/iiid.cc
@@ -0,0 +1,86 @@
+#include <syslog.h>
+#include <getopt.h>
+#include <iostream>
+#include <cassert>
+#include <stdexcept>
+#include "eyetil.h"
+#include "eyefiworker.h"
+
+#include "config.h"
+
+#include "eyefi.nsmap"
+
+#define PHEADER \
+ PACKAGE " Version " VERSION "\n" \
+ "Copyright (c) 2009 Klever Group"
+
+int main(int argc,char **argv) try {
+
+ int port = 59278;
+
+ while(true) {
+ static struct option opts[] = {
+ { "help", no_argument, 0, 'h' },
+ { "usage", no_argument, 0, 'h' },
+ { "version", no_argument, 0, 'V' },
+ { "license", no_argument, 0, 'L' },
+ { "port", required_argument, 0, 'p' },
+ { NULL, 0, 0, 0 }
+ };
+ int c = getopt_long(argc,argv,"hVLp:",opts,NULL);
+ if(c==-1) break;
+ switch(c) {
+ case 'h':
+ std::cerr << PHEADER << std::endl << std::endl
+ << " " << argv[0] << " [options]" << std::endl
+ << std::endl <<
+ " -h, --help,\n"
+ " --usage display this text\n"
+ " -V, --version display version information\n"
+ " -L, --license show license\n"
+ " -p <port>, --port=<port> port to listen to\n"
+ " (you're not likely to ever need it)\n"
+ << std::endl << std::endl;
+ exit(0);
+ break;
+ case 'V':
+ std::cerr << VERSION << std::endl;
+ exit(0);
+ break;
+ case 'L':
+ extern const char *COPYING;
+ std::cerr << COPYING << std::endl;
+ exit(0);
+ break;
+ case 'p':
+ port = strtol(optarg,0,0);
+ if(errno) {
+ std::cerr << "Failed to parse port number" << std::endl;
+ exit(1);
+ }
+ break;
+ default:
+ std::cerr << "Huh?" << std::endl;
+ exit(1);
+ break;
+ }
+ }
+
+ const char *ident = rindex(*argv,'/');
+ if(ident)
+ ++ident;
+ else
+ ident = *argv;
+ openlog(ident,LOG_PERROR|LOG_PID,LOG_DAEMON);
+ syslog(LOG_INFO,"Starting iii eye-fi manager");
+
+ eyefiworker().run(port);
+
+ closelog();
+ return 0;
+} catch(std::exception& e) {
+ syslog(LOG_CRIT,"Exiting iii daemon, because of error condition");
+ syslog(LOG_CRIT,"Exception: %s",e.what());
+ return 1;
+}
+