示例#1
0
void lua_bothandler(nick *target, int type, void **args) {
  nick *np;
  char *p;
  int le;

  switch(type) {
    case LU_PRIVMSG:
      np = (nick *)args[0];
      p = (char *)args[1];

      if(!np || !p)
        return;

      lua_avpcall("irc_onmsg", "ls", np->numeric, p);

      break;
    case LU_PRIVNOTICE:
      np = (nick *)args[0];
      p = (char *)args[1];

      if(!np || !p)
        return;

      le = strlen(p);
      if((le > 1) && (p[0] == '\001')) {
        if(p[le - 1] == '\001')
          p[le - 1] = '\000';

        lua_avpcall("irc_onctcp", "ls", np->numeric, p + 1);
      } else {
        lua_avpcall("irc_onnotice", "ls", np->numeric, p);
      }

      break;

    case LU_KILLED:
      if(myublip) {
        myublip = NULL;
        deleteschedule(myublip, &lua_blip, NULL);
      }

      if(myutick) {
        myutick = NULL;
        deleteschedule(myutick, &lua_tick, NULL);
      }

      lua_nick = NULL;
      myureconnect = scheduleoneshot(time(NULL) + 1, &lua_startbot, NULL);

      break;
  }
}
示例#2
0
void nterfacer_freeline(void *tag) {
  struct sched_rline *prequest = tag;

  prequest->rl.callback = NULL;
  if(prequest->schedule)
    deleteschedule(prequest->schedule, execrline, NULL);
}
示例#3
0
void _fini() {
  void* p, *np;
  
  deregisterhook(HOOK_NICK_NEWNICK, &versionscan_newnick);
  
  if (vsconnect) {
    deleteschedule(vsconnect, &versionscan_createfakeuser, NULL);
    vsconnect=NULL;
  }
  
  if (versionscan_nick) {
    deregisterlocaluser(versionscan_nick, "Module unloaded.");
    versionscan_nick=NULL;
  }
  
  destroycommandtree(versionscan_commands);
  
  for (p=vspatterns; p;) {
    np=((vspattern*)p)->next;
    free(p);
    p=np;
  }
  for (p=vsauths; p;) {
    np=((vsauthdata*)p)->next;
    free(p);
    p=np;
  }
  for (p=vsstats; p;) {
    np=((vsstatistic*)p)->next;
    free(((vsstatistic*)p)->reply);
    free(p);
    p=np;
  }
}
示例#4
0
static void ib_hook_lostnick(int hooknum, void *arg) {
  nick *np = arg;
  ibnick *inp = np->exts[ib_nickext];

  if (!inp)
    return;

  deleteschedule(inp->sched, ib_clear_ext, np);
  free(np->exts[ib_nickext]);
}
示例#5
0
void lua_destroybot(void) {
  if(myutick)
    deleteschedule(myutick, &lua_tick, NULL);

  if(myublip)
    deleteschedule(myublip, &lua_blip, NULL);

  lua_deregisterevents();

  if (myureconnect)
    deleteschedule(myureconnect, &lua_startbot, NULL);

  if(lua_nick)
    deregisterlocaluser(lua_nick, NULL);

  if(luabotnick) {
    freesstring(luabotnick);
    luabotnick = NULL;
  }
}
示例#6
0
void safereload(char *themodule) {
  if (safereload_str)
    freesstring(safereload_str);
  
  safereload_str=getsstring(themodule, 100);
  
  if (safereload_sched)
    deleteschedule(safereload_sched, safereloadcallback, NULL);
  
  scheduleoneshot(1, safereloadcallback, NULL);
}
示例#7
0
static void fake_free(fakeuser *fake) {
  fakeuser **pnext;

  if (fake->user)
    deregisterlocaluser(fake->user, "Signing off");

  deleteschedule(NULL, &reconnectfakeuser, fake);
  
  for (pnext = &fakeuserlist; *pnext; pnext = &((*pnext)->next)) {
    if (*pnext == fake) {
      *pnext = fake->next;
      break;
    }
  }

  free(fake);
}
示例#8
0
文件: lua.c 项目: quakenet/newserv
void __fini() {
#else
void _fini() {
#endif

  if(loaded) {
    if(startsched)
      deleteschedule(startsched, &lua_startup, NULL);

    while(lua_head)
      lua_unloadscript(lua_head);

    lua_destroybot();
    lua_destroycontrol();
  }

  freesstring(cpath);
  freesstring(suffix);
  freesstring(dummy.name);

  lua_freedebugsocket();
  nscheckfreeall(POOL_LUA);
}

void lua_loadscripts(void) {
  array *ls;

  ls = getconfigitems("lua", "script");
  if(!ls) {
    Error("lua", ERR_INFO, "No scripts loaded.");
  } else {
    sstring **scripts = (sstring **)(ls->content);
    int i;
    for(i=0;i<ls->cursi;i++)
      lua_loadscript(scripts[i]->content);
  }
}
示例#9
0
static void ib_hook_modechange(int hooknum, void *arg) {
  void **arglist=(void **)arg;
  channel *cp=(channel *)arglist[0];
  nick *np=(nick *)arglist[1];
  long changeflags=(long)arglist[2];
  chanban *cbp;
  const char *p;
  int colons, colonsnext;
  modechanges changes;
  ibnick *inp;
  char *mask, *pos;
  int slot, i;
  array bans;

  if (!np || !(changeflags & MODECHANGE_BANS))
    return;

  inp = np->exts[ib_nickext];

  /* Ignore the mode change if the same user has recently
   * set/unset a channel ban. */
  if (inp && inp->timeout > time(NULL))
    return;

  if (inp) {
    deleteschedule(inp->sched, ib_clear_ext, np);
    free(inp);
    np->exts[ib_nickext] = NULL;
  }

  array_init(&bans, 512);

  for (cbp = cp->bans; cbp; cbp = cbp->next) {
    if (!cbp->host)
      continue;

    colons = 0;
    colonsnext = 0;

    for (p = cbp->host->content; *p; p++) {
      if (*p == ':') {
        colons++;

        if (*(p + 1) == ':')
          colonsnext = 1;
      }
    }

    if (colons - colonsnext >= 8) {
      slot = array_getfreeslot(&bans);
      mask = ((char *)bans.content) + slot * 512;
      strncpy(mask, bantostring(cbp), 512);
    }
  }

  if (bans.cursi > 0) {
    localsetmodeinit(&changes, cp, NULL);

    for (i = 0; i < bans.cursi; i++) {
      mask = ((char *)bans.content) + i * 512;

      pos = strchr(mask, '@');

      if (!pos)
        continue; /* This should never happen. */

      pos++; /* Skip over the @ sign. */

      for (; *pos; pos++) {
        if (*pos != ':') {
          *pos = '?';
          break;
        }
      }

      localdosetmode_ban(&changes, mask, MCB_ADD);
    }

    localsetmodeflush(&changes, 1);

    /* Ignore the user for a short amount of time. If it's a bot
     * it'll probably try re-setting the ban immediately. */
    inp = malloc(sizeof(ibnick));
    inp->timeout = time(NULL) + 15;
    inp->sched = scheduleoneshot(inp->timeout + 1, ib_clear_ext, np);
    np->exts[ib_nickext] = inp;
  }

  array_free(&bans);
}
示例#10
0
void _fini()
{
    deleteschedule(settime_schedule, &settime_sendsettime, NULL);
    deregistercontrolcmd("settime",&settime_cmd);
}