1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
// **********************************************************************
//
// Copyright (c) 2002
// MutableRealms, Inc.
// Huntsville, AL, USA
//
// All Rights Reserved
//
// **********************************************************************
#include <Ice/SUdpClientControlChannel.h>
#include <Ice/Instance.h>
#include <Ice/Communicator.h>
#include <Ice/ObjectAdapter.h>
#include <Ice/IdentityUtil.h>
#include <Ice/SUdpTransceiver.h>
#include <sstream>
using namespace std;
using namespace Ice;
using namespace IceSecurity::SecureUdp;
void
IceSecurity::SecureUdp::ClientControlChannel::serverHello(Long clientID, const ByteSeq& key, const Current&)
{
IceUtil::Mutex::Lock sync(_mutex);
if (_transceiver != 0)
{
_transceiver->serverHello(clientID, key);
}
}
void
IceSecurity::SecureUdp::ClientControlChannel::serverKeyChange(const ByteSeq& key, const Current&)
{
IceUtil::Mutex::Lock sync(_mutex);
if (_transceiver != 0)
{
_transceiver->serverKeyChange(key);
}
}
void
IceSecurity::SecureUdp::ClientControlChannel::serverGoodbye(const Current&)
{
IceUtil::Mutex::Lock sync(_mutex);
if (_transceiver != 0)
{
_transceiver->serverGoodbye();
}
}
IceSecurity::SecureUdp::ClientControlChannel::ClientControlChannel(const SUdpTransceiverPtr& transceiver,
const InstancePtr& instance,
const std::string& host,
int port) :
ControlChannel(transceiver, instance),
_host(host),
_port(port)
{
// Create the Client Channel's name
ostringstream objectName;
objectName << "sudpClient" << hex << (void *) this;
// This MUST be an SSL endpoint - secure handshake takes place over this.
ostringstream endpt;
endpt << "ssl";
// Create the ObjectAdapter's name
ostringstream objectAdapterName;
objectAdapterName << "sudpClientControl" << hex << (void *) this;
Ice::CommunicatorPtr communicator = _instance->communicator();
// Create our ObjectAdapter
_adapter = communicator->createObjectAdapterWithEndpoints(objectAdapterName.str(), endpt.str());
// The client control channel is the implementaion.
ClientChannelPtr clientChannel = this;
_adapter->add(clientChannel, Ice::stringToIdentity(objectName.str()));
// Okay, allow the object to begin accepting requests
_adapter->activate();
}
IceSecurity::SecureUdp::ClientControlChannel::~ClientControlChannel()
{
// Make it impossible for the control channel to access the Transceiver
// after transceiver destruction.
unsetTransceiver();
}
|