Esempio n. 1
0
int main(int argc, char **argv) {
  FILE * conf;
  conf = fopen(CONFIG, "r");

  irc_t irc;
  irc_set_output(&irc, OUTPUT);
  irc.chanlist = NULL;

  init_conf(&irc, conf);

  while ( irc_handle_data(&irc) >= 0 );

  irc_close(&irc);
  fclose(conf);
  return 0;
}
Esempio n. 2
0
int irc_exec(char *hostname, int port, char *channel) {
    int fd;
    int nb;
    char *buff;
    pthread_t tid;

    fd = irc_connect(hostname, port);

    if (fd == -1)
        return 0;

    nb = pthread_create(&tid, NULL, irc_handle_activity, &fd);

    if (nb != 0) {
        sock_close(fd);
        return 0;
    }

    /* join channel */
    usleep(IRC_JOINDELAY * 1000000);
    nb = strlen(channel) + 8;
    buff = calloc(nb, sizeof(char));
    sprintf(buff, "JOIN %s\r\n", channel);
    send(fd, buff, strlen(buff), 0);
    free(buff);

    /* terminal input to IRC server */
    buff = calloc(IRC_TERMWIDTH, sizeof(char));
    while (fgets(buff, IRC_TERMWIDTH, stdin) != NULL) {
        send(fd, buff, strlen(buff) - 1, 0);
        send(fd, "\r\n", 2, 0);
    }
    free(buff);

    /* IRC disconnect */
    irc_close(fd);
    pthread_join(tid, NULL);

    return 1;
}
Esempio n. 3
0
File: main.c Progetto: tfc/ircbot
int main(int argc, char *argv[])
{
    int err;
    int max_descr;
    fd_set sock_set;
    struct timeval select_timeout;
    int running = 1;
    irc_connection con;
    unsigned irc_port;
    char *irc_server;

    conf = config_from_filename("ircb.conf");
    assert(conf);

    if (argc == 3) {
        irc_server = argv[1];
        irc_port = atoi(argv[2]);
    }
    if (argc == 2) {
        irc_server = argv[1];
        irc_port = 6667;
    }
    else if (argc == 1) {
        config_group *g = config_get_group(conf, "irc");
        irc_server = Conf("server", "INVALID");
        if (!strcmp(irc_server, "INVALID")) {
            Printerr("No IRC server address given!\n");
            return 1;
        }
        char *portstr = Conf("port", "6667");
        assert(irc_server && portstr);
        irc_port = atoi(portstr);
    }
    else
        return 1;

    err = irc_connect(&con, irc_server, irc_port);
    if (err) {
        Printerr("Got no connection to IRC server!\n");
        return 1;
    }

    module_load_module_dir(&con, conf);

    config_group *g = config_get_group(conf, "bot");

    irc_set_nick(&con, Conf("nickname", "cbot"));
    irc_set_user(&con,
                 Conf("username", "cbot_user"),
                 Conf("hostname", "cbot_host"),
                 Conf("servername", "cbot_server"),
                 Conf("realname", "The CBot!"));

    max_descr = MAX(STDIN_FILENO, con.sockfd) + 1;

    while (running) {
        FD_ZERO(&sock_set);
        FD_SET(STDIN_FILENO, &sock_set);
        FD_SET(con.sockfd, &sock_set);

        select_timeout.tv_sec = 120;
        select_timeout.tv_usec = 0;

        err = select(max_descr, &sock_set, NULL, NULL, &select_timeout);

        if (!err) {
            /* Handle timeout */
        }

        if (FD_ISSET(con.sockfd, &sock_set))
            /* Incoming data from IRC network */
            running = !handle_irc_messages(&con);

        if (FD_ISSET(STDIN_FILENO, &sock_set))
            /* Local user input */
            running = handle_keyboard_input(&con) != -2;
    }

    module_unload_all(&con);

    irc_close(&con, "bye.");
    return 0;
}