void disconnectClient(const char* bye_msg) { if(!bye_msg) bye_msg = "Redirc - bye!"; irc_send_message(snd_qid, client->serv_sock, "QUIT :%s", bye_msg); shutdown(client->serv_sock, 2); messageText("Desconexión del servidor."); setUserConnectionState(FALSE); }
void _send_flag(char flag, gboolean state) { char mod; if (state) mod = '+'; else mod = '-'; irc_send_message(snd_qid, client->serv_sock, "MODE %s %c%c", client->chan, mod, flag); }
/* * Inject OTR message. * Deriving the server is currently a hack, * need to derive the server from accountname. */ static void ops_inject_msg (void *opdata, const char *accountname, const char *protocol, const char *recipient, const char *message) { IRC_CTX *a_serv; char *msgcopy = g_strdup (message); /* OTR sometimes gives us multiple lines * (e.g. the default query (a.k.a. "better") message) */ g_strdelimit (msgcopy, "\n", ' '); a_serv = opdata; if (!a_serv) { otr_notice (a_serv, recipient, TXT_OPS_INJECT, accountname, recipient, message); } else { irc_send_message (a_serv, recipient, msgcopy); } g_free (msgcopy); }
void newText (const char *msg) { char irc_msg[MAX_IRC_MSG]; if (!msg) { slog(LOG_ERR, "Se ha colado un mensaje NULL desde la interfaz"); return; } slog(LOG_DEBUG, "Recibido el mensaje \"%s\" desde interfaz para ser procesado", msg); if(!client->connected && !_is_server_message(msg)) { errorText("No estás conectado a ningún servidor."); return; } if (*msg != '/') { if (!client->in_channel) { errorText("No perteneces a ningún canal al que enviar el mensaje"); } else { /* Mandamos al servidor el mensaje para los usuarios del canal. */ irc_send_message(snd_qid, client->serv_sock, "PRIVMSG %s :%s", client->chan, msg); privateText(client->nick, msg); } } else { snprintf(irc_msg, MAX_IRC_MSG, "%s\r\n", msg + 1); irc_user_msgprocess(irc_msg, client); } }
void connectToServer(const char *server, const char* port) { char *nick = getApodo(); char *user = getNombre(); char *name = getNombreReal(); int sock; const char *err; char addr_str[100]; int retval; struct serv_info serv; if (!server || strlen(server) == 0) { errorText("Error: servidor inválido."); return; } if (!port || strlen(port) == 0) { errorText("Error: puerto inválido."); return; } if (!nick || !user || !name || strlen(nick) == 0 || strlen(user) == 0 || strlen(name) == 0) { errorWindow("Rellene los datos de nombre/usuario/apodo"); return; } if(client->connected) disconnectClient(NULL); messageText("Conectando con %s...", server); retval = client_connect_to(server, port, addr_str, 100); if (retval == ERR_SYS) err = strerror(errno); else if (retval == ERR_AIR) err = "no se ha podido resolver la dirección"; else if (retval == ERR_NOTFOUND) err = "no se ha podido conectar."; else err = "error desconocido."; if (retval <= 0) { errorText("Error resolviendo %s: %s", server, err); return; } sock = retval; if (send_message(rcv_sockcomm, &sock, sizeof(int)) == ERR_SOCK) { errorText("Error al configurar la nueva conexión: %s", strerror(errno)); close(sock); return; } irc_send_message(snd_qid, sock, "NICK %s", getApodo()); irc_send_message(snd_qid, sock, "USER %s %s %s :%s", getNombre(), "0", "*", getNombreReal()); client->connected = 1; strncpy(client->nick, nick, MAX_NICK_LEN); client->serv_sock = sock; setUserConnectionState(TRUE); strncpy(serv.servname, server, SERV_NAMELEN); strncpy(serv.port, port, MAX_PORT_LEN); serv_save_connection(&serv); client->connected = 1; messageText("Conectado a %s", addr_str); saveUserSettings(nick, user, name); }