Hello,

My name is Russell and I am new to Thirft and the Thirft mail community.

I have successfully used Thrift to create some prototypes of remote systems 
passing messages using the C++ libraries. I am compiling Boost and Thrift 
myself and link statically into the application. Currently I have implemented 
the TSimpleServer. The example uses unencrypted communications as far as I can 
tell and I would like to implement TLS/SSL communication. I see examples of a 
Java SSL server on the internet but haven't seen anything concrete in C++. My 
attempts to duplicate the Java code in C++ were unsuccessful. Is there a 
reference implementation somewhere?

I tried JetBrains AI and it generated the following code which I modified to 
fit my application:

#include <thrift/server/TSimpleServer.h>
#include <thrift/transport/TSSLServerSocket.h>
#include <thrift/protocol/TBinaryProtocol.h>

// Function to start an Apache Thrift server using TLS
void StartTLSThriftServer(const std::string &host, int port,
                          const std::string &certPath, const std::string 
&keyPath) {
    // Create SSL/TLS configuration
    apache::thrift::transport::TSSLSocketFactory sslSocketFactory;
    sslSocketFactory.loadCertificate(certPath.c_str());
    sslSocketFactory.loadPrivateKey(keyPath.c_str());

    // Setup server transport
    auto serverTransport = 
std::make_shared<apache::thrift::transport::TSSLServerSocket>(port, 
&sslSocketFactory);

    // Setup protocol factory
    auto protocolFactory = 
std::make_shared<apache::thrift::protocol::TBinaryProtocolFactory>();

    // Set up the handler and processor (assuming a pre-defined handler)
    auto handler = std::make_shared<YourServiceHandler>(); // Replace with your 
service handler
    auto processor = std::make_shared<YourServiceProcessor>(handler); // 
Replace with your service processor

    // Create and run the server
    apache::thrift::server::TSimpleServer server(processor, serverTransport, 
protocolFactory);
    std::cout << "Starting the Apache Thrift server with TLS on " << host << 
":" << port << std::endl;
    server.serve();
}

When I compile, I get the following error:

/home/osboxes/starfish/dataman_service/src/main.cpp: In function ‘void 
StartTLSThriftServer(const string&, int, const string&, const string&)’:
/home/osboxes/starfish/dataman_service/src/main.cpp:305:23: error: aggregate 
‘apache::thrift::transport::TSSLSocketFactory sslSocketFactory’ has incomplete 
type and cannot be defined
  305 |     TSSLSocketFactory sslSocketFactory;
      |                       ^~~~~~~~~~~~~~~~


Any ideas where I should go with this? (Or should I look at using nginx as a 
proxy?)

I also have a question about performance that I will ask on a different thread.

Thanks,
Russell


Reply via email to