diff --git a/server/devicemanager.cpp b/server/devicemanager.cpp index 94a38da..8ace3e3 100644 --- a/server/devicemanager.cpp +++ b/server/devicemanager.cpp @@ -321,6 +321,10 @@ Device* DeviceManager::originDevice(PacketBuffer *pktBuf) quint16 vlan; int idx = 0; + // Do we have any devices at all? + if (!deviceCount()) + return NULL; + // pktBuf will not have the correct dstMac populated, so use bcastMac // and search for device by IP diff --git a/server/myservice.cpp b/server/myservice.cpp index 2c5fc62..3d8531c 100644 --- a/server/myservice.cpp +++ b/server/myservice.cpp @@ -933,11 +933,18 @@ _invalid_port: quint64 getDeviceMacAddress(int portId, int streamId, int frameIndex) { MyService *service = drone->rpcService(); + DeviceManager *devMgr = NULL; quint64 mac; if (!service) return 0; + if ((portId >= 0) && (portId < service->portInfo.size())) + devMgr = service->portInfo[portId]->deviceManager(); + + if (!devMgr || !devMgr->deviceCount()) + return 0; + service->portLock[portId]->lockForWrite(); mac = service->portInfo[portId]->deviceMacAddress(streamId, frameIndex); service->portLock[portId]->unlock(); @@ -948,11 +955,18 @@ quint64 getDeviceMacAddress(int portId, int streamId, int frameIndex) quint64 getNeighborMacAddress(int portId, int streamId, int frameIndex) { MyService *service = drone->rpcService(); + DeviceManager *devMgr = NULL; quint64 mac; if (!service) return 0; + if ((portId >= 0) && (portId < service->portInfo.size())) + devMgr = service->portInfo[portId]->deviceManager(); + + if (!devMgr || !devMgr->deviceCount()) + return 0; + service->portLock[portId]->lockForWrite(); mac = service->portInfo[portId]->neighborMacAddress(streamId, frameIndex); service->portLock[portId]->unlock();