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

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

?? http_handler.cpp

?? 一個(gè)開源的網(wǎng)絡(luò)開發(fā)庫(kù)ACE
?? CPP
字號(hào):
// http_handler.cpp,v 1.12 1998/07/31 23:36:45 gonzo Exp

// ============================================================================
//
// = LIBRARY
//    apps/JAWS/clients/Caching
//
// = FILENAME
//    http_handler.cpp
//
// = AUTHOR
//    James Hu
//
// ============================================================================

#include "ace/Filecache.h"
#include "http_handler.h"

ACE_RCSID(Caching, http_handler, "http_handler.cpp,v 1.12 1998/07/31 23:36:45 gonzo Exp")

HTTP_Handler::HTTP_Handler (void)
{
}

HTTP_Handler::HTTP_Handler (const char * path)
{
  // How long is the request going to be?
  this->request_[0] = '\0';
  this->request_size_ =
    ACE_OS::strlen ("GET ")
    + ACE_OS::strlen (path)
    + ACE_OS::strlen (" HTTP/1.0\r\nAccept: HTTP/1.0\r\n\r\n");

  // Make the request.
  if ((u_int) this->request_size_ < sizeof (this->request_))
    ACE_OS::sprintf (this->request_,
		     "GET %s HTTP/1.0\r\nAccept: HTTP/1.0\r\n\r\n",
		     path);

  // Find the filename.
  const char *last = ACE_OS::strrchr (path, '/');

  if (last == 0)
    last = path;
  else if (last[1] == '\0')
    last = "index.html";
  else
    last = last+1;

  ACE_OS::sprintf (this->filename_, "%s", last);
}

int
HTTP_Handler::open (void *)
{
  // If you want threads, use the activate stuff.
#if 0
  if (this->activate () != 0)
    {
      ACE_ERROR_RETURN ((LM_ERROR, "HTTP_Handler::open, whups!\n"), -1);
    }

  return 0;
#else
  return this->svc ();
#endif /* 0 */
}

int
HTTP_Handler::svc (void)
{
  static char buf[BUFSIZ];
  int count = 0;

  ACE_DEBUG ((LM_DEBUG, "[%t] sending request --\n%s", this->request_));

  this->peer ().send_n (this->request_, this->request_size_);

  // Read in characters until encounter \r\n\r\n
  int done = 0;
  char *contentlength;

  do
    {
      while (((count += this->peer ().recv_n (buf + count, 1)) > 0)
             && ((u_int) count < sizeof (buf)))
        {
          buf[count] = '\0';

          if (count < 2)
	    continue;
          done = ACE_OS::strcmp (buf + count - 4, "\n\n") == 0;

          if (done)
	    break;

          if (count < 4)
	    continue;

          done = ACE_OS::strcmp (buf + count - 4, "\r\n\r\n") == 0;

          if (done)
	    break;
        }

      if (!done)
        {
          char *last = ACE_OS::strrchr (buf, '\n');
          last[0] = '\0';

          if ((contentlength = ACE_OS::strstr (buf, "\nContent-length:"))
              || (contentlength = ACE_OS::strstr (buf, "\nContent-Length:")))
            done = 1;
          else
            {
              last[0] = '\n';
              count = ACE_OS::strlen (last);
              ACE_OS::memmove (buf, last, count + 1);
            }
        }
      else
        {
	  contentlength = ACE_OS::strstr (buf, "\nContent-length:");

          if (!contentlength)
            contentlength =
	      ACE_OS::strstr (buf, "\nContent-Length:");
        }

    }
  while (!done);

  // ASSERT (contentlength != 0)
  if (contentlength
      && (::sscanf (contentlength, "\nContent-%*[lL]ength: %d ",
                    &this->response_size_) == 1))
    {
      ACE_Filecache_Handle afh (this->filename_,
				this->response_size_);

      this->peer ().recv_n (afh.address (), this->response_size_);

      ACE_DEBUG ((LM_DEBUG,
		  "  ``%s'' is now cached.\n",
		  this->filename_));
    }
  else
    {
      // Maybe we should do something more clever here, such as extend
      // ACE_Filecache_Handle to allow the creation of cache objects
      // whose size is unknown?

      // Another possibility is to write the contents out to a file,
      // and then cache it.

      // Perhaps make ACE_Filecache_Handle more savvy, and allow a
      // constructor which accepts a PEER as a parameter.
      ACE_DEBUG ((LM_DEBUG,
		  "HTTP_Handler, no content-length header!\n"));
    }

  return 0;
}

const char *
HTTP_Handler::filename (void) const
{
  return this->filename_;
}

int
HTTP_Connector::connect (const char * url)
{
  char host[BUFSIZ];
  u_short port;
  char path[BUFSIZ];

  if (this->parseurl (url, host, &port, path) == -1)
    {
      ACE_DEBUG ((LM_DEBUG,
		  "HTTP_Connector, error parsing url: %s\n",
		  url));
      return -1;
    }

  HTTP_Handler hh (path);
  HTTP_Handler *hhptr = &hh;

  // First check the cache.
  if (ACE_Filecache::instance ()->find (hh.filename ()) == 0)
    {
      ACE_DEBUG ((LM_DEBUG, "  ``%s'' is already cached.\n",
		  hh.filename ()));
      return 0;
    }

  return this->connector_.connect (hhptr, ACE_INET_Addr (port, host));
}

#define DEFAULT_SERVER_PORT 80

// extract the main components of a URL
int
HTTP_Connector::parseurl (const char *url,
			  char *host,
			  u_short *port,
			  char *path)
{
  int status = 0;

  // hackish, but useful
  if (3 != ::sscanf (url, "http://%[^:/]:%hu%s", host, port, path))
    {
      if (2 != ::sscanf (url, "http://%[^:/]:%hu", host, port))
	{
	  if (2 != ::sscanf (url, "http://%[^:/]%s", host, path))
	    {
	      if (1 != ::sscanf (url, "http://%[^:/]", host))
		status = -1;
	      else
		{
		  *port = DEFAULT_SERVER_PORT;
		  ACE_OS::strcpy (path, "/");
		}
	    }
	  else
	    *port = DEFAULT_SERVER_PORT;
	}
      else ACE_OS::strcpy (path, "/");
    }

  // 0 => success
  // -1 => error
  return status;
}

#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Connector<HTTP_Handler, ACE_SOCK_CONNECTOR>;
template class ACE_Svc_Tuple<HTTP_Handler>;
template class ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>;
template class ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*>;
template class ACE_Map_Manager<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_MUTEX>;
template class ACE_Map_Iterator_Base<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_MUTEX>;
template class ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_MUTEX>;
template class ACE_Map_Reverse_Iterator<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_MUTEX>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Connector<HTTP_Handler, ACE_SOCK_CONNECTOR>
#pragma instantiate ACE_Svc_Tuple<HTTP_Handler>
#pragma instantiate ACE_Svc_Handler<ACE_SOCK_STREAM, ACE_NULL_SYNCH>
#pragma instantiate ACE_Map_Entry<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*>
#pragma instantiate ACE_Map_Manager<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_MUTEX>
#pragma instantiate ACE_Map_Iterator_Base<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_MUTEX>
#pragma instantiate ACE_Map_Iterator<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_MUTEX>
#pragma instantiate ACE_Map_Reverse_Iterator<ACE_HANDLE, ACE_Svc_Tuple<HTTP_Handler>*, ACE_SYNCH_RW_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精品国产| 亚洲视频一二三| 欧日韩精品视频| 久久99久久精品| 精品久久久久久久久久久久久久久久久 | 天天综合网 天天综合色| 欧美日韩一区二区三区视频 | 日欧美一区二区| 精品三级在线观看| 亚洲午夜精品网| 99久久99久久精品免费看蜜桃| 精品久久久久久久人人人人传媒| 欧美一区二区三区在线视频 | 五月综合激情日本mⅴ| 国产精品亚洲午夜一区二区三区| 91精品国产91综合久久蜜臀| 最新成人av在线| 色诱亚洲精品久久久久久| 日韩欧美国产麻豆| 国产一区二区三区四区五区入口 | 亚洲成a人片综合在线| 国产偷国产偷精品高清尤物| 成人性生交大片免费看视频在线| 日韩电影在线观看电影| 亚洲女同一区二区| 国产午夜精品理论片a级大结局| 精品视频在线看| 精品一区二区三区免费视频| 国产婷婷一区二区| 日韩精品一区二| 欧美日韩精品福利| 色94色欧美sute亚洲线路二| 成人一道本在线| 日韩精品亚洲一区二区三区免费| 亚洲国产综合色| 亚洲视频狠狠干| 亚洲国产精品高清| 欧美精品一区二区三区蜜桃视频| 欧美精品高清视频| 91精品午夜视频| 欧美肥妇毛茸茸| 99久久精品费精品国产一区二区| 国产成人aaaa| 国产精品一区二区在线观看不卡| 热久久国产精品| 美腿丝袜在线亚洲一区| 午夜精品福利视频网站| 亚洲午夜久久久| 亚洲不卡av一区二区三区| 亚洲成人在线网站| 日本中文在线一区| 日本成人超碰在线观看| 日韩影院免费视频| 免费不卡在线视频| 日本不卡的三区四区五区| 国产在线精品一区在线观看麻豆| 免费欧美在线视频| 欧美videos中文字幕| 欧美色手机在线观看| 欧美一区二区三区免费| 日本乱人伦aⅴ精品| 美女国产一区二区| 亚洲成人午夜影院| 中文字幕在线一区二区三区| 久久久美女毛片| 久久一夜天堂av一区二区三区| 日本久久电影网| 在线电影一区二区三区| 欧美日韩免费不卡视频一区二区三区| 久久97超碰国产精品超碰| 国产美女视频91| 不卡的电影网站| 91玉足脚交白嫩脚丫在线播放| 在线区一区二视频| 26uuu久久天堂性欧美| 国产精品青草久久| 午夜精品久久久久久久| 国产精品资源在线看| 色女孩综合影院| 精品电影一区二区三区 | 精品久久一区二区三区| 亚洲色图视频网| 蜜桃视频一区二区三区在线观看| 高清beeg欧美| 7777精品伊人久久久大香线蕉的| 欧美激情一区二区三区| 一区二区三区在线观看网站| 国模一区二区三区白浆| 欧美体内she精高潮| 中文字幕免费不卡| 视频一区在线播放| av电影天堂一区二区在线观看| 日韩欧美中文字幕制服| 亚洲欧美一区二区三区孕妇| 久久不见久久见免费视频1| 91久久精品国产91性色tv| 久久亚洲捆绑美女| 日产国产高清一区二区三区| 99re这里都是精品| 久久色中文字幕| 天天影视网天天综合色在线播放| www.亚洲人| 欧美激情在线看| 久久66热re国产| 欧美日韩国产一级| 一区二区三区在线播放| 成人毛片在线观看| 久久先锋影音av| 麻豆一区二区三区| 欧美日本韩国一区| 亚洲一区在线免费观看| www.99精品| 亚洲国产成人午夜在线一区| 中文字幕一区av| 黄页视频在线91| 五月婷婷久久丁香| 欧美日韩精品福利| 日韩不卡一区二区三区| 日韩欧美国产wwwww| 老司机免费视频一区二区| 欧美一级黄色片| 久久精品国产在热久久| 精品久久99ma| www.色综合.com| 美女视频一区二区三区| 五月婷婷激情综合| 国产成人在线视频网站| 久久婷婷久久一区二区三区| 美女高潮久久久| 日韩午夜激情电影| 日韩av高清在线观看| 欧美精品777| 日本不卡123| 欧美一级艳片视频免费观看| 日韩精品久久久久久| 欧美一级一区二区| 蜜臀av性久久久久蜜臀av麻豆| 91精品国产综合久久福利| 日本va欧美va瓶| wwww国产精品欧美| 国产成人自拍网| 国产精品电影一区二区| 一本久久综合亚洲鲁鲁五月天 | 精品少妇一区二区| 精品在线视频一区| 久久综合九色综合欧美亚洲| 精东粉嫩av免费一区二区三区 | 日韩国产欧美三级| 欧美岛国在线观看| 国产精品一级黄| 中文字幕av免费专区久久| 97久久超碰精品国产| 亚洲电影一级片| 欧美白人最猛性xxxxx69交| 国产精品综合视频| 亚洲免费电影在线| 欧美手机在线视频| 久久国产精品色婷婷| 国产精品美女久久久久久久久| 日本国产一区二区| 蜜桃av一区二区在线观看| 国产亚洲欧美色| 99re这里只有精品6| 午夜欧美2019年伦理| 久久只精品国产| 一本色道综合亚洲| 久久成人免费网站| 国产精品精品国产色婷婷| 日本成人中文字幕| 日本欧美在线观看| 麻豆精品视频在线| 99国产精品99久久久久久| 成人av电影在线观看| 成人毛片视频在线观看| 国产69精品久久777的优势| 激情综合亚洲精品| 丁香婷婷综合色啪| 色综合久久99| 91精品欧美福利在线观看| 精品乱人伦小说| 国产午夜亚洲精品不卡| 亚洲视频一区在线| 欧美一区二区三区白人| www.视频一区| 男女性色大片免费观看一区二区 | 久久久久久电影| 欧美系列在线观看| 高清在线不卡av| 亚洲国产aⅴ天堂久久| 久久综合久久鬼色中文字| 欧美日韩国产一级片| 99国内精品久久| 久久电影国产免费久久电影| 亚洲综合色自拍一区| 国产精品理论在线观看| 日韩欧美一区二区视频| 欧洲日韩一区二区三区|