617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/*******************************************************************************
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Copyright (C) 2004-2008 Intel Corp. All rights reserved.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * Redistribution and use in source and binary forms, with or without
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * modification, are permitted provided that the following conditions are met:
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions of source code must retain the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Redistributions in binary form must reproduce the above copyright notice,
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * this list of conditions and the following disclaimer in the documentation
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * and/or other materials provided with the distribution.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * - Neither the name of Intel Corp. nor the names of its
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * contributors may be used to endorse or promote products derived from this
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * software without specific prior written permission.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS''
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARE DISCLAIMED. IN NO EVENT SHALL Intel Corp. OR THE CONTRIBUTORS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * POSSIBILITY OF SUCH DAMAGE.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan *******************************************************************************/
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#endif //DAEMON
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan/* Change this to whatever your daemon is called */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return true;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan return false;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganvoid log(void *param, LPCTSTR message, WORD eventType)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan//This needs to be global for termination action
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan //syslog(EVENTLOG_INFORMATION_TYPE, "Service stopped\n");
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan//Action termination
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Loganvoid terminationHandler(int signum, siginfo_t *sinfo, void *dummy)
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan PRINT("LMS Service received - Signal:%d Err:(%d) Code:(%d)\n", signum, sinfo->si_errno, sinfo->si_code);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan syslog(EVENTLOG_WARNING_TYPE, "Received termination signal (%d)\n", signum);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan // Termination signal handler.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan // Set up the structure to specify the termination action.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan terminateAction.sa_sigaction = terminationHandler;
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGTERM, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGQUIT, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGINT, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGHUP, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGPIPE, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGALRM, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGUSR1, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan sigSet &= sigaction(SIGUSR2, &terminateAction, NULL);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan syslog(EVENTLOG_WARNING_TYPE, "Failed to register terminate signal handler\n");
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * return: 1 if the lock is real, 0 if not real, -1 on error
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "unable to open lock file %s, code=%d (%s)",
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "unable to read lock file %s, code=%d (%s)",
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan syslog(LOG_ERR, "bad pid in lock file %s", lockfile);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /* See if the process still exists */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /* Process exists, lock is real */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /* Process is gone */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * lock_pid_file - creates a pid file and writes current process pid into it
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * lockfile - name of a file to be created
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan * return: 0 on success, -1 on fatal error, -2 on error
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan /* Create the lock file as the current user */
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lfp = open(lockfile, O_RDWR | O_CREAT | O_EXCL, 0644);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "The LMS service is already running!");
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "unable to lock file %s, code=%d (%s)",
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan snprintf(pid_buf, sizeof(pid_buf), "%u", getpid());
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "unable to create lock file %s, code=%d (%s)",
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan syslog(LOG_ERR, "The LMS service is already running!");
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "unable to lock file %s, code=%d (%s)",
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "unable to fruncate lock file %s, code=%d (%s)",
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan snprintf(pid_buf, sizeof(pid_buf), "%u", getpid());
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan "unable to write pid into lock file %s, code=%d (%s)",
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan#endif // __sun
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan if (ATVersion::ShowVersionIfArg(argc, const_cast<const char **>(argv), VER_PRODUCTVERSION_STR)) {
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lockresult = lock_pid_file(LOCK_PATH DAEMON_PID_FILE);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan lockresult = lock_pid_file(LOCK_PATH DAEMON_PID_FILE);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan //syslog(EVENTLOG_INFORMATION_TYPE, "Service started\n");
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan log(NULL, "LMS Service lost connection to AMT via HECI driver", EVENTLOG_ERROR_TYPE);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan syslog(EVENTLOG_ERROR_TYPE, "Cannot connect to AMT via HECI driver");
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan // Failed to connect to the HECI driver.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan // Sleep for a second and try again.
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan log(NULL, "Connected to AMT via HECI driver\n", EVENTLOG_INFORMATION_TYPE);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan log(NULL, "LMS Service has a problem in achieving network resources.", EVENTLOG_ERROR_TYPE);
617e2443dfc17fe44fd44c0675d6aad2ffc9df42Mark Logan // Select on active sockets (IANA ports and open connections).