Instant messages now carry the email address or JID of the
authorArt Cancro <ajc@citadel.org>
Mon, 3 Dec 2007 04:56:31 +0000 (04:56 +0000)
committerArt Cancro <ajc@citadel.org>
Mon, 3 Dec 2007 04:56:31 +0000 (04:56 +0000)
sender.  Sorry, there was no way around it.

citadel/include/ctdl_module.h
citadel/modules/chat/serv_chat.c
citadel/modules/chat/serv_chat.h
citadel/serv_extensions.c
citadel/serv_extensions.h
citadel/server.h

index 5fbd9b1477fe55c6dd826135ffae1594a8408dba..eaabb22f418875d1c09d9838d5b0260c9b866cee 100644 (file)
@@ -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);
index 836e0affaae2f6dca2b5dec3463c5dc1a132b5f2..9a517f0ceb45c9f2858d705dd578cdc5aadae6f0 100644 (file)
@@ -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))
index f16f83a64ac05ac8c6b53b19537adb2d3c4c6f2e..75a14daae94b949289c9c447ddb434a03a7e5037 100644 (file)
@@ -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;
index 18e42583002fd618c03dfb93c030575860226b85..be0e74815858dd98404d2a9aa479bf98c57b91db 100644 (file)
@@ -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
index 39cb0c92f0bc97cd434a668216d5936c6b931a30..9a658b0366acc062061099be6738116c1a58685a 100644 (file)
@@ -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);
 
 
index 9fd90e43927a2ca9ab325768acf0d6944bff7a44..f88d37fd68c64da89fdd730ab5685ebc7ceef16f 100644 (file)
@@ -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) */
 };