gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r6285 - GNUnet/src/applications/chat


From: gnunet
Subject: [GNUnet-SVN] r6285 - GNUnet/src/applications/chat
Date: Wed, 13 Feb 2008 14:33:40 -0700 (MST)

Author: nevans
Date: 2008-02-13 14:33:40 -0700 (Wed, 13 Feb 2008)
New Revision: 6285

Modified:
   GNUnet/src/applications/chat/chat.c
Log:


Modified: GNUnet/src/applications/chat/chat.c
===================================================================
--- GNUnet/src/applications/chat/chat.c 2008-02-13 21:33:01 UTC (rev 6284)
+++ GNUnet/src/applications/chat/chat.c 2008-02-13 21:33:40 UTC (rev 6285)
@@ -38,7 +38,7 @@
 #define MAX_CLIENTS 4
 
 static struct GNUNET_ClientHandle **clients;
-static int clientCount;
+static unsigned int clientCount;
 static struct GNUNET_HashCode **lastMsgs;
 static int ringIndex;
 static struct GNUNET_Mutex *chatMutex;
@@ -79,7 +79,7 @@
 }
 
 static int
-handleChatMSG (const GNUNET_PeerIdentity * sender,
+csHandleChatMSG (struct GNUNET_ClientHandle *client,
                const GNUNET_MessageHeader * message)
 {
   int i;
@@ -87,47 +87,49 @@
   CS_chat_MESSAGE *cmsg;
 
   GNUNET_HashCode hc;
-
+  
   char *nick;
   char *message_content;
   char *room_name;
-
+  
   int header_size;
   unsigned long nick_len;
   unsigned long msg_len;
-  unsigned long room_size;
+  unsigned long room_name_len;
 
   cmsg = (CS_chat_MESSAGE *) message;
 
-  if (ntohs (message->size) < sizeof (CS_chat_MESSAGE))
+   if (ntohs (cmsg->header.size) < sizeof (CS_chat_MESSAGE))
     {
       GNUNET_GE_LOG (ectx,
                      GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
                      _("Message received from client is invalid\n"));
-      return GNUNET_SYSERR;     /* invalid message */
-
+      return GNUNET_SYSERR;    /* invalid message */
+ 
     }
+  
 
-
-  header_size = ntohs (cmsg->header.size);
-  nick_len = ntohl (cmsg->nick_len);
-  msg_len = ntohl (cmsg->msg_len);
-  room_size = ntohl (cmsg->nick_len);
-
-  nick = GNUNET_malloc (nick_len + 1);
-  message_content = GNUNET_malloc (msg_len + 1);
-  room_name = GNUNET_malloc (room_size + 1);
-
-  memcpy (nick, &cmsg->nick[0], nick_len);
-  memcpy (message_content, &cmsg->nick[sizeof (nick)], msg_len);
-  memcpy (room_name, &cmsg->nick[sizeof (nick) + sizeof (message_content)],
-          msg_len);
-
-  nick[nick_len] = '\0';
+  header_size = ntohs(cmsg->header.size);
+  nick_len = ntohl(cmsg->nick_len);
+  msg_len = ntohl(cmsg->msg_len);
+  room_name_len = ntohl(cmsg->room_name_len);
+  
+  nick = GNUNET_malloc(nick_len + 1);
+  message_content = GNUNET_malloc(msg_len + 1);
+  room_name = GNUNET_malloc(room_name_len + 1);
+    
+  memcpy(nick,&cmsg->nick[0],nick_len);
+  memcpy(message_content,&cmsg->nick[nick_len],msg_len);
+  memcpy(room_name,&cmsg->nick[nick_len+msg_len],room_name_len);  
+       
+       nick[nick_len] = '\0';
   message_content[msg_len] = '\0';
-  room_name[room_size] = '\0';
-
-
+  room_name[room_name_len] = '\0';
+  
+  GNUNET_GE_LOG (ectx,
+                 GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
+                 "Received chat message from client.\n Message is %s\n from 
%s\n intended for room %s\n",message_content,nick,room_name);
+    
   GNUNET_hash (cmsg, header_size, &hc);
   /* check if we have seen this message already */
 
@@ -144,10 +146,10 @@
       broadcastToConnected (message, 5, 1);
       cmsg->header.type = htons (GNUNET_CS_PROTO_CHAT_MSG);
       for (j = 0; j < clientCount; j++)
-        coreAPI->cs_send_to_client (clients[j], &cmsg->header, GNUNET_YES);
+        coreAPI->cs_send_to_client (clients[j], &cmsg->header,GNUNET_YES);
       /*pmsg->nick[CHAT_NICK_LENGTH - 1] = '\0';
-         pmsg->message[CHAT_MSG_LENGTH - 1] = '\0'; */
-
+      pmsg->message[CHAT_MSG_LENGTH - 1] = '\0';*/
+      
       /*
          GNUNET_GE_LOG(ectx, GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | 
GNUNET_GE_USER,
          " CHAT: received new message from %s: %s\n",
@@ -165,49 +167,51 @@
 {
   int i;
   int j;
-  CS_chat_MESSAGE *cmsg;
+  const CS_chat_JOIN_MESSAGE *cmsg;
   P2P_chat_MESSAGE *pmsg;
   GNUNET_HashCode hc;
+  
   char *nick;
-  char *message_content;
+  GNUNET_RSA_PublicKey *client_key;
   char *room_name;
-
+  
   int header_size;
   unsigned long nick_len;
-  unsigned long msg_len;
-  unsigned long room_size;
-
+  unsigned long pubkey_len;
+  unsigned long room_name_len;
+  
   pmsg = (P2P_chat_MESSAGE *) message;
-  cmsg = (CS_chat_MESSAGE *) message;
+  cmsg = (CS_chat_JOIN_MESSAGE *) message;
 
-  if (ntohs (cmsg->header.size) < sizeof (CS_chat_MESSAGE))
+  if (ntohs (cmsg->header.size) < sizeof (CS_chat_JOIN_MESSAGE))
     {
       GNUNET_GE_LOG (ectx,
                      GNUNET_GE_WARNING | GNUNET_GE_BULK | GNUNET_GE_USER,
-                     _("Message received from client is invalid\n"));
-      return GNUNET_SYSERR;     /* invalid message */
-
+                     _("Room join from client is invalid! Size is: %d, should 
be at least %d\n"),ntohs(cmsg->header.size),sizeof(CS_chat_JOIN_MESSAGE));
+      return GNUNET_SYSERR;  /* invalid message */
+ 
     }
-
-  header_size = ntohs (cmsg->header.size);
-  nick_len = ntohl (cmsg->nick_len);
-  msg_len = ntohl (cmsg->msg_len);
-  room_size = ntohl (cmsg->nick_len);
-
-  nick = GNUNET_malloc (nick_len + 1);
-  message_content = GNUNET_malloc (msg_len + 1);
-  room_name = GNUNET_malloc (room_size + 1);
-
-  memcpy (nick, &cmsg->nick[0], nick_len);
-  memcpy (message_content, &cmsg->nick[sizeof (nick)], msg_len);
-  memcpy (room_name, &cmsg->nick[sizeof (nick) + sizeof (message_content)],
-          msg_len);
-
+   
+  header_size = ntohs(cmsg->header.size);
+  nick_len = ntohl(cmsg->nick_len);
+  pubkey_len = ntohl(cmsg->pubkey_len);
+  room_name_len = ntohl(cmsg->room_name_len);
+  
+  nick = GNUNET_malloc(nick_len + 1);
+  client_key = GNUNET_malloc(sizeof(GNUNET_RSA_PublicKey));
+  room_name = GNUNET_malloc(room_name_len + 1);
+    
+  memcpy(nick,&cmsg->nick[0],nick_len);
+  memcpy(client_key,&cmsg->nick[nick_len],pubkey_len);
+  memcpy(room_name,&cmsg->nick[nick_len + pubkey_len],room_name_len);
+  
+  GNUNET_GE_LOG (ectx,
+                 GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_DEVELOPER,
+                 "Received join chat room message from client.\n From %s\n for 
room %s\n",nick,room_name);
+    
   nick[nick_len] = '\0';
-  message_content[msg_len] = '\0';
-  room_name[room_size] = '\0';
-
-  GNUNET_hash (pmsg, header_size, &hc);
+  room_name[room_name_len] = '\0';
+  GNUNET_hash (cmsg, header_size, &hc);
   GNUNET_mutex_lock (chatMutex);
   markSeen (&hc);
 
@@ -217,7 +221,7 @@
     if (clients[i] == client)
       j = i;
     else
-      coreAPI->cs_send_to_client (clients[i], message, GNUNET_YES);
+      coreAPI->cs_send_to_client (clients[i], message,GNUNET_YES);
   if (j == -1)
     {
       if (clientCount == MAX_CLIENTS)
@@ -226,7 +230,9 @@
                        _("Maximum number of chat clients reached.\n"));
       else
         {
-          clients[clientCount++] = client;
+          GNUNET_array_grow (clients, clientCount, clientCount + 1);   
+          clients[clientCount] = client;
+          ++clientCount;
           GNUNET_GE_LOG (ectx,
                          GNUNET_GE_DEBUG | GNUNET_GE_REQUEST | GNUNET_GE_USER,
                          _("Now %d of %d chat clients at this node.\n"),
@@ -234,9 +240,10 @@
         }
     }
   /* forward to all other nodes in the network */
-  pmsg->header.type = htons (GNUNET_P2P_PROTO_CHAT_MSG);
-  broadcastToConnected (&pmsg->header, 5, 1);
+  /*pmsg->header.type = htons (GNUNET_P2P_PROTO_CHAT_MSG);
+  broadcastToConnected (&pmsg->header, 5, 1);*/
   GNUNET_mutex_unlock (chatMutex);
+  fprintf(stderr,"End of handleChatRequest\n");
   return GNUNET_OK;
 }
 
@@ -262,6 +269,9 @@
 initialize_module_chat (GNUNET_CoreAPIForPlugins * capi)
 {
   int ok = GNUNET_OK;
+  clientCount = 0;
+  
+  lastMsgs = GNUNET_malloc(sizeof(GNUNET_HashCode) * MAX_LAST_MESSAGES);
 
   GNUNET_GE_ASSERT (ectx,
                     sizeof (P2P_chat_MESSAGE) == sizeof (CS_chat_MESSAGE));
@@ -272,15 +282,18 @@
                  _("`%s' registering handlers %d and %d\n"),
                  "chat", GNUNET_P2P_PROTO_CHAT_MSG, GNUNET_CS_PROTO_CHAT_MSG);
 
-  if (GNUNET_SYSERR ==
+  /*if (GNUNET_SYSERR ==
       capi->registerHandler (GNUNET_P2P_PROTO_CHAT_MSG, &handleChatMSG))
-    ok = GNUNET_SYSERR;
+    ok = GNUNET_SYSERR;*/
   if (GNUNET_SYSERR ==
       capi->cs_exit_handler_register (&chatClientExitHandler))
     ok = GNUNET_SYSERR;
-  if (GNUNET_SYSERR == capi->registerClientHandler (GNUNET_CS_PROTO_CHAT_MSG,
+  if (GNUNET_SYSERR == capi->registerClientHandler 
(GNUNET_CS_PROTO_CHAT_JOIN_MSG,
                                                     &csHandleChatRequest))
     ok = GNUNET_SYSERR;
+  if (GNUNET_SYSERR == capi->registerClientHandler (GNUNET_CS_PROTO_CHAT_MSG,
+                                                    &csHandleChatMSG))
+    ok = GNUNET_SYSERR;
 
   GNUNET_GE_ASSERT (capi->ectx,
                     0 == GNUNET_GC_set_configuration_value_string (capi->cfg,
@@ -295,9 +308,11 @@
 void
 done_module_chat ()
 {
-  coreAPI->unregisterHandler (GNUNET_P2P_PROTO_CHAT_MSG, &handleChatMSG);
+  /*coreAPI->unregisterHandler (GNUNET_P2P_PROTO_CHAT_MSG, &handleChatMSG);*/
   coreAPI->cs_exit_handler_unregister (&chatClientExitHandler);
   coreAPI->unregisterClientHandler (GNUNET_CS_PROTO_CHAT_MSG,
+                                    &csHandleChatMSG);
+  coreAPI->unregisterClientHandler (GNUNET_CS_PROTO_CHAT_JOIN_MSG,
                                     &csHandleChatRequest);
   GNUNET_mutex_destroy (chatMutex);
   coreAPI = NULL;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]