rendered paste bodyvoid irc_send_cmd_full(IRC_SERVER_REC *server, const char *cmd, int send_now, int immediate, int raw){ char str[513]; int len; g_return_if_fail(server != NULL); g_return_if_fail(cmd != NULL); if (server->connection_lost) return; len = strlen(cmd); server->cmdcount++; if (!raw) { /* check that we don't send any longer commands than 510 bytes (2 bytes for CR+LF) */ strncpy(str, cmd, 510); if (len > 510) len = 510; str[len] = '\0'; cmd = str; } if (send_now) { rawlog_output(server->rawlog, cmd); server_redirect_command(server, cmd, server->redirect_next); server->redirect_next = NULL; } if (!raw) { /* Add CR+LF to command */ str[len++] = 13; str[len++] = 10; str[len] = '\0'; } if (send_now) { irc_server_send_data(server, cmd, len); return; } /* add to queue */ if (immediate) { server->cmdqueue = g_slist_prepend(server->cmdqueue, server->redirect_next); server->cmdqueue = g_slist_prepend(server->cmdqueue, g_strdup(cmd)); } else { server->cmdqueue = g_slist_append(server->cmdqueue, g_strdup(cmd)); server->cmdqueue = g_slist_append(server->cmdqueue, server->redirect_next); } server->redirect_next = NULL;}