diff --git a/src/client/pvAccess.h b/src/client/pvAccess.h index 2fa33d3..ed0f8fd 100644 --- a/src/client/pvAccess.h +++ b/src/client/pvAccess.h @@ -633,8 +633,11 @@ namespace pvAccess { // virtual ChannelProvider::shared_pointer getProvider() = 0; /** - * Returns the channel's remote address, e.g. "/192.168.1.101:5064" or "#C0 S1". - * @return the channel's remote address. + * Returns the channel's remote address, signal name, etc... + * For example: + * - client side channel would return server's address, e.g. "/192.168.1.101:5064" + * - server side channel would return underlying bus address, e.g. "#C0 S1". + * @return the channel's address. **/ virtual std::string getRemoteAddress() = 0; diff --git a/src/server/responseHandlers.cpp b/src/server/responseHandlers.cpp index c82f247..7120101 100644 --- a/src/server/responseHandlers.cpp +++ b/src/server/responseHandlers.cpp @@ -760,7 +760,7 @@ ChannelRequester::shared_pointer ServerChannelRequesterImpl::create( std::tr1::shared_ptr tp(new ServerChannelRequesterImpl(transport, channelName, cid, css)); ChannelRequester::shared_pointer cr = tp; // TODO exception guard and report error back - provider->createChannel(channelName, cr, transport->getPriority(), transport->getRemoteName()); + provider->createChannel(channelName, cr, transport->getPriority()); return cr; } @@ -872,9 +872,11 @@ void ServerChannelRequesterImpl::channelStateChange(Channel::shared_pointer cons string ServerChannelRequesterImpl::getRequesterName() { - std::stringstream name; - name << "ServerChannelRequesterImpl/" << _channelName << "[" << _cid << "]"; - return name.str(); + Transport::shared_pointer transport = _transport.lock(); + if (transport) + return transport->getRemoteName(); + else + return ":0"; } void ServerChannelRequesterImpl::message(std::string const & message, MessageType messageType) @@ -943,7 +945,7 @@ void ServerDestroyChannelHandler::handleResponse(osiSockAddr* responseFrom, ChannelHostingTransport::shared_pointer casTransport = dynamic_pointer_cast(transport); - transport->ensureData(2*sizeof(int32)/sizeof(int8)); + transport->ensureData(8); const pvAccessID sid = payloadBuffer->getInt(); const pvAccessID cid = payloadBuffer->getInt(); diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp index 18b52b0..5ff0e84 100644 --- a/testApp/remote/testServer.cpp +++ b/testApp/remote/testServer.cpp @@ -2649,28 +2649,38 @@ public: short /*priority*/, std::string const & address) { - // this is a server instance provider, address holds remote socket IP - if (channelName == "testCounter") + if (address == "local") { - channelRequester->channelCreated(Status::Ok, m_counterChannel); - return m_counterChannel; - } - else if (channelName == "testADC") - { - channelRequester->channelCreated(Status::Ok, m_adcChannel); - return m_adcChannel; - } - else if (channelName == "testMP") - { - channelRequester->channelCreated(Status::Ok, m_mpChannel); - return m_mpChannel; + // this is a server instance provider, address holds remote socket IP + if (channelName == "testCounter") + { + channelRequester->channelCreated(Status::Ok, m_counterChannel); + return m_counterChannel; + } + else if (channelName == "testADC") + { + channelRequester->channelCreated(Status::Ok, m_adcChannel); + return m_adcChannel; + } + else if (channelName == "testMP") + { + channelRequester->channelCreated(Status::Ok, m_mpChannel); + return m_mpChannel; + } + else + { + ChannelProvider::shared_pointer chProviderPtr = shared_from_this(); + Channel::shared_pointer channel = MockChannel::create(chProviderPtr, channelRequester, channelName, address); + channelRequester->channelCreated(Status::Ok, channel); + return channel; + } } else { - ChannelProvider::shared_pointer chProviderPtr = shared_from_this(); - Channel::shared_pointer channel = MockChannel::create(chProviderPtr, channelRequester, channelName, address); - channelRequester->channelCreated(Status::Ok, channel); - return channel; + Channel::shared_pointer nullPtr; + Status errorStatus(Status::STATUSTYPE_ERROR, "only local supported"); + channelRequester->channelCreated(errorStatus, nullPtr); + return nullPtr; } } private: