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); } }
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 } }
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); } }