cmdsserv.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. * cmdsserv.c -- part of server.mod
  3. * handles commands from a user via dcc that cause server interaction
  4. *
  5. */
  6. #ifdef LEAF
  7. static void cmd_servers(struct userrec *u, int idx, char *par)
  8. {
  9. struct server_list *x = serverlist;
  10. int i;
  11. char s[1024];
  12. putlog(LOG_CMDS, "*", "#%s# servers", dcc[idx].nick);
  13. if (!x) {
  14. dprintf(idx, "There are no servers in the server list.\n");
  15. } else {
  16. dprintf(idx, "Server list:\n");
  17. i = 0;
  18. for (; x; x = x->next) {
  19. if (x->realname)
  20. egg_snprintf(s, sizeof s, " %s:%d (%s) %s", x->name,
  21. x->port ? x->port : default_port, x->realname,
  22. (i == curserv) ? "<- I am here" : "");
  23. else
  24. egg_snprintf(s, sizeof s, " %s:%d %s", x->name,
  25. x->port ? x->port : default_port,
  26. (i == curserv) ? "<- I am here" : "");
  27. dprintf(idx, "%s\n", s);
  28. i++;
  29. }
  30. dprintf(idx, "End of server list.\n");
  31. }
  32. }
  33. static void cmd_dump(struct userrec *u, int idx, char *par)
  34. {
  35. putlog(LOG_CMDS, "*", "#%s# dump %s", dcc[idx].nick, par);
  36. if (!(isowner(dcc[idx].nick)) && (must_be_owner == 2)) {
  37. dprintf(idx, "What? You need '%shelp'\n", dcc_prefix);
  38. return;
  39. }
  40. if (!par[0]) {
  41. dprintf(idx, "Usage: dump <server stuff>\n");
  42. return;
  43. }
  44. dprintf(DP_SERVER, "%s\n", par);
  45. }
  46. static void cmd_jump(struct userrec *u, int idx, char *par)
  47. {
  48. char *other;
  49. int port;
  50. if (par[0]) {
  51. other = newsplit(&par);
  52. port = atoi(newsplit(&par));
  53. if (!port)
  54. port = default_port;
  55. putlog(LOG_CMDS, "*", "#%s# jump %s %d %s", dcc[idx].nick, other, port, par);
  56. strncpyz(newserver, other, sizeof newserver);
  57. newserverport = port;
  58. strncpyz(newserverpass, par, sizeof newserverpass);
  59. } else
  60. putlog(LOG_CMDS, "*", "#%s# jump", dcc[idx].nick);
  61. dprintf(idx, "%s...\n", IRC_JUMP);
  62. cycle_time = 0;
  63. nuke_server("changing servers");
  64. }
  65. static void cmd_clearqueue(struct userrec *u, int idx, char *par)
  66. {
  67. int msgs;
  68. putlog(LOG_CMDS, "*", "#%s# clearqueue %s", dcc[idx].nick, par);
  69. if (!par[0]) {
  70. dprintf(idx, "Usage: clearqueue <mode|server|help|all>\n");
  71. return;
  72. }
  73. if (!egg_strcasecmp(par, "all")) {
  74. msgs = modeq.tot + mq.tot + hq.tot;
  75. msgq_clear(&modeq);
  76. msgq_clear(&mq);
  77. msgq_clear(&hq);
  78. double_warned = burst = 0;
  79. dprintf(idx, "Removed %d message%s from all queues.\n", msgs,
  80. (msgs != 1) ? "s" : "");
  81. } else if (!egg_strcasecmp(par, "mode")) {
  82. msgs = modeq.tot;
  83. msgq_clear(&modeq);
  84. if (mq.tot == 0)
  85. burst = 0;
  86. double_warned = 0;
  87. dprintf(idx, "Removed %d message%s from the mode queue.\n", msgs,
  88. (msgs != 1) ? "s" : "");
  89. } else if (!egg_strcasecmp(par, "help")) {
  90. msgs = hq.tot;
  91. msgq_clear(&hq);
  92. double_warned = 0;
  93. dprintf(idx, "Removed %d message%s from the help queue.\n", msgs,
  94. (msgs != 1) ? "s" : "");
  95. } else if (!egg_strcasecmp(par, "server")) {
  96. msgs = mq.tot;
  97. msgq_clear(&mq);
  98. if (modeq.tot == 0)
  99. burst = 0;
  100. double_warned = 0;
  101. dprintf(idx, "Removed %d message%s from the server queue.\n", msgs,
  102. (msgs != 1) ? "s" : "");
  103. } else {
  104. dprintf(idx, "Usage: clearqueue <mode|server|help|all>\n");
  105. return;
  106. }
  107. }
  108. /* Function call should be:
  109. * int cmd_whatever(idx,"parameters");
  110. *
  111. * As with msg commands, function is responsible for any logging.
  112. */
  113. static cmd_t C_dcc_serv[] =
  114. {
  115. {"clearqueue", "m", (Function) cmd_clearqueue, NULL},
  116. {"dump", "a", (Function) cmd_dump, NULL},
  117. {"jump", "m", (Function) cmd_jump, NULL},
  118. {"servers", "m", (Function) cmd_servers, NULL},
  119. {NULL, NULL, NULL, NULL}
  120. };
  121. #endif /* LEAF */