コード例 #1
0
static int timer_tick(liqcell *self, liqcellmouseeventargs *args, liqcell *context)
{
	liqcell_propseti(self,"timerinterval", 32767 );
	liqcell_setenabled(self,0);
	// now, run the channel? :D
	//liqfilemonitor_run((liqcell*)self->tag);
	monitor_run(context);
	
	return 0;
}
コード例 #2
0
ファイル: main.c プロジェクト: ANSSI-FR/picon
int main (int argc, char *argv[]) {
  char buffer[128];
  int fd_client_to_monitor[2];
  int fd_monitor_to_client[2];
  int fd_loading_to_monitor[2];
  int fd_monitor_to_loading[2];

  pid_t child_pid;

  unsigned int err = 0;
  monitor_data data;

  if(getenv("LD_PRELOAD")) {
    LOG_ERROR_MONITOR("LD_PRELOAD detected, aborting\n");
    return -1;
  }

  if((getenv(ENV_FD_CLIENT_TO_MONITOR)) ||
     (getenv(ENV_FD_MONITOR_TO_CLIENT)) ||
     (getenv(ENV_FD_LOADING_TO_MONITOR)) ||
     (getenv(ENV_FD_MONITOR_TO_LOADING))) {
    LOG_ERROR_MONITOR("inception of monitored programs is not supported\n");
    return -1;
  }

  if(argc < 2) {
    LOG_ERROR_MONITOR("usage: %s prog [prog_args ...]\n", argv[0]);
    return -2;
  }

  if(getenv(ENV_SM_TRACE)) {
    LOG_DEBUG_MONITOR("%s set, so we are keeping traces\n", ENV_SM_TRACE);
    OPTION_sm_trace = 1;
  }

  if(getenv(ENV_SM_DUMP)) {
    OPTION_sm_dump = 1;
  }

  if(pipe2(fd_client_to_monitor, O_DIRECT)) {
    LOG_ERROR_MONITOR("failed to create client to monitor pipe : %s\n", strerror(errno));
    return -3;
  }

  if(pipe2(fd_monitor_to_client, O_DIRECT)) {
    LOG_ERROR_MONITOR("failed to create monitor to client pipe : %s\n", strerror(errno));
    return -3;
  }

  if(pipe2(fd_loading_to_monitor, O_DIRECT)) {
    LOG_ERROR_MONITOR("failed to create loading to monitor pipe : %s\n", strerror(errno));
    return -3;
  }

  if(pipe2(fd_monitor_to_loading, O_DIRECT)) {
    LOG_ERROR_MONITOR("failed to create monitor to loading pipe : %s\n", strerror(errno));
    return -3;
  }


  LOG_DEBUG_MONITOR("forking\n");

  if((child_pid = fork()) > 0) {
    /* monitor process */
    close(fd_client_to_monitor[1]);
    close(fd_monitor_to_client[0]);
    close(fd_loading_to_monitor[1]);
    close(fd_monitor_to_loading[0]);

    if((err = mask_sigpipe())) {
      LOG_ERROR_MONITOR("cannot mask SIGPIPE\n");
    } else if((err = monitor_load(child_pid,
                                  fd_client_to_monitor[0],
                                  fd_monitor_to_client[1],
                                  fd_loading_to_monitor[0],
                                  fd_monitor_to_loading[1],
                                  &data))) {
      LOG_ERROR_MONITOR("failed to load monitor data\n");
    } else {

      if(OPTION_nb_preload_monitor_ok_answers > 0) {
        const monitor_answer ok_resp = { .event = CFI_OK };
        unsigned int i = 0;
        LOG_DEBUG_MONITOR("preloading %u OK answers\n", OPTION_nb_preload_monitor_ok_answers);
        while((i < OPTION_nb_preload_monitor_ok_answers) && !err) {
          WRITE_MONITOR_ANSWER(data.fd_monitor_to_client, ok_resp, err);
          ++i;
        }
      }

      LOG_DEBUG_MONITOR("main loop\n");
      err = monitor_run(data);
      if(!err) {
        unsigned int i;
        unsigned int nb = 0;
        for(i = 0; i < data.nb_modules; ++i) {
          nb += data.modules[i].nb_entrypoint_finis;
        }
        i = 0;
        LOG_DEBUG_MONITOR("%u finis are expected\n", nb);
        while((i < nb) && !err) {
          err = monitor_run(data);
          ++i;
        }
      }
    }

    LOG_DEBUG_MONITOR("exits with status = %i\n", err);

    if(err) {
      LOG_DEBUG_MONITOR("killing client\n");
      kill(child_pid, SIGKILL);
    }

    monitor_data_free(&data);

    return err;

  } else if(child_pid == 0) {
コード例 #3
0
ファイル: main.c プロジェクト: pauledd/eventlircd-fork
int main(int argc,char **argv)
{
    static struct option longopts[] =
    {
        {"help",no_argument,NULL,'h'},
        {"version",no_argument,NULL,'V'},
        {"verbose",no_argument,NULL,'v'},
        {"foreground",no_argument,NULL,'f'},
        {"evmap",required_argument,NULL,'e'},
        {"socket",required_argument,NULL,'s'},
        {"mode",required_argument,NULL,'m'},
        {"repeat-filter",no_argument,NULL,'R'},
        {"release",required_argument,NULL,'r'},
        {0, 0, 0, 0}
    };
    const char *progname = NULL;
    int verbose = 0;
    bool foreground = false;
    const char *input_device_evmap_dir = EVMAP_DIR;
    const char *lircd_socket_path = LIRCD_SOCKET;
    mode_t lircd_socket_mode = S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IWOTH | S_IROTH;
    bool input_repeat_filter = false;
    const char *lircd_release_suffix = NULL;
    int opt;

    for (progname = argv[0] ; strchr(progname, '/') != NULL ; progname = strchr(progname, '/') + 1);

    openlog(progname, LOG_CONS | LOG_PERROR | LOG_PID, LOG_DAEMON);

    while((opt = getopt_long(argc, argv, "hVvfe:s:m:Rr:", longopts, NULL)) != -1)
    {
        switch(opt)
        {
            case 'h':
		fprintf(stdout, "Usage: %s [options]\n", progname);
		fprintf(stdout, "    -h --help              print this help message and exit\n");
		fprintf(stdout, "    -V --version           print the program version and exit\n");
		fprintf(stdout, "    -v --verbose           increase the output message verbosity (-v, -vv or -vvv)\n");
		fprintf(stdout, "    -f --foreground        run in the foreground\n");
		fprintf(stdout, "    -e --evmap=<dir>       directory containing input device event map files (default is '%s')\n",
                                                            input_device_evmap_dir);
		fprintf(stdout, "    -s --socket=<socket>   lircd socket (default is '%s')\n",
                                                            lircd_socket_path);
		fprintf(stdout, "    -m --mode=<mode>       lircd socket mode (default is '%04o')\n",
                                                            lircd_socket_mode);
		fprintf(stdout, "    -R --repeat-filter     enable repeat filtering (default is '%s')\n",
                                                            input_repeat_filter ? "false" : "true");
		fprintf(stdout, "    -r --release=<suffix>  generate key release events suffixed with <suffix>\n");
                exit(EX_OK);
                break;
            case 'V':
                fprintf(stdout, PACKAGE_STRING "\n");
                break;
            case 'v':
                if (verbose < 3)
                {
                    verbose++;
                }
                else
                {
                    syslog(LOG_WARNING, "the highest verbosity level is -vvv\n");
                }
            case 'f':
                foreground = true;
                break;
            case 'e':
                input_device_evmap_dir = optarg;
                break;
            case 's':
                lircd_socket_path = optarg;
                break;
            case 'm':
                lircd_socket_mode = (mode_t)atol(optarg);
                break;
            case 'R':
                input_repeat_filter = true;
                break;
            case 'r':
                lircd_release_suffix = optarg;
                break;
            default:
                fprintf(stderr, "error: unknown option: %c\n", opt);
                exit(EX_USAGE);
        }
    }

    if      (verbose == 0)
    {
        setlogmask(0 | LOG_DEBUG | LOG_INFO | LOG_NOTICE);
    }
    else if (verbose == 1)
    {
        setlogmask(0 | LOG_DEBUG | LOG_INFO);
    }
    else if (verbose == 2)
    {
        setlogmask(0 | LOG_DEBUG);
    }
    else
    {
        setlogmask(0);
    }

    signal(SIGPIPE, SIG_IGN);

    if (monitor_init() != 0)
    {
        exit(EXIT_FAILURE);
    }

    /* Initialize the lircd socket before daemonizing in order to ensure that programs
       started after it damonizes will have an lircd socket with which to connect. */
    if (lircd_init(lircd_socket_path, lircd_socket_mode, lircd_release_suffix) != 0)
    {
        monitor_exit();
        exit(EXIT_FAILURE);
    }

    if (foreground != true)
    {
        daemon(0, 0);
    }

    if (input_init(input_device_evmap_dir, input_repeat_filter) != 0)
    {
        monitor_exit();
        lircd_exit();
        exit(EXIT_FAILURE);
    }

    monitor_run();

    if (input_exit() != 0)
    {
        monitor_exit();
        lircd_exit();
        exit(EXIT_FAILURE);
    }

    if (lircd_exit() != 0)
    {
        monitor_exit();
        exit(EXIT_FAILURE);
    }

    if (monitor_exit() != 0)
    {
        exit(EXIT_FAILURE);
    }

    exit(EXIT_SUCCESS);
}
コード例 #4
0
ファイル: main.c プロジェクト: hongwozai/emms
static void server_run(void)
{
    analy_run();
    monitor_run();
    log_run();
}