Bugfix: handle remote_address properly
[Arachnida.git] / lib / Spin / Connector.cpp
bloba442bc44a86a336ea1619d2b672948e04a86a37a
1 #include "Connector.h"
2 extern "C" {
3 #include <openssl/bio.h>
4 #include <openssl/ssl.h>
6 #include <boost/format.hpp>
7 #include <loki/ScopeGuard.h>
8 #include <Scorpion/BIO.h>
10 namespace Spin
12 /*static */Connector & Connector::getInstance()
14 static Connector instance__;
15 return instance__;
18 boost::shared_ptr< Connection > Connector::connect(const Details::Address & remote_address, boost::uint16_t port)
20 boost::format fmt("%1%.%2%.%3%.%4%:%5%");
21 fmt % (unsigned int)remote_address[0] % (unsigned int)remote_address[1] % (unsigned int)remote_address[2] % (unsigned int)remote_address[3] % port;
22 Scorpion::BIO * bio(connect_(fmt.str()));
23 return boost::shared_ptr< Connection > (new Connection(bio));
26 boost::shared_ptr< Connection > Connector::connect(const std::string & remote_address, boost::uint16_t port)
28 boost::format fmt("%1%:%2%");
29 fmt % remote_address % port;
30 Scorpion::BIO * bio(connect_(fmt.str()));
31 return boost::shared_ptr< Connection > (new Connection(bio));
34 boost::shared_ptr< Connection > Connector::connect(const Scorpion::Context & context, const Details::Address & remote_address, boost::uint16_t port)
36 boost::format fmt("%1%.%2%.%3%.%4%:%5%");
37 fmt % remote_address[0] % remote_address[1] % remote_address[2] % remote_address[3] % port;
38 Scorpion::BIO * bio(connectSSL_(context, fmt.str()));
39 return boost::shared_ptr< Connection > (new Connection(bio));
42 boost::shared_ptr< Connection > Connector::connect(const Scorpion::Context & context, const std::string & remote_address, boost::uint16_t port)
44 boost::format fmt("%1%:%2%");
45 fmt % remote_address % port;
46 Scorpion::BIO * bio(connectSSL_(context, fmt.str()));
47 return boost::shared_ptr< Connection > (new Connection(bio));
50 Connector::Connector()
51 { /* no-op */ }
53 Connector::~Connector()
54 { /* no-op */ }
56 Scorpion::BIO * Connector::connectSSL_(const Scorpion::Context & context, const std::string & target)
58 return Scorpion::connect(context, target);
61 Scorpion::BIO * Connector::connect_(const std::string & target)
63 return Scorpion::connect(target);