void CtdlRegisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
void CtdlUnregisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
-void CtdlRegisterXmsgHook(int (*fcn_ptr)(char *, char *, char *), int order);
-void CtdlUnregisterXmsgHook(int (*fcn_ptr)(char *, char *, char *), int order);
+void CtdlRegisterXmsgHook(int (*fcn_ptr)(char *, char *, char *, char *), int order);
+void CtdlUnregisterXmsgHook(int (*fcn_ptr)(char *, char *, char *, char *), int order);
void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *),
int EventType);
CC->FirstExpressMessage = CC->FirstExpressMessage->next;
end_critical_section(S_SESSION_TABLE);
- cprintf("%d %d|%ld|%d|%s|%s\n",
+ cprintf("%d %d|%ld|%d|%s|%s|%s\n",
LISTING_FOLLOWS,
((ptr->next != NULL) ? 1 : 0), /* more msgs? */
(long)ptr->timestamp, /* time sent */
ptr->flags, /* flags */
ptr->sender, /* sender of msg */
- config.c_nodename /* static for now */
+ config.c_nodename, /* static for now (and possibly deprecated) */
+ ptr->sender_email /* email or jid of sender */
);
if (ptr->text != NULL) {
* Returns the number of users to which the message was sent.
* Sending a zero-length message tests for recipients without sending messages.
*/
-int send_instant_message(char *lun, char *x_user, char *x_msg)
+int send_instant_message(char *lun, char *lem, char *x_user, char *x_msg)
{
int message_sent = 0; /* number of successful sends */
struct CitContext *ccptr;
memset(newmsg, 0,
sizeof (struct ExpressMessage));
time(&(newmsg->timestamp));
- safestrncpy(newmsg->sender, lun,
- sizeof newmsg->sender);
- if (!strcasecmp(x_user, "broadcast"))
+ safestrncpy(newmsg->sender, lun, sizeof newmsg->sender);
+ safestrncpy(newmsg->sender_email, lem, sizeof newmsg->sender_email);
+ if (!strcasecmp(x_user, "broadcast")) {
newmsg->flags |= EM_BROADCAST;
+ }
newmsg->text = strdup(x_msg);
add_xmsg_to_context(ccptr, newmsg);
logmsg->cm_anon_type = MES_NORMAL;
logmsg->cm_format_type = 0;
logmsg->cm_fields['A'] = strdup(lun);
+ logmsg->cm_fields['F'] = strdup(lem);
logmsg->cm_fields['N'] = strdup(NODENAME);
logmsg->cm_fields['O'] = strdup(PAGELOGROOM);
logmsg->cm_fields['R'] = strdup(x_user);
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))) {
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);
}
/* This loop handles text-transfer pages */
if (!strcmp(x_msg, "-")) {
- message_sent = PerformXmsgHooks(lun, x_user, "");
+ message_sent = PerformXmsgHooks(lun, lem, x_user, "");
if (message_sent == 0) {
if (getuser(NULL, x_user))
cprintf("%d '%s' does not exist.\n",
strcat(x_big_msgbuf, "\n");
strcat(x_big_msgbuf, x_msg);
}
- PerformXmsgHooks(lun, x_user, x_big_msgbuf);
+ PerformXmsgHooks(lun, lem, x_user, x_big_msgbuf);
free(x_big_msgbuf);
/* This loop handles inline pages */
} else {
- message_sent = PerformXmsgHooks(lun, x_user, x_msg);
+ message_sent = PerformXmsgHooks(lun, lem, x_user, x_msg);
if (message_sent > 0) {
if (!IsEmptyStr(x_msg))
-void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *), int order)
+void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int order)
{
struct XmsgFunctionHook *newfcn;
- newfcn = (struct XmsgFunctionHook *)
- malloc(sizeof(struct XmsgFunctionHook));
+ newfcn = (struct XmsgFunctionHook *) malloc(sizeof(struct XmsgFunctionHook));
newfcn->next = XmsgHookTable;
newfcn->order = order;
newfcn->h_function_pointer = fcn_ptr;
}
-void CtdlUnregisterXmsgHook(int (*fcn_ptr) (char *, char *, char *), int order)
+void CtdlUnregisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int order)
{
struct XmsgFunctionHook *cur, *p;
-int PerformXmsgHooks(char *sender, char *recp, char *msg)
+int PerformXmsgHooks(char *sender, char *sender_email, char *recp, char *msg)
{
struct XmsgFunctionHook *fcn;
int total_sent = 0;
if (fcn->order == p) {
total_sent +=
(*fcn->h_function_pointer)
- (sender, recp, msg);
+ (sender, sender_email, recp, msg);
}
}
/* Break out of the loop if a higher-priority function
*/
struct XmsgFunctionHook {
struct XmsgFunctionHook *next;
- int (*h_function_pointer) (char *, char *, char *);
+ int (*h_function_pointer) (char *, char *, char *, char *);
int order;
};
extern struct XmsgFunctionHook *XmsgHookTable;
void CtdlDestroyUserHooks(void);
void PerformUserHooks(struct ctdluser *usbuf, int EventType);
-int PerformXmsgHooks(char *, char *, char *);
+int PerformXmsgHooks(char *, char *, char *, char *);
void CtdlDestroyXmsgHooks(void);