channelCreate w/ address prototype support; inetAddressUtil parsing error handling

This commit is contained in:
Matej Sekoranja
2014-06-06 00:17:06 +02:00
parent 8db40b7fab
commit 63f23e278a
4 changed files with 22 additions and 17 deletions
+4 -3
View File
@@ -70,7 +70,7 @@ namespace epics {
}
virtual epics::pvData::String getType() const {
return epics::pvData::String("UDP");
return epics::pvData::String("udp");
}
virtual std::size_t getReceiveBufferSize() const {
@@ -135,8 +135,9 @@ namespace epics {
virtual void close();
virtual void ensureData(std::size_t /*size*/) {
// noop
virtual void ensureData(std::size_t size) {
if (_receiveBuffer->getRemaining() < size)
throw std::underflow_error("no more data in UDP packet");
}
virtual void alignData(std::size_t alignment) {
+1 -1
View File
@@ -404,7 +404,7 @@ namespace epics {
public:
epics::pvData::String getType() const {
return epics::pvData::String("TCP");
return epics::pvData::String("tcp");
}
+13 -9
View File
@@ -2988,7 +2988,7 @@ namespace epics {
epics::pvData::String const & channelName,
ChannelRequester::shared_pointer const & channelRequester,
short priority,
epics::pvData::String const & /*address*/)
epics::pvData::String const & addressesStr)
{
std::tr1::shared_ptr<ClientContextImpl> context = m_context.lock();
if (!context.get())
@@ -2999,8 +2999,12 @@ namespace epics {
return nullChannel;
}
// TODO support addressList
auto_ptr<InetAddrVector> addresses;
if (!addressesStr.empty())
addresses.reset(getSocketAddressList(addressesStr, PVA_SERVER_PORT));
if (addresses->empty())
addresses.reset();
Channel::shared_pointer channel = context->createChannelInternal(channelName, channelRequester, priority, addresses);
if (channel.get())
channelRequester->channelCreated(Status::Ok, channel);
@@ -3522,13 +3526,13 @@ namespace epics {
{
m_context->getChannelSearchManager()->registerSearchInstance(shared_from_this());
}
/* TODO
else
// TODO not only first
// TODO minor version
// TODO what to do if there is no channel, do not search in a loop!!! do this in other thread...!
searchResponse(CAConstants.PVA_MINOR_PROTOCOL_REVISION, addresses[0]);
*/
else if (!m_addresses->empty())
{
// TODO not only first !!!
// TODO minor version !!!
// TODO what to do if there is no channel, do not search in a loop!!! do this in other thread...!
searchResponse(PVA_PROTOCOL_REVISION, &((*m_addresses)[0]));
}
}
virtual void searchResponse(int8 minorRevision, osiSockAddr* serverAddress) {
+4 -4
View File
@@ -121,15 +121,15 @@ InetAddrVector* getSocketAddressList(String list, int defaultPort,
while((subEnd = list.find(' ', subStart))!=String::npos) {
String address = list.substr(subStart, (subEnd-subStart));
osiSockAddr addr;
aToIPAddr(address.c_str(), defaultPort, &addr.ia);
iav->push_back(addr);
if (aToIPAddr(address.c_str(), defaultPort, &addr.ia) == 0)
iav->push_back(addr);
subStart = list.find_first_not_of(" \t\r\n\v", subEnd);
}
if(subStart!=String::npos&&list.length()>0) {
osiSockAddr addr;
aToIPAddr(list.substr(subStart).c_str(), defaultPort, &addr.ia);
iav->push_back(addr);
if (aToIPAddr(list.substr(subStart).c_str(), defaultPort, &addr.ia) == 0)
iav->push_back(addr);
}
if(appendList!=NULL) {