server.cpp

来自「ICE-3.2 一个开源的中间件」· C++ 代码 · 共 136 行

CPP
136
字号
// **********************************************************************//// Copyright (c) 2003-2007 ZeroC, Inc. All rights reserved.//// This copy of Ice is licensed to you under the terms described in the// ICE_LICENSE file included in this distribution.//// **********************************************************************#include <Ice/Application.h>#include <Glacier2/PermissionsVerifier.h>#include <Glacier2/Session.h>#include <TestCommon.h>#include <IceSSL/Plugin.h>using namespace std;class SSLPermissionsVerifierI : public Glacier2::SSLPermissionsVerifier{public:    virtual bool    authorize(const Glacier2::SSLInfo& info, string&, const Ice::Current& current) const    {        IceSSL::CertificatePtr cert = IceSSL::Certificate::decode(info.certs[0]);        test(cert->getIssuerDN() == IceSSL::DistinguishedName(            "emailAddress=info@zeroc.com,CN=ZeroC Test CA,OU=Ice,O=ZeroC\\, Inc.,"             "L=Palm Beach Gardens,ST=Florida,C=US"));        test(cert->getSubjectDN() == IceSSL::DistinguishedName(            "CN=Client,emailAddress=info@zeroc.com,OU=Ice,O=ZeroC\\, Inc.,ST=Florida,C=US"));        test(cert->checkValidity());        return true;    }};class SessionI : public Glacier2::Session{public:    SessionI(bool shutdown, bool ssl) : _shutdown(shutdown), _ssl(ssl)    {    }    virtual void    destroy(const Ice::Current& current)    {        //        // If SSL, test that Glacier2.AddSSLContext is working.        //        if(_ssl)        {            Ice::Context::const_iterator p = current.ctx.find("SSL.Active");            assert(p != current.ctx.end() && p->second == "1");        }        current.adapter->remove(current.id);        if(_shutdown)        {            current.adapter->getCommunicator()->shutdown();        }    }private:    const bool _shutdown;    const bool _ssl;};class SessionManagerI : public Glacier2::SessionManager{public:    virtual Glacier2::SessionPrx    create(const string& userId, const Glacier2::SessionControlPrx&, const Ice::Current& current)    {        Glacier2::SessionPtr session = new SessionI(false, false);        return Glacier2::SessionPrx::uncheckedCast(current.adapter->addWithUUID(session));    }};class SSLSessionManagerI : public Glacier2::SSLSessionManager{public:    virtual Glacier2::SessionPrx    create(const Glacier2::SSLInfo& info, const Glacier2::SessionControlPrx&, const Ice::Current& current)    {        test(info.remoteHost == "127.0.0.1");        test(info.localHost == "127.0.0.1");        test(info.localPort == 12348);        try        {            IceSSL::CertificatePtr cert = IceSSL::Certificate::decode(info.certs[0]);            test(cert->getIssuerDN() == IceSSL::DistinguishedName(                "emailAddress=info@zeroc.com,CN=ZeroC Test CA,OU=Ice,O=ZeroC\\, Inc.,L=Palm Beach Gardens,"                "ST=Florida,C=US"));            test(cert->getSubjectDN() == IceSSL::DistinguishedName(                "CN=Client,emailAddress=info@zeroc.com,OU=Ice,O=ZeroC\\, Inc.,ST=Florida,C=US"));            test(cert->checkValidity());        }        catch(const IceSSL::CertificateReadException&)        {            test(false);        }        Glacier2::SessionPtr session = new SessionI(true, true);        return Glacier2::SessionPrx::uncheckedCast(current.adapter->addWithUUID(session));    }};class SessionServer : public Ice::Application{public:    virtual int run(int, char*[]);};intmain(int argc, char* argv[]){    SessionServer app;    return app.main(argc, argv);}intSessionServer::run(int argc, char* argv[]){    Ice::ObjectAdapterPtr adapter = communicator()->createObjectAdapterWithEndpoints(        "SessionServer", "tcp -h 127.0.0.1 -p 12350 -t 10000");    adapter->add(new SSLPermissionsVerifierI, communicator()->stringToIdentity("sslverifier"));    adapter->add(new SessionManagerI, communicator()->stringToIdentity("sessionmanager"));    adapter->add(new SSLSessionManagerI, communicator()->stringToIdentity("sslsessionmanager"));    adapter->activate();    communicator()->waitForShutdown();    return EXIT_SUCCESS;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?