Skip to content

Commit 83945d3

Browse files
committed
Connection API improvements
- TcpConnector and UdsConnector have been replaced with 'connector' factory functions in <cppwamp/tcp.hpp> and <cppwamp/uds.hpp>. The new interface uses a fluent API which allows the user to specify setsockopt socket options (closes #63). Consult the revised tutorials and documentation to learn how to migrate your app code to the revised connection interface. - Revised connection API so that unused serialization libraries are not needed when using CppWAMP in a header-only fashion (fixes #64). - Raw socket transports now use 16MB as the default maximum length for incoming messages (closes #39).
1 parent 74dfe5c commit 83945d3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+2281
-2168
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ build/
55
*.pro.user
66
CMakeLists.txt.user
77
*.vpp~*
8-
8+
*.vpp.bak

.hgignore

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
syntax: glob
22
*.pro.user
3+
CMakeLists.txt.user
34
ext/*
45
doc/html
56
*.vpp~*
6-
CMakeLists.txt.user
7-
.git
87
*.vpp.working
8+
*.bak
9+
.git
910
.gitignore
1011
.gitmodules
11-

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
v0.4.0
2+
======
3+
Connection API improvements.
4+
5+
### Breaking Changes
6+
- `TcpConnector` and `UdsConnector` have been replaced with `connector` factory functions in `<cppwamp/tcp.hpp>` and `<cppwamp/uds.hpp>`. The new interface uses a fluent API which allows the user to specify `setsockopt` socket options (closes #63). Consult the revised tutorials and documentation to learn how to migrate your app code to the revised connection interface.
7+
- Revised connection API so that unused serialization libraries are not needed when using CppWAMP in a header-only fashion (fixes #64).
8+
9+
### Other Changes
10+
- Raw socket transports now use 16MB as the default maximum length for incoming messages (closes #39).
11+
112
v0.3.1
213
======
314
Fixes and additional tests.

cppwamp/CMakeLists.txt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,15 @@ set(HEADERS
2222
include/cppwamp/null.hpp
2323
include/cppwamp/options.hpp
2424
include/cppwamp/payload.hpp
25-
include/cppwamp/rawsockdefs.hpp
25+
include/cppwamp/rawsockoptions.hpp
2626
include/cppwamp/registration.hpp
2727
include/cppwamp/session.hpp
2828
include/cppwamp/sessiondata.hpp
2929
include/cppwamp/subscription.hpp
30-
include/cppwamp/tcpconnector.hpp
31-
include/cppwamp/udsconnector.hpp
30+
include/cppwamp/tcp.hpp
31+
include/cppwamp/tcphost.hpp
32+
include/cppwamp/uds.hpp
33+
include/cppwamp/udspath.hpp
3234
include/cppwamp/unpacker.hpp
3335
include/cppwamp/variant.hpp
3436
include/cppwamp/varianttuple.hpp
@@ -49,14 +51,14 @@ set(HEADERS
4951
include/cppwamp/internal/legacyasiotransport.hpp
5052
include/cppwamp/internal/messagetraits.hpp
5153
include/cppwamp/internal/precompiled.hpp
54+
include/cppwamp/internal/rawsockconnector.hpp
5255
include/cppwamp/internal/rawsockhandshake.hpp
5356
include/cppwamp/internal/rawsockheader.hpp
5457
include/cppwamp/internal/subscriber.hpp
5558
include/cppwamp/internal/tcpacceptor.hpp
5659
include/cppwamp/internal/tcpopener.hpp
5760
include/cppwamp/internal/udsacceptor.hpp
5861
include/cppwamp/internal/udsopener.hpp
59-
include/cppwamp/internal/unpacker.ipp
6062
include/cppwamp/internal/variantbuilder.hpp
6163
include/cppwamp/internal/varianttraits.hpp
6264
include/cppwamp/internal/varianttraitsfwd.hpp
@@ -79,12 +81,16 @@ set(INLINES
7981
include/cppwamp/internal/options.ipp
8082
include/cppwamp/internal/passkey.hpp
8183
include/cppwamp/internal/payload.ipp
84+
include/cppwamp/internal/rawsockoptions.ipp
8285
include/cppwamp/internal/registration.ipp
8386
include/cppwamp/internal/session.ipp
8487
include/cppwamp/internal/sessiondata.ipp
8588
include/cppwamp/internal/subscription.ipp
86-
include/cppwamp/internal/tcpconnector.ipp
87-
include/cppwamp/internal/udsconnector.ipp
89+
include/cppwamp/internal/tcp.ipp
90+
include/cppwamp/internal/tcphost.ipp
91+
include/cppwamp/internal/uds.ipp
92+
include/cppwamp/internal/udspath.ipp
93+
include/cppwamp/internal/unpacker.ipp
8894
include/cppwamp/internal/variant.ipp
8995
include/cppwamp/internal/varianttuple.ipp
9096
include/cppwamp/internal/version.ipp

cppwamp/cppwamp.pro

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@ HEADERS += \
2121
include/cppwamp/dialoguedata.hpp \
2222
include/cppwamp/error.hpp \
2323
include/cppwamp/json.hpp \
24-
include/cppwamp/legacytcpconnector.hpp \
25-
include/cppwamp/legacyudsconnector.hpp \
2624
include/cppwamp/msgpack.hpp \
2725
include/cppwamp/null.hpp \
2826
include/cppwamp/options.hpp \
2927
include/cppwamp/payload.hpp \
30-
include/cppwamp/rawsockdefs.hpp \
28+
include/cppwamp/rawsockoptions.hpp \
3129
include/cppwamp/registration.hpp \
3230
include/cppwamp/session.hpp \
3331
include/cppwamp/sessiondata.hpp \
3432
include/cppwamp/subscription.hpp \
35-
include/cppwamp/tcpconnector.hpp \
36-
include/cppwamp/udsconnector.hpp \
33+
include/cppwamp/tcp.hpp \
34+
include/cppwamp/tcphost.hpp \
35+
include/cppwamp/uds.hpp \
36+
include/cppwamp/udspath.hpp \
3737
include/cppwamp/unpacker.hpp \
3838
include/cppwamp/variant.hpp \
3939
include/cppwamp/varianttuple.hpp \
@@ -54,14 +54,14 @@ HEADERS += \
5454
include/cppwamp/internal/legacyasiotransport.hpp \
5555
include/cppwamp/internal/messagetraits.hpp \
5656
include/cppwamp/internal/precompiled.hpp \
57+
include/cppwamp/internal/rawsockconnector.hpp \
5758
include/cppwamp/internal/rawsockhandshake.hpp \
5859
include/cppwamp/internal/rawsockheader.hpp \
5960
include/cppwamp/internal/subscriber.hpp \
6061
include/cppwamp/internal/tcpacceptor.hpp \
6162
include/cppwamp/internal/tcpopener.hpp \
6263
include/cppwamp/internal/udsacceptor.hpp \
6364
include/cppwamp/internal/udsopener.hpp \
64-
include/cppwamp/internal/unpacker.ipp \
6565
include/cppwamp/internal/variantbuilder.hpp \
6666
include/cppwamp/internal/varianttraits.hpp \
6767
include/cppwamp/internal/varianttraitsfwd.hpp \
@@ -74,20 +74,22 @@ HEADERS += \
7474
include/cppwamp/internal/endian.ipp \
7575
include/cppwamp/internal/error.ipp \
7676
include/cppwamp/internal/json.ipp \
77-
include/cppwamp/internal/legacytcpconnector.ipp \
78-
include/cppwamp/internal/legacyudsconnector.ipp \
7977
include/cppwamp/internal/messagetraits.ipp \
8078
include/cppwamp/internal/msgpack.ipp \
8179
include/cppwamp/internal/null.ipp \
8280
include/cppwamp/internal/options.ipp \
8381
include/cppwamp/internal/passkey.hpp \
8482
include/cppwamp/internal/payload.ipp \
83+
include/cppwamp/internal/rawsockoptions.ipp \
8584
include/cppwamp/internal/registration.ipp \
8685
include/cppwamp/internal/session.ipp \
8786
include/cppwamp/internal/sessiondata.ipp \
8887
include/cppwamp/internal/subscription.ipp \
89-
include/cppwamp/internal/tcpconnector.ipp \
90-
include/cppwamp/internal/udsconnector.ipp \
88+
include/cppwamp/internal/tcp.ipp \
89+
include/cppwamp/internal/tcphost.ipp \
90+
include/cppwamp/internal/uds.ipp \
91+
include/cppwamp/internal/udspath.ipp \
92+
include/cppwamp/internal/unpacker.ipp \
9193
include/cppwamp/internal/variant.ipp \
9294
include/cppwamp/internal/varianttuple.ipp \
9395
include/cppwamp/internal/version.ipp \

cppwamp/include/cppwamp/codec.hpp

Lines changed: 4 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -5,63 +5,25 @@
55
http://www.boost.org/LICENSE_1_0.txt)
66
------------------------------------------------------------------------------*/
77

8-
#ifndef CPPWAMP_CODECID_HPP
9-
#define CPPWAMP_CODECID_HPP
8+
#ifndef CPPWAMP_CODEC_HPP
9+
#define CPPWAMP_CODEC_HPP
1010

1111
//------------------------------------------------------------------------------
1212
/** @file
1313
Contains essential definitions for wamp::Variant serializers. */
1414
//------------------------------------------------------------------------------
1515

16-
#include <set>
1716
#include <stdexcept>
1817
#include <string>
1918

2019
namespace wamp
2120
{
2221

23-
//------------------------------------------------------------------------------
24-
/** Integer type used to identify a codec. */
25-
//------------------------------------------------------------------------------
26-
enum class CodecId
27-
{
28-
json, ///< JSON serializer
29-
msgpack ///< Msgpack serializer
30-
};
31-
32-
//------------------------------------------------------------------------------
33-
/** Collection of supported serializers IDs. */
34-
//------------------------------------------------------------------------------
35-
using CodecIds = std::set<CodecId>;
36-
37-
//------------------------------------------------------------------------------
38-
/** Empty default implementation of the Codec template.
39-
Codecs are static-only classes that can perform serialization from, and
40-
deserialization to Variant objects. Codec is a template class that is
41-
specialized for each @ref CodecId enumerator. Specializations must conform
42-
to the @ref Serializer concept.
43-
@see Codec<CodecId::json>
44-
@see Codec<CodecId::msgpack> */
45-
//------------------------------------------------------------------------------
46-
template <CodecId id> class Codec
47-
{
48-
// Required for specializations:
49-
50-
// Deserializes from the given transport buffer to the given variant.
51-
// template <typename TBuffer>
52-
// static void decodeBuffer(const TBuffer& from, Variant& to);
53-
54-
// Serializes from the given variant to the given transport buffer.
55-
// template <typename TBuffer>
56-
// static void encodeBuffer(const Variant& from, TBuffer& to);
57-
};
58-
59-
6022
namespace error
6123
{
6224

6325
//------------------------------------------------------------------------------
64-
/** Exception type thrown when Codec deserialization fails. */
26+
/** Exception type thrown when codec deserialization fails. */
6527
//------------------------------------------------------------------------------
6628
struct Decode: public std::runtime_error
6729
{
@@ -74,4 +36,4 @@ struct Decode: public std::runtime_error
7436

7537
} // namespace wamp
7638

77-
#endif // CPPWAMP_CODECID_HPP
39+
#endif // CPPWAMP_CODEC_HPP

cppwamp/include/cppwamp/connector.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,7 @@ namespace internal {class ClientInterface;}
3232
3333
The Session class uses these Connector objects when attempting to
3434
establish a connection to the router.
35-
@see TcpConnector
36-
@see UdsConnector
37-
@see legacy::TcpConnector
38-
@see legacy::UdsConnector */
35+
@see connector, legacyConnector */
3936
//------------------------------------------------------------------------------
4037
class Connector : public std::enable_shared_from_this<Connector>
4138
{

cppwamp/include/cppwamp/internal/asioconnector.hpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
#include <cstdint>
1212
#include "../codec.hpp"
1313
#include "../error.hpp"
14-
#include "../rawsockdefs.hpp"
14+
#include "../rawsockoptions.hpp"
1515
#include "asioendpoint.hpp"
1616

1717
namespace wamp
@@ -27,8 +27,7 @@ class AsioConnector : public AsioEndpoint<TEstablisher>
2727
public:
2828
using Establisher = TEstablisher;
2929

30-
AsioConnector(Establisher&& est, CodecId codecId,
31-
RawsockMaxLength maxRxLength)
30+
AsioConnector(Establisher&& est, int codecId, RawsockMaxLength maxRxLength)
3231
: Base(std::move(est)),
3332
codecId_(codecId),
3433
maxRxLength_(maxRxLength)
@@ -42,7 +41,7 @@ class AsioConnector : public AsioEndpoint<TEstablisher>
4241

4342
virtual void onEstablished() override
4443
{
45-
Base::sendHandshake( Handshake().setCodec(codecId_)
44+
Base::sendHandshake( Handshake().setCodecId(codecId_)
4645
.setMaxLength(maxRxLength_) );
4746
}
4847

@@ -54,7 +53,7 @@ class AsioConnector : public AsioEndpoint<TEstablisher>
5453
Base::fail(RawsockErrc::badHandshake);
5554
else if (hs.reserved() != 0)
5655
Base::fail(RawsockErrc::reservedBitsUsed);
57-
else if (hs.codec() == codecId_)
56+
else if (hs.codecId() == codecId_)
5857
Base::complete(codecId_, hs.maxLengthInBytes(),
5958
Handshake::byteLengthOf(maxRxLength_));
6059
else if (hs.hasError())
@@ -64,7 +63,7 @@ class AsioConnector : public AsioEndpoint<TEstablisher>
6463
}
6564

6665
private:
67-
CodecId codecId_;
66+
int codecId_;
6867
RawsockMaxLength maxRxLength_;
6968
};
7069

cppwamp/include/cppwamp/internal/asioendpoint.hpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include <boost/asio/buffer.hpp>
1515
#include <boost/asio/read.hpp>
1616
#include <boost/asio/write.hpp>
17-
#include "../codec.hpp"
1817
#include "../error.hpp"
1918
#include "asiotransport.hpp"
2019
#include "config.hpp"
@@ -40,7 +39,7 @@ class AsioEndpoint
4039
using Socket = typename Establisher::Socket;
4140
using Transport = TTransport<Socket>;
4241
using TransportPtr = std::shared_ptr<Transport>;
43-
using Handler = std::function<void (std::error_code, CodecId,
42+
using Handler = std::function<void (std::error_code, int codecId,
4443
TransportPtr)>;
4544

4645
explicit AsioEndpoint(Establisher&& est)
@@ -109,7 +108,7 @@ class AsioEndpoint
109108
});
110109
}
111110

112-
void complete(CodecId codecId, size_t maxTxLength, size_t maxRxLength)
111+
void complete(int codecId, size_t maxTxLength, size_t maxRxLength)
113112
{
114113
auto transport = Transport::create(std::move(socket_), maxTxLength,
115114
maxRxLength);
@@ -122,8 +121,7 @@ class AsioEndpoint
122121
void fail(RawsockErrc errc)
123122
{
124123
socket_.reset();
125-
iosvc_.post(std::bind(handler_, make_error_code(errc),
126-
CodecId::json, nullptr));
124+
iosvc_.post(std::bind(handler_, make_error_code(errc), 0, nullptr));
127125
handler_ = nullptr;
128126
}
129127

@@ -133,7 +131,7 @@ class AsioEndpoint
133131
{
134132
auto ec = make_error_code(static_cast<std::errc>(asioEc.value()));
135133
socket_.reset();
136-
iosvc_.post(std::bind(handler_, ec, CodecId::json, nullptr));
134+
iosvc_.post(std::bind(handler_, ec, 0, nullptr));
137135
handler_ = nullptr;
138136
}
139137
return !asioEc;

cppwamp/include/cppwamp/internal/asiolistener.hpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
#include <utility>
1313
#include <vector>
1414
#include "../error.hpp"
15-
#include "../rawsockdefs.hpp"
15+
#include "../rawsockoptions.hpp"
1616
#include "asioendpoint.hpp"
1717

1818
namespace wamp
@@ -26,7 +26,8 @@ template <typename TEstablisher>
2626
class AsioListener : public AsioEndpoint<TEstablisher>
2727
{
2828
public:
29-
using Establisher = TEstablisher;
29+
using Establisher = TEstablisher;
30+
using CodecIds = std::set<int>;
3031

3132
AsioListener(Establisher&& est, CodecIds codecIds,
3233
RawsockMaxLength maxRxLength)
@@ -46,7 +47,7 @@ class AsioListener : public AsioEndpoint<TEstablisher>
4647

4748
virtual void onHandshakeReceived(Handshake hs) override
4849
{
49-
auto peerCodec = hs.codec();
50+
auto peerCodec = hs.codecId();
5051

5152
if (!hs.hasMagicOctet())
5253
Base::fail(RawsockErrc::badHandshake);
@@ -56,7 +57,7 @@ class AsioListener : public AsioEndpoint<TEstablisher>
5657
{
5758
maxTxLength_ = hs.maxLength();
5859
Base::sendHandshake(Handshake().setMaxLength(maxRxLength_)
59-
.setCodec(peerCodec));
60+
.setCodecId(peerCodec));
6061
}
6162
else
6263
Base::sendHandshake(Handshake::eUnsupportedFormat());
@@ -65,7 +66,7 @@ class AsioListener : public AsioEndpoint<TEstablisher>
6566
virtual void onHandshakeSent(Handshake hs) override
6667
{
6768
if (!hs.hasError())
68-
Base::complete(hs.codec(), Handshake::byteLengthOf(maxTxLength_),
69+
Base::complete(hs.codecId(), Handshake::byteLengthOf(maxTxLength_),
6970
Handshake::byteLengthOf(maxRxLength_));
7071
else
7172
Base::fail(hs.errorCode());

0 commit comments

Comments
 (0)