Explorar el Código

-added sent flag to messenger service

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
TheJackiMonster hace 2 años
padre
commit
aaeebebf67

+ 7 - 1
src/include/gnunet_messenger_service.h

@@ -499,6 +499,7 @@ struct GNUNET_MESSENGER_Message
 
 /**
  * Enum for the different supported flags used by message handling
+ * Compatible flags can be OR'ed together.
  */
 enum GNUNET_MESSENGER_MessageFlags
 {
@@ -507,10 +508,15 @@ enum GNUNET_MESSENGER_MessageFlags
    */
   GNUNET_MESSENGER_FLAG_NONE = 0,
 
+  /**
+   * The sent flag. The flag indicates that the message was sent by the client.
+   */
+  GNUNET_MESSENGER_FLAG_SENT = 1,
+
   /**
    * The private flag. The flag indicates that the message was privately encrypted.
    */
-  GNUNET_MESSENGER_FLAG_PRIVATE = 1,
+  GNUNET_MESSENGER_FLAG_PRIVATE = 2,
 };
 
 /**

+ 6 - 1
src/messenger/gnunet-messenger.c

@@ -80,7 +80,12 @@ on_message (void *cls, struct GNUNET_MESSENGER_Room *room, const struct GNUNET_M
     }
   case GNUNET_MESSENGER_KIND_TEXT:
     {
-      printf ("* '%s' says: \"%s\"\n", sender_name, message->body.text.text);
+      if (flags & GNUNET_MESSENGER_FLAG_SENT)
+        printf (">");
+      else
+        printf ("<");
+
+      printf (" '%s' says: \"%s\"\n", sender_name, message->body.text.text);
       break;
     }
   default:

+ 29 - 3
src/messenger/gnunet-service-messenger_handle.c

@@ -474,6 +474,28 @@ get_next_member_session_contect(const struct GNUNET_MESSENGER_MemberSession *ses
     return get_member_session_context(session);
 }
 
+static const struct GNUNET_MESSENGER_MemberSession*
+get_handle_member_session (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key)
+{
+  GNUNET_assert((handle) && (key) && (handle->service));
+
+  const struct GNUNET_ShortHashCode *id = get_handle_member_id(handle, key);
+  struct GNUNET_MESSENGER_SrvRoom *room = get_service_room(handle->service, key);
+
+  if ((!id) || (!room))
+    return NULL;
+
+  struct GNUNET_MESSENGER_MemberStore *store = get_room_member_store(room);
+  struct GNUNET_MESSENGER_Member *member = get_store_member(store, id);
+
+  const struct GNUNET_MESSENGER_Ego *ego = get_handle_ego(handle);
+
+  if (!ego)
+    return NULL;
+
+  return get_member_session(member, &(ego->pub));
+}
+
 void
 notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct GNUNET_HashCode *key,
                        const struct GNUNET_MESSENGER_MemberSession *session,
@@ -523,9 +545,13 @@ notify_handle_message (struct GNUNET_MESSENGER_SrvHandle *handle, const struct G
   GNUNET_memcpy(&(msg->context), context, sizeof(msg->context));
   GNUNET_memcpy(&(msg->hash), hash, sizeof(msg->hash));
 
-  msg->flags = (uint32_t) (
-      private_message? GNUNET_MESSENGER_FLAG_PRIVATE : GNUNET_MESSENGER_FLAG_NONE
-  );
+  msg->flags = (uint32_t) GNUNET_MESSENGER_FLAG_NONE;
+
+  if (get_handle_member_session(handle, key) == session)
+    msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_SENT;
+
+  if (private_message)
+    msg->flags |= (uint32_t) GNUNET_MESSENGER_FLAG_PRIVATE;
 
   char *buffer = ((char*) msg) + sizeof(*msg);
   encode_message (message, length, buffer, GNUNET_YES);