Network/UDPForward: Add udpforward util
[udpforward.git] / main.cc
1 // $Id$
2 //
3 // Copyright (C) 2008 
4
5 /** \file
6     \brief main non-inline non-template implementation */
7
8 //#include "main.hh"
9 //#include "main.ih"
10
11 // Custom includes
12 #include <boost/algorithm/string/predicate.hpp>
13 #include <senf/Utils/Daemon.hh>
14 #include <senf/Utils/Logger/SenfLog.hh>
15 #include "UDPForwarder.hh"
16
17 //#include "main.mpp"
18 #define prefix_
19 ///////////////////////////////cc.p////////////////////////////////////////
20
21 class UDPForwarderDaemon : public senf::Daemon
22 {
23     SENF_LOG_CLASS_AREA();
24
25     void configure();
26     void main();
27
28     static void terminate(siginfo_t const &);
29 };
30
31 prefix_ void UDPForwarderDaemon::configure()
32 {
33     pidFile("udpforward.pid");
34     consoleLog("udpforward.log");
35
36     senf::Daemon::configure();
37 }
38
39 prefix_ void UDPForwarderDaemon::main()
40 {
41     try {
42         removeDaemonArgs();
43
44         if (argc() != 3) {
45             std::cerr << "Invalid number of arguments\n"
46                       << "Usage: " << argv()[0] << " <listen port> <forward port> <target>\n";
47             exit(1);
48         }
49         
50         senf::log::ConsoleTarget::instance().route<senf::log::VERBOSE>();
51
52         SENF_LOG(("udpforwarder starting"));
53         
54         senf::INet4SocketAddress listenPort (argv()[1]);
55         senf::INet4SocketAddress targetPort (argv()[2]);
56
57         udpforward::UDPForwarder forwarder ( listenPort, targetPort );
58
59         senf::scheduler::SignalEvent sigintEvent (SIGINT, &terminate);
60         senf::scheduler::SignalEvent sigtermEvent (SIGTERM, &terminate);
61
62         detach();
63         
64         senf::scheduler::process();
65
66         SENF_LOG(("signal received. Terminating."));
67     }
68     catch (std::exception & ex) {
69         SENF_LOG((senf::log::FATAL)(ex.what() << "\n" "terminating unexpectedly."));
70         exit(1);
71     }
72 }
73
74 prefix_ void UDPForwarderDaemon::terminate(siginfo_t const &) 
75 {
76     senf::scheduler::terminate();
77 }
78
79 SENF_DAEMON_MAIN(UDPForwarderDaemon);
80
81 ///////////////////////////////cc.e////////////////////////////////////////
82 #undef prefix_
83 //#include "main.mpp"
84
85 \f
86 // Local Variables:
87 // mode: c++
88 // fill-column: 100
89 // indent-tabs-mode: nil
90 // compile-command: "scons"
91 // comment-column: 40
92 // End: