<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
    <meta content="en-us" http-equiv="Content-Language" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link href="/static/images/favicon.ico" rel="shortcut icon" />
    <link href="/static/css/style.css" rel="stylesheet" type="text/css" />
    <link href="/static/css/codehilite.css" rel="stylesheet" type="text/css" />
    <link href="/static/css/bootstrap.css" media="screen, projection" rel="stylesheet" type="text/css" />
    <link href="/static/css/thrift.css" media="screen, projection" rel="stylesheet" type="text/css" />

    <script src="/static/js/jquery.min.js"></script>
    <script src="/static/js/bootstrap-dropdown.js"></script>
    <script src="/static/js/bootstrap-tab.js"></script>
    <script src="/static/js/thrift.js"></script>

    <title>Apache Thrift - C++ library</title>
  </head>
  <body>
    <div class="navbar">
  <div class="navbar-inner">
    <div class="container">
      <a class="brand" href="/">Apache Thrift &trade;</a>
      <div class="nav-collapse">
        <ul class="nav pull-right">
          <li><a href="/download">Download</a></li>
          <li><a href="/docs">Documentation</a></li>
          <li><a href="/developers">Developers</a></li>
          <li><a href="/lib">Libraries</a></li>
          <li><a href="/tutorial">Tutorial</a></li>
          <li><a href="/test">Test Suite</a></li>
          <li><a href="/about">About</a></li>
          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache <b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li><a href="http://www.apache.org/" target="_blank">Apache Home</a></li>
              <li><a href="http://www.apache.org/licenses/" target="_blank">Apache License v2.0</a></li>
              <li><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank">Donate</a></li>
              <li><a href="http://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a></li>
              <li><a href="http://www.apache.org/security/" target="_blank">Security</a></li>
            </ul>
          </li>
        </ul>
      </div>
    </div>
  </div>
</div>

    <div class="container">
      
<h1 id="using-thrift-with-c">Using Thrift with C++</h1>

<p>The Thrift C++ libraries are built using the GNU tools. Follow the instructions
in the top-level README.md</p>

<p>In case you do not want to open another README.md file, do this thrift src:</p>

<pre><code>./bootstrap.sh
./configure (--with-boost=/usr/local)
make
sudo make install
</code></pre>

<p>Thrift is divided into two libraries.</p>

<ul>
  <li>
    <p>libthrift - The core Thrift library contains all the core Thrift code.  This requires
openssl, pthreads, and librt.</p>
  </li>
  <li>
    <p>libthriftnb - This library contains the Thrift nonblocking server, which uses libevent.
To link this library you will also need to link libevent.</p>
  </li>
</ul>

<h2 id="linking-against-thrift">Linking Against Thrift</h2>

<p>After you build and install Thrift the libraries are installed to
/usr/local/lib by default. Make sure this is in your LDPATH.</p>

<p>On Linux, the best way to do this is to ensure that /usr/local/lib is in
your /etc/ld.so.conf and then run /sbin/ldconfig.</p>

<p>Depending upon whether you are linking dynamically or statically and how
your build environment it set up, you may need to include additional
libraries when linking against thrift, such as librt and/or libpthread. If
you are using libthriftnb you will also need libevent.</p>

<h2 id="dependencies">Dependencies</h2>

<p>C++11 is required at a minimum.  C++03/C++98 are not supported after version 0.12.0.</p>

<p>Boost is required to run the C++ unit tests.  It is not necessary to link against
the runtime library.</p>

<p>libevent (for libthriftnb only) - most linux distributions have dev packages for this:
http://monkey.org/~provos/libevent/</p>

<h1 id="using-thrift-with-c-on-windows">Using Thrift with C++ on Windows</h1>

<p>Both the autoconf and cmake build systems are able to automatically detect many
system configurations without the need to specify library locations, however if
you run into problems or want to redirect thrift to build and link against your
own provided third party libraries:</p>

<p>BOOST_ROOT : For boost, e.g. D:\boost_1_55_0
OPENSSL_ROOT_DIR : For OpenSSL, e.g. D:\OpenSSL-Win32</p>

<p>only required by libthriftnb:</p>

<p>LIBEVENT_ROOT_DIR : For Libevent e.g. D:\libevent-2.0.21-stable</p>

<p>See /3rdparty.user for more details.</p>

<p>The same linking guidelines described above for libthriftnb apply to windows as well.</p>

<h2 id="linking-against-thrift-1">Linking Against Thrift</h2>

<p>You need to link your project that uses thrift against all the thrift
dependencies; in the case of libthrift, openssl, pthreads, and librt and for
libthriftnb, libevent.</p>

<p>In the project properties you must also set HAVE_CONFIG_H as force include
the config header: “windows/config.h”</p>

<h2 id="dependencies-1">Dependencies</h2>

<p>libevent (for libthriftnb only)
http://monkey.org/~provos/libevent/</p>

<h2 id="windows-version-compatibility">Windows version compatibility</h2>

<p>The Thrift library targets Windows 7 or latter versions. The supports for windows XP and Vista are avaiable until 0.12.0.</p>

<h2 id="thrift-and-the-vcpkg-package-manager">Thrift and the VCPKG Package manager</h2>

<p>You can download and install thrift using the 
<a href="https://github.com/Microsoft/vcpkg">vcpkg</a> dependency manager:</p>

<pre><code>git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install thrift
</code></pre>

<p>The thrift port in vcpkg is kept up to date by Microsoft team members 
and community contributors. The Apache Thrift project is <em>not</em> responsible
for the vcpkg port. Therefore, if the version is out of date, please 
<a href="https://github.com/Microsoft/vcpkg">create an issue or pull request</a> 
on the vcpkg repository.</p>

<h2 id="named-pipes">Named Pipes</h2>

<p>Named Pipe transport has been added in the TPipe and TPipeServer classes. This
is currently Windows-only. Named pipe transport for *NIX has not been
implemented. Domain sockets are a better choice for local IPC under non-Windows
OS’s. *NIX named pipes only support 1:1 client-server connection.</p>

<h1 id="thriftssl">Thrift/SSL</h1>

<h2 id="scope">Scope</h2>

<p>This SSL only supports blocking mode socket I/O. It can only be used with
TSimpleServer, TThreadedServer, and TThreadPoolServer.</p>

<h2 id="implementation">Implementation</h2>

<p>There are two main classes TSSLSocketFactory and TSSLSocket. Instances of
TSSLSocket are always created from TSSLSocketFactory.</p>

<h2 id="how-to-use-ssl-apis">How to use SSL APIs</h2>

<p>See the TestClient.cpp and TestServer.cpp files for examples.</p>

<h3 id="accessmanager-certificate-validation">AccessManager (certificate validation)</h3>

<p>An example of certificate validation can be found in TestServer.cpp.</p>

<p>AccessManager defines a callback interface. It has three callback methods:</p>

<p>(a) Decision verify(const sockaddr_storage&amp; sa);</p>

<p>(b) Decision verify(const string&amp; host, const char* name, int size);</p>

<p>(c) Decision verify(const sockaddr_storage&amp; sa, const char* data, int size);</p>

<p>After SSL handshake completes, additional checks are conducted. Application
is given the chance to decide whether or not to continue the conversation
with the remote. Application is queried through the above three “verify”
method. They are called at different points of the verification process.</p>

<p>Decisions can be one of ALLOW, DENY, and SKIP. ALLOW and DENY means the
conversation should be continued or disconnected, respectively. ALLOW and
DENY decision stops the verification process. SKIP means there’s no decision
based on the given input, continue the verification process.</p>

<p>First, (a) is called with the remote IP. It is called once at the beginning.
“sa” is the IP address of the remote peer.</p>

<p>Then, the certificate of remote peer is loaded. SubjectAltName extensions
are extracted and sent to application for verification. When a DNS
subjectAltName field is extracted, (b) is called. When an IP subjectAltName
field is extracted, (c) is called.</p>

<p>The “host” in (b) is the value from TSocket::getHost() if this is a client
side socket, or TSocket::getPeerHost() if this is a server side socket. The
reason is client side socket initiates the connection. TSocket::getHost()
is the remote host name. On server side, the remote host name is unknown
unless it’s retrieved through TSocket::getPeerHost(). Either way, “host”
should be the remote host name. Keep in mind, if TSocket::getPeerHost()
failed, it would return the remote host name in numeric format.</p>

<p>If all subjectAltName extensions were “skipped”, the common name field would
be checked. It is sent to application through (c), where “sa” is the remote
IP address. “data” is the IP address extracted from subjectAltName IP
extension, and “size” is the length of the extension data.</p>

<p>If any of the above “verify” methods returned a decision ALLOW or DENY, the
verification process would be stopped.</p>

<p>If any of the above “verify” methods returned SKIP, that decision would be
ignored and the verification process would move on till the last item is
examined. At that point, if there’s still no decision, the connection is
terminated.</p>

<p>Thread safety, an access manager should not store state information if it’s
to be used by many SSL sockets.</p>

<h2 id="sigpipe-signal">SIGPIPE signal</h2>

<p>Applications running OpenSSL over network connections may crash if SIGPIPE
is not ignored. This happens when they receive a connection reset by remote
peer exception, which somehow triggers a SIGPIPE signal. If not handled,
this signal would kill the application.</p>

<h2 id="how-to-run-test-clientserver-in-ssl-mode">How to run test client/server in SSL mode</h2>

<p>The server and client expects the followings from the directory /test/</p>

<ul>
  <li>keys/server.crt</li>
  <li>keys/server.key</li>
  <li>keys/CA.pem</li>
</ul>

<p>The file names are hard coded in the source code. You need to create these
certificates before you can run the test code in SSL mode. Make sure at least
one of the followings is included in “keys/server.crt”,</p>

<ul>
  <li>subjectAltName, DNS localhost</li>
  <li>subjectAltName, IP  127.0.0.1</li>
  <li>common name,    localhost</li>
</ul>

<p>Run within /test/ folder,</p>

<pre><code>     ./cpp/TestServer --ssl &amp;
     ./cpp/TestClient --ssl
</code></pre>

<p>If “-h <host>" is used to run client, the above "localhost" in the above
keys/server.crt has to be replaced with that host name.</host></p>

<h2 id="tsslsocketfactoryrandomize">TSSLSocketFactory::randomize()</h2>

<p>The default implementation of OpenSSLSocketFactory::randomize() simply calls
OpenSSL’s RAND_poll() when OpenSSL library is first initialized.</p>

<p>The PRNG seed is key to the application security. This method should be
overridden if it’s not strong enough for you.</p>

<h1 id="deprecations">Deprecations</h1>

<h2 id="section">0.12.0</h2>

<p>Support for C++03/C++98 was deprecated.
Support for Boost at runtime was deprecated.</p>

<h1 id="breaking-changes">Breaking Changes</h1>

<h2 id="section-1">1.0.0</h2>

<p>THRIFT-4720:
The classes Monitor and TimerManager now use std::chrono::milliseconds for timeout, the methods and functions involving THRIFT_TIMESPEC and timeval have been removed, the related tests have been modified.</p>

<p>Support for Windows XP/Vista has been dropped.</p>

<p>Support for C++03/C++98 has been dropped.  Use version 0.12.0 to support that
language level.  As a consequence, boost is no longer required as a runtime
library depenedency, but is is still required to build the runtime library
and to run the unit tests.  We will work towards removing boost as a
build dependency for folks who just want to build the runtime and not
run the tests.  This means the header thrift/stdcxx.h has been removed and
anything that relied on it has been changed to directly use C++11 concepts.</p>

<p>THRIFT-4730:
The classes BoostThreadFactory, PosixThreadFactory, StdThreadFactory, and
PlatformThreadFactory have been removed, and we will use a ThreadFactory
based on C++11 (essentially StdThreadFactory was renamed ThreadFactory).</p>

<p>THRIFT-4732:
The CMake build options WITH_SHARED_LIBS and WITH_STATIC_LIBS are deprecated.
The project no longer performs a side-by-side static and shared build; you
tell CMake through BUILD_SHARED_LIBS whether to make shared or static
libraries now.  This is CMake standard behavior.</p>

<p>THRIFT-4735:
Qt4 support was removed.</p>

<p>THRIFT-4762:
Added <code>const</code> specifier to <code>TTransport::getOrigin()</code>. This changes its function signature.
It’s recommended to add the <code>override</code> specifier in implementations derived from <code>TTransport</code>.</p>

<h2 id="section-2">0.11.0</h2>

<p>Older versions of thrift depended on the &lt;boost/smart_ptr.hpp&gt; classes which
were used in thrift headers to define interfaces.  Thrift now detects C++11
at build time and will prefer to use <memory> classes from C++11 instead.
You can force the library to build with boost memory classes by defining the
preprocessor macro `FORCE_BOOST_SMART_PTR`.  (THRIFT-2221)</memory></p>

<p>In the pthread mutex implementation, the contention profiling code was enabled
by default in all builds.  This changed to be disabled by default.  (THRIFT-4151)</p>

<p>In older releases, if a TSSLSocketFactory’s lifetime was not at least as long
as the TSSLSockets it created, we silently reverted openssl to unsafe multithread behavior
and so the results were undefined.  Changes were made in 0.11.0 that cause either an
assertion or a core instead of undefined behavior.  The lifetime of a TSSLSocketFactory
<em>must</em> be longer than any TSSLSocket that it creates, otherwise openssl will be cleaned
up too early.  If the static boolean is set to disable openssl initialization and
cleanup and leave it up to the consuming application, this requirement is not needed.
(THRIFT-4164)</p>

<p class="snippet_footer">This page was generated by Apache Thrift's <strong>source tree docs</strong>:
<a href="https://gitbox.apache.org/repos/asf?p=thrift.git;a=blob;hb=HEAD;f=lib/cpp/README.md">lib/cpp/README.md</a>
</p>


    </div>
    <div class="container">
  <hr>
  <footer class="footer">
    <div class="row">
      <div class="span3">
        <h3>Links</h3>
        <ul class="unstyled">
          <li><a href="/download">Download</a></li>
          <li><a href="/developers">Developers</a></li>
          <li><a href="/tutorial">Tutorials</a></li>
        </ul>
        <ul class="unstyled">
          <li><a href="/sitemap">Sitemap</a></li>
        </ul>
      </div>
      <div class="span3">
        <h3>Get Involved</h3>
        <ul class="unstyled">
          <li><a href="/mailing">Mailing Lists</a></li>
          <li><a href="http://issues.apache.org/jira/browse/THRIFT">Issue Tracking</a></li>
          <li><a href="/docs/HowToContribute">How To Contribute</a></li>
        </ul>
      </div>
      <div class="span6">
        <a href="http://www.apache.org/"><img src="/static/images/feather.svg" onerror="this.src='/static/images/feather.png';this.onerror=null;" /></a>
        Copyright &copy; 2024 <a href="http://www.apache.org/">Apache Software Foundation</a>.
        Licensed under the <a href="http://www.apache.org/licenses/">Apache License v2.0</a>.
        Apache, Apache Thrift, and the Apache feather logo are trademarks of The Apache Software Foundation.
      </div>
    </div>
  </footer>
</div>

  </body>
</html>
