diff options
Diffstat (limited to 'ACE/apps/drwho/PMC_All.cpp')
-rw-r--r-- | ACE/apps/drwho/PMC_All.cpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/ACE/apps/drwho/PMC_All.cpp b/ACE/apps/drwho/PMC_All.cpp new file mode 100644 index 00000000000..5853051866d --- /dev/null +++ b/ACE/apps/drwho/PMC_All.cpp @@ -0,0 +1,101 @@ +// $Id$ + +#include "global.h" +#include "Options.h" +#include "HT_Client.h" +#include "PMC_All.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 is pretty much a no-op that just sets up the +// appropriate lookup function to use. + +int +PMC_All::encode (char *packet, int &packet_length) +{ + if (Options::get_opt (Options::DEBUGGING) != 0) + ACE_DEBUG ((LM_DEBUG, + "in PMC_All::encode\n")); + + ACE_NEW_RETURN (this->ss, + HT_Client, + -1); + + SET_PACKET_TYPE (packet, Options::PROTO_ALL); + + char *buf_ptr = SKIP_PACKET_TYPE (packet); + + packet_length = buf_ptr - packet; + return 1; +} + +// This method is responsible for transforming the msg from the server +// back into a form usable by the client. Note that it reads the +// REAL_NAME from the packet (since the server placed it there)... + +int +PMC_All::decode (char *packet, int &packet_length) +{ + if (Options::get_opt (Options::DEBUGGING) != 0) + { + ACE_DEBUG ((LM_DEBUG, + "in PMC_All::decode, packet_length = %d\n", + packet_length)); + + ACE_OS::write (ACE_STDERR, packet, packet_length); + ACE_DEBUG ((LM_DEBUG, + "\n")); + } + char *cp = packet; + int remote_users = 0; + + sscanf (cp, + "Users %d", + &remote_users); + + this->increment_total_users (remote_users); + + for (cp = (char *) ACE::strend (cp); + *cp != '\n'; + cp++) + { + // Skip over the LOGIN_NAME. + + char *login_name = cp; + char *real_name = cp = (char *) ACE::strend (cp); + + for (cp = (char *) ACE::strend (cp); + *(cp = this->handle_protocol_entries (cp, login_name, real_name)) != '\t'; + ) + continue; + } + + return 1; +} + +Protocol_Record * +PMC_All::insert_protocol_info (Protocol_Record &protocol_record) +{ + Protocol_Record *prp = PM_Client::insert_protocol_info (protocol_record); + int length = ACE_OS::strlen (prp->set_real (ACE::strnew (protocol_record.get_real ()))); + + if (length > this->max_key_length) + this->max_key_length = length; + + return prp; +} + +void +PMC_All::process (void) +{ + ACE_DEBUG ((LM_DEBUG, + "remote users logged on\n")); + PM_Client::process (); +} + +PMC_All::PMC_All (void) +{ +} |