/* * Client is sending a message. */ void xmpp_send_message(char *message_to, char *message_body) { char *recp = NULL; struct CitContext *cptr; if (message_body == NULL) return; if (message_to == NULL) return; if (IsEmptyStr(message_to)) return; if (!CC->logged_in) return; for (cptr = ContextList; cptr != NULL; cptr = cptr->next) { if ( (cptr->logged_in) && (cptr->can_receive_im) && (!strcasecmp(cptr->cs_inet_email, message_to)) ) { recp = cptr->user.fullname; } } if (recp) { PerformXmsgHooks(CC->user.fullname, CC->cs_inet_email, recp, message_body); } free(XMPP->message_body); XMPP->message_body = NULL; XMPP->message_to[0] = 0; time(&CC->lastidle); }
/* * send instant messages */ void cmd_sexp(char *argbuf) { int message_sent = 0; char x_user[USERNAME_SIZE]; char x_msg[1024]; char *lun; char *lem; char *x_big_msgbuf = NULL; if ((!(CC->logged_in)) && (!(CC->internal_pgm))) { cprintf("%d Not logged in.\n", ERROR + NOT_LOGGED_IN); return; } if (CC->fake_username[0]) lun = CC->fake_username; else lun = CC->user.fullname; lem = CC->cs_inet_email; extract_token(x_user, argbuf, 0, '|', sizeof x_user); extract_token(x_msg, argbuf, 1, '|', sizeof x_msg); if (!x_user[0]) { cprintf("%d You were not previously paged.\n", ERROR + NO_SUCH_USER); return; } if ((!strcasecmp(x_user, "broadcast")) && (CC->user.axlevel < AxAideU)) { cprintf("%d Higher access required to send a broadcast.\n", ERROR + HIGHER_ACCESS_REQUIRED); return; } /* This loop handles text-transfer pages */ if (!strcmp(x_msg, "-")) { message_sent = PerformXmsgHooks(lun, lem, x_user, ""); if (message_sent == 0) { if (CtdlGetUser(NULL, x_user)) cprintf("%d '%s' does not exist.\n", ERROR + NO_SUCH_USER, x_user); else cprintf("%d '%s' is not logged in " "or is not accepting pages.\n", ERROR + RESOURCE_NOT_OPEN, x_user); return; } unbuffer_output(); cprintf("%d Transmit message (will deliver to %d users)\n", SEND_LISTING, message_sent); x_big_msgbuf = malloc(SIZ); memset(x_big_msgbuf, 0, SIZ); while (client_getln(x_msg, sizeof x_msg) >= 0 && strcmp(x_msg, "000")) { x_big_msgbuf = realloc(x_big_msgbuf, strlen(x_big_msgbuf) + strlen(x_msg) + 4); if (!IsEmptyStr(x_big_msgbuf)) if (x_big_msgbuf[strlen(x_big_msgbuf)] != '\n') strcat(x_big_msgbuf, "\n"); strcat(x_big_msgbuf, x_msg); } PerformXmsgHooks(lun, lem, x_user, x_big_msgbuf); free(x_big_msgbuf); /* This loop handles inline pages */ } else { message_sent = PerformXmsgHooks(lun, lem, x_user, x_msg); if (message_sent > 0) { if (!IsEmptyStr(x_msg)) cprintf("%d Message sent", CIT_OK); else cprintf("%d Ok to send message", CIT_OK); if (message_sent > 1) cprintf(" to %d users", message_sent); cprintf(".\n"); } else { if (CtdlGetUser(NULL, x_user)) cprintf("%d '%s' does not exist.\n", ERROR + NO_SUCH_USER, x_user); else cprintf("%d '%s' is not logged in " "or is not accepting pages.\n", ERROR + RESOURCE_NOT_OPEN, x_user); } } }