Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
/*
 * 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);
}
Ejemplo n.º 4
0
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);
    }
}
Ejemplo n.º 5
0
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);
}