Hi,
I am setting the SSL client environment variables for a C++ client and I ran into the following issue. When I set them at the command line and run the client program things works as expected. However, when I try to set them programmatically prior(in program order) to opening a connection, qpid seems to ignore the environment variables. I was wondering if there is anyway to specify the environment variables programmatically in the qpid C++ client.

===configuration===
1. version: qpid-0.28-rc2

2. /etc/qpidd.conf
acl-file=/etc/qpid/qpidd.acl
auth=yes
realm=QPID
no-data-dir=yes
sasl-config=/etc/sasl2/

log-to-stderr=no
log-enable=debug+
log-to-syslog=yes

ssl-cert-db=/tmp/test/server_db/
ssl-cert-password-file=/tmp/test/server_db/qpid-broker-pfile
ssl-cert-name=localhost
ssl-port=5671
require-encryption=yes
transport=ssl
ssl-require-client-authentication=yes
ssl-sasl-no-dict=no

3. modified C++ client (from http://svn.apache.org/repos/asf/qpid/trunk/qpid/cpp/examples/messaging/client.cpp)

#include <qpid/messaging/Address.h>
#include <qpid/messaging/Connection.h>
#include <qpid/messaging/Message.h>
#include <qpid/messaging/Receiver.h>
#include <qpid/messaging/Sender.h>
#include <qpid/messaging/Session.h>

#include<cstdlib>
#include<iostream>

#include<stdlib.h>
#include<sstream>

using namespace qpid::messaging;

using std::stringstream;
using std::string;

int main(int argc, char** argv)
{
    const char* url = "localhost:5671";
std::string connectionOptions = "{username:admin,password:admin,transport:ssl}";

    setenv("QPID_SSL_CERT_NAME", "QpidCppClient", 1);
    setenv("QPID_SSL_CERT_DB", "/tmp/test/client_db", 1);
setenv("QPID_SSL_CERT_PASSWORD_FILE", "/tmp/test/qpid-client-pfile", 1);

    Connection connection(url, connectionOptions);

    setenv("QPID_SSL_CERT_NAME", "QpidCppClient", 1);
    setenv("QPID_SSL_CERT_DB", "/tmp/test/client_db", 1);
setenv("QPID_SSL_CERT_PASSWORD_FILE", "/tmp/test/qpid-client-pfile", 1);

    try
     {
        try
        {
std::cout << "set QPID_SSL_CERT_NAME:" << getenv("QPID_SSL_CERT_NAME") << "\n"; std::cout << "set QPID_SSL_CERT_DB:" << getenv("QPID_SSL_CERT_DB") << "\n"; std::cout << "set QPID_SSL_CERT_PASSWORD_FILE:" << getenv("QPID_SSL_CERT_PASSWORD_FILE") << "\n";
            connection.open();
        }
        catch (const std::exception& e)
        {
            std::cout << e.what() << "\n";

std::cout << "set QPID_SSL_CERT_NAME:" << getenv("QPID_SSL_CERT_NAME") << "\n"; std::cout << "set QPID_SSL_CERT_DB:" << getenv("QPID_SSL_CERT_DB") << "\n"; std::cout << "set QPID_SSL_CERT_PASSWORD_FILE:" << getenv("QPID_SSL_CERT_PASSWORD_FILE") << "\n";
        }

        Session session = connection.createSession();

        Sender sender = session.createSender("service_queue");

        Receiver receiver = session.createReceiver("#");
        Address responseQueue = receiver.getAddress();

        string s[] =
        {
            "Twas brillig, and the slithy toves",
            "Did gire and gymble in the wabe.",
            "All mimsy were the borogroves,",
            "And the mome raths outgrabe."
        };
      Message request;
        request.setReplyTo(responseQueue);
        for (int i=0; i<4; i++)
        {
            request.setContent(s[i]);
            sender.send(request);
            Message response = receiver.fetch();
std::cout << request.getContent() << " -> " << response.getContent() << std::endl;
        }
        connection.close();
        return 0;

     }
     catch(const std::exception& error)
     {
        std::cout << error.what() << std::endl;
        connection.close();
     }
    return 1;
}

ii) compiled:
g++ -g -o test test.cpp -lqpidclient -lqpidmessaging

iii) run:
#./test
set QPID_SSL_CERT_NAME:QpidCppClient
set QPID_SSL_CERT_DB:/tmp/test/client_db
set QPID_SSL_CERT_PASSWORD_FILE:/tmp/test/qpid-client-pfile
Unknown protocol: ssl (/builddir/build/BUILD/qpid-0.28-rc2/cpp/src/qpid/client/Connector.cpp:52)
set QPID_SSL_CERT_NAME:QpidCppClient
set QPID_SSL_CERT_DB:/tmp/test/client_db
set QPID_SSL_CERT_PASSWORD_FILE:/tmp/test/qpid-client-pfile
Failed to connect (reconnect disabled)

Thanks,
--Hari




---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to