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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
// **********************************************************************
//
// Copyright (c) 2003-2009 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 <Transceiver.h>
using namespace std;
SOCKET
Transceiver::fd()
{
return _transceiver->fd();
}
IceInternal::SocketStatus
Transceiver::initialize()
{
IceInternal::SocketStatus status = _configuration->initializeSocketStatus();
if(status == IceInternal::NeedConnect)
{
return status;
}
else if(status == IceInternal::NeedWrite)
{
if(!_initialized)
{
status = _transceiver->initialize();
if(status != IceInternal::Finished)
{
return status;
}
_initialized = true;
}
return IceInternal::NeedWrite;
}
else if(status == IceInternal::NeedRead)
{
return status;
}
_configuration->checkInitializeException();
if(!_initialized)
{
IceInternal::SocketStatus status = _transceiver->initialize();
if(status != IceInternal::Finished)
{
return status;
}
_initialized = true;
}
return IceInternal::Finished;
}
void
Transceiver::close()
{
_transceiver->close();
}
bool
Transceiver::write(IceInternal::Buffer& buf)
{
if(!_initialized)
{
throw Ice::SocketException(__FILE__, __LINE__);
}
if(!_configuration->writeReady())
{
return false;
}
_configuration->checkWriteException();
return _transceiver->write(buf);
}
bool
Transceiver::read(IceInternal::Buffer& buf)
{
if(!_initialized)
{
throw Ice::SocketException(__FILE__, __LINE__);
}
if(!_configuration->readReady())
{
return false;
}
_configuration->checkReadException();
return _transceiver->read(buf);
}
string
Transceiver::type() const
{
return "test-" + _transceiver->type();
}
string
Transceiver::toString() const
{
return _transceiver->toString();
}
void
Transceiver::checkSendSize(const IceInternal::Buffer& buf, size_t messageSizeMax)
{
_transceiver->checkSendSize(buf, messageSizeMax);
}
//
// Only for use by Connector, Acceptor
//
Transceiver::Transceiver(const IceInternal::TransceiverPtr& transceiver) :
_transceiver(transceiver),
_configuration(Configuration::getInstance()),
_initialized(false)
{
}
|