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

📄 htbp_id_requestor.cpp

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 CPP
字号:
// HTBP_ID_Requestor.cpp,v 1.2 2005/11/27 12:11:35 ossama Exp#include "HTBP_ID_Requestor.h"#include "HTBP_Environment.h"#include "ace/OS_NS_stdio.h"#include "ace/OS_NS_string.h"#include "ace/SOCK_Stream.h"#include "ace/SOCK_Connector.h"#include "ace/UUID.h"ACE_RCSID(HTBP,          ACE_HTBP_ID_Requestor,          "HTBP_ID_Requestor.cpp,v 1.2 2005/11/27 12:11:35 ossama Exp")ACE_BEGIN_VERSIONED_NAMESPACE_DECLACE_TString ACE::HTBP::ID_Requestor::htid_;ACE_SYNCH_MUTEX ACE::HTBP::ID_Requestor::htid_lock_;ACE::HTBP::ID_Requestor::ID_Requestor (ACE::HTBP::Environment *env)  : port_ (0),    host_ (),    url_(){  if (env)    {      env->get_htid_url(url_);      int via_proxy = 0;      env->get_htid_via_proxy (via_proxy);      if (via_proxy && env->get_proxy_host (host_) == 0)        env->get_proxy_port (port_);    }}intACE::HTBP::ID_Requestor::connect_to_server (ACE_SOCK_Stream *cli_stream){  if (port_ == 0 || host_.length() == 0)    {      int host_start = url_.find (ACE_TEXT("http://")) + 7;      int port_sep = 0;      int sep = 0;      if (host_start == -1)        ACE_ERROR_RETURN ((LM_ERROR,                           ACE_TEXT("ACE::HTBP::ID_Requestor::")                           ACE_TEXT("connect_to_server: ")                           ACE_TEXT("invalid URL: \"%s\"\n"),                           url_.c_str()),                          -1);      port_sep = url_.find (ACE_TEXT(":"),(size_t)host_start);      sep = url_.find (ACE_TEXT("/"),(size_t)host_start);      if (sep == -1 || sep == host_start +1)        ACE_ERROR_RETURN ((LM_ERROR,                           ACE_TEXT("ACE::HTBP::ID_Requestor::")                           ACE_TEXT("connect_to_server: ")                           ACE_TEXT("invalid URL: \"%s\"\n"),                           url_.c_str()),                          -1);      if (port_sep == -1)        {          port_sep = sep;          port_ = 80; // should be a default?        }      host_ = url_.substr(host_start,port_sep - host_start);    }  ACE_INET_Addr remote_addr (port_, host_.c_str());  ACE_SOCK_Connector con;  if (con.connect (*cli_stream,                   remote_addr) == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       ACE_TEXT("ACE::HTBP::ID_Requestor::connect_to_server: ")                       ACE_TEXT("%p\n"),                       ACE_TEXT("socket connect")),                      -1);  return 0;}intACE::HTBP::ID_Requestor::send_request (ACE_SOCK_Stream *cli_stream){  char *buffer;  ACE_NEW_RETURN (buffer, char[this->url_.length()+16],-1);  ACE_OS::sprintf (buffer,"GET %s HTTP/1.0\n\n",                   ACE_TEXT_ALWAYS_CHAR(url_.c_str()));  int result = cli_stream->send_n (buffer,ACE_OS::strlen(buffer));  delete [] buffer;  if (result == -1)    ACE_ERROR_RETURN ((LM_ERROR,                       ACE_TEXT("ACE::HTBP::ID_Requestor::send_request %p\n"),                       ACE_TEXT("socket send")), -1);  return 0;}ACE_TCHAR *ACE::HTBP::ID_Requestor::get_HTID (){  if (ACE::HTBP::ID_Requestor::htid_.length() != 0)    return ACE::HTBP::ID_Requestor::htid_.rep();  ACE_Guard<ACE_SYNCH_MUTEX> guard (ACE::HTBP::ID_Requestor::htid_lock_);  if (ACE::HTBP::ID_Requestor::htid_.length() != 0)    return ACE::HTBP::ID_Requestor::htid_.rep();  ACE_SOCK_Stream cli_stream;  ACE_TCHAR * htid = 0;  if (this->url_.length() == 0 ||      this->connect_to_server (&cli_stream) == -1 ||      this->send_request (&cli_stream) == -1)    {      ACE_Utils::UUID_Generator gen;      ACE_Utils::UUID *uuid = gen.generateUUID ();      const ACE_CString *uuidstr = uuid->to_string();      ACE::HTBP::ID_Requestor::htid_ = ACE_TEXT_CHAR_TO_TCHAR (uuidstr->c_str());      delete uuid;      return ACE::HTBP::ID_Requestor::htid_.rep();    }  iovec recv_buf;  ssize_t result = cli_stream.recvv (&recv_buf);  cli_stream.close();  if (result > 0)    {      ACE_CString answer ((char *)recv_buf.iov_base,recv_buf.iov_len);      ssize_t start = answer.rfind (ACE_TEXT('\n'));      if (start == ACE_CString::npos)        start = 0;      else        start++;      ACE::HTBP::ID_Requestor::htid_ = ACE_TEXT_CHAR_TO_TCHAR(answer.substr (start).c_str());      htid = ACE::HTBP::ID_Requestor::htid_.rep();    }  return htid;}ACE_END_VERSIONED_NAMESPACE_DECL

⌨️ 快捷键说明

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