Diff for /mqtt/src/mqttd.c between versions 1.1.1.1 and 1.1.1.1.2.7

version 1.1.1.1, 2011/11/07 08:47:16 version 1.1.1.1.2.7, 2011/12/01 00:10:18
Line 1 Line 1
 #include "global.h"  #include "global.h"
   #include "rtlm.h"
   #include "utils.h"
   #include "daemon.h"
   
   
   sl_config cfg;
   sched_root_task_t *root;
   extern char compiled[], compiledby[], compilehost[];
   int Verbose;
   
   
   static void
   Usage(void)
   {
           printf( " -= MQTT Broker =- MQTT Service from ELWIX\n"
                   "=== %s@%s === Compiled: %s ===\n\n"
                   "\t-c <config>\tService config\n"
                   "\t-b\t\tBatch mode\n"
                   "\t-v\t\tVerbose (more -vvv, more verbose)\n"
                   "\t-h\t\tHelp! This screen\n\n", 
                   compiledby, compilehost, compiled);
   }
   
   
 int  int
 main(int argc, char **argv)  main(int argc, char **argv)
 {  {
        return 0;        char ch, batch = 0, szStr[STRSIZ], szCfgName[MAXPATHLEN];
         register int i;
         sqlite3 *acc = NULL, *pub = NULL;
         FILE *logg = NULL;
         int sock = -1, ret = 0;
         struct passwd *pass;
 
         strlcpy(szCfgName, DEFAULT_CONFIG, sizeof szCfgName);
         while ((ch = getopt(argc, argv, "hvbc:")) != -1)
                 switch (ch) {
                         case 'c':
                                 strlcpy(szCfgName, optarg, sizeof szCfgName);
                                 break;
                         case 'b':
                                 batch++;
                                 break;
                         case 'v':
                                 Verbose++;
                                 break;
                         case 'h':
                         default:
                                 Usage();
                                 return 1;
                 }
         argc -= optind;
         argv += optind;
 
         if (LoadConfig(szCfgName, &cfg)) {
                 printf("Error:: can't load #%d - %s\n", cfg_GetErrno(), cfg_GetError());
                 return 1;
         }
         openlog("mqttd", LOG_PID | LOG_CONS, LOG_DAEMON);
         for (i = 0; i < 3; i++)
                 if (!mqttLoadRTLM(&cfg, i)) {
                         printf("Error:: Can't load RTL module\n");
                         while (i--)
                                 mqttUnloadRTLM(i);
                         UnloadConfig(&cfg);
                         closelog();
                         return 2;
                 }
         acc = call.OpenACC(&cfg);
         if (!acc) {
                 ret = 3;
                 goto end;
         }
         pub = call.OpenPUB(&cfg);
         if (!pub) {
                 ret = 3;
                 goto end;
         }
         logg = call.OpenLOG(&cfg);
         if (!logg) {
                 ret = 3;
                 goto end;
         }
 
         if (mqttMkDir(&cfg)) {
                 printf("Error:: in statedir #%d - %s\n", errno, strerror(errno));
                 ret = 3;
                 goto end;
         }
 
         VERB(2) syslog(LOG_DEBUG, "Service is ready for start engine ...");
 
         if ((sock = srv_Socket(&cfg)) == -1) {
                 ret = 4;
                 goto end;
         }
 
         if (!batch)
                 switch (fork()) {
                         case -1:
                                 printf("Error:: in fork() #%d - %s\n", errno, strerror(errno));
                                 ret = 5;
                                 goto end;
                         case 0:
                                 setsid();
                                 cfg_LoadAttribute(&cfg, CFG("mqttd"), CFG("user"), CFG(szStr), 
                                                 sizeof szStr, MQTT_USER);
                                 pass = getpwnam(szStr);
                                 if (pass) {
                                         setgid(pass->pw_gid);
                                         setuid(pass->pw_uid);
                                         VERB(1) syslog(LOG_WARNING, "Try to change group #%d and user #%d", 
                                                         pass->pw_gid, pass->pw_uid);
                                 }
                                 ret = open("/dev/null", O_RDWR);
                                 if (ret != -1) {
                                         dup2(ret, STDIN_FILENO);
                                         dup2(ret, STDOUT_FILENO);
                                         dup2(ret, STDERR_FILENO);
                                         close(ret);
                                 }
                                 VERB(2) syslog(LOG_DEBUG, "Welcome MQTT service into shadow land!");
                                 break;
                         default:
                                 VERB(2) syslog(LOG_DEBUG, "MQTT service go to shadow land ...");
                                 ret = 0;
                                 goto end;
                 }
         else
                 VERB(1) printf("Start service in batch mode ...\n");
 
         if (!(root = schedBegin())) {
                 printf("Error:: scheduler #%d - %s\n", sched_GetErrno(), sched_GetError());
                 ret = 6;
                 goto end;
         }
 
         Run(sock);
 
         schedEnd(&root);
 end:
         if (sock > STDERR_FILENO)
                 srv_Close(sock);
         call.CloseLOG(logg);
         call.ClosePUB(pub);
         call.CloseACC(acc);
         for (i = 0; i < 3; i++)
                 mqttUnloadRTLM(i);
         closelog();
         UnloadConfig(&cfg);
         return ret;
 }  }

Removed from v.1.1.1.1  
changed lines
  Added in v.1.1.1.1.2.7


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>