Example #1
0
/* a new user is connecting, we need to trigger the ON_CONNECT events  */
static void ev_uevents_new_user(IRC_User* u, void *s)
{
  char **row;
  char* mask = irc_UserMask(u);
  char* maskp = irc_UserMaskP(u);
  int i;
  for(i = 0; i < event_index_size[ON_CONNECT]; ++i)
  {
    row = dbmem_row_at(dbm_uevents, event_index[ON_CONNECT][i]);
    if((row[4] == NULL) || (row[4] && 
      (match(row[4], mask) || match(row[4], maskp))))
      {
        /* do the action here */
        action_types[atoi(row[5])].action(u, row[6]);
      }
  }
}
Example #2
0
static void ev_os_uevent_nick_register(IRC_User *u, u_int32_t *snid)
{
  char **row;
  char* mask = irc_UserMask(u);
  char* maskp = irc_UserMaskP(u);
  int i;
  for(i = 0; i < event_index_size[ON_REGISTER]; ++i)
  {
    row = dbmem_row_at(dbm_uevents, event_index[ON_REGISTER][i]);
    if((row[4] == NULL) || (row[4] && 
      (match(row[4], mask) || match(row[4], maskp))))
      {
        /* do the action here */
        action_types[atoi(row[5])].action(u, row[6]);
      }
  }
}
Example #3
0
/** internal functions implementation starts here **/
void ms_send(IRC_User *s, IRC_User *u)
{
    u_int32_t source_snid;
    u_int32_t snid;
    u_int32_t id;
    char* target;
    char* message;
    int mcount = 0;
    int maxmemos;
    int bquota;
    u_int32_t flags;
    u_int32_t memo_flags = 0;

    /* status validation */
    CHECK_IF_IDENTIFIED_NICK

    target = strtok(NULL, " ");
    message =  strtok(NULL, "");

    if(target && (snid = nick2snid(target)) == 0)
    {
        send_lang(u, s, NICK_X_NOT_REGISTERED, target);
        return;
    }

    /* we need to read memo options first */
    memoserv_get_options(snid, &maxmemos, &bquota, &flags);
    if(flags && MOFL_AUTOSAVE)
        memo_flags = MFL_SAVED;
    if(NickSecurityCode  && !IsAuthenticated(u))
        send_lang(u, s, NEEDS_AUTH_NICK);
    else
        /* syntax validation */
        if(IsNull(target) || IsNull(message))
            send_lang(u, s, SEND_SYNTAX);
    /* check maxmemos */
        else if(flags & MOFL_NOMEMOS)
            send_lang(u, s, MS_SEND_NOMEMOS);
        else if((mcount = memos_count(snid)) >= maxmemos)
            send_lang(u, s, MAX_MEMOS_REACHED_X_X, target, maxmemos);
#if 0
    /* check buddy quota for non buddies */
        else if(is_buddy && (maxmemos-mcount <= bquota) && !is_buddy(snid, source_snid))
            send_lang(u, s, MAX_MEMOS_REACHED_X_X, target, maxmemos-bquota);
#endif
    /* execute operation */
        else if((id = insert_memo(u->nick, source_snid, snid, message, memo_flags)) > 0)
        {
            IRC_User* tu;
            send_lang(u, s, SENT_MEMO_TO_X, target);
            tu = irc_FindUser(target);
            if(tu && tu->snid) /* target is online and identified */
            {
                char memoprev[MEMOPREVMAX+1];
                snprintf(memoprev, MEMOPREVMAX, "%s", message);
                send_lang(tu, s, YOU_GOT_MEMO_FROM_X_X_NUM_X,
                          u->nick, memoprev, id);
            }
            if(flags &  MOFL_FORWARD)
            {
                MYSQL_RES *res;
                MYSQL_ROW row;
                res = sql_query("SELECT email, lang FROM nickserv WHERE snid=%d", snid);
                if(res && (row = sql_next_row(res)))
                {
                    char* email = row[0];
                    int lang = atoi(row[1]);
                    email_init_symbols();
                    email_add_symbol("nick",target);
                    email_add_symbol("email", email);
                    email_add_symbol("message", message);
                    email_add_symbol("subject",
                                     lang_str_l(lang, MS_SEND_SUBJECT_X, u->nick));
                    if(email_send(forward_email) < 0)
                    {
                        log_log(ms_log, mod_info.name, "Error sending forward email to %s by %s",
                                email, irc_UserMask(u));
                    }
                }
                sql_free(res);
            }
        }
        else
            send_lang(u, s, UPDATE_FAIL);
}