Skip to content

Commit f67e350

Browse files
Merge pull request #19 from F2I-Consulting/gcc4.8
2 parents 4c5ec7d + 317f920 commit f67e350

21 files changed

+18543
-2191
lines changed

CMakeLists.txt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,14 +251,14 @@ if (WITH_FESAPI)
251251
${FETPAPI_FESAPI_SOURCES}
252252
${FETPAPI_FESAPI_HEADERS}
253253
)
254-
target_include_directories(${PROJECT_NAME} PRIVATE ${HDF5_C_INCLUDE_DIR} ${FESAPI_INCLUDE_DIR})
254+
target_include_directories(${PROJECT_NAME} PRIVATE ${FESAPI_INCLUDE_DIR})
255255
endif (WITH_FESAPI)
256256

257257
target_sources(${PROJECT_NAME} PRIVATE ${ALL_SOURCES_AND_HEADERS})
258258

259-
target_include_directories(${PROJECT_NAME} PRIVATE ${AVRO_INCLUDE_DIR} ${Boost_INCLUDE_DIR})
259+
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${AVRO_INCLUDE_DIR} ${Boost_INCLUDE_DIR})
260260
if (WITH_ETP_SSL)
261-
target_include_directories(${PROJECT_NAME} PRIVATE ${OPENSSL_INCLUDE_DIR})
261+
target_include_directories(${PROJECT_NAME} SYSTEM PRIVATE ${OPENSSL_INCLUDE_DIR})
262262
endif ()
263263

264264
target_include_directories(${PROJECT_NAME} INTERFACE
@@ -284,6 +284,14 @@ endif (WIN32)
284284

285285
add_subdirectory(doc)
286286

287+
if (WITH_FESAPI)
288+
set (WITH_TEST OFF CACHE BOOL "Also build the unit tests.")
289+
if (WITH_TEST)
290+
enable_testing()
291+
add_subdirectory(test)
292+
endif (WITH_TEST)
293+
endif (WITH_FESAPI)
294+
287295
# ============================================================================
288296
# Install Fetpapi library
289297
# ============================================================================

cmake/swigEtp1_2Include.i.in

Lines changed: 0 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,6 @@ typedef long long time_t;
142142
%{
143143
#include "../src/etp/ClientSessionLaunchers.h"
144144
#include "../src/etp/EtpHelpers.h"
145-
#include "../src/etp/PlainServerSession.h"
146-
#include "../src/etp/Server.h"
147145
%}
148146

149147
#ifdef WITH_FESAPI
@@ -165,8 +163,6 @@ typedef long long time_t;
165163
%nspace ETP_NS::AbstractSession;
166164
%nspace ETP_NS::PlainClientSession;
167165
%nspace ETP_NS::InitializationParameters;
168-
%nspace ETP_NS::ServerInitializationParameters;
169-
%nspace ETP_NS::Server;
170166
#ifdef WITH_FESAPI
171167
%nspace ETP_NS::FesapiHdfProxyFactory;
172168
#endif
@@ -1074,26 +1070,10 @@ namespace Energistics {
10741070
%feature("director") ETP_NS::TransactionHandlers;
10751071
%feature("director") ETP_NS::DataspaceHandlers;
10761072
%feature("director") ETP_NS::InitializationParameters;
1077-
%feature("director") ETP_NS::ServerInitializationParameters;
10781073

10791074
/* Following extensions aims at preventing the Python garbage collector from
10801075
garbage collecting a protocol handler that may be still used by a session. */
10811076
#ifdef SWIGPYTHON
1082-
%fragment("server_initialization_parameters_reference_init", "init") {
1083-
server_initialization_parameters_reference();
1084-
}
1085-
%fragment("server_initialization_parameters_reference_function", "header", fragment="server_initialization_parameters_reference_init") {
1086-
static PyObject *server_initialization_parameters_reference() {
1087-
static PyObject *server_initialization_parameters_reference_string = SWIG_Python_str_FromChar("__server_initialization_parameters_reference");
1088-
return server_initialization_parameters_reference_string;
1089-
}
1090-
}
1091-
%extend ETP_NS::Server {
1092-
%typemap(ret, fragment="server_initialization_parameters_reference_function") void listen(ServerInitializationParameters* serverInitializationParams, int threadCount) %{
1093-
PyObject_SetAttr($self, server_initialization_parameters_reference(), args);
1094-
%}
1095-
}
1096-
10971077
%fragment("core_handler_reference_init", "init") {
10981078
core_handler_reference();
10991079
}
@@ -1213,15 +1193,6 @@ namespace Energistics {
12131193
#endif
12141194

12151195
#ifdef SWIGCSHARP
1216-
%typemap(cscode) ETP_NS::Server %{
1217-
private ServerInitializationParameters serverInitializationParametersReference;
1218-
%}
1219-
1220-
%typemap(csin,
1221-
post=" serverInitializationParametersReference = $csinput;"
1222-
) ETP_NS::ServerInitializationParameters* serverInitializationParams "ServerInitializationParameters.getCPtr($csinput)"
1223-
1224-
12251196
%typemap(cscode) ETP_NS::AbstractSession %{
12261197
private CoreHandlers coreHandlersReference = null;
12271198
private DiscoveryHandlers discoveryHandlersReference = null;
@@ -1262,14 +1233,6 @@ namespace Energistics {
12621233
#endif
12631234

12641235
#ifdef SWIGJAVA
1265-
%typemap(javacode) ETP_NS::Server %{
1266-
private ServerInitializationParameters serverInitializationParametersReference;
1267-
%}
1268-
1269-
%typemap(javain,
1270-
post=" serverInitializationParametersReference = $javainput;"
1271-
) ETP_NS::ServerInitializationParameters* serverInitializationParams "ServerInitializationParameters.getCPtr($javainput)"
1272-
12731236
%typemap(javacode) ETP_NS::AbstractSession %{
12741237
private CoreHandlers coreHandlersReference;
12751238
private DiscoveryHandlers discoveryHandlersReference;
@@ -1967,29 +1930,6 @@ namespace ETP_NS
19671930
#endif
19681931
}
19691932

1970-
/******************* SERVER ***************************/
1971-
1972-
class ServerInitializationParameters : public InitializationParameters
1973-
{
1974-
public:
1975-
ServerInitializationParameters(const std::string & serverUuid, const std::string & host, unsigned short port);
1976-
virtual ~ServerInitializationParameters();
1977-
1978-
virtual std::string getContactEmail() const;
1979-
virtual std::string getContactName() const;
1980-
virtual std::string getContactPhone() const;
1981-
virtual std::string getOrganizationName() const;
1982-
1983-
virtual std::vector<std::string> makeSupportedEncodings() const;
1984-
};
1985-
1986-
class Server
1987-
{
1988-
public:
1989-
Server();
1990-
void listen(ServerInitializationParameters* serverInitializationParams, int threadCount);
1991-
};
1992-
19931933
#ifdef WITH_FESAPI
19941934
%typemap(javaimports) FesapiHdfProxyFactory %{
19951935
import com.f2i_consulting.fesapi.common.HdfProxyFactory;

src/etp/AbstractClientSession.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ namespace ETP_NS
154154
{
155155
if (ec) {
156156
std::cerr << "on_handshake : " << ec.message() << std::endl;
157-
std::cerr << "Sometimes some ETP server require a trailing slash at the end of their URL" << std::endl;
157+
std::cerr << "Sometimes some ETP server require a trailing slash at the end of their URL. Did you also check your optional \"data-partition-id\" additional Header Field?" << std::endl;
158158
return;
159159
}
160160

src/etp/AbstractSession.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ void AbstractSession::on_read(boost::system::error_code ec, std::size_t bytes_tr
112112
}
113113
} // Scope for specificProtocolHandlersLock
114114

115+
size_t receivedMhProtocol = static_cast<size_t>(receivedMh.protocol);
115116
if (specificProtocolHandler) {
116117
// Receive a message which has been asked to be processed with a specific protocol handler
117118
specificProtocolHandler->decodeMessageBody(receivedMh, d);
@@ -121,13 +122,13 @@ void AbstractSession::on_read(boost::system::error_code ec, std::size_t bytes_tr
121122
specificProtocolHandlers.erase(specificProtocolHandlerIt);
122123
}
123124
}
124-
else if (receivedMh.protocol < protocolHandlers.size() && protocolHandlers[receivedMh.protocol] != nullptr) {
125+
else if (receivedMhProtocol < protocolHandlers.size() && protocolHandlers[receivedMhProtocol] != nullptr) {
125126
// Receive a message to be processed with a common protocol handler in case for example an unsollicited notification
126-
protocolHandlers[receivedMh.protocol]->decodeMessageBody(receivedMh, d);
127+
protocolHandlers[receivedMhProtocol]->decodeMessageBody(receivedMh, d);
127128
}
128129
else {
129-
std::cerr << "Received a message with id " << receivedMh.messageId << " for which non protocol handlers is associated. Protocol " << receivedMh.protocol << std::endl;
130-
send(ETP_NS::EtpHelpers::buildSingleMessageProtocolException(4, "The agent does not support the protocol " + std::to_string(receivedMh.protocol) + " identified in a message header."), receivedMh.messageId, 0x02);
130+
std::cerr << "Received a message with id " << receivedMh.messageId << " for which non protocol handlers is associated. Protocol " << receivedMhProtocol << std::endl;
131+
send(ETP_NS::EtpHelpers::buildSingleMessageProtocolException(4, "The agent does not support the protocol " + std::to_string(receivedMhProtocol) + " identified in a message header."), receivedMh.messageId, 0x02);
131132
}
132133
}
133134
flushReceivingBuffer();
@@ -311,7 +312,7 @@ std::string AbstractSession::startTransaction(std::vector<std::string> dataspace
311312
throw std::logic_error("You did not register any transaction protocol handlers.");
312313
}
313314
if (handlers->isInAnActiveTransaction()) {
314-
throw std::logic_error("You cannot start a transaction before the current transaction is rolled back or committed. ETP1.2 intentionally supports a single open transaction on a session.");
315+
throw std::logic_error("You cannot start a transaction before the current transaction is rolled back or committed. ETP1.2 intentionally supports a single opened transaction on a session.");
315316
}
316317

317318
Energistics::Etp::v12::Protocol::Transaction::StartTransaction startTransactionMsg;

src/etp/EtpMessages.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1946,7 +1946,7 @@ namespace Energistics {
19461946
namespace v12 {
19471947
namespace Datatypes {
19481948
struct Uuid{
1949-
std::array<uint8_t, 16> array;
1949+
std::array<uint8_t, 16> array{};
19501950
};
19511951
}
19521952
}

src/etp/PlainServerSession.cpp

Lines changed: 0 additions & 29 deletions
This file was deleted.

src/etp/PlainServerSession.h

Lines changed: 0 additions & 43 deletions
This file was deleted.

src/etp/ProtocolHandlers/CoreHandlers.cpp

Lines changed: 3 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,8 @@ under the License.
1818
-----------------------------------------------------------------------*/
1919
#include "CoreHandlers.h"
2020

21-
#include "../PlainServerSession.h"
22-
#ifdef WITH_ETP_SSL
23-
#include "../ssl/SslServerSession.h"
24-
#endif
21+
#include "../AbstractSession.h"
2522
#include "../EtpHelpers.h"
26-
#include "../ServerInitializationParameters.h"
2723

2824
using namespace ETP_NS;
2925

@@ -101,103 +97,9 @@ void CoreHandlers::decodeMessageBody(const Energistics::Etp::v12::Datatypes::Mes
10197
}
10298
}
10399

104-
void CoreHandlers::on_RequestSession(const Energistics::Etp::v12::Protocol::Core::RequestSession & rs, int64_t correlationId)
100+
void CoreHandlers::on_RequestSession(const Energistics::Etp::v12::Protocol::Core::RequestSession&, int64_t correlationId)
105101
{
106-
ServerInitializationParameters const* serverInitializationParams = nullptr;
107-
108-
PlainServerSession* pss = dynamic_cast<PlainServerSession*>(session);
109-
if (pss != nullptr) {
110-
serverInitializationParams = pss->getServerInitializationParameters();
111-
}
112-
#ifdef WITH_ETP_SSL
113-
else {
114-
SslServerSession* sss = dynamic_cast<SslServerSession*>(session);
115-
if (sss != nullptr) {
116-
serverInitializationParams = sss->getServerInitializationParameters();
117-
}
118-
}
119-
#endif
120-
121-
if (serverInitializationParams == nullptr) {
122-
std::cerr << "Request Session message must be received on a server session." << std::endl;
123-
}
124-
125-
// Check format
126-
if (std::find(rs.supportedFormats.begin(), rs.supportedFormats.end(), "xml") == rs.supportedFormats.end()) {
127-
session->send(ETP_NS::EtpHelpers::buildSingleMessageProtocolException(21, "Per the ETP1.2 official specification, \"xml\" format MUST BE supported."), correlationId, 0x02);
128-
session->close();
129-
return;
130-
}
131-
132-
// Check requested protocols
133-
auto supportedProtocols = serverInitializationParams->makeSupportedProtocols();
134-
std::vector<Energistics::Etp::v12::Datatypes::SupportedProtocol> requestedAndSupportedProtocols;
135-
for (auto& rp : rs.requestedProtocols) {
136-
const auto validatedProtocol = std::find_if(supportedProtocols.begin(), supportedProtocols.end(),
137-
[rp](const Energistics::Etp::v12::Datatypes::SupportedProtocol & sp) -> bool {
138-
return sp.protocol == rp.protocol &&
139-
sp.role == rp.role &&
140-
sp.protocolVersion.major == rp.protocolVersion.major &&
141-
sp.protocolVersion.minor == rp.protocolVersion.minor &&
142-
sp.protocolVersion.patch == rp.protocolVersion.patch &&
143-
sp.protocolVersion.revision == rp.protocolVersion.revision;
144-
}
145-
);
146-
if (validatedProtocol != std::end(supportedProtocols)) {
147-
requestedAndSupportedProtocols.push_back(*validatedProtocol);
148-
}
149-
}
150-
151-
if (requestedAndSupportedProtocols.empty()) {
152-
session->send(ETP_NS::EtpHelpers::buildSingleMessageProtocolException(2, "The server does not support any of the requested protocols."), correlationId, 0x02);
153-
session->close();
154-
return;
155-
}
156-
157-
// Check requested dataobjects
158-
auto supportedDataobjects = serverInitializationParams->makeSupportedDataObjects();
159-
std::vector<Energistics::Etp::v12::Datatypes::SupportedDataObject> requestedAndSupportedDataObjects;
160-
for (auto& rd : rs.supportedDataObjects) {
161-
const auto validatedDataObject = std::find_if(supportedDataobjects.begin(), supportedDataobjects.end(),
162-
[rd](const Energistics::Etp::v12::Datatypes::SupportedDataObject & sd) -> bool {
163-
return sd.qualifiedType == rd.qualifiedType;
164-
}
165-
);
166-
if (validatedDataObject != std::end(supportedDataobjects)) {
167-
requestedAndSupportedDataObjects.push_back(*validatedDataObject);
168-
}
169-
}
170-
171-
// Check MaxWebSocketMessagePayloadSize endpoint capability
172-
auto supportedEndPointCaps = serverInitializationParams->makeEndpointCapabilities();
173-
const auto requestedMaxWebSocketMessagePayloadSizeIt = rs.endpointCapabilities.find("MaxWebSocketMessagePayloadSize");
174-
if (requestedMaxWebSocketMessagePayloadSizeIt != rs.endpointCapabilities.end() && requestedMaxWebSocketMessagePayloadSizeIt->second.item.idx() == 3) {
175-
const int64_t requestedMaxWebSocketMessagePayloadSize = requestedMaxWebSocketMessagePayloadSizeIt->second.item.get_long();
176-
if (requestedMaxWebSocketMessagePayloadSize > 0 && requestedMaxWebSocketMessagePayloadSize != session->getMaxWebSocketMessagePayloadSize()) {
177-
session->setMaxWebSocketMessagePayloadSize(requestedMaxWebSocketMessagePayloadSize);
178-
179-
Energistics::Etp::v12::Datatypes::DataValue value;
180-
value.item.set_long(requestedMaxWebSocketMessagePayloadSize);
181-
supportedEndPointCaps["MaxWebSocketFramePayloadSize"] = value;
182-
supportedEndPointCaps["MaxWebSocketMessagePayloadSize"] = value;
183-
}
184-
}
185-
186-
// Build Open Session message
187-
Energistics::Etp::v12::Protocol::Core::OpenSession openSession;
188-
openSession.applicationName = serverInitializationParams->getApplicationName();
189-
openSession.applicationVersion = serverInitializationParams->getApplicationVersion();
190-
std::copy(std::begin(session->getIdentifier().data), std::end(session->getIdentifier().data), openSession.sessionId.array.begin());
191-
std::copy(std::begin(serverInitializationParams->getInstanceId().data), std::end(serverInitializationParams->getInstanceId().data), openSession.serverInstanceId.array.begin());
192-
openSession.supportedFormats.push_back("xml");
193-
openSession.supportedProtocols = requestedAndSupportedProtocols;
194-
openSession.endpointCapabilities = supportedEndPointCaps;
195-
openSession.supportedDataObjects = requestedAndSupportedDataObjects;
196-
openSession.currentDateTime = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
197-
198-
session->send(openSession, correlationId, 0x02);
199-
200-
session->fesapi_log("A new websocket session", session->getIdentifier(), "has been opened by a client");
102+
session->send(ETP_NS::EtpHelpers::buildSingleMessageProtocolException(1, "You cannot request a session to a client."), correlationId, 0x02);
201103
}
202104

203105
void CoreHandlers::on_OpenSession(const Energistics::Etp::v12::Protocol::Core::OpenSession &, int64_t)

0 commit comments

Comments
 (0)