static void notify_handler(struct sip *sip, const struct sip_msg *msg, void *arg) { struct mwi *mwi = arg; if (mbuf_get_left(msg->mb)) { ui_output("----- MWI for %s -----\n", ua_aor(mwi->ua)); ui_output("%b\n", mbuf_buf(msg->mb), mbuf_get_left(msg->mb)); } (void)sip_treply(NULL, sip, msg, 200, "OK"); }
void serverlist_frame() { int i; for (i = 0; i < server_count; i++) { msg_t *msg = sock_recv(&serverlist[i].sock); if (msg) { serverlist[i].ping_end = millis(); skip_data(msg, strlen("info\n")); read_server(serverlist + i, read_string(msg)); if (partial_match(filter, serverlist[i].name) || partial_match(filter, serverlist[i].map) || partial_match(filter, serverlist[i].mod) || partial_match(filter, serverlist[i].gametype)) ui_output(output_client, "^5%i ^7(%i) %s %s ^5[^7%s^5] [^7%s:%s^5]\n", i, serverlist[i].ping_end - serverlist[i].ping_start, serverlist[i].players, serverlist[i].name, serverlist[i].map, serverlist[i].mod, serverlist[i].gametype); serverlist[i].received = qtrue; } if (serverlist[i].ping_retries > 0 && !serverlist[i].received && millis() >= serverlist[i].ping_start + PING_TIMEOUT) ping_server(serverlist + i); } master_t *master; for (master = masters; master->address; master++) { msg_t *msg = sock_recv(&master->sock); if (!msg) continue; char address_string[32]; qbyte address[4]; unsigned short port; skip_data(msg, strlen("getserversResponse")); while (msg->readcount + 7 <= msg->cursize) { char prefix = read_char(msg); port = 0; if (prefix == '\\') { read_data(msg, address, 4); port = ShortSwap(read_short(msg)); sprintf(address_string, "%u.%u.%u.%u", address[0], address[1], address[2], address[3]); } if (port != 0) { server_t *server = find_server(address_string, port); if (server != NULL) continue; server = serverlist + server_count++; sock_init(&server->sock); strcpy(server->address, address_string); server->port = port; server->received = qfalse; server->ping_retries = MAX_PING_RETRIES + 1; ping_server(server); } } } }
void serverlist_connect() { static char cmd[100]; int i; for (i = 1; i < cmd_argc(); i++) { char *string = cmd_argv(i); int id = atoi(string); if (string[0] && id >= 0 && id < server_count) { sprintf(cmd, "connect %s %d", serverlist[id].address, serverlist[id].port); cmd_execute(cmd_client(), cmd); } else { ui_output(cmd_client(), "Invalid id: %d.\n", id); } } }
static void cmd_execute_real(int c, int caller, char *name, int type) { cmd_stack_push(); s->caller = caller; parse_cmd(name, -1); cmd_t *cmd = NULL; int cmds = 0; while ((cmd = cmd_find(cmd, c, type, qfalse)) != NULL) { cmds++; int start = c; int end = c; qboolean switch_screen = qfalse; int old_type = type; if (cmd_type_compatible(cmd->type, type)) type = cmd->type; if ((type == CT_BROADCAST || type == CT_CVAR) && c < 0) { start = 0; end = CLIENTS - 1; } else if (type == CT_BROADCAST_ALL) { start = -1; end = CLIENTS - 1; } else if (type == CT_FIND_FREE && c < 0) { int i; qboolean found = qfalse; for (i = 0; i < CLIENTS && !found; i++) { if (!client_active(i)) { start = i; end = i; found = qtrue; switch_screen = qtrue; break; } } if (!found) { ui_output(c, "No free client found.\n"); cmd_stack_pop(); return; } } for (s->client = start; s->client <= end; s->client++) { if (type == CT_SERVER) client_command(s->client, "%s", cmd_args(0)); else cmd->f(); if (switch_screen) set_screen(s->client + 1); } type = old_type; } if (cmds == 0) { if (cmd_type_compatible(type, CT_PUBLIC)) { if (cmd_argv(0)[0]) client_say(c, "Unknown command: \"%s\"", cmd_argv(0)); } else if (!cmd_type_compatible(type, CT_EVENT)) { ui_output(c, "Unknown command: \"%s\"\n", cmd_argv(0)); } cmd_stack_pop(); return; } cmd_stack_pop(); }