00001
00002 #include "oqwsserver.h"
00003
00004 #include <sys/types.h>
00005 #include <sys/stat.h>
00006 #include <fcntl.h>
00007 #include <unistd.h>
00008
00009 #include <syslog.h>
00010 #include <stdio.h>
00011
00012 #define APPNAME "op-qws"
00013
00014 void toSyslog(QtMsgType type, const char *msg)
00015 {
00016 int level = LOG_INFO;
00017 switch (type) {
00018 case QtDebugMsg:
00019 level = LOG_DEBUG;
00020 break;
00021 case QtWarningMsg:
00022 level = LOG_WARNING;
00023 break;
00024 case QtFatalMsg:
00025 level = LOG_ERR;
00026 break;
00027 }
00028 syslog (LOG_DAEMON | level, msg);
00029 }
00030
00031 int daemon_init(void)
00032 {
00033 pid_t pid;
00034
00035 if ((pid = fork()) < 0)
00036 return(-1);
00037 else if (pid != 0)
00038 exit(0);
00039
00040 setsid();
00041
00042 chdir("/");
00043
00044 umask(0);
00045
00046 fclose(stdout);
00047 fclose(stderr);
00048 fclose(stdin);
00049
00050 return(0);
00051 }
00052
00053 int main( int argc, char ** argv )
00054 {
00055 while (argc > 1) {
00056 if (strcmp(argv[--argc], "-d") == 0) {
00057
00058 openlog(APPNAME, 0, LOG_DAEMON);
00059 qInstallMsgHandler(toSyslog);
00060 if (daemon_init() != 0) {
00061 fprintf(stderr, "%s: Error: Unable to daemonize\n", APPNAME);
00062 return 1;
00063 }
00064 }
00065 }
00066
00067 OQWSServer a(argc, argv, QApplication::GuiServer);
00068 return a.exec();
00069 }