⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irc.c

📁 P2P NAP的C实现 P2P在网络应用中越来越流行
💻 C
📖 第 1 页 / 共 3 页
字号:
  free(nk);    return(1);}    I_IRC_FUNC(h332){  chans_t *cur = findchan(chanl, tok[3]);  int i;    if (!cur)    return(1);    cur->topic = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+5);  for (i=0;cur->topic[i];i++)  {    if (cur->topic[i] < 26)    {      strncpy(cur->topic+i, cur->topic+i+1, strlen(cur->topic+i+1));      cur->topic[strlen(cur->topic)-1] = 0;    }  }  wp(win, "%s* Topic for %s: %s%s\n", YELLOW, cur->nm, cur->topic, WHITE);  drw(win);    return(1);}I_IRC_FUNC(h333){  wp(win, "%s* Topic for %s set by %s%s\n", YELLOW, tok[3], tok[4], WHITE);  drw(win);    return(1);}I_IRC_FUNC(htopic){  chans_t *cur = findchan(chanl, tok[2]);  char *nk = gnick(tok[0]+1);  int i;    if (!cur)  {    free(nk);    return(1);  }    if (cur->topic)    free(cur->topic);    cur->topic = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+4);    for (i=0;cur->topic[i];i++)  {    if (cur->topic[i] < 26)    {      strncpy(cur->topic+i, cur->topic+i+1, strlen(cur->topic+i+1));      cur->topic[strlen(cur->topic)-1] = 0;    }  }    if (!strlen(cur->topic))  {    free(cur->topic);    cur->topic = NULL;  }  else    cur->topic = (char *)realloc(cur->topic, strlen(cur->topic)+1);    recent = cur;    if (!cur->topic)    wp(win, "%s* %s has unset the topic of %s%s\n", YELLOW, nk, cur->nm, WHITE);  else    wp(win, "%s* %s changed the topic of %s: %s%s\n", YELLOW, nk, cur->nm, cur->topic, WHITE);  drw(win);    if (curchan == recent)    tind = 0;    recent = NULL;  free(nk);    return(1);}I_IRC_FUNC(h311){  wp(win, "%s _________________%s\n", DARK, WHITE);  wp(win, "%s|%s User: %s\n", DARK, WHITE, tok[3]);  wp(win, "%s|%s IRC name: %s\n", DARK, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+strlen(tok[4])+strlen(tok[5])+strlen(tok[6])+8);  wp(win, "%s|%s Address: %s@%s\n", DARK, WHITE, tok[4], tok[5]);  drw(win);    return(1);}I_IRC_FUNC(h319){  wp(win, "%s|%s Channels: %s\n", DARK, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+5);  drw(win);    return(1);}I_IRC_FUNC(h312){  wp(win, "%s|%s Server: %s (%s)\n", DARK, WHITE, tok[4], str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+strlen(tok[4])+6);  drw(win);    return(1);}I_IRC_FUNC(h313){  wp(win, "%s|%s Class: %s\n", DARK, WHITE, cstr(str, 4)+1);  drw(win);    return(1);}I_IRC_FUNC(h317){  int hr, min, sec, t;    t = atoi(tok[4]);    min = t/60;  hr = min/60;  sec = t%60;    while (min >= 60)    min-=60;  wp(win, "%s|%s Idle: %i h %i m %i s\n", DARK, WHITE, hr, min, sec);  drw(win);    return(1);}I_IRC_FUNC(h367){  time_t t;  char *tm;    t = strtoul(tok[6], (char **)NULL, 10);  tm = ctime(&t);    tm[strlen(tm)-1] = 0;  wp(win, "%s* Banned: %s by %s at %s%s\n", BRIGHT(BLUE), tok[4], tok[5], tm, WHITE);  drw(win);    return(1);}I_IRC_FUNC(hmode){  int i, j, m=0, l;  user_t *cur;  chans_t *c = findchan(chanl, tok[2]);  char *nk = gnick(tok[0]+1), *pt = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+3);    if (pt[strlen(pt)-1] == ' ')    pt[strlen(pt)-1] = 0;    recent = c;    if (!strcasecmp(tok[2], mnick))    wp(win, "%s* %s sets mode [%s%s%s]%s\n", BRIGHT(YELLOW), nk, WHITE, pt+1, BRIGHT(YELLOW), WHITE);  else    wp(win, "%s* %s sets mode %s [%s%s%s]%s\n", BRIGHT(YELLOW), nk, tok[2], WHITE, pt, BRIGHT(YELLOW), WHITE);  free(pt);    drw(win);    recent = NULL;    if (!c)  {    free(nk);    return(1);  }    l = strlen(tok[3]);  for (i=0,j=4;i<l;i++)  {    if (tok[3][i] == '+')      m = '+';    else if (tok[3][i] == '-')      m = '-';    else if (tok[3][i] == 'o')    {      if (m == '+')      {        cur = finduser(c, tok[j]);        if (cur)          cur->flag |= NAP_OP;      }      else if (m == '-')      {        cur = finduser(c, tok[j]);        if (cur)          cur->flag &= ~NAP_OP;      }      j++;    }    else if (tok[3][i] == 'v')    {      if (m == '+')      {        cur = finduser(c, tok[j]);        if (cur)          cur->flag |= NAP_VOICE;      }      else if (m == '-')      {        cur = finduser(c, tok[j]);        if (cur)          cur->flag &= ~NAP_VOICE;      }      j++;    }    else if (tok[3][i] == 'b')      j++;    else if (tok[3][i] == 'i')    {      if (m == '+')        c->flag |= NAP_I;      else if (m == '-')        c->flag &= ~NAP_I;    }    else if (tok[3][i] == 's')    {      if (m == '+')        c->flag |= NAP_S;      else if (m == '-')        c->flag &= ~NAP_S;    }    else if (tok[3][i] == 'p')    {      if (m == '+')        c->flag |= NAP_P;      else if (m == '-')        c->flag &= ~NAP_P;    }    else if (tok[3][i] == 't')    {      if (m == '+')        c->flag |= NAP_T;      else if (m == '-')        c->flag &= ~NAP_T;    }    else if (tok[3][i] == 'm')    {      if (m == '+')        c->flag |= NAP_M;      else if (m == '-')        c->flag &= ~NAP_M;    }    else if (tok[3][i] == 'n')    {      if (m == '+')        c->flag |= NAP_N;      else if (m == '-')        c->flag &= ~NAP_N;    }    else if (tok[3][i] == 'k')    {      if (m == '+')      {        c->flag |= NAP_K;        c->key = strdup(tok[j]);      }      else if (m == '-')      {        c->flag &= ~NAP_K;        free(c->key);        c->key = NULL;      }      j++;    }    else if (tok[3][i] == 'l')    {      if (m == '+')      {        c->flag |= NAP_L;        c->l = atoi(tok[j]);        j++;      }      else if (m == '-')      {        c->flag &= ~NAP_L;        c->l = 0;      }    }  }    free(nk);    return(1);}I_IRC_FUNC(h324){  int i, j, m=0, l;  chans_t *c = findchan(chanl, tok[3]);  char *pt = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+4);    if (pt[strlen(pt)-1] == ' ')    pt[strlen(pt)-1] = 0;    if (!c)    return(1);    l = strlen(tok[4]);  for (i=0,j=5;i<l;i++)  {    if (tok[4][i] == '+')      m = '+';    else if (tok[4][i] == '-')      m = '-';    else if (tok[4][i] == 'i')    {      if (m == '+')        c->flag |= NAP_I;      else if (m == '-')        c->flag &= ~NAP_I;    }    else if (tok[4][i] == 's')    {      if (m == '+')        c->flag |= NAP_S;      else if (m == '-')        c->flag &= ~NAP_S;    }    else if (tok[4][i] == 'p')    {      if (m == '+')        c->flag |= NAP_P;      else if (m == '-')        c->flag &= ~NAP_P;    }    else if (tok[4][i] == 't')    {      if (m == '+')        c->flag |= NAP_T;      else if (m == '-')        c->flag &= ~NAP_T;    }    else if (tok[4][i] == 'm')    {      if (m == '+')        c->flag |= NAP_M;      else if (m == '-')        c->flag &= ~NAP_M;    }    else if (tok[4][i] == 'n')    {      if (m == '+')        c->flag |= NAP_N;      else if (m == '-')        c->flag &= ~NAP_N;    }    else if (tok[4][i] == 'k')    {      if (m == '+')      {        c->flag |= NAP_K;        c->key = strdup(tok[j]);      }      else if (m == '-')      {        c->flag &= ~NAP_K;        free(c->key);        c->key = NULL;      }      j++;    }    else if (tok[4][i] == 'l')    {      if (m == '+')      {        c->flag |= NAP_L;        c->l = atoi(tok[j]);        j++;      }      else if (m == '-')      {        c->flag &= ~NAP_L;        c->l = 0;      }    }  }    return(1);}I_IRC_FUNC(hkick){  char *nk = gnick(tok[0]+1);  chans_t *pt = findchan(chanl, tok[2]);    recent = pt;    wp(win, "%s* %s was kicked from %s by %s (%s%s%s)%s\n", GREEN, tok[3], tok[2], nk, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+5, GREEN, WHITE);  drw(win);    recent = NULL;    if (strcasecmp(tok[3], mnick) != 0)  {    deluser(pt, tok[3]);    free(nk);    return(1);  }    delchan(pt);    drw(win);    free(nk);    return(1);}I_IRC_FUNC(hprivmsg){  char *nk = gnick(tok[0]+1), *msg = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+4), *req, *pt, *nm=NULL;  chans_t *cur = findchan(chanl, tok[2]);  sock_t *sk;    recent = cur;    if (*msg != 1 && strcasecmp(tok[2], mnick))  {    if (curchan && (!strcasecmp(curchan->nm, tok[2]) || wmode))      wp(win, "%s<%s%s%s>%s %s\n", BRIGHT(BLUE), WHITE, nk, BRIGHT(BLUE), WHITE, msg);    else      wp(win, "%s<%s%s%s:%s%s%s>%s %s\n", BLUE, WHITE, nk, DARK, WHITE, tok[2], BLUE, WHITE, msg);    drw(win);    recent = NULL;    free(msg);    free(nk);    return(1);  }  else if (*msg != 1)  {    wp(win, "%s* [%s%s%s(%s%s%s)]%s %s\n", BRIGHT(GREEN), WHITE, nk, BRIGHT(GREEN), WHITE, tok[0]+strlen(nk)+2, BRIGHT(GREEN), WHITE, msg);    drw(win);    free(msg);    free(nk);    return(1);  }    if (msg[strlen(msg)-1] == 1)    msg[strlen(msg)-1] = 0;    if (!strcasecmp(tok[3]+2, "ACTION"))  {    pt = strdup(msg+strlen(tok[3]));    if (pt[strlen(pt)-1] == 1)      pt[strlen(pt)-1] = 0;    if (!strcasecmp(curchan->nm, tok[2]) || wmode)    {      wp(win, "%s* %s%s %s\n", CYAN, nk, WHITE, pt);      drw(win);    }    else    {      wp(win, "%s* %s%s/%s%s%s %s\n", CYAN, nk, WHITE, CYAN, tok[2], WHITE, pt);      drw(win);    }    recent = NULL;    free(pt);    free(msg);    free(nk);    return(1);  }  else if (!strcasecmp(tok[3]+2, "DCC") && tok[4] && !strcasecmp(tok[4], "CHAT") && tok[5] && tok[6] && tok[7])  {    msprintf(&nm, "pending %s", nk);    sk = addsock(-1, nm, 0, NULL);    sk->dxx = NULL;    msprintf(&sk->dxx, "%s %s", tok[6], tok[7]);    wp(win, "%s* %s has requested a DCC chat%s\n", BRIGHT(CYAN), nk, WHITE);    drw(win);    free(nm);    free(msg);    free(nk);    return(1);  }    req = strdup(tok[3]+2);  if (req[strlen(req)-1] == 1)    req[strlen(req)-1] = 0;    wp(win, "%s* CTCP request %s from %s (%s) to %s%s\n", CYAN, req, nk, tok[0]+strlen(nk)+2, tok[2], WHITE);  drw(win);    if (!strcasecmp(req, "VERSION"))    ssock(s, "NOTICE %s :\001VERSION nap v%s\001\n", nk, VERSION);  else if (!strcasecmp(req, "PING"))    ssock(s, "NOTICE %s :%s\001\n", nk, msg);    recent = NULL;    free(msg);  free(req);  free(nk);    return(1);}I_IRC_FUNC(hnotice){  char *nk = gnick(tok[0]+1), *msg = strdup(str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+4);  chans_t *cur = findchan(chanl, tok[2]);    if (!strcasecmp(tok[1], "AUTH") || !strcasecmp(tok[1], mnick))  {    wp(win, "%s%s%s\n", MAGENTA, str+strlen(tok[0])+strlen(tok[1])+3, WHITE);    drw(win);    free(msg);    free(nk);    return(1);  }    recent = cur;    if (*msg != 1 && strcasecmp(tok[2], mnick))  {    if (curchan && (!strcasecmp(curchan->nm, tok[2]) || wmode))      wp(win, "%s*%s*%s %s\n", MAGENTA, nk, WHITE, msg);    else      wp(win, "%s*%s%s/%s%s*%s %s\n", MAGENTA, nk, WHITE, MAGENTA, tok[2], WHITE, msg);    drw(win);    recent = NULL;    free(msg);    free(nk);    return(1);  }  else if (*msg != 1)  {    wp(win, "%s* [%s%s%s(%s%s%s)]%s %s\n", MAGENTA, WHITE, nk, MAGENTA, WHITE, tok[0]+strlen(nk)+2, MAGENTA, WHITE, msg);    drw(win);    free(msg);    free(nk);    return(1);  }    if (msg[strlen(msg)-1] == 1)    msg[strlen(msg)-1] = 0;    wp(win, "%s* CTCP reply from %s (%s):%s %s\n", CYAN, nk, tok[0]+strlen(nk)+2, WHITE, msg+strlen(tok[3]));  drw(win);    recent = NULL;    free(msg);  free(nk);    return(1);}I_IRC_FUNC(h376){  ircin = 1;    if (mnick)    free(mnick);  mnick = strdup(tok[2]);    return(1);}I_IRC_FUNC(h352){  chans_t *c = findchan(chanl, tok[3]);  user_t *cur;    if (!nwho)  {    recent = c;    wp(win, "%s _________________%s\n", DARK, WHITE);    wp(win, "%s|%s User: %s\n", DARK, WHITE, tok[7]);    wp(win, "%s|%s IRC name: %s\n", DARK, WHITE, str+strlen(tok[0])+strlen(tok[1])+strlen(tok[2])+strlen(tok[3])+strlen(tok[4])+strlen(tok[5])+strlen(tok[6])+strlen(tok[7])+strlen(tok[8])+strlen(tok[9])+10);    wp(win, "%s|%s Address: %s@%s\n", DARK, WHITE, tok[4], tok[5]);    if (*tok[3] != '*')    {      if (tok[8][1] == '@')        wp(win, "%s|%s Channel: @%s\n", DARK, WHITE, tok[3]);      else if (tok[8][1] == '+')        wp(win, "%s|%s Channel: +%s\n", DARK, WHITE, tok[3]);      else        wp(win, "%s|%s Channel: %s\n", DARK, WHITE, tok[3]);    }    wp(win, "%s|%s Server: %s\n", DARK, WHITE, tok[6]);    drw(win);    recent = NULL;    return(1);  }    if (!c)    return(1);    cur = finduser(c, tok[7]);  if (!cur)    return(1);    msprintf(&cur->addr, "%s@%s", tok[4], tok[5]);    return(1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -