From 11bd99ff836d5046996aee3eed6f8ced6e3ef4dc Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 3 Dec 2007 04:56:31 +0000 Subject: [PATCH] Instant messages now carry the email address or JID of the sender. Sorry, there was no way around it. --- citadel/include/ctdl_module.h | 4 ++-- citadel/modules/chat/serv_chat.c | 24 +++++++++++++++--------- citadel/modules/chat/serv_chat.h | 2 +- citadel/serv_extensions.c | 11 +++++------ citadel/serv_extensions.h | 4 ++-- citadel/server.h | 4 ++-- 6 files changed, 27 insertions(+), 22 deletions(-) diff --git a/citadel/include/ctdl_module.h b/citadel/include/ctdl_module.h index 5fbd9b147..eaabb22f4 100644 --- a/citadel/include/ctdl_module.h +++ b/citadel/include/ctdl_module.h @@ -38,8 +38,8 @@ void CtdlUnregisterSessionHook(void (*fcn_ptr)(void), 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); diff --git a/citadel/modules/chat/serv_chat.c b/citadel/modules/chat/serv_chat.c index 836e0affa..9a517f0ce 100644 --- a/citadel/modules/chat/serv_chat.c +++ b/citadel/modules/chat/serv_chat.c @@ -486,13 +486,14 @@ void cmd_gexp(char *argbuf) { 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) { @@ -557,7 +558,7 @@ void add_xmsg_to_context(struct CitContext *ccptr, * 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; @@ -598,10 +599,11 @@ int send_instant_message(char *lun, char *x_user, char *x_msg) 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); @@ -631,6 +633,7 @@ int send_instant_message(char *lun, char *x_user, char *x_msg) 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); @@ -677,6 +680,7 @@ void cmd_sexp(char *argbuf) 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))) { @@ -688,6 +692,8 @@ void cmd_sexp(char *argbuf) 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); @@ -702,7 +708,7 @@ void cmd_sexp(char *argbuf) } /* 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", @@ -727,12 +733,12 @@ void cmd_sexp(char *argbuf) 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)) diff --git a/citadel/modules/chat/serv_chat.h b/citadel/modules/chat/serv_chat.h index f16f83a64..75a14daae 100644 --- a/citadel/modules/chat/serv_chat.h +++ b/citadel/modules/chat/serv_chat.h @@ -8,7 +8,7 @@ void cmd_pexp (char *argbuf); /* arg unused */ 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; diff --git a/citadel/serv_extensions.c b/citadel/serv_extensions.c index 18e425830..be0e74815 100644 --- a/citadel/serv_extensions.c +++ b/citadel/serv_extensions.c @@ -697,13 +697,12 @@ int PerformFixedOutputHooks(char *content_type, char *content, int content_lengt -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; @@ -712,7 +711,7 @@ void CtdlRegisterXmsgHook(int (*fcn_ptr) (char *, char *, char *), int order) } -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; @@ -1019,7 +1018,7 @@ void PerformDeleteHooks(char *room, long msgnum) -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; @@ -1030,7 +1029,7 @@ int PerformXmsgHooks(char *sender, char *recp, char *msg) 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 diff --git a/citadel/serv_extensions.h b/citadel/serv_extensions.h index 39cb0c92f..9a658b036 100644 --- a/citadel/serv_extensions.h +++ b/citadel/serv_extensions.h @@ -113,7 +113,7 @@ extern struct DeleteFunctionHook *DeleteHookTable; */ 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; @@ -169,7 +169,7 @@ void PerformSessionHooks(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); diff --git a/citadel/server.h b/citadel/server.h index 9fd90e439..f88d37fd6 100644 --- a/citadel/server.h +++ b/citadel/server.h @@ -188,12 +188,12 @@ extern struct CitContext *ContextList; extern int ScheduledShutdown; extern struct CitControl CitControl; - 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) */ }; -- 2.30.2