Beispiel #1
0
/* -------------------------------------------------------- */
BOT* ircBOT_new	(const char *nick, const char *pwd) {
    /* -------------------------------------------------------- */
    int x = 0;
    BOT *bot 	= (BOT*) CALLOC(1, sizeof(BOT));
    if(bot) {
        if(!nick)
            ERROR_EXIT("ircBOT_new: Error no NICK!!!\n");
        bot->nick 			= strdup(nick);
        if(pwd)
            bot->pwd 		= strdup(pwd);
        else
            bot->pwd 		= NULL;
        bot->srv.state 		= IRC_SYS_NEEDCONNECT;
        bot->srv.sendbuf	= NULL;
        bot->cmd_handler 	= LIST_new();
        bot->tee_handler 	= LIST_new();
        for(x=0; x<MAX_TIMER; x++)
            bot->timer[x].id = -1;
    }
    /* add this bot to the global ones */
    if(!all_bots)
        all_bots = LIST_new();
    if(!LIST_add(all_bots, bot))
        ERROR_EXIT("ircBOT_new: Error adding bot to global BOT-List!!\n");
    DEBUG("BOT with nick '%s' created.\n", bot->nick);
    return bot;
};
Beispiel #2
0
/* -------------------------------------------------------- */
MSG* MSG_out(BOT *me, MSG * mymsg, char * raw_msg) {
    /* -------------------------------------------------------- */
    MSG * msg = mymsg;
    if( !msg )
        msg = MSG_new(me);
    msg->raw_msg = raw_msg;
    if(!me->srv.sendbuf)
        me->srv.sendbuf = LIST_new();
    LIST_add(me->srv.sendbuf, msg);
    return msg;
}
Beispiel #3
0
/* -------------------------------------------------------- */
int ircBOT_server(BOT *me, const char *host, int port) {
    /* -------------------------------------------------------- */
    IRC_SRV *srv = &me->srv;
    struct sockaddr_in servaddr;
    int on=1;
    int irc_port = port > 0 ? port:IRC_PORT;

    if(srv->state != IRC_SYS_NEEDCONNECT)
        ircBOT_disconnect(me);

    srv->socket = socket(AF_INET, SOCK_STREAM, 0);
    setsockopt(srv->socket, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family		= AF_INET;
    servaddr.sin_port		= htons(irc_port);
    inet_pton(AF_INET, host, &servaddr.sin_addr);

    if( connect(srv->socket, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0 ) {
        ERROR("ircBOT_server: Error in connect: '%s' !\n", strerror(errno));
        return IRC_ERROR;
    }
    srv->name 	= strdup(host);
    srv->state 	= IRC_SYS_IDLE;
    if(!srv->channels)
        srv->channels = LIST_new();
    if(!srv->history)
        srv->history = LIST_new();
    DEBUG("ircBOT_server: connected to '%s' on port '%i'.\n", srv->name, irc_port);
    /* ************************************** */
    /* prepare to send NICK command to server */
    //MSG_out(me, NULL, irc_build_msg(NULL, "PASS", "", NULL));
    MSG_out(me, NULL, irc_build_msg(NULL, "NICK", me->nick, NULL));
    MSG_out(me, NULL, irc_build_msg(NULL, "USER", irc_build_param("%s 0 *",me->nick), me->nick)) ;
    /* ************************************** */
    return IRC_OK;
}
Beispiel #4
0
/* -------------------------------------------------------- */
USER* irc_sys_find_user_or_add	(BOT *me, USER *this_user) {
    /* -------------------------------------------------------- */
    LIST *l = me->srv.users;
    USER *user = NULL;
    if(!this_user) {
        ERROR("irc_sys_find_user_or_add: NO 'this_user' in Parameter\n");
        return NULL;
    }
    while( (user = LIST_next(l)) ) {
        if(	strcmp(SICHER_STR(this_user->name), 	SICHER_STR(user->name)) == 0 &&
                strcmp(SICHER_STR(this_user->host_user),SICHER_STR(user->host_user)) == 0 &&
                strcmp(SICHER_STR(this_user->host), 	SICHER_STR(user->host)) == 0
          )
            return user;
    }
    if(!me->srv.users)
        me->srv.users = LIST_new();
    LIST_add(me->srv.users, this_user);
    return NULL;
};
Linked_List LISTcreate() {
    Linked_List list = LIST_new();
    list->mark = LINK_new();
    list->mark->next = list->mark->prev = list->mark;
    return( list );
}