亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? htbp_channel.cpp

?? 最新的版本ACE-5.6.8,剛從外文網上搬下,與大家分享.
?? CPP
字號:
/* -*- C++ -*- */

//=============================================================================
/**
 *  @file    HTBP_Channel.cpp
 *
 *  $Id: HTBP_Channel.cpp 82543 2008-08-06 18:21:48Z parsons $
 *
 *  @author Phil Mesnier, Priyanka Gontla
 */
//=============================================================================
#include "HTBP_Channel.h"

#if !defined (__ACE_INLINE__)
#include "HTBP_Channel.inl"
#endif

#include "HTBP_Session.h"
#include "HTBP_Filter_Factory.h"

#include "ace/Message_Block.h"
#include "ace/Reactor.h"


ACE_BEGIN_VERSIONED_NAMESPACE_DECL

// Initialization and termination methods.
/// Constructor.
ACE::HTBP::Channel::Channel (ACE::HTBP::Session *s)
  : filter_ (0),
    session_ (s),
    ace_stream_ (),
    notifier_ (0),
    leftovers_ (1001),
    data_len_ (0),
    data_consumed_ (0),
    state_ (Init),
    error_buffer_ (0)
{
  ACE_NEW (this->notifier_,ACE::HTBP::Notifier(this));
  this->filter_ = get_filter ();
  this->request_count_ = static_cast<unsigned long> (ACE_OS::time());
}

/// Constructor, takes ownership of the supplied stream
ACE::HTBP::Channel::Channel (ACE_SOCK_Stream &s)
  : filter_ (0),
    session_ (0),
    ace_stream_ (s.get_handle()),
    notifier_ (0),
    leftovers_ (1001),
    data_len_ (0),
    data_consumed_ (0),
    state_ (Init),
    error_buffer_ (0)

{
  filter_ = get_filter ();
  this->request_count_ = static_cast<unsigned long> (ACE_OS::time());
}

ACE::HTBP::Channel::Channel (ACE_HANDLE h)
  : filter_ (0),
    session_ (0),
    ace_stream_ (h),
    notifier_ (0),
    leftovers_ (1001),
    data_len_ (0),
    data_consumed_ (0),
    state_ (Init),
    error_buffer_ (0)
{
  filter_ = get_filter ();
  this->request_count_ = static_cast<unsigned long> (ACE_OS::time());
}

/// Destructor.
ACE::HTBP::Channel::~Channel (void)
{
  delete this->notifier_;
  delete this->filter_;
}

  /// Dump the state of an object.
void
ACE::HTBP::Channel::dump (void) const
{
}

unsigned long
ACE::HTBP::Channel::request_count (void)
{
  return this->request_count_++;
}

void
ACE::HTBP::Channel::register_notifier (ACE_Reactor *r)
{
  if (r == 0)
    return;
  if (this->notifier_ == 0)
    {
      ACE_NEW (this->notifier_,ACE::HTBP::Notifier(this));
    }
  else
    {
      if (notifier_->get_handle() == ACE_INVALID_HANDLE)
        {
          delete this->notifier_;
          ACE_NEW (this->notifier_,ACE::HTBP::Notifier(this));
        }
    }

  r->register_handler(notifier_,ACE_Event_Handler::READ_MASK);
}

ACE::HTBP::Notifier *
ACE::HTBP::Channel::notifier (void)
{
  return this->notifier_;
}

ACE_HANDLE
ACE::HTBP::Channel::get_handle (void) const
{
  return this->ace_stream_.get_handle ();
}

void
ACE::HTBP::Channel::data_consumed (size_t n)
{
  this->data_consumed_ += n;
  if (this->data_consumed_ == this->data_len_)
    {
      this->filter_->recv_data_trailer(this);
      this->filter_->send_ack(this);
    }
}

int
ACE::HTBP::Channel::load_buffer (void)
{
  this->leftovers_.crunch();
  if (this->state() == Detached ||
      this->state() == Ack_Sent)
    {
      this->data_len_ = 0;
      this->data_consumed_ = 0;
    }

  ssize_t nread = 0;
  errno = 0;
#if 0
  if (this->session_ &&
      (this->session_->sock_flags() & ACE_NONBLOCK == ACE_NONBLOCK))
#endif
    {
      nread =
        ACE::handle_read_ready (this->ace_stream().get_handle(),
                                &ACE_Time_Value::zero);
      if (nread == -1 && errno == ETIME)
        errno = EWOULDBLOCK;
    }
  if (nread != -1)
    nread = this->ace_stream().recv (this->leftovers_.wr_ptr(),
                                     this->leftovers_.space()-1);
  if (nread < 1)
    {
      if (nread == 0 || (errno != EWOULDBLOCK && errno != EAGAIN))
        {
          this->state_ = Closed;
#if 0
          ACE_ERROR ((LM_ERROR,
                      "load_buffer[%d] %p\n",
                      this->ace_stream_.get_handle(),"recv"));
#endif
        }
      return nread;
    }
  this->leftovers_.wr_ptr(nread);
  *this->leftovers_.wr_ptr() = '\0';
  return nread;
}

int
ACE::HTBP::Channel::flush_buffer (void)
{
  if (this->session_)
    return this->session_->flush_outbound_queue();
  return 0;
}

int
ACE::HTBP::Channel::send_ack (void)
{
  return this->filter_->send_ack(this);
}

int
ACE::HTBP::Channel::recv_ack (void)
{
  if (load_buffer() == -1)
    return -1;
  return this->filter_->recv_ack(this);
}

void
ACE::HTBP::Channel::state (ACE::HTBP::Channel::State s)
{
  if (s == Detached)
    {
      this->session_->detach(this);
      this->session_ = 0;
    }
  this->state_ = s;
}

int
ACE::HTBP::Channel::consume_error (void)
{
  if (error_buffer_ == 0)
    {
      ACE_NEW_RETURN (error_buffer_,
                      ACE_Message_Block (this->data_len_ + 1),
                      0);
    }

  ssize_t result = 0;
  size_t n = error_buffer_->size();
  char *buf = error_buffer_->wr_ptr();

  if (this->leftovers_.length() > 0)
    {
      result = ACE_MIN (n,this->leftovers_.length());
      ACE_OS::memcpy (buf,this->leftovers_.rd_ptr(), result);
      this->leftovers_.rd_ptr(result);
      buf += result;
    }

  if (result < (ssize_t)n &&
      result < (ssize_t)data_len_)
    {
      n -= result;
      result += this->ace_stream_.recv(buf, n);
    }
  if (result > 0)
    {
      this->error_buffer_->wr_ptr(result);
      this->data_consumed_ += result;
      if (this->data_consumed_ == this->data_len_)
        {
          *this->error_buffer_->wr_ptr() = '\0';
          if (ACE::debug())
            ACE_DEBUG ((LM_DEBUG,
                        ACE_TEXT ("ACE::HTBP::Channel::consume_error ")
                        ACE_TEXT("Received entire error buffer: \n%s\n"),
                        this->error_buffer_->rd_ptr()));
          delete error_buffer_;
          error_buffer_ = 0;

          return 1;
        }
    }
  return 0;
}

//---------------------------------------------------------------------------
// = I/O functions.

/// The ACE::HTBP::Channel is a sibling of the ACE_SOCK_IO class, rather than a
/// decendant. This is due to the requirement to wrap all messages with
/// an HTTP request or reply wrapper, and to send application data in only
/// one direction on one stream.

int
ACE::HTBP::Channel::pre_recv(void)
{
  if (ACE::debug())
    ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::pre_recv ")
                ACE_TEXT ("in initial state = %d\n"),state_));
  if (this->state_ == Init ||
      this->state_ == Detached ||
      this->state_ == Header_Pending ||
      this->state_ == Ack_Sent)
    {
      if (this->load_buffer() == -1 && this->leftovers_.length() == 0)
        {
          if (errno != EWOULDBLOCK)
            this->state_ = Closed;
          if (ACE::debug())
            ACE_DEBUG ((LM_DEBUG,
                        ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::pre_recv ")
                        ACE_TEXT ("pre_recv returning -1, state = %d, %p\n"),
                        state_, ACE_TEXT("load_buffer()")));
          return -1;
        }
      if (this->filter_->recv_data_header(this) == -1)
        ACE_ERROR ((LM_ERROR,
                    ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::pre_recv ")
                    ACE_TEXT ("recv_data_header failed, %p\n"),
                    ACE_TEXT("pre_recv")));
    }
  switch (this->state_)
    {
    case Data_Queued:
    case Ack_Sent:
    case Ready:
      return 0;
    case Header_Pending:
      errno = EWOULDBLOCK;
      return -1;
    default:
      if (ACE::debug())
        ACE_DEBUG ((LM_DEBUG,
                    ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::pre_recv ")
                    ACE_TEXT("channel[%d] state = %d, %p\n"),
                    this->get_handle(),
                    this->state_,
                    ACE_TEXT("pre_recv")));
    }
  return -1;
}

/// Recv an <n> byte buffer from the connected socket.
ssize_t
ACE::HTBP::Channel::recv (void *buf,
                 size_t n,
                 int flags,
                 const ACE_Time_Value *timeout)
{
  ssize_t result = 0;
  if (this->pre_recv() == -1 && this->leftovers_.length() == 0)
    return -1;
  if (this->leftovers_.length() > 0)
    {
      result = ACE_MIN (n,this->leftovers_.length());
      ACE_OS::memcpy (buf,this->leftovers_.rd_ptr(), result);
      this->leftovers_.rd_ptr(result);
      buf = (char *)buf + result;
    }

  if (result < (ssize_t)n &&
      result < (ssize_t)data_len_)
    {
      n -= result;
      result += this->ace_stream_.recv(buf, n, flags, timeout);
    }
  if (result > 0)
    data_consumed((size_t)result);
  return result;
}

  /// Recv an <n> byte buffer from the connected socket.
ssize_t
ACE::HTBP::Channel::recv (void *buf,
                 size_t n,
                 const ACE_Time_Value *timeout)
{
  ssize_t result = 0;
  if (this->pre_recv() == -1)
    return -1;

  result = 0;
  if (this->leftovers_.length() > 0)
    {
      result = ACE_MIN (n,this->leftovers_.length());
      ACE_OS::memcpy (buf,this->leftovers_.rd_ptr(), result);
      this->leftovers_.rd_ptr(result);
      buf = (char *)buf + result;
    }

  if ((size_t)result < n && (size_t)result < this->data_len())
    {
      n -= result;
      result += this->ace_stream_.recv(buf, n, timeout);
    }

  if (result > 0)
    this->data_consumed((size_t)result);
  return result;
}

  /// Recv an <iovec> of size <n> from the connected socket.
ssize_t
ACE::HTBP::Channel::recvv (iovec iov[],
                  int iovcnt,
                  const ACE_Time_Value *timeout)
{
  ssize_t result = 0;
  if (this->pre_recv() == -1)
    return -1;

  if (this->leftovers_.length())
    {
      int ndx = 0;
      iovec *iov2 = new iovec[iovcnt];
      for (int i = 0; i < iovcnt; i++)
        {
          size_t n = ACE_MIN ((size_t) iov[i].iov_len ,
                              (size_t) this->leftovers_.length());
          if (n > 0)
            {
              ACE_OS::memcpy (iov[i].iov_base,this->leftovers_.rd_ptr(), n);
              this->leftovers_.rd_ptr(n);
              result += n;
            }
          if (n < (size_t) iov[i].iov_len)
            {
              iov2[ndx].iov_len = iov[i].iov_len - n;
              iov2[ndx].iov_base = (char *)iov[i].iov_base + n;
              ndx++;
            }
        }
      if (ndx > 0)
        result += this->ace_stream_.recvv(iov2,ndx,timeout);
      delete [] iov2;
    }
  else
    result = this->ace_stream_.recvv(iov,iovcnt,timeout);

  if (result > 0)
    this->data_consumed((size_t)result);
  return result;
}

ssize_t
ACE::HTBP::Channel::recvv (iovec *io_vec,
                  const ACE_Time_Value *timeout)
{
  ssize_t result = 0;
  if (this->pre_recv() == -1)
    return -1;
  if (ACE::debug())
    ACE_DEBUG ((LM_DEBUG,
                ACE_TEXT ("ACE::HTBP::Channel::recvv ")
                ACE_TEXT("recvv, leftover len = %d\n"),
                this->leftovers_.length()));
  if (this->leftovers_.length())
    {
      io_vec->iov_base = 0;
      io_vec->iov_len = 0;
      ACE_NEW_RETURN (io_vec->iov_base,
                      char[this->leftovers_.length()],-1);
      io_vec->iov_len = this->leftovers_.length();
      ACE_OS::memcpy (io_vec->iov_base,
                      this->leftovers_.rd_ptr(),
                      io_vec->iov_len);
      result = io_vec->iov_len;
      this->leftovers_.length(0);
    }
  else
    result = this->ace_stream_.recvv(io_vec,timeout);

  if (result > 0)
    this->data_consumed((size_t)result);
  return result;
}

ssize_t
ACE::HTBP::Channel::send (const void *buf,
                 size_t n,
                 int flags,
                 const ACE_Time_Value *timeout)
{
  ssize_t result = 0;
  if (this->filter_->send_data_header(n,this) == -1)
    return -1;
  result = this->ace_stream_.send(buf,n,flags,timeout);
  if (result == -1)
    return -1;
  if (this->filter_->send_data_trailer(this) == -1)
    return -1;
  return result;
}

ssize_t
ACE::HTBP::Channel::send (const void *buf,
                  size_t n,
                  const ACE_Time_Value *timeout)
{
  ssize_t result = 0;
  if (this->filter_ == 0)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::send: filter ")
                       ACE_TEXT ("is null\n")),-1);
  if (this->filter_->send_data_header(n,this) == -1)
    return -1;
  result = this->ace_stream_.send (buf,n,timeout);
  if (result == -1)
    return -1;
  if (this->filter_->send_data_trailer(this) == -1)
    return -1;
  return result;
}

ssize_t
ACE::HTBP::Channel::sendv (const iovec iov[],
                           int iovcnt,
                           const ACE_Time_Value *timeout)
{
  if (this->ace_stream_.get_handle() == ACE_INVALID_HANDLE)
    this->session_->inbound();

  ssize_t result = 0;
  size_t n = 0;
  
  for (int i = 0; i < iovcnt; n += iov[i++].iov_len)
    {
      // No action.
    }

  if (this->filter_->send_data_header(n,this) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::sendv ")
                       ACE_TEXT("%p\n"),
                       ACE_TEXT("send_data_header")),-1);

  result = this->ace_stream_.sendv (iov,iovcnt,timeout);

  if (result == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::sendv ")
                       ACE_TEXT("%p\n"),
                       ACE_TEXT("ace_stream_.sendv")),-1);

  if (this->filter_->send_data_trailer(this) == -1)
    ACE_ERROR_RETURN ((LM_ERROR,
                       ACE_TEXT ("(%P|%t) ACE::HTBP::Channel::sendv ")
                       ACE_TEXT("%p\n"),
                       ACE_TEXT("send_data_trailer\n")),-1);
  return result;
}

int
ACE::HTBP::Channel::enable (int value) const
{
  this->ace_stream_.enable(value);

  return 0; //this->ace_stream_.enable(value);
}

int
ACE::HTBP::Channel::disable (int value) const
{
  this->ace_stream_.disable(value);

  return 0;//this->ace_stream_.disable(value);
}

ACE::HTBP::Filter *
ACE::HTBP::Channel::get_filter ()
{
  ACE::HTBP::Filter_Factory *factory = 0;

  // @todo Should I be throwing an exception here if
  // memory is not allocated right ?
  ACE_NEW_RETURN (factory,
                  ACE::HTBP::Filter_Factory,
                  0);
  int inside = (this->session_ != 0);
  return factory->get_filter (inside);
}

ACE_END_VERSIONED_NAMESPACE_DECL

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色激情天天射综合网| 国产区在线观看成人精品| 日韩一区二区免费高清| 国产精品三级电影| 欧美aaaaa成人免费观看视频| 日本一区二区三区视频视频| 亚洲第四色夜色| 91性感美女视频| 精品国产露脸精彩对白| 一区二区三区色| 99久久久国产精品| 日本一区二区在线不卡| 久久精品国内一区二区三区| 欧美色中文字幕| 亚洲四区在线观看| 国产成人在线观看| 久久久欧美精品sm网站| 另类成人小视频在线| 这里只有精品免费| 夜夜操天天操亚洲| a在线播放不卡| 日韩视频免费观看高清完整版 | 欧美体内she精视频| 日韩亚洲欧美在线| 一区二区三区日韩欧美精品 | 一区二区激情小说| 国产高清在线精品| 91精品欧美久久久久久动漫| 亚洲人成人一区二区在线观看| 久久超碰97中文字幕| 91麻豆福利精品推荐| 久久综合久久鬼色中文字| 午夜久久福利影院| 一本色道综合亚洲| 亚洲欧美在线观看| 国产精品2024| 久久久三级国产网站| 免费欧美高清视频| 欧美美女喷水视频| 亚洲精品视频一区| 91丝袜美女网| 久久久久久久久久久久电影| 久久精品国产秦先生| 91精品免费观看| 日韩高清中文字幕一区| 欧美体内she精高潮| 国产精品二区一区二区aⅴ污介绍| 国模少妇一区二区三区| 91精品免费观看| 麻豆国产精品777777在线| 日韩欧美中文字幕精品| 日韩成人午夜精品| 欧美日韩国产小视频在线观看| 日韩一区在线免费观看| 成人毛片视频在线观看| 国产精品视频观看| 国产精品自在在线| 国产色婷婷亚洲99精品小说| 国产一区二区成人久久免费影院| 欧美成人综合网站| 国产精品一区一区| 日本一区二区三区电影| 不卡区在线中文字幕| 国产精品麻豆欧美日韩ww| av电影在线观看不卡| 一区二区三区不卡视频在线观看 | 一区二区三区在线高清| 欧美日韩免费电影| 精品一区二区三区免费观看| 精品91自产拍在线观看一区| 国产91在线观看丝袜| 亚洲人精品午夜| 欧美亚洲综合色| 老司机免费视频一区二区三区| 精品久久国产字幕高潮| 成人午夜激情片| 一级做a爱片久久| 欧美日韩激情一区| 国产乱淫av一区二区三区| 国产精品久久久久精k8| 成人h动漫精品| 天堂久久一区二区三区| 日韩欧美一级片| 一本到一区二区三区| 蜜臀99久久精品久久久久久软件| 国产亚洲欧美色| 欧美专区在线观看一区| 国产一区二区在线看| 亚洲女与黑人做爰| 欧美一区二区视频在线观看| 国产精品77777竹菊影视小说| 亚洲精品高清在线| 欧美日韩免费一区二区三区视频| 丁香婷婷综合网| 欧美经典三级视频一区二区三区| 在线欧美日韩国产| 国产在线播放一区三区四| 中文字幕在线视频一区| 91麻豆精品国产91久久久久久| 成人污污视频在线观看| 天天做天天摸天天爽国产一区| 国产欧美日本一区视频| 欧美日韩中文另类| 成人av一区二区三区| 美腿丝袜亚洲色图| 一区二区高清免费观看影视大全| 亚洲精品在线电影| 51久久夜色精品国产麻豆| 成人av综合在线| 黄页视频在线91| 五月婷婷综合激情| 亚洲三级视频在线观看| 91麻豆精品国产91久久久更新时间| 92精品国产成人观看免费 | 午夜精品久久久久影视| 国产欧美日韩在线| 欧美成人性福生活免费看| 欧美日精品一区视频| 91香蕉视频在线| 精品亚洲国内自在自线福利| 亚洲码国产岛国毛片在线| 中文字幕佐山爱一区二区免费| 日韩一级大片在线| 欧美日韩国产a| 欧美日韩亚洲综合一区二区三区| 色呦呦一区二区三区| 国产夫妻精品视频| 国模大尺度一区二区三区| 久久精品国产色蜜蜜麻豆| 亚洲高清视频中文字幕| 亚洲精品自拍动漫在线| 国产精品国产三级国产有无不卡| 久久嫩草精品久久久久| 日韩欧美亚洲一区二区| 日韩欧美国产一区二区三区| 666欧美在线视频| 欧美日韩高清一区二区| 91福利在线播放| 国产成人综合亚洲网站| 成人av网站在线观看| zzijzzij亚洲日本少妇熟睡| 成人自拍视频在线观看| 成人av网站免费观看| 99久久婷婷国产综合精品| 国产成人精品三级麻豆| 白白色 亚洲乱淫| 在线观看日韩国产| 欧美日精品一区视频| 日韩午夜中文字幕| 精品剧情在线观看| 中文字幕精品在线不卡| 亚洲国产成人在线| 专区另类欧美日韩| 日韩精品久久久久久| 韩国女主播一区| 91在线无精精品入口| 欧美亚洲综合在线| 日韩免费视频一区| 国产欧美在线观看一区| 亚洲精品乱码久久久久久久久 | 色综合亚洲欧洲| 欧美日韩精品福利| 久久综合久久综合久久| 国产精品传媒视频| 日韩主播视频在线| 日韩成人伦理电影在线观看| 美女在线视频一区| 成人一区二区三区中文字幕| 91电影在线观看| 久久影院视频免费| 亚洲一区二区在线视频| 久久99国产精品久久99 | 亚洲精品免费一二三区| 午夜激情一区二区三区| 国产精品911| 欧美精品一二三四| 久久久久久久久久久久久夜| 亚洲激情综合网| 国产一区二区电影| 欧美日韩五月天| 中文字幕av一区二区三区高 | 欧美性极品少妇| 久久久久久久久久久黄色| 一区二区欧美国产| 国产福利精品一区二区| 欧美精品aⅴ在线视频| 国产日韩综合av| 日韩综合小视频| 成人开心网精品视频| 色噜噜狠狠成人中文综合| 精品美女一区二区| 亚洲国产cao| 色婷婷久久一区二区三区麻豆| 日韩欧美在线不卡| 亚洲成人一二三| 色综合天天综合网国产成人综合天 | 风间由美一区二区三区在线观看 | 91亚洲资源网| 欧美激情综合五月色丁香小说| 一区二区成人在线观看|