Giriş
Şu satırı dahil ederiz.
Constructor
Şöyle yaparız.
Şöyle yaparız.
basic_socket'i döndürür.
1. Bağlanmak için şöyle yaparız.
Şöyle yaparız.
tcp socketini döndürür. Bağlantı kurulduktan sonra okuma yazma işlemi için direkt tcp soketi kullanılmamalıdır. next_layer() ve lowest_layer() farklıdır. Bağlanmak için şöyle yaparız.
Şöyle yaparız.
read_somet metodu - char []
Şöyle yaparız.
#include <boost/asio/ssl.hpp>
Sınıf bir template. Şöyledir.boost::asio::ssl::stream<boost::asio::ip::tcp::socket>;
Altta OpenSSL kütüphanesini kullanır. Bu sınıf ile tekrar bağlanma örneği burada.Constructor
Şöyle yaparız.
boost::asio::io_service ios;
boost::asio::ssl::context ctx (boost::asio::ssl::context::tlsv1);
boost::asio::ssl::stream <boost::asio::ip::tcp::socket> socket (ios, ctx);
async_handshake metoduŞöyle yaparız.
socket.async_handshake(boost::asio::ssl::stream_base::handshake_type::client,
handler);
Handler şöyledir.void TLSSocket::on_handshake(const boost::system::error_code& error){
if(!error){
...
} else {
std::cout << "Handshaking error: " << error.message() << "\n";
}
}
Handshake başarılı ise şöyle örneği yazma işlemi yapabiliriz. Şöyle yaparız.void handle_handshake(const boost::system::error_code& err)
{
if (!err)
{
boost::asio::async_write(socket,requestBuf,handler);
}
}
async_read_some metodu
Örnek ver
async_shutdown metodu
Örnek ver
async_write_somet metodu
Örnek ver
handshake metodu
lowest_layer metodu
1. Bağlanmak için şöyle yaparız.
socket.lowest_layer().connect({ {}, 8087 }); // http://localhost:8087
2. Bağlanmak için şöyle yaparızboost::asio::async_connect (socket.lowest_layer(),ep,handler);
Handler metodu şöyledir.void onConnect (const boost::system::error_code& error){
if(!error) {
try {
socket.async_handshake(boost::asio::ssl::stream_base::handshake_type::client,
handshakeHandler);
} catch (std::exception ex){
std::cout << "Handshaking error: " << ex.what() << "\n";
}
} else {
std::cout << "Connect error: " << error.message() << "\n";
}
}
3. Bağlanmak için şöyle yaparız. Handler yine aynıdır.socket.lowest_layer().async_connect (ep,handler);
4. Socketi kapatmak için şöyle yaparız.socket.lowest_layer().cancel();
native metoduŞöyle yaparız.
char* const host = "104.236.162.70" ;// IP of isocpp.org
// Set SNI Hostname (many hosts need this to handshake successfully)
if(! SSL_set_tlsext_host_name(stream_.native_handle(), host))
{
...
}
next_layer metodutcp socketini döndürür. Bağlantı kurulduktan sonra okuma yazma işlemi için direkt tcp soketi kullanılmamalıdır. next_layer() ve lowest_layer() farklıdır. Bağlanmak için şöyle yaparız.
Şöyle yaparız.
tcp::resolver::results_type results = ...;
// Make the connection on the IP address we get from a lookup
boost::asio::async_connect(
stream_.next_layer(),
results.begin(),
results.end(),
std::bind(
&session::on_connect,
shared_from_this(),
std::placeholders::_1));
read_somet metodu - char []
Şöyle yaparız.
char buf[1024];
size_t bytes_transferred = socket.read_some(boost::asio::buffer(buf), ec);
read_some metodu - boost::array
Şöyle yaparız.
Örnek
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Açıklaması şöyle
Örnek ver
boost::array<char, 128> buffer;
boost::system::error_code error;
size_t len = socket->read_some(boost::asio::buffer(buffer), error);
if (error == boost::asio::error::eof)
break;
else if (error)
throw boost::system::system_error(error);
std::cout.write(buffer.data(), len);
set_verify_callback metodu
ssl::context sınıfında da aynı metod mevcut. Yani context ile sertifika bir şekilde doğrulanıbileceği gibi socket ile de doğrulanabilir. Şöyle yaparız. Bu çağrıdan önce set_verify_mode çağrısı yapılabilir.socket.set_verify_callback(boost::bind(&..., this, _1, _2));
Handler kodlamak için şöyle yaparız.bool TLSSocket::on_verify_certificate(bool verified,
boost::asio::ssl::verify_context &ctx) {
char subject_name[256];
X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle());
X509_NAME_oneline(X509_get_subject_name(cert), subject_name, 256);
std::cout << "Verifying " << subject_name << "\n";
return verified;
}
set_verify_mode metoduÖrnek
Şöyle yaparız.
socket.set_verify_mode(boost::asio::ssl::verify_none);
ÖrnekŞöyle yaparız.
socket.set_verify_mode(asio::ssl::verify_fail_if_no_peer_cert);
ÖrnekŞöyle yaparız.
socket.set_verify_mode(boost::asio::ssl::verify_peer);
ÖrnekŞöyle yaparız.
socket.set_verify_mode(ssl::verify_peer);
socket.set_verify_callback(ssl::rfc2818_verification("host.name"));
shutdown metoduAçıklaması şöyle
Şöyle yaparız.It is cleanest to makeshutdown()
calls on both thessl::stream
and itslowest_layer()
. The first ends the SSL connection and the second ends the TCP connection.
socket.shutdown();
socket.lowest_layer().close();
write_some metoduÖrnek ver
Hiç yorum yok:
Yorum Gönder