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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? io.cpp

?? 一個(gè)開源的網(wǎng)絡(luò)開發(fā)庫ACE
?? CPP
字號(hào):
// IO.cpp,v 1.35 2002/10/05 21:15:37 shuston Exp

#include "ace/Message_Block.h"
#include "ace/SOCK_Stream.h"
#include "ace/Filecache.h"
#include "IO.h"
#include "HTTP_Helpers.h"

ACE_RCSID(server, IO, "IO.cpp,v 1.35 2002/10/05 21:15:37 shuston Exp")

JAWS_IO::JAWS_IO (void)
  : handler_ (0)
{
}

JAWS_IO::~JAWS_IO (void)
{
}

void
JAWS_IO::handler (JAWS_IO_Handler *handler)
{
  this->handler_ = handler;
}

JAWS_Synch_IO::JAWS_Synch_IO (void)
  : handle_ (ACE_INVALID_HANDLE)
{
}

JAWS_Synch_IO::~JAWS_Synch_IO (void)
{
  ACE_OS::closesocket (this->handle_);
}

ACE_HANDLE
JAWS_Synch_IO::handle (void) const
{
  return this->handle_;
}

void
JAWS_Synch_IO::handle (ACE_HANDLE handle)
{
  this->handle_ = handle;
}

void
JAWS_Synch_IO::read (ACE_Message_Block &mb,
                     int size)
{
  ACE_SOCK_Stream stream;
  stream.set_handle (this->handle_);
  int result = stream.recv (mb.wr_ptr (), size);

  if (result <= 0)
    this->handler_->read_error ();
  else
    {
      mb.wr_ptr (result);
      this->handler_->read_complete (mb);
    }
}

void
JAWS_Synch_IO::receive_file (const char *filename,
                             void *initial_data,
                             int initial_data_length,
                             int entire_length)
{
  ACE_Filecache_Handle handle (filename, entire_length);

  int result = handle.error ();

  if (result == ACE_Filecache_Handle::ACE_SUCCESS)
    {
      ACE_SOCK_Stream stream;
      stream.set_handle (this->handle_);

      int bytes_to_memcpy = ACE_MIN (entire_length, initial_data_length);
      ACE_OS::memcpy (handle.address (), initial_data, bytes_to_memcpy);

      int bytes_to_read = entire_length - bytes_to_memcpy;

      int bytes = stream.recv_n ((char *) handle.address () + initial_data_length,
                                 bytes_to_read);
      if (bytes == bytes_to_read)
        this->handler_->receive_file_complete ();
      else
        result = -1;
    }

  if (result != ACE_Filecache_Handle::ACE_SUCCESS)
    this->handler_->receive_file_error (result);
}

void
JAWS_Synch_IO::transmit_file (const char *filename,
                              const char *header,
                              int header_size,
                              const char *trailer,
                              int trailer_size)
{
  ACE_Filecache_Handle handle (filename);

  int result = handle.error ();

  if (result == ACE_Filecache_Handle::ACE_SUCCESS)
    {
#if defined (ACE_JAWS_BASELINE) || defined (ACE_WIN32)
      ACE_SOCK_Stream stream;
      stream.set_handle (this->handle_);

      if ((stream.send_n (header, header_size) == header_size)
          && (stream.send_n (handle.address (), handle.size ())
              == handle.size ())
          && (stream.send_n (trailer, trailer_size) == trailer_size))
        this->handler_->transmit_file_complete ();
      else
        result = -1;
#else
      // Attempting to use writev
      // Is this faster?
      iovec iov[3];
      int iovcnt = 0;
      if (header_size > 0)
        {
          iov[iovcnt].iov_base = ACE_const_cast(char*, header);
          iov[iovcnt].iov_len =  header_size;
          iovcnt++;
        }
      if (handle.size () > 0)
        {
          iov[iovcnt].iov_base =  ACE_reinterpret_cast(char*,handle.address ());
          iov[iovcnt].iov_len = handle.size ();
          iovcnt++;
        }
      if (trailer_size > 0)
        {
          iov[iovcnt].iov_base = ACE_const_cast(char*, trailer);
          iov[iovcnt].iov_len = trailer_size;
          iovcnt++;
        }
      if (ACE_OS::writev (this->handle_, iov, iovcnt) < 0)
        result = -1;
      else
        this->handler_->transmit_file_complete ();
#endif /* ACE_JAWS_BASELINE */
    }

  if (result != ACE_Filecache_Handle::ACE_SUCCESS)
    this->handler_->transmit_file_error (result);
}

void
JAWS_Synch_IO::send_confirmation_message (const char *buffer,
                                          int length)
{
  this->send_message (buffer, length);
  this->handler_->confirmation_message_complete ();
}

void
JAWS_Synch_IO::send_error_message (const char *buffer,
                                   int length)
{
  this->send_message (buffer, length);
  this->handler_->error_message_complete ();
}

void
JAWS_Synch_IO::send_message (const char *buffer,
                             int length)
{
  ACE_SOCK_Stream stream;
  stream.set_handle (this->handle_);
  stream.send_n (buffer, length);
}

// This only works on Win32
#if defined (ACE_WIN32)

JAWS_Asynch_IO::JAWS_Asynch_IO (void)
{
}

JAWS_Asynch_IO::~JAWS_Asynch_IO (void)
{
  ACE_OS::closesocket (this->handle_);
}

void
JAWS_Asynch_IO::read (ACE_Message_Block& mb,
                      int size)
{
  ACE_Asynch_Read_Stream ar;

  if (ar.open (*this, this->handle_) == -1
      || ar.read (mb, size) == -1)
    this->handler_->read_error ();
}

// This method will be called when an asynchronous read completes on a
// stream.

void
JAWS_Asynch_IO::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
  // This callback is for this->receive_file()
  if (result.act () != 0)
    {
      int code = 0;
      if (result.success () && result.bytes_transferred () != 0)
        {
          if (result.message_block ().length () == result.message_block ().size ())
            code = ACE_Filecache_Handle::ACE_SUCCESS;
          else
            {
              ACE_Asynch_Read_Stream ar;
              if (ar.open (*this, this->handle_) == -1
                  || ar.read (result.message_block (),
                              result.message_block ().size () - result.message_block ().length (),
                              result.act ()) == -1)
                code = -1;
              else
                return;
            }
        }
      else
        code = -1;

      if (code == ACE_Filecache_Handle::ACE_SUCCESS)
        this->handler_->receive_file_complete ();
      else
        this->handler_->receive_file_error (code);

      delete &result.message_block ();
      delete (ACE_Filecache_Handle *) result.act ();
    }
  else
    {
      // This callback is for this->read()
      if (result.success ()
          && result.bytes_transferred () != 0)
        this->handler_->read_complete (result.message_block ());
      else
        this->handler_->read_error ();
    }
}

void
JAWS_Asynch_IO::receive_file (const char *filename,
                              void *initial_data,
                              int initial_data_length,
                              int entire_length)
{
  ACE_Message_Block *mb = 0;
  ACE_Filecache_Handle *handle;

  ACE_NEW (handle, ACE_Filecache_Handle (filename, entire_length, ACE_NOMAP));

  int result = handle->error ();

  if (result == ACE_Filecache_Handle::ACE_SUCCESS)
    {
      ACE_OS::memcpy (handle->address (),
                      initial_data,
                      initial_data_length);

      int bytes_to_read = entire_length - initial_data_length;

      ACE_NEW (mb, ACE_Message_Block ((char *)handle->address ()
                                      + initial_data_length, bytes_to_read));

      if (mb == 0)
        {
          errno = ENOMEM;
          result = -1;
        }
      else
        {
          ACE_Asynch_Read_Stream ar;

          if (ar.open (*this, this->handle_) == -1
              || ar.read (*mb, mb->size () - mb->length (), handle) == -1)
            result = -1;
        }
    }

  if (result != ACE_Filecache_Handle::ACE_SUCCESS)
    {
      this->handler_->receive_file_error (result);
      delete mb;
      delete handle;
    }
}

void
JAWS_Asynch_IO::transmit_file (const char *filename,
                               const char *header,
                               int header_size,
                               const char *trailer,
                               int trailer_size)
{
  ACE_Asynch_Transmit_File::Header_And_Trailer *header_and_trailer = 0;
  ACE_Filecache_Handle *handle = new ACE_Filecache_Handle (filename, ACE_NOMAP);

  int result = handle->error ();

  if (result == ACE_Filecache_Handle::ACE_SUCCESS)
    {
      ACE_Message_Block header_mb (header, header_size);
      ACE_Message_Block trailer_mb (trailer, trailer_size);

      header_and_trailer = new ACE_Asynch_Transmit_File::Header_And_Trailer
        (&header_mb, header_size, &trailer_mb, trailer_size);

      ACE_Asynch_Transmit_File tf;

      if (tf.open (*this, this->handle_) == -1
          || tf.transmit_file (handle->handle (), // file handle
                               header_and_trailer, // header and trailer data
                               0,  // bytes_to_write
                               0,  // offset
                               0,  // offset_high
                               0,  // bytes_per_send
                               0,  // flags
                               handle // act
                               ) == -1)
        result = -1;
    }

  if (result != ACE_Filecache_Handle::ACE_SUCCESS)
    {
      this->handler_->transmit_file_error (result);
      delete header_and_trailer;
      delete handle;
    }
}


// This method will be called when an asynchronous transmit file completes.
void
JAWS_Asynch_IO::handle_transmit_file (const ACE_Asynch_Transmit_File::Result &result)
{
  if (result.success ())
    this->handler_->transmit_file_complete ();
  else
    this->handler_->transmit_file_error (-1);

  delete result.header_and_trailer ();
  delete (ACE_Filecache_Handle *) result.act ();
}

void
JAWS_Asynch_IO::send_confirmation_message (const char *buffer,
                                           int length)
{
  this->send_message (buffer, length, CONFORMATION);
}

void
JAWS_Asynch_IO::send_error_message (const char *buffer,
                                    int length)
{
  this->send_message (buffer, length, ERROR_MESSAGE);
}

void
JAWS_Asynch_IO::send_message (const char *buffer,
                              int length,
                              int act)
{
  ACE_Message_Block *mb;
  ACE_NEW (mb, ACE_Message_Block (buffer, length));

  if (mb == 0)
    {
      this->handler_->error_message_complete ();
      return;
    }

  ACE_Asynch_Write_Stream aw;
  if (aw.open (*this, this->handle_) == -1
      || aw.write (*mb, length, (void *) act) == -1)
    {
      mb->release ();

      if (act == CONFORMATION)
        this->handler_->confirmation_message_complete ();
      else
        this->handler_->error_message_complete ();
    }
}

void
JAWS_Asynch_IO::handle_write_stream (const ACE_Asynch_Write_Stream::Result &result)
{
  result.message_block ().release ();

  if (result.act () == (void *) CONFORMATION)
    this->handler_->confirmation_message_complete ();
  else
    this->handler_->error_message_complete ();
}

#endif /* ACE_WIN32 */

// #if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
// template class ACE_Singleton<JAWS_VFS, ACE_SYNCH_MUTEX>;
// #elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
// #pragma instantiate ACE_Singleton<JAWS_VFS, ACE_SYNCH_MUTEX>
// #endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产福利| 国产精品高清亚洲| 99精品偷自拍| 麻豆精品在线观看| 亚洲国产精品久久人人爱| 久久精品视频免费观看| 欧美人牲a欧美精品| 99久久国产综合精品女不卡| 狠狠色丁香久久婷婷综合丁香| 亚洲大型综合色站| 自拍偷拍亚洲欧美日韩| 国产亚洲视频系列| 欧美精品一区二区久久久| 欧美性淫爽ww久久久久无| 成人18视频在线播放| 国产精品一区专区| 奇米精品一区二区三区四区| 亚洲综合在线五月| 亚洲欧美怡红院| 国产精品色哟哟网站| 久久午夜国产精品| 精品少妇一区二区三区日产乱码 | 精品日韩在线观看| 欧美少妇一区二区| 在线影院国内精品| 91丨九色丨黑人外教| 成人av在线观| 成人aa视频在线观看| 成人午夜免费视频| 成人性色生活片免费看爆迷你毛片| 久久91精品国产91久久小草| 免费人成在线不卡| 日本一区中文字幕| 日韩精品一二三四| 日韩国产精品久久久| 亚洲第一在线综合网站| 五月综合激情日本mⅴ| 午夜精品久久久久影视| 亚洲成人你懂的| 亚洲成人免费电影| 日日摸夜夜添夜夜添国产精品| 亚洲综合一二三区| 亚洲第一搞黄网站| 日本大胆欧美人术艺术动态| 丝袜亚洲另类丝袜在线| 久久国产精品免费| 国产剧情在线观看一区二区| 国产精品1区2区| 成人美女视频在线看| 91色porny在线视频| 欧美在线观看禁18| 日韩欧美成人一区二区| 亚洲精品一区二区三区精华液| 国产拍欧美日韩视频二区 | 天天av天天翘天天综合网| 午夜精品久久久久久不卡8050| 午夜婷婷国产麻豆精品| 蜜桃传媒麻豆第一区在线观看| 日本欧美韩国一区三区| 精品一区二区三区香蕉蜜桃| 成人伦理片在线| 欧美午夜电影一区| 精品欧美黑人一区二区三区| 亚洲国产成人自拍| 亚洲二区在线视频| 国产在线播放一区三区四| 成人激情文学综合网| 欧美日韩一区三区| 久久亚洲综合av| 亚洲精品成a人| 久久er精品视频| 91麻豆国产自产在线观看| 制服丝袜亚洲色图| 日本一区二区三区久久久久久久久不 | 亚洲国产成人av网| 黑人精品欧美一区二区蜜桃| 91性感美女视频| 制服丝袜激情欧洲亚洲| 亚洲国产精品激情在线观看| 亚洲第一精品在线| 懂色一区二区三区免费观看| 欧美在线不卡一区| 国产色综合久久| 日韩国产一区二| 成人app下载| 日韩欧美国产系列| 亚洲美女视频在线观看| 精品在线一区二区三区| 色乱码一区二区三区88| 26uuu国产在线精品一区二区| 1区2区3区国产精品| 激情综合色播五月| 欧美日韩免费观看一区二区三区| 久久久亚洲高清| 日日摸夜夜添夜夜添国产精品 | 麻豆精品在线播放| 在线观看一区不卡| 中文字幕免费不卡| 免费视频一区二区| 欧美性一区二区| 国产精品护士白丝一区av| 蜜臂av日日欢夜夜爽一区| www.av精品| 国产日韩欧美精品电影三级在线| 亚洲福利电影网| 色综合天天视频在线观看| 亚洲精品一区二区三区精华液| 亚洲成人777| 欧洲一区在线观看| **性色生活片久久毛片| 国产在线国偷精品产拍免费yy| 欧美精品高清视频| 亚洲永久免费av| 色婷婷综合久久久久中文一区二区| 久久久久国产精品麻豆| 老司机精品视频线观看86| 欧美精品在线观看一区二区| 亚洲欧美激情小说另类| www.av亚洲| 中文字幕一区二区三区在线不卡| 国产成人精品综合在线观看| 久久综合资源网| 国产一区二区不卡在线 | 久久久精品综合| 精品一区二区三区在线观看| 欧美一级理论片| 日本不卡123| 91精品国产一区二区三区| 亚瑟在线精品视频| 欧美日韩免费观看一区二区三区| 亚洲一区二区在线免费看| 在线免费观看日本欧美| 亚洲无线码一区二区三区| 欧美视频三区在线播放| 五月婷婷色综合| 日韩欧美中文一区二区| 狠狠色综合日日| 国产亚洲精品资源在线26u| 国产福利一区二区三区视频| 久久久.com| 99精品久久99久久久久| 一区二区三区欧美久久| 欧美日韩高清一区二区三区| 日日夜夜免费精品| 精品国偷自产国产一区| 国产精品系列在线播放| 国产精品二区一区二区aⅴ污介绍| 99麻豆久久久国产精品免费| 亚洲免费在线播放| 欧美精品一级二级三级| 久久精品国内一区二区三区| 久久久久久黄色| av中文字幕不卡| 亚洲永久精品大片| 日韩一区二区在线观看视频播放| 精品一区二区日韩| 中文字幕av一区 二区| 色综合久久综合网欧美综合网 | 国产亲近乱来精品视频| av不卡一区二区三区| 亚洲国产精品一区二区久久 | 国产拍欧美日韩视频二区| 色综合欧美在线视频区| 日产国产高清一区二区三区| 久久久久久久久久久久久夜| 91丨九色porny丨蝌蚪| 日韩高清欧美激情| 国产日韩影视精品| 欧洲精品视频在线观看| 麻豆国产精品视频| 136国产福利精品导航| 在线成人免费观看| 成人黄色在线网站| 人人狠狠综合久久亚洲| 国产欧美精品一区| 欧美日韩中字一区| 国产·精品毛片| 亚洲123区在线观看| 欧美国产日本韩| 欧美一级在线观看| 91网站最新网址| 国产真实乱对白精彩久久| 亚洲一区二区四区蜜桃| 久久久99精品久久| 91麻豆精品国产91久久久久| 成人av网站在线| 麻豆精品久久精品色综合| 亚洲日本在线a| 精品av久久707| 欧美日韩1区2区| 91啪九色porn原创视频在线观看| 老司机精品视频在线| 亚洲最新视频在线观看| 久久久精品免费网站| 欧美片网站yy| 91首页免费视频| 国产suv精品一区二区883| 日本成人超碰在线观看| 亚洲欧美日韩中文播放| 久久精品一区四区|