📄 outbound.c
字号:
sprintf (tbuf, "PART %s\r\nJOIN %s %s\r\n", chan, chan, key); tcp_send (sess->server, tbuf); return TRUE; } return FALSE;}intcmd_dcc (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int goodtype; struct DCC *dcc = 0; char *type = word[2]; if (*type) { if (!strcasecmp (type, "HELP")) return FALSE; if (!strcasecmp (type, "CLOSE")) { if (*word[3] && *word[4]) { goodtype = 0; if (!strcasecmp (word[3], "SEND")) { dcc = find_dcc (word[4], word[5], TYPE_SEND); if (dcc) dcc_close (dcc, 0, TRUE); goodtype = TRUE; } if (!strcasecmp (word[3], "GET")) { dcc = find_dcc (word[4], word[5], TYPE_RECV); if (dcc) dcc_close (dcc, 0, TRUE); goodtype = TRUE; } if (!strcasecmp (word[3], "CHAT")) { dcc = find_dcc (word[4], "", TYPE_CHATRECV); if (!dcc) dcc = find_dcc (word[4], "", TYPE_CHATSEND); if (dcc) dcc_close (dcc, 0, TRUE); goodtype = TRUE; } if (!goodtype) return FALSE; if (!dcc) EMIT_SIGNAL (XP_TE_NODCC, sess, NULL, NULL, NULL, NULL, 0); return TRUE; } return FALSE; } if (!strcasecmp (type, "CHAT")) { char *nick = word[3]; if (*nick) dcc_chat (sess, nick); return TRUE; } if (!strcasecmp (type, "LIST")) { dcc_show_list (sess, tbuf); return TRUE; } if (!strcasecmp (type, "GET")) { char *nick = word[3]; char *file = word[4]; if (!*file) { if (*nick) dcc_get_nick (sess, nick); } else { dcc = find_dcc (nick, file, TYPE_RECV); if (dcc) dcc_get (dcc); else EMIT_SIGNAL (XP_TE_NODCC, sess, NULL, NULL, NULL, NULL, 0); } return TRUE; } if (!strcasecmp (type, "SEND")) { char *nick = word[3]; if (*nick) { int i = 4; char *file; while (1) { file = word[i]; if (!*file && i == 4) { fe_dcc_send_filereq (sess, nick); return TRUE; } if (!*file) break; dcc_send (sess, tbuf, nick, file); i++; } } return TRUE; } } else dcc_show_list (sess, tbuf); return TRUE;}static intcmd_debug (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ struct session *s; struct server *v; GSList *list = sess_list; PrintText (sess, "Session T Channel WaitChan WillChan Server\n"); while (list) { s = (struct session *) list->data; sprintf (tbuf, "0x%lx %1x %-10.10s %-10.10s %-10.10s 0x%lx\n", (unsigned long) s, s->type, s->channel, s->waitchannel, s->willjoinchannel, (unsigned long) s->server); PrintText (sess, tbuf); list = list->next; } list = serv_list; PrintText (sess, "Server Sock Name\n"); while (list) { v = (struct server *) list->data; sprintf (tbuf, "0x%lx %-5ld %s\n", (unsigned long) v, (unsigned long) v->sok, v->servername); PrintText (sess, tbuf); list = list->next; } sprintf (tbuf, "\nfront_session: %lx\n" "current_tab: %lx\n\n", (unsigned long) sess->server->front_session, (unsigned long) current_tab); PrintText (sess, tbuf);#ifdef MEMORY_DEBUG sprintf (tbuf, "current mem: %d\n\n", current_mem_usage); PrintText (sess, tbuf);#endif /* !MEMORY_DEBUG */ return TRUE;}intcmd_delbutton (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ if (*word[2]) { if (sess->type == SESS_DIALOG) { if (list_delentry (&dlgbutton_list, word[2])) fe_dlgbuttons_update (sess); } else { if (list_delentry (&button_list, word[2])) fe_buttons_update (sess); } return TRUE; } return FALSE;}intcmd_dehop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int i = 2; while (1) { if (!*word[i]) { if (i == 2) return FALSE; send_channel_modes (sess, tbuf, word, 2, i, '-', 'h'); return TRUE; } i++; }}intcmd_deop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int i = 2; while (1) { if (!*word[i]) { if (i == 2) return FALSE; send_channel_modes (sess, tbuf, word, 2, i, '-', 'o'); return TRUE; } i++; }}intcmd_mdehop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ struct User *user; char **nicks = malloc (sizeof (char *) * sess->hops); int i = 0; GSList *list = sess->userlist; while (list) { user = (struct User *) list->data; if (user->hop && (strcmp (user->nick, sess->server->nick) != 0)) { nicks[i] = user->nick; i++; } list = list->next; } send_channel_modes (sess, tbuf, nicks, 0, i, '-', 'h'); free (nicks); return TRUE;}intcmd_mdeop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ struct User *user; char **nicks = malloc (sizeof (char *) * sess->ops); int i = 0; GSList *list = sess->userlist; while (list) { user = (struct User *) list->data; if (user->op && (strcmp (user->nick, sess->server->nick) != 0)) { nicks[i] = user->nick; i++; } list = list->next; } send_channel_modes (sess, tbuf, nicks, 0, i, '-', 'o'); free (nicks); return TRUE;}intcmd_mkick (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ struct User *user; char *reason = word_eol[2]; GSList *list; list = sess->userlist; while (list) { user = (struct User *) list->data; if (user->op) { if (strcmp (user->nick, sess->server->nick) != 0) { if (*reason) sprintf (tbuf, "KICK %s %s :%s\r\n", sess->channel, user->nick, reason); else sprintf (tbuf, "KICK %s %s\r\n", sess->channel, user->nick); tcp_send (sess->server, tbuf); } } list = list->next; } list = sess->userlist; while (list) { user = (struct User *) list->data; if (!user->op) { if (strcmp (user->nick, sess->server->nick) != 0) { if (*reason) sprintf (tbuf, "KICK %s %s :%s\r\n", sess->channel, user->nick, reason); else sprintf (tbuf, "KICK %s %s\r\n", sess->channel, user->nick); tcp_send (sess->server, tbuf); } } list = list->next; } return TRUE;}intcmd_mkickb (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ sprintf (tbuf, "MODE %s +b *@*\r\n", sess->channel); tcp_send (sess->server, tbuf); return cmd_mkick (sess, tbuf, word, word_eol);}intcmd_devoice (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int i = 2; while (1) { if (!*word[i]) { if (i == 2) return FALSE; send_channel_modes (sess, tbuf, word, 2, i, '-', 'v'); return TRUE; } i++; }}intcmd_discon (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ disconnect_server (sess, TRUE, -1); return TRUE;}intcmd_dns (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ char *nick = word[2]; struct User *user; if (*nick) { if (strchr (nick, '.') == NULL) { user = find_name (sess, nick); if (user && user->hostname) { do_dns (sess, tbuf, user->nick, user->hostname); } else { sprintf (tbuf, "WHO %s\r\n", nick); tcp_send (sess->server, tbuf); sess->server->doing_who = TRUE; } } else { sprintf (tbuf, "/exec %s %s", prefs.dnsprogram, nick); handle_command (tbuf, sess, 0, 0); } return TRUE; } return FALSE;}intcmd_echo (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ PrintText (sess, word_eol[2]); return TRUE;}#ifndef WIN32static voidexec_check_process (struct session *sess){ int val; if (sess->running_exec == NULL) return; val = waitpid (sess->running_exec->childpid, NULL, WNOHANG); if (val == -1 || val > 0) { close (sess->running_exec->myfd); fe_input_remove (sess->running_exec->iotag); free (sess->running_exec); sess->running_exec = NULL; }}#ifndef __EMX__intcmd_execs (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int r; exec_check_process (sess); if (sess->running_exec == NULL) { EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0); return FALSE; } r = kill (sess->running_exec->childpid, SIGSTOP); if (r == -1) PrintText (sess, "Error in kill(2)\n"); return TRUE;}intcmd_execc (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int r; exec_check_process (sess); if (sess->running_exec == NULL) { EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0); return FALSE; } r = kill (sess->running_exec->childpid, SIGCONT); if (r == -1) PrintText (sess, "Error in kill(2)\n"); return TRUE;}intcmd_execk (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int r; exec_check_process (sess); if (sess->running_exec == NULL) { EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0); return FALSE; } if (strcmp (word[2], "-9") == 0) r = kill (sess->running_exec->childpid, SIGKILL); else r = kill (sess->running_exec->childpid, SIGTERM); if (r == -1) PrintText (sess, "Error in kill(2)\n"); return TRUE;}/* OS/2 Can't have the /EXECW command because it uses pipe(2) not socketpair and thus it is simplex --AGL */intcmd_execw (struct session *sess, char *tbuf, char *word[], char *word_eol[]){ int len; char *temp; exec_check_process (sess); if (sess->running_exec == NULL) { EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0); return FALSE; } len = strlen(word_eol[2]); temp = malloc(len + 2); sprintf(temp, "%s\n", word_eol[2]); PrintText(sess, temp); write(sess->running_exec->myfd, temp, len + 1); free(temp); return TRUE;}#endif /* !__EMX__ *//* convert ANSI escape color codes to mIRC codes */static short escconv[] =/* 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 */{ 1,4,3,5,2,10,6,1, 1,7,9,8,12,11,13,1 };static voidexec_handle_colors (char *buf, int len){ char numb[16]; char *nbuf; int i = 0, j = 0, k = 0, firstn = 0, col, colf = 0, colb = 0; int esc = FALSE, backc = FALSE, bold = FALSE; /* any escape codes in this text? */ if (strchr (buf, 27) == 0) return; nbuf = malloc (len + 1); while (i < len) { switch (buf[i]) { case '\r': break; case 27: esc = TRUE; break; case ';': if (!esc) goto norm; backc = TRUE; numb[k] = 0; firstn = atoi (numb); k = 0; break; case '[': if (!esc) goto norm; break; default: if (esc) { if (buf[i] >= 'A' && buf[i] <= 'z') { if (buf[i] == 'm') { /* ^[[0m */ if (k == 0 || (numb[0] == '0' && k == 1)) { nbuf[j] = '\017'; j++; bold = FALSE; goto cont; } numb[k] = 0; col = atoi (numb); backc = FALSE; if (firstn == 1) bold = TRUE; if (firstn >= 30 && firstn <= 37) colf = firstn - 30; if (col >= 40) { colb = col - 40; backc = TRUE; } if (col >= 30 && col <= 37) colf = col - 30; if (bold) colf += 8; if (backc) { colb = escconv[colb % 14]; colf = escconv[colf % 14]; j += sprintf (&nbuf[j], "\003%d,%02d", colf, colb); } else { colf = escconv[colf % 14]; j += sprintf (&nbuf[j], "\003%02d", colf); } }cont: esc = FALSE; backc = FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -