Пример #1
0
static void irc_notice_command(irc_session_t *session, const char *command, irc_parser_result_t *result) {
    char **params = result->params;
    size_t msglen = strlen (params[1]);
    unsigned int i = 0;

    if ( result->num_params > 1 && is_ctcp_request(params[1]) && session->callbacks.event_ctcp_rep)
    {
        char *ctcp_buf = calloc(LIBIRC_BUFFER_SIZE, sizeof(char));

        msglen -= 2;
        if (msglen > (sizeof(ctcp_buf) - 1))
            msglen = sizeof(ctcp_buf) - 1;

        memcpy (ctcp_buf, params[1] + 1, msglen);
        ctcp_buf[msglen] = '\0';

        for (i = 0; i < result->num_params; i++) {
            FREE(result->params[i]);
        }
        
        params[0] = ctcp_buf;
        result->num_params  = 1;
        
        (*session->callbacks.event_ctcp_rep) (session, "CTCP", result);
    }
    else if (is_private_message(params[0], session->nick))
    {
        if ( session->callbacks.event_notice )
            (*session->callbacks.event_notice) (session, command, result);
    } else {
        if ( session->callbacks.event_channel_notice )
            (*session->callbacks.event_channel_notice) (session, command, result);
    }
}
Пример #2
0
void run_chat(int sockfd, struct addrinfo *p) {
	/**
	 * Executa o chat, solicitando ao usuario que forneca mensagens de texto.
	 * As mensagens sao enviadas ao servidor como mensagens MSG
	 */
	Message msg;
	char usermsg[200];
	int privid;

	while (1) {
		// constroe mensagem MSG
		msg.id = MY_ID;
		msg.type = MSG;
		msg.to = 0;
		strcpy(msg.name, MY_NAME);
		
		printf("\n * #%d: %s: ", MY_ID, MY_NAME);
		
		fgets(usermsg, 200, stdin); // usuario precisa digitar algum texto
		
		strcpy(msg.text, usermsg);
		
		privid = is_private_message(msg); // verifica se e' uma mensagem privada a ser enviada a um unico usuario especifico
		if (privid) {
			// se for privada especifica o id do destino a ser enviado na propriedade to
			msg.to = privid;
			strcpy(msg.text, get_private_message(msg)); // adquire o texto da mensagem privada e o copia
			printf("  ...sending in private\n");
		}
		ISOK = 0;
		psend(msg, sockfd, p); // envia a mensagem ao destino especico ou a todos se o .to = 0
	}
}
Пример #3
0
static void irc_privmsg_command(irc_session_t *session, const char *command, irc_parser_result_t *result) {
    if (result->num_params <= 1) return;

    char **params = result->params;

    if (is_ctcp_request(params[1])) {
        handle_ctcp_request(session, result);
    }
    else if (is_private_message(params[0], session->nick)) {
        if (session->callbacks.event_privmsg)
            (*session->callbacks.event_privmsg) (session, "PRIVMSG", result);
    }
    else {
        if (session->callbacks.event_channel)
            (*session->callbacks.event_channel) (session, "CHANNEL", result);
    }
}