Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
2b7b17b8
Commit
2b7b17b8
authored
May 02, 2022
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix initialization ob WebSocket flow bridges
parent
53269b12
Changes
10
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
14 additions
and
20 deletions
+14
-20
examples/web_socket/quote-server.cpp
examples/web_socket/quote-server.cpp
+2
-1
libcaf_net/caf/net/connection_acceptor.hpp
libcaf_net/caf/net/connection_acceptor.hpp
+1
-0
libcaf_net/caf/net/consumer_adapter.hpp
libcaf_net/caf/net/consumer_adapter.hpp
+3
-1
libcaf_net/caf/net/web_socket/client.hpp
libcaf_net/caf/net/web_socket/client.hpp
+1
-1
libcaf_net/caf/net/web_socket/connect.hpp
libcaf_net/caf/net/web_socket/connect.hpp
+0
-16
libcaf_net/caf/net/web_socket/flow_bridge.hpp
libcaf_net/caf/net/web_socket/flow_bridge.hpp
+1
-0
libcaf_net/caf/net/web_socket/framing.hpp
libcaf_net/caf/net/web_socket/framing.hpp
+1
-1
libcaf_net/src/net/socket_manager.cpp
libcaf_net/src/net/socket_manager.cpp
+1
-0
libcaf_net/src/net/web_socket/client.cpp
libcaf_net/src/net/web_socket/client.cpp
+2
-0
libcaf_net/src/net/web_socket/server.cpp
libcaf_net/src/net/web_socket/server.cpp
+2
-0
No files found.
examples/web_socket/quote-server.cpp
View file @
2b7b17b8
...
...
@@ -102,7 +102,8 @@ int caf_main(caf::actor_system& sys, const config& cfg) {
// Open up a TCP port for incoming connections.
auto
port
=
caf
::
get_or
(
cfg
,
"port"
,
default_port
);
cn
::
tcp_accept_socket
fd
;
if
(
auto
maybe_fd
=
cn
::
make_tcp_accept_socket
({
caf
::
ipv4_address
{},
port
}))
{
if
(
auto
maybe_fd
=
cn
::
make_tcp_accept_socket
({
caf
::
ipv4_address
{},
port
},
true
))
{
std
::
cout
<<
"*** started listening for incoming connections on port "
<<
port
<<
'\n'
;
fd
=
std
::
move
(
*
maybe_fd
);
...
...
libcaf_net/caf/net/connection_acceptor.hpp
View file @
2b7b17b8
...
...
@@ -52,6 +52,7 @@ public:
void
handle_read_event
()
override
{
CAF_LOG_TRACE
(
""
);
CAF_ASSERT
(
owner_
!=
nullptr
);
if
(
auto
x
=
accept
(
fd_
))
{
socket_manager_ptr
child
=
factory_
.
make
(
owner_
->
mpx_ptr
(),
*
x
);
if
(
!
child
)
{
...
...
libcaf_net/caf/net/consumer_adapter.hpp
View file @
2b7b17b8
...
...
@@ -56,7 +56,9 @@ public:
static
ptr_type
make
(
buf_ptr
buf
,
socket_manager_ptr
mgr
,
action
do_wakeup
)
{
if
(
buf
)
{
auto
adapter
=
ptr_type
{
new
consumer_adapter
(
buf
,
mgr
,
CAF_ASSERT
(
mgr
);
CAF_ASSERT
(
do_wakeup
);
auto
adapter
=
ptr_type
{
new
consumer_adapter
(
buf
,
std
::
move
(
mgr
),
std
::
move
(
do_wakeup
)),
//
false
};
buf
->
set_consumer
(
adapter
);
...
...
libcaf_net/caf/net/web_socket/client.hpp
View file @
2b7b17b8
...
...
@@ -27,7 +27,7 @@ namespace caf::net::web_socket {
/// 6455. Initially, the layer performs the WebSocket handshake. Once completed,
/// this layer decodes RFC 6455 frames and forwards binary and text messages to
/// `UpperLayer`.
class
client
:
public
stream_oriented
::
upper_layer
{
class
CAF_NET_EXPORT
client
:
public
stream_oriented
::
upper_layer
{
public:
// -- member types -----------------------------------------------------------
...
...
libcaf_net/caf/net/web_socket/connect.hpp
View file @
2b7b17b8
...
...
@@ -24,22 +24,6 @@ using connect_event_t
/// @param init Function object for setting up the created flows.
template
<
class
Transport
=
stream_transport
,
class
Socket
,
class
Init
>
void
connect
(
actor_system
&
sys
,
Socket
fd
,
handshake
hs
,
Init
init
)
{
/*
using trait_t = default_trait;
static_assert(std::is_invocable_v<Init, connect_event_t&&>,
"invalid signature found for init");
auto [ws_pull, app_push] = async::make_spsc_buffer_resource<frame>();
auto [app_pull, ws_push] = async::make_spsc_buffer_resource<frame>();
using app_t = flow_bridge<trait_t>;
using stack_t = Transport<client<app_t>>;
using conn_t = flow_connector_trivial_impl<trait_t>;
auto& mpx = sys.network_manager().mpx();
auto conn = std::make_shared<conn_t>(std::move(ws_pull), std::move(ws_push));
auto mgr = make_socket_manager<stack_t>(fd, &mpx, std::move(hs),
std::move(conn));
mpx.init(mgr);
init(connect_event_t{app_pull, app_push});
*/
// TODO: connect() should return a disposable to stop the WebSocket.
using
trait_t
=
default_trait
;
static_assert
(
std
::
is_invocable_v
<
Init
,
connect_event_t
&&>
,
...
...
libcaf_net/caf/net/web_socket/flow_bridge.hpp
View file @
2b7b17b8
...
...
@@ -87,6 +87,7 @@ public:
error
init
(
net
::
socket_manager
*
mgr
,
web_socket
::
lower_layer
*
down
,
const
settings
&
cfg
)
override
{
CAF_ASSERT
(
mgr
!=
nullptr
);
down_
=
down
;
auto
[
err
,
pull
,
push
]
=
conn_
->
on_request
(
cfg
);
if
(
!
err
)
{
...
...
libcaf_net/caf/net/web_socket/framing.hpp
View file @
2b7b17b8
...
...
@@ -25,7 +25,7 @@
namespace
caf
::
net
::
web_socket
{
/// Implements the WebSocket framing protocol as defined in RFC-6455.
class
framing
:
public
web_socket
::
lower_layer
{
class
CAF_NET_EXPORT
framing
:
public
web_socket
::
lower_layer
{
public:
// -- member types -----------------------------------------------------------
...
...
libcaf_net/src/net/socket_manager.cpp
View file @
2b7b17b8
...
...
@@ -30,6 +30,7 @@ socket_manager::~socket_manager() {
socket_manager_ptr
socket_manager
::
make
(
multiplexer
*
mpx
,
socket
handle
,
event_handler_ptr
handler
)
{
CAF_ASSERT
(
mpx
!=
nullptr
);
return
make_counted
<
socket_manager
>
(
mpx
,
handle
,
std
::
move
(
handler
));
}
...
...
libcaf_net/src/net/web_socket/client.cpp
View file @
2b7b17b8
...
...
@@ -40,6 +40,7 @@ std::unique_ptr<client> client::make(handshake_ptr hs, upper_layer_ptr up) {
error
client
::
init
(
socket_manager
*
owner
,
stream_oriented
::
lower_layer
*
down
,
const
settings
&
cfg
)
{
CAF_ASSERT
(
owner
!=
nullptr
);
CAF_ASSERT
(
hs_
!=
nullptr
);
framing_
.
init
(
owner
,
down
);
if
(
!
hs_
->
has_mandatory_fields
())
...
...
@@ -47,6 +48,7 @@ error client::init(socket_manager* owner, stream_oriented::lower_layer* down,
"handshake data lacks mandatory fields"
);
if
(
!
hs_
->
has_valid_key
())
hs_
->
randomize_key
();
owner_
=
owner
;
cfg_
=
cfg
;
down
->
begin_output
();
hs_
->
write_http_1_request
(
down
->
output_buffer
());
...
...
libcaf_net/src/net/web_socket/server.cpp
View file @
2b7b17b8
...
...
@@ -24,7 +24,9 @@ std::unique_ptr<server> server::make(upper_layer_ptr up) {
error
server
::
init
(
socket_manager
*
owner
,
stream_oriented
::
lower_layer
*
down
,
const
settings
&
cfg
)
{
CAF_ASSERT
(
owner
!=
nullptr
);
framing_
.
init
(
owner
,
down
);
owner_
=
owner
;
cfg_
=
cfg
;
lower_layer
().
configure_read
(
receive_policy
::
up_to
(
handshake
::
max_http_size
));
return
none
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment