summaryrefslogtreecommitdiff
path: root/ACE/apps/drwho/PMS_Usr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/drwho/PMS_Usr.cpp')
-rw-r--r--ACE/apps/drwho/PMS_Usr.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/ACE/apps/drwho/PMS_Usr.cpp b/ACE/apps/drwho/PMS_Usr.cpp
new file mode 100644
index 00000000000..7aa4a99829d
--- /dev/null
+++ b/ACE/apps/drwho/PMS_Usr.cpp
@@ -0,0 +1,83 @@
+// $Id$
+
+#include "Options.h"
+#include "SL_Server.h"
+#include "PMS_Usr.h"
+#include "ace/ACE.h"
+#include "ace/Log_Msg.h"
+#include "ace/OS_NS_string.h"
+#include "ace/OS_NS_unistd.h"
+#include "ace/OS_Memory.h"
+
+// This function "encodes" a list of friends by putting the userid's in
+// a contiguous block. This block can then be transmitted over to the
+// network to servers on other subnets. Several things are added to
+// make decoding easier on the other end:
+//
+// * A count of the number of friends is prepended (assumption: there
+// are no more than 9999999 friends... ;-))
+// * The login userids are separated by a single space. */
+
+int
+PMS_Usr::encode (char *packet, int &packet_length)
+{
+ if (Options::get_opt (Options::DEBUGGING) != 0)
+ ACE_DEBUG ((LM_DEBUG,
+ "in PMS_Usr::encode"));
+
+ char *buf_ptr = packet;
+
+ // We only send back info on friend that is actually logged in.
+
+ Protocol_Record *prp = this->get_next_friend ();
+
+ if (prp)
+ {
+ buf_ptr = this->handle_protocol_entries (ACE_OS::strecpy (buf_ptr,
+ prp->get_login ()),
+ prp->get_drwho_list ());
+ *buf_ptr++ = '\t';
+ }
+
+ *buf_ptr++ = '\n';
+ packet_length = buf_ptr - packet;
+
+ if (Options::get_opt (Options::DEBUGGING) != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "packet_length = %d\n",
+ packet_length));
+ ACE_OS::write (ACE_STDERR, packet, packet_length);
+ ACE_DEBUG ((LM_DEBUG,
+ "\n"));
+ }
+
+ return 1;
+}
+
+// This function takes a packet received from the client and calls the
+// appropriate Protocol_Manager routine to build the local table of
+// friends.
+
+int
+PMS_Usr::decode (char *packet, int &packet_length)
+{
+ if (Options::get_opt (Options::DEBUGGING) != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "in PMS_Usr::decode, packet_length = %d\n",
+ packet_length));
+ ACE_OS::write (ACE_STDERR, packet, packet_length);
+ ACE_DEBUG ((LM_DEBUG,
+ "\n"));
+ }
+
+ ACE_NEW_RETURN (this->ss,
+ SL_Server (packet),
+ -1);
+ return 1;
+}
+
+PMS_Usr::PMS_Usr (void)
+{
+}