Sam,
Here is my code snippet to connect to a server without proxy, This code works fine I have tested it, my question is what changes I need to make if I have to go thru proxy to connect to server.
Thanks,
using boost::asio::ip::tcp;
using namespace std;
using namespace boost;
CBoostSocket::Connect()
{
try
{
tcp::resolver *m_pResolver;
tcp::socket *m_pSocket;
boost::asio::streambuf request_;
boost::asio::streambuf response_;
boost::asio::io_service *m_pIOservice;
boost::asio::ssl::context *m_pSSLContext;
boost::asio::ssl::streamboost::asio::ip::tcp::socket *m_pSecureSocket;
string m_host;//host url
m_pIOservice = new boost::asio::io_service();
tcp::resolver resolver(*m_pIOservice);
m_pSSLContext = new boost::asio::ssl::context(*m_pIOservice, boost::asio::ssl::context::sslv23_client);
m_pSSLContext->set_verify_mode(boost::asio::ssl::context::verify_none);
//by default connect directly
string proxyOrHost(m_host);
//CInternetSettings netSetting;
boost::system::error_code error = boost::asio::error::host_not_found;
tcp::resolver::iterator end;
tcp::resolver::query query(proxyOrHost , "https");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
// Try each endpoint until we successfully establish a connection.
//boost::system::error_code error;
m_pSecureSocket = new boost::asio::ssl::streamboost::asio::ip::tcp::socket(*m_pIOservice, *m_pSSLContext) ;
//try to connect it directly first even though proxy is set, if fail try with proxy
while (error && endpoint_iterator != end)
{
m_pSecureSocket->lowest_layer().close();
m_pSecureSocket->lowest_layer().connect(*endpoint_iterator++, error);
if (!error)
{
m_pSecureSocket->handshake(boost::asio::ssl::stream_base::client, error);
if(!error)
{
}
else{
boost::system::error_code code = error;
boost::system::system_error e(error);
long lastResult = code.value();
string errorString = e.what();
m_pSecureSocket->lowest_layer().close();
ASSERT(!"Handshake failed: ");
std::cout << "Handshake failed: " << error << "\n";
return ;
}
}
else
{
boost::system::error_code code = error;
boost::system::system_error e(error);
long lastResult = code.value();
string errorString = e.what();
ASSERT(!"Connect failed: ");
std::cout << "Connect failed: " << error << "\n";
m_pSecureSocket->lowest_layer().close();
return ;
}
}
boost::asio::streambuf request;
std::ostream request_stream(&request);
request_stream << "POST" << " " << urlPath << " HTTP/1.0\r\n";
request_stream << "Host: " << m_host << "\r\n";
request_stream << "Accept: */*\r\n";
long contentLength = 0;
const wchar_t *pPostParam;
long paramLen;
if(pPostParam && paramLen)
{
request_stream << "Content-Length: ";
request_stream << boost::lexical_cast<string>(contentLength);
request_stream << "\r\n";
}
else
{
}
request_stream << "Cache-Control: no-cache\r\n";
request_stream << "Connection: Close\r\n\r\n";
// Send the request.
boost::system::error_code error;
boost::asio::write(*m_pSecureSocket, request );
//Write post param
if (error)
throw boost::system::system_error(error);
}
catch(...) {
}
catch (boost::system::system_error &e){
//Handle Error
}
return S_OK;
}
Akhilesh Kumar
From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Sam Miller
Sent: Monday, August 30, 2010 12:43 PM
To: boost-users@lists.boost.org
Subject: Re: [Boost-users] boost::asio SSL connection thru proxy server
Akilesh,
Your question is not clear to me, what exactly does not work when using your proxy? Does the SSL handshake fail?
Sam
[cid:image001.gif@01CB4845.C28A2DD0]"Kumar, Akhilesh" ---08/30/2010 02:34:00 PM---Hi All, Considering that nobody replied my question I am wondering if anybody who has knowledge of t
From:
"Kumar, Akhilesh"