sender. Sorry, there was no way around it.
void CtdlRegisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
void CtdlUnregisterUserHook(void (*fcn_ptr)(struct ctdluser *), int EventType);
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);
void CtdlRegisterMessageHook(int (*handler)(struct CtdlMessage *),
int EventType);
CC->FirstExpressMessage = CC->FirstExpressMessage->next;
end_critical_section(S_SESSION_TABLE);
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 */
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) {
);
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.
*/
* 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;
{
int message_sent = 0; /* number of successful sends */
struct CitContext *ccptr;
memset(newmsg, 0,
sizeof (struct ExpressMessage));
time(&(newmsg->timestamp));
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->flags |= EM_BROADCAST;
newmsg->text = strdup(x_msg);
add_xmsg_to_context(ccptr, newmsg);
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_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);
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 x_user[USERNAME_SIZE];
char x_msg[1024];
char *lun;
char *x_big_msgbuf = NULL;
if ((!(CC->logged_in)) && (!(CC->internal_pgm))) {
char *x_big_msgbuf = NULL;
if ((!(CC->logged_in)) && (!(CC->internal_pgm))) {
else
lun = CC->user.fullname;
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);
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, "-")) {
}
/* 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",
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);
}
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 {
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))
if (message_sent > 0) {
if (!IsEmptyStr(x_msg))
void cmd_sexp (char *argbuf);
void delete_instant_messages(void);
void cmd_gexp(char *);
void cmd_sexp (char *argbuf);
void delete_instant_messages(void);
void cmd_gexp(char *);
-int send_instant_message(char *, char *, char *);
+int send_instant_message(char *, char *, char *, char *);
struct savelist {
struct savelist *next;
struct savelist {
struct savelist *next;
-void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *), int order)
+void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *, char *), int order)
{
struct XmsgFunctionHook *newfcn;
{
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;
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;
{
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;
{
struct XmsgFunctionHook *fcn;
int total_sent = 0;
if (fcn->order == p) {
total_sent +=
(*fcn->h_function_pointer)
if (fcn->order == p) {
total_sent +=
(*fcn->h_function_pointer)
+ (sender, sender_email, recp, msg);
}
}
/* Break out of the loop if a higher-priority function
}
}
/* Break out of the loop if a higher-priority function
*/
struct XmsgFunctionHook {
struct XmsgFunctionHook *next;
*/
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;
int order;
};
extern struct XmsgFunctionHook *XmsgHookTable;
void CtdlDestroyUserHooks(void);
void PerformUserHooks(struct ctdluser *usbuf, int EventType);
void CtdlDestroyUserHooks(void);
void PerformUserHooks(struct ctdluser *usbuf, int EventType);
-int PerformXmsgHooks(char *, char *, char *);
+int PerformXmsgHooks(char *, char *, char *, char *);
void CtdlDestroyXmsgHooks(void);
void CtdlDestroyXmsgHooks(void);
extern int ScheduledShutdown;
extern struct CitControl CitControl;
extern int ScheduledShutdown;
extern struct CitControl CitControl;
struct ExpressMessage {
struct ExpressMessage *next;
time_t timestamp; /* When this message was sent */
unsigned flags; /* Special instructions */
struct ExpressMessage {
struct ExpressMessage *next;
time_t timestamp; /* When this message was sent */
unsigned flags; /* Special instructions */
- char sender[64]; /* Name of sending user */
+ char sender[256]; /* Name of sending user */
+ char sender_email[256]; /* Email or JID of sending user */
char *text; /* Message text (if applicable) */
};
char *text; /* Message text (if applicable) */
};