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::stream<boost::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::stream<boost::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

Inactive hide details for "Kumar, Akhilesh" ---08/30/2010 02:34:00 PM---Hi All, Considering that nobody replied my question I a"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" <Akhilesh.Kumar@am.sony.com>


To:


"boost-users@lists.boost.org" <boost-users@lists.boost.org>


Date:


08/30/2010 02:34 PM


Subject:


Re: [Boost-users] boost::asio SSL connection thru proxy server


Sent by:


boost-users-bounces@lists.boost.org





Hi All,

Considering that nobody replied my question I am wondering if anybody who has knowledge of this kind of problem has seen my previous message/question. I really need help on this issue if anybody has any thought on this pls. reply.

Thanks,

Akhilesh Kumar

From: Kumar, Akhilesh
Sent:
Monday, August 23, 2010 5:10 PM
To:
'boost-users@lists.boost.org'
Subject:
boost::asio SSL connection thru proxy server


Hi,

I am writing a boost socket client using boost::asio to do secure HTTP (HTTPS) communication. I Implemented my client based on the code sample based on (http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/ssl/client.cpp) with little changes as I am using sync socket. My client woks fine, when I am connecting to server directly, but I am not sure what changes I need to make when my communication going thru proxy.

The unsecure connection(HTTP) work fine thru proxy, and here is what I do for unsecure connection,

1. Initialize boost socket(IO service and other stuff).
2. Resolve and Connect to Proxy server.
3. Start writing to actual server(HTTP send request).
4. Start uploading/downloading.
5. Close Socket.


But I can’t use this above procedure for (SSL) secure connection as I need to do handshaking with the server before I can write anything if my understanding is correct.

Can somebody give me some pointer or code sample or step I need to do when I am doing secure connection thru proxy server.

Just to clarify Microsoft WinInet does do (secure) HTTPS connection thru same proxy fine. If providing my code sample I am using for SSL might help understand the problem I can provide that.

Thanks in advance for any help.

Akhilesh Kumar
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users