⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 locator_request_reply.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// Locator_Request_Reply.cpp,v 1.4 1998/07/31 23:36:45 gonzo Exp#if !defined (ACE_LOCATOR_REQUEST_REPLY_C)#define ACE_LOCATOR_REQUEST_REPLY_C#include "Locator_Request_Reply.h"#if !defined (__ACE_INLINE__)#include "Locator_Request_Reply.i"#endif#include "ace/Auto_Ptr.h"#include "URL_Properties.h"#include "URL_Array_Helper.h"#include "URL_Locator.h"ACE_RCSID(Caching, Locator_Request_Reply, "Locator_Request_Reply.cpp,v 1.4 1998/07/31 23:36:45 gonzo Exp")intACE_URL_Locator_Request::url_query (const int how,				    const ACE_URL_Property_Seq &pseq,				    const int how_many){  ACE_TRACE ("ACE_URL_Locator_Request::url_query");  if (how >= ACE_URL_Locator::INVALID_SELECTION)    return -1;  ACE_NEW_RETURN (this->seq1_, ACE_URL_Property_Seq (pseq), -1);  this->how_ = how;  this->how_many_ = how_many;  this->code_ = ACE_URL_Locator::QUERY;  return 0;    }intACE_URL_Locator_Request::export_offer (const ACE_URL_Offer &offer){  ACE_TRACE ("ACE_URL_Locator_Request::export_offer");    ACE_NEW_RETURN (this->offer_, ACE_URL_Offer (offer), -1);  this->code_ = ACE_URL_Locator::EXPORT;  return 0;}  intACE_URL_Locator_Request::withdraw_offer (const ACE_WString &offer_id){  ACE_TRACE ("ACE_URL_Locator_Request::withdraw_offer");  this->id_ = offer_id;  this->code_ = ACE_URL_Locator::WITHDRAW;  return 0;}intACE_URL_Locator_Request::describe_offer (const ACE_WString &offer_id){  ACE_TRACE ("ACE_URL_Locator_Request::describe_offer");    this->id_ = offer_id;  this->code_ = ACE_URL_Locator::DESCRIBE;  return 0;}intACE_URL_Locator_Request::modify_offer (const ACE_WString &offer_id,				       const ACE_WString *url,				       const ACE_URL_Property_Seq &del,				       const ACE_URL_Property_Seq &modify){  ACE_TRACE ("ACE_URL_Locator_Request::modify_offer");  ACE_NEW_RETURN (this->seq1_, ACE_URL_Property_Seq (del), -1);  ACE_NEW_RETURN (this->seq2_, ACE_URL_Property_Seq (modify), -1);  if (url != 0)    this->url_ = *url;  this->id_ = offer_id;  this->code_ = ACE_URL_Locator::MODIFY;  return 0;}#define ENCODE_UINT32(ADDR,LEN,V) \   * (ACE_UINT32 *) (ADDR+LEN) = htonl (V); \   LEN += sizeof (ACE_UINT32);#define DECODE_UINT32(ADDR,LEN,V) \   V = ntohl (* (ACE_UINT32 *) (ADDR+LEN)); \   LEN += sizeof (ACE_UINT32);size_tACE_URL_Locator_Request::encode (void){  ACE_TRACE ("ACE_URL_Locator_Request::encode");  size_t buf_size = this->size ();  size_t total_length = 0;  ACE_NEW_RETURN (this->buffer_, char [buf_size], 0);  ENCODE_UINT32 (this->buffer_, total_length, buf_size);  // Encode buffer size.  ENCODE_UINT32 (this->buffer_, total_length, this->code_);  // Encode Op code.  ENCODE_UINT32 (this->buffer_, total_length, this->how_);  // Encode selection criteria.    ENCODE_UINT32 (this->buffer_, total_length, this->how_many_);  // Encode number of offers interested.  ENCODE_UINT32 (this->buffer_, total_length, this->valid_ptr_);  // Encode valide pointer flag.  if (this->seq1_ != 0)    {      ENCODE_UINT32 (this->buffer_, total_length, this->seq1_->size ());      total_length += ace_array_encode (this->buffer_ + total_length, *this->seq1_);    }  if (this->seq2_ != 0)    {      ENCODE_UINT32 (this->buffer_, total_length, this->seq2_->size ());      total_length += ace_array_encode (this->buffer_ + total_length, *this->seq2_);    }  if (this->offer_ != 0)    total_length += this->offer_->encode (this->buffer_ + total_length);  total_length += ACE_WString_Helper::encode (this->buffer_ + total_length,					      this->id_);  total_length += ACE_WString_Helper::encode (this->buffer_ + total_length,					      this->url_);  ACE_ASSERT (total_length == buf_size);  return total_length;}size_tACE_URL_Locator_Request::decode (void *buffer){  ACE_TRACE ("ACE_URL_Locator_Request::decode");  if (buffer == 0)    return 0;  // Check if we have a valid buffer available.  char *cbuffer = (char *) buffer;  size_t buf_size;  size_t total_length = 0;    DECODE_UINT32 (cbuffer, total_length, buf_size);  // Decode length of buffer size first.  DECODE_UINT32 (cbuffer, total_length, this->code_);  // Get the operation code.    DECODE_UINT32 (cbuffer, total_length, this->how_);  // Decode selection criteria.    DECODE_UINT32 (cbuffer, total_length, this->how_many_);  // Decode number of offers interested.  DECODE_UINT32 (cbuffer, total_length, this->valid_ptr_);  // Decode valide pointer flag.  if ((this->valid_ptr_ & VALID_SEQ1) != 0)    {      size_t n;      DECODE_UINT32 (cbuffer, total_length, n);      ACE_NEW_RETURN (this->seq1_, ACE_URL_Property_Seq (n), 0);      total_length += ace_array_decode (cbuffer + total_length, *this->seq1_);    }  if ((this->valid_ptr_ & VALID_SEQ2) != 0)    {      size_t n;      DECODE_UINT32 (cbuffer, total_length, n);      ACE_NEW_RETURN (this->seq2_, ACE_URL_Property_Seq (n), 0);      total_length += ace_array_decode (cbuffer + total_length, *this->seq2_);    }  if ((this->valid_ptr_ & VALID_OFFER) != 0)    {      ACE_NEW_RETURN (this->offer_, ACE_URL_Offer, 0);      total_length += this->offer_->decode (cbuffer + total_length);    }    this->id_ = ACE_WString ((ACE_USHORT16 *) (cbuffer + total_length));  total_length += ACE_WString_Helper::decode (cbuffer + total_length);  this->url_ = ACE_WString ((ACE_USHORT16 *) (cbuffer + total_length));  total_length += ACE_WString_Helper::decode (cbuffer + total_length);  ACE_ASSERT (total_length == buf_size);  return total_length;}size_tACE_URL_Locator_Request::size (void){  ACE_TRACE ("ACE_URL_Locator_Request::size");  size_t total_length = 5 * sizeof (ACE_UINT32);  // There are 5 UINT32 variables at the beginning  // of the buffer.  <buffer size>, <code>, <how>,  // <how_many>, <valid_ptr>.  this->valid_ptr_ = 0;  // Check valid pointers and mark corresponding flag in <valid_prt>.  if (this->seq1_ != 0)    {      this->valid_ptr_ |= VALID_SEQ1;      total_length += ace_array_size (*this->seq1_);    }  if (this->seq2_ != 0)    {      this->valid_ptr_ |= VALID_SEQ2;      total_length += ace_array_size (*this->seq2_);    }  if (this->offer_ != 0)    {      this->valid_ptr_ |= VALID_OFFER;      total_length += this->offer_->size ();    }    total_length += ACE_WString_Helper::size (this->id_);  total_length += ACE_WString_Helper::size (this->url_);  return total_length;}voidACE_URL_Locator_Request::dump (void) const{  //ACE_TRACE ("ACE_URL_Locator_Request::dump");  size_t i;  ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));  if (this->code_ < ACE_URL_Locator::INVALID_OPERATION)    ACE_DEBUG ((LM_DEBUG, "%s Request:\n", ACE_URL_Locator::opname[this->code_]));  else    ACE_DEBUG ((LM_DEBUG, "Invalid Operation: %d\n", this->code_));  if (this->how_ < ACE_URL_Locator::INVALID_SELECTION)    ACE_DEBUG ((LM_DEBUG, "Select: %s\n", ACE_URL_Locator::selection_name[this->how_]));  else    ACE_DEBUG ((LM_DEBUG, "Invalid selection method: %d\n", this->how_));  ACE_DEBUG ((LM_DEBUG, "At most %d reply.\n", this->how_many_));  ACE_DEBUG ((LM_DEBUG, "Valid pointer pattern: %x\n", this->valid_ptr_));  ACE_DEBUG ((LM_DEBUG, "Property sequence 1: %x\n", this->seq1_));  if (this->seq1_ != 0)    for (i = 0; i < this->seq1_->size (); i++)      (*this->seq1_)[i].dump ();  ACE_DEBUG ((LM_DEBUG, "Property sequence 2: %x\n", this->seq2_));  if (this->seq2_ != 0)    for (i = 0; i < this->seq2_->size (); i++)      (*this->seq2_)[i].dump();  ACE_DEBUG ((LM_DEBUG, "Offer: %x\n", this->offer_));  if (this->offer_ != 0)    this->offer_->dump ();  if (this->id_.length () > 0)    ACE_DEBUG ((LM_DEBUG, "Offer ID: %s\n",		ACE_Auto_Basic_Array_Ptr<char> (this->id_.char_rep ()).get ()));  else    ACE_DEBUG ((LM_DEBUG, "Offer ID: \"\"\n"));  if (this->url_.length () > 0)    ACE_DEBUG ((LM_DEBUG, "URL: %s\n",		ACE_Auto_Basic_Array_Ptr<char> (this->url_.char_rep ()).get ()));  else    ACE_DEBUG ((LM_DEBUG, "URL: \"\"\n"));    ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));}intACE_URL_Locator_Reply::status_reply (u_int op, int result){  ACE_TRACE ("ACE_URL_Locator_Reply::status_reply");  this->code_ = op;  this->status_ = result;  return 0;}intACE_URL_Locator_Reply::query_reply (int result, size_t num,	     const ACE_URL_Offer_Seq &offers){  ACE_TRACE ("ACE_URL_Locator_Reply::query_reply");    this->code_ = ACE_URL_Locator::QUERY;  this->status_ = result;  ACE_NEW_RETURN (this->offers_, ACE_URL_Offer_Seq (offers), -1);  return 0;}intACE_URL_Locator_Reply::describe_reply (int result,		const ACE_URL_Offer &offer){  ACE_TRACE ("ACE_URL_Locator_Reply::describe_reply");  this->code_ = ACE_URL_Locator::DESCRIBE;  this->status_ = result;  ACE_NEW_RETURN (this->offer_, ACE_URL_Offer (offer), -1);  return 0;}size_tACE_URL_Locator_Reply::encode (void){  ACE_TRACE ("ACE_URL_Locator_Reply::encode");  size_t buf_size = this->size ();  size_t total_length = 0;  ACE_NEW_RETURN (this->buffer_, char [buf_size], 0);  ENCODE_UINT32 (this->buffer_, total_length, buf_size);  // Encode buffer size.  ENCODE_UINT32 (this->buffer_, total_length, this->code_);  // Encode Op code.  ENCODE_UINT32 (this->buffer_, total_length, this->status_);  // Encode Op result status.  ENCODE_UINT32 (this->buffer_, total_length, this->num_offers_);  // Encode number of offers in this->offers_.  ENCODE_UINT32 (this->buffer_, total_length, this->valid_ptr_);  // Encode valid pointers mask.  if (this->offer_ != 0)    total_length += this->offer_->encode (this->buffer_ + total_length);  if (this->offers_ != 0)    {      ENCODE_UINT32 (this->buffer_, total_length, this->offers_->size ());      total_length += ace_array_encode (this->buffer_ + total_length, *this->offers_);    }  ACE_ASSERT (total_length == buf_size);  return 0;} size_tACE_URL_Locator_Reply::decode (void *buffer){  ACE_TRACE ("ACE_URL_Locator_Reply::decode");  if (buffer == 0)    return 0;  // Check if we have a buffer available.  char *cbuffer = (char *) buffer;  size_t buf_size;  size_t total_length = 0;  DECODE_UINT32 (cbuffer, total_length, buf_size);  // Get the length of the buffer first.  DECODE_UINT32 (cbuffer, total_length, this->code_);  // Decode Op code.  DECODE_UINT32 (cbuffer, total_length, this->status_);  // Decode Op result status.  DECODE_UINT32 (cbuffer, total_length, this->num_offers_);  // Decode number of offers in this->offers_.  DECODE_UINT32 (cbuffer, total_length, this->valid_ptr_);  // Decode valid pointers mask.  if ((this->valid_ptr_ & VALID_OFFER) != 0)    {      ACE_NEW_RETURN (this->offer_, ACE_URL_Offer, 0);      total_length += this->offer_->decode (cbuffer + total_length);    }  if ((this->valid_ptr_ & VALID_OFFERS) != 0)    {      size_t n;      DECODE_UINT32 (cbuffer, total_length, n);      ACE_NEW_RETURN (this->offers_, ACE_URL_Offer_Seq (n), 0);      total_length += ace_array_decode (cbuffer + total_length, *this->offers_);    }    ACE_ASSERT (total_length ==buf_size);  return 0;} size_tACE_URL_Locator_Reply::size (void){  ACE_TRACE ("ACE_URL_Locator_Reply:size");  size_t total_length = 5 * sizeof (ACE_UINT32);  // size for 5 ACE_UINT32 objects: <buffer size>, <code_>,  // <status_>, <num_offers_>, and <valid_ptr_>.  this->valid_ptr_ = 0;  if (this->offer_ != 0)    {      this->valid_ptr_ |= VALID_OFFER;      total_length += this->offer_->size ();    }  if (this->offers_ != 0)    {      this->valid_ptr_ |= VALID_OFFERS;      total_length += ace_array_size (*this->offers_);    }  return total_length;}voidACE_URL_Locator_Reply::dump (void) const{  //ACE_TRACE ("ACE_URL_Locator_Reply::dump");  ACE_DEBUG ((LM_DEBUG, ACE_BEGIN_DUMP, this));  if (this->code_ < ACE_URL_Locator::INVALID_OPERATION)    ACE_DEBUG ((LM_DEBUG, "Original request: %s\n", ACE_URL_Locator::opname[this->code_]));  else    ACE_DEBUG ((LM_DEBUG, "Invalid Original Request: %d\n", this->code_));  if (this->status_ < ACE_URL_Locator::MAX_URL_ERROR)    ACE_DEBUG ((LM_DEBUG, "Reply status: %s\n", ACE_URL_Locator::err_name[this->status_]));  else    ACE_DEBUG ((LM_DEBUG, "Invalid reply status: %d\n", this->status_));  ACE_DEBUG ((LM_DEBUG, "Number of offers: %d\n", this->num_offers_));  ACE_DEBUG ((LM_DEBUG, "Valid pointer pattern: %x\n", this->valid_ptr_));  ACE_DEBUG ((LM_DEBUG, "Offer: %x\n", this->offer_));  if (this->offer_ != 0)    this->offer_->dump ();  ACE_DEBUG ((LM_DEBUG, "Offer sequence: %x\n", this->offers_));  if (this->offers_ != 0)    for (size_t i = 0; i < this->offers_->size (); i++)      (*this->offers_)[i].dump();  ACE_DEBUG ((LM_DEBUG, ACE_END_DUMP));}#endif /* ACE_LOCATOR_REQUEST_REPLY_C */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -