Skip to content

Commit c1fa5c1

Browse files
authored
Merge pull request #47 from Broekman/master
Resolve Windows (MinGW) issues and minor improvements
2 parents b55b040 + 45cf326 commit c1fa5c1

34 files changed

Lines changed: 279 additions & 131 deletions

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ set(SOURCE_FILES
3030
sockets/TCPSocket.cpp
3131
sockets/UDPBoundSocket.cpp
3232
sockets/UDPSocket.cpp
33+
sockets/Platform.cpp
3334

3435
utils/Logger.cpp
3536
utils/Buffer.cpp

src/ConnectionManager.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ namespace eipScanner {
7171
auto t2oSize = t2oNCP.getConnectionSize();
7272

7373
connectionParameters.connectionPathSize = (connectionParameters.connectionPath .size() / 2)
74-
+ (connectionParameters.connectionPath .size() % 2);
74+
+ (connectionParameters.connectionPath.size() % 2);
7575

7676
if ((connectionParameters.transportTypeTrigger & NetworkConnectionParams::CLASS1) > 0
7777
|| (connectionParameters.transportTypeTrigger & NetworkConnectionParams::CLASS3) > 0) {
@@ -87,22 +87,17 @@ namespace eipScanner {
8787
connectionParameters.t2oNetworkConnectionParams += 4;
8888
}
8989

90-
Buffer buffer;
91-
buffer << sockets::EndPoint("0.0.0.0", 2222);
92-
eip::CommonPacketItem addrItem(eip::CommonPacketItemIds::T2O_SOCKADDR_INFO, buffer.data());
93-
94-
9590
MessageRouterResponse messageRouterResponse;
9691
if (isLarge) {
9792
LargeForwardOpenRequest request(connectionParameters);
9893
messageRouterResponse = _messageRouter->sendRequest(si,
9994
static_cast<cip::CipUsint>(ConnectionManagerServiceCodes::LARGE_FORWARD_OPEN),
100-
EPath(6, 1), request.pack(), {addrItem});
95+
EPath(6, 1), request.pack(), {});
10196
} else {
10297
ForwardOpenRequest request(connectionParameters);
10398
messageRouterResponse = _messageRouter->sendRequest(si,
10499
static_cast<cip::CipUsint>(ConnectionManagerServiceCodes::FORWARD_OPEN),
105-
EPath(6, 1), request.pack(), {addrItem});
100+
EPath(6, 1), request.pack(), {});
106101
}
107102

108103
IOConnection::SPtr ioConnection;
@@ -148,15 +143,15 @@ namespace eipScanner {
148143
} else {
149144
ioConnection->_socket = std::make_unique<UDPSocket>(endPoint);
150145
}
151-
146+
152147
} else {
153-
ioConnection->_socket = std::make_unique<UDPSocket>(si->getRemoteEndPoint().getHost(), 2222);
148+
ioConnection->_socket = std::make_unique<UDPSocket>(si->getRemoteEndPoint().getHost(), EIP_DEFAULT_IMPLICIT_PORT);
154149
}
155150

156151
Logger(LogLevel::INFO) << "Open UDP socket to send data to "
157152
<< ioConnection->_socket->getRemoteEndPoint().toString();
158153

159-
findOrCreateSocket(sockets::EndPoint(si->getRemoteEndPoint().getHost(), 2222));
154+
findOrCreateSocket(sockets::EndPoint(si->getRemoteEndPoint().getHost(), EIP_DEFAULT_IMPLICIT_PORT));
160155

161156
auto result = _connectionMap
162157
.insert(std::make_pair(response.getT2ONetworkConnectionId(), ioConnection));
@@ -202,6 +197,7 @@ namespace eipScanner {
202197
}
203198

204199
auto rc = _connectionMap.erase(ptr->_t2oNetworkConnectionId);
200+
(void) rc;
205201
assert(rc);
206202
} else {
207203
Logger(LogLevel::WARNING) << "Attempt to close an already closed connection";
@@ -212,6 +208,7 @@ namespace eipScanner {
212208
std::vector<BaseSocket::SPtr > sockets;
213209
std::transform(_socketMap.begin(), _socketMap.end(), std::back_inserter(sockets), [](auto entry) {
214210
auto fd = entry.second->getSocketFd();
211+
(void) fd;
215212
return entry.second;
216213
});
217214

@@ -235,6 +232,7 @@ namespace eipScanner {
235232
auto newSocket = std::make_shared<UDPBoundSocket>(endPoint);
236233
_socketMap[endPoint] = newSocket;
237234
newSocket->setBeginReceiveHandler([](sockets::BaseSocket& sock) {
235+
(void) sock;
238236
Logger(LogLevel::DEBUG) << "Received something";
239237
});
240238

@@ -253,7 +251,7 @@ namespace eipScanner {
253251
if (io != _connectionMap.end()) {
254252
io->second->notifyReceiveData(commonPacket.getItems().at(1).getData());
255253
} else {
256-
Logger(LogLevel::ERROR) << "Received data from unknow connection T2O_ID=" << connectionId;
254+
Logger(LogLevel::ERROR) << "Received data from unknown connection T2O_ID=" << connectionId;
257255
}
258256
});
259257

src/DiscoveryManager.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Created by Aleksey Timin on 12/17/19.
33
//
44
#include <system_error>
5-
#include <cerrno>
65

76
#include "eip/EncapsPacketFactory.h"
87
#include "eip/CommonPacket.h"
@@ -11,6 +10,13 @@
1110
#include "utils/Buffer.h"
1211

1312
#include "DiscoveryManager.h"
13+
#include "sockets/Platform.h"
14+
15+
#if defined (__unix__) || defined(__APPLE__)
16+
#define DISCOVERY_SOCKET_RECEIVE_END_ERROR_CODE (EIPSCANNER_SOCKET_ERROR(EAGAIN))
17+
#elif defined(_WIN32) || defined(WIN32) || defined(_WIN64)
18+
#define DISCOVERY_SOCKET_RECEIVE_END_ERROR_CODE (EIPSCANNER_SOCKET_ERROR(ETIMEDOUT))
19+
#endif
1420

1521
namespace eipScanner {
1622
using namespace cip;
@@ -79,7 +85,7 @@ namespace eipScanner {
7985
}
8086
}
8187
} catch (std::system_error& er) {
82-
if (er.code().value() != EAGAIN) {
88+
if (er.code().value() != DISCOVERY_SOCKET_RECEIVE_END_ERROR_CODE) {
8389
throw er;
8490
}
8591
}
@@ -93,7 +99,7 @@ namespace eipScanner {
9399

94100
int broadcast = 1;
95101
if(setsockopt(socket->getSocketFd(), SOL_SOCKET, SO_BROADCAST, (char*)&broadcast, sizeof(broadcast)) < 0) {
96-
throw std::system_error(errno, std::generic_category());
102+
throw std::system_error(sockets::BaseSocket::getLastError(), sockets::BaseSocket::getErrorCategory());
97103
}
98104

99105
return socket;

src/DiscoveryManager.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ namespace eipScanner {
3737
/**
3838
* @brief default destructor
3939
*/
40-
~DiscoveryManager();
40+
virtual ~DiscoveryManager();
4141

4242
/**
4343
* @brief Discovers the EIP network

src/IOConnection.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,20 @@ namespace eipScanner {
3131
, _connectionTimeoutMultiplier{0}
3232
, _connectionTimeoutCount{0}
3333
, _o2tSequenceNumber{0}
34+
, _t2oSequenceNumber{0}
35+
, _serialNumber{0}
3436
, _transportTypeTrigger{0}
3537
, _o2tRealTimeFormat{0}
3638
, _t2oRealTimeFormat{0}
37-
, _t2oSequenceNumber{0}
3839
, _sequenceValueCount{0}
3940
, _connectionPath(0)
4041
, _originatorVendorId{0}
4142
, _originatorSerialNumber{0}
42-
, _serialNumber{0}
4343
, _outputData()
44-
, _lastHandleTime(std::chrono::steady_clock::now())
45-
, _receiveDataHandle([](auto a, auto b, auto data) {})
46-
, _sendDataHandle([](auto data) {})
47-
, _closeHandle([]() {}) {
44+
, _receiveDataHandle([](auto, auto, auto) {})
45+
, _closeHandle([]() {})
46+
, _sendDataHandle([](auto) {})
47+
, _lastHandleTime(std::chrono::steady_clock::now()) {
4848
}
4949

5050
IOConnection::~IOConnection() = default;

src/IdentityObject.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace eipScanner {
99
using namespace cip;
1010
using utils::Buffer;
11-
11+
1212
IdentityObject::IdentityObject(cip::CipUint instanceId)
1313
: BaseObject(CLASS_ID, instanceId)
1414
, _vendorId(0)
@@ -25,7 +25,14 @@ namespace eipScanner {
2525
}
2626

2727
IdentityObject::IdentityObject(cip::CipUint instanceId, const SessionInfoIf::SPtr &si, const MessageRouter::SPtr &messageRouter)
28-
: BaseObject(CLASS_ID, instanceId) {
28+
: BaseObject(CLASS_ID, instanceId)
29+
, _vendorId(0)
30+
, _deviceType(0)
31+
, _productCode(0)
32+
, _revision(0,0)
33+
, _status(0)
34+
, _serialNumber(0)
35+
, _productName("") {
2936

3037
auto response = messageRouter->sendRequest(
3138
si,
@@ -105,4 +112,4 @@ namespace eipScanner {
105112
void IdentityObject::setProductName(const std::string &productName) {
106113
_productName = CipShortString(productName);
107114
}
108-
}
115+
}

src/MessageRouter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,4 @@ namespace eipScanner {
8282
MessageRouter::sendRequest(SessionInfoIf::SPtr si, CipUsint service, const EPath &path) const {
8383
return this->sendRequest(si, service, path, {}, {});
8484
}
85-
}
85+
}

src/ParameterObject.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,12 +43,15 @@ namespace eipScanner {
4343
ParameterObject::ParameterObject(cip::CipUint instanceId, bool fullAttributes, size_t typeSize)
4444
: BaseObject(CLASS_ID, instanceId)
4545
, _hasFullAttributes(fullAttributes)
46+
, _isScalable(false)
47+
, _isReadOnly(false)
48+
, _parameter(0)
4649
, _value(typeSize)
47-
, _maxValue(typeSize)
50+
, _type(CipDataTypes::ANY)
51+
, _name{""}
4852
, _minValue(typeSize)
53+
, _maxValue(typeSize)
4954
, _defaultValue(typeSize)
50-
, _isScalable(false)
51-
, _isReadOnly(false)
5255
, _scalingMultiplier(1)
5356
, _scalingDivisor(1)
5457
, _scalingBase(1)
@@ -60,10 +63,16 @@ namespace eipScanner {
6063
const SessionInfoIf::SPtr &si,
6164
const MessageRouter::SPtr& messageRouter)
6265
: BaseObject(CLASS_ID, instanceId)
63-
, _name{""}
64-
, _hasFullAttributes{fullAttributes}
65-
, _isScalable{false}
66+
, _hasFullAttributes(fullAttributes)
67+
, _isScalable(false)
6668
, _isReadOnly(false)
69+
, _parameter(0)
70+
, _value(0)
71+
, _type(CipDataTypes::ANY)
72+
, _name{""}
73+
, _minValue(0)
74+
, _maxValue(0)
75+
, _defaultValue(0)
6776
, _scalingMultiplier(1)
6877
, _scalingDivisor(1)
6978
, _scalingBase(1)
@@ -302,4 +311,4 @@ namespace eipScanner {
302311
return engValue;
303312
}
304313
}
305-
};
314+
}

src/ParameterObject.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ class ParameterObject : public BaseObject {
363363
bool _isScalable;
364364
bool _isReadOnly;
365365

366-
cip::CipUint _parameter;
366+
cip::CipUint _parameter;
367367
std::vector<uint8_t> _value;
368368
cip::CipDataTypes _type;
369369
std::string _name;

src/cip/EPath.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -165,4 +165,4 @@ namespace cip {
165165
&& _attributeId == other._attributeId;
166166
}
167167
}
168-
}
168+
}

0 commit comments

Comments
 (0)