22 #if (_MSC_VER >= 1700)
43 std::vector<VisionaryAutoIPScan::DeviceInfo>
47 std::random_device rd;
48 std::default_random_engine mt(rd());
49 unsigned int teleIdCounter = mt();
50 std::vector<VisionaryAutoIPScan::DeviceInfo> deviceList;
52 std::unique_ptr<UdpSocket> pTransport(
new UdpSocket());
54 if (pTransport->connect(broadcastAddress, htons(port)) != 0)
60 std::vector<uint8_t> autoIpPacket;
61 autoIpPacket.push_back(0x10);
62 autoIpPacket.push_back(0x0);
64 autoIpPacket.push_back(0x0);
65 autoIpPacket.push_back(0x0);
67 autoIpPacket.push_back(0xFF);
68 autoIpPacket.push_back(0xFF);
69 autoIpPacket.push_back(0xFF);
70 autoIpPacket.push_back(0xFF);
71 autoIpPacket.push_back(0xFF);
72 autoIpPacket.push_back(0xFF);
74 autoIpPacket.push_back(0x0);
75 autoIpPacket.push_back(0x0);
76 autoIpPacket.push_back(0x0);
77 autoIpPacket.push_back(0x0);
79 autoIpPacket.push_back(0x0);
80 autoIpPacket.push_back(0x0);
83 unsigned int curtelegramID = teleIdCounter++;
84 memcpy(&autoIpPacket.data()[10], &curtelegramID, 4u);
87 pTransport->send(autoIpPacket);
90 const std::chrono::steady_clock::time_point startTime(std::chrono::steady_clock::now());
93 std::vector<std::uint8_t> receiveBuffer;
94 const std::chrono::steady_clock::time_point now(std::chrono::steady_clock::now());
95 if ((now - startTime) > std::chrono::milliseconds(timeOut))
99 if (pTransport->recv(receiveBuffer, 1400) > 16)
101 unsigned int pos = 0;
102 if (receiveBuffer[pos++] != 0x90)
107 unsigned int payLoadSize = receiveBuffer[pos] << 8 | receiveBuffer[pos + 1];
110 unsigned int recvTelegramID = receiveBuffer[pos] | receiveBuffer[pos + 1] << 8 |
111 receiveBuffer[pos + 2] << 16 | receiveBuffer[pos + 3] << 24;
114 if (recvTelegramID != curtelegramID)
120 char xmlPayload[1400];
121 memset(xmlPayload, 0,
sizeof(xmlPayload));
122 memcpy(&xmlPayload, &receiveBuffer[pos], payLoadSize);
123 std::stringstream stringStream(xmlPayload);
127 deviceList.push_back(dI);
137 VisionaryAutoIPScan::DeviceInfo
142 auto tXMLError = tree.
Parse(rStringStream.str());
145 std::printf(
"Reading XML tree in AutoIP NetScan result failed.");
157 if (ptDataSetsTree != 0)
162 ptAttr = ptDataSetsTree->FindAttribute(
"DeviceType");
165 dI.DeviceName = ptAttr->
Value();
168 ptAttr = ptDataSetsTree->FindAttribute(
"IPAddress");
171 dI.IpAddress = ptAttr->
Value();
174 ptAttr = ptDataSetsTree->FindAttribute(
"MACAddr");
177 dI.MacAddress = ptAttr->
Value();
180 ptAttr = ptDataSetsTree->FindAttribute(
"HostPortNo");
183 dI.Port = ptAttr->
Value();
186 ptAttr = ptDataSetsTree->FindAttribute(
"IPMask");
189 dI.subNet = ptAttr->
Value();