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
3996b8d4
Commit
3996b8d4
authored
Nov 28, 2016
by
Joseph Noir
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update UDP capabilities of the test multiplexer
parent
0900b3d1
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
164 additions
and
47 deletions
+164
-47
libcaf_io/caf/io/network/test_multiplexer.hpp
libcaf_io/caf/io/network/test_multiplexer.hpp
+47
-9
libcaf_io/src/test_multiplexer.cpp
libcaf_io/src/test_multiplexer.cpp
+117
-36
libcaf_io/test/basp.cpp
libcaf_io/test/basp.cpp
+0
-2
No files found.
libcaf_io/caf/io/network/test_multiplexer.hpp
View file @
3996b8d4
...
@@ -116,6 +116,14 @@ public:
...
@@ -116,6 +116,14 @@ public:
/// input buffer usually managed by the operating system.
/// input buffer usually managed by the operating system.
buffer_type
&
virtual_network_buffer
(
connection_handle
hdl
);
buffer_type
&
virtual_network_buffer
(
connection_handle
hdl
);
/// Models pending data on the network, i.e., the network
/// input buffer usually managed by the operating system.
buffer_type
&
virtual_network_buffer
(
dgram_scribe_handle
hdl
);
/// Models pending data on the network, i.e., the network
/// input buffer usually managed by the operating system.
buffer_type
&
virtual_network_buffer
(
dgram_doorman_handle
hdl
);
/// Returns the output buffer of the scribe identified by `hdl`.
/// Returns the output buffer of the scribe identified by `hdl`.
buffer_type
&
output_buffer
(
connection_handle
hdl
);
buffer_type
&
output_buffer
(
connection_handle
hdl
);
...
@@ -162,6 +170,8 @@ public:
...
@@ -162,6 +170,8 @@ public:
uint16_t
&
port
(
dgram_scribe_handle
hdl
);
uint16_t
&
port
(
dgram_scribe_handle
hdl
);
uint16_t
&
local_port
(
dgram_scribe_handle
hdl
);
/// Returns `true` if this handle has been closed
/// Returns `true` if this handle has been closed
/// for reading, `false` otherwise.
/// for reading, `false` otherwise.
bool
&
stopped_reading
(
dgram_doorman_handle
hdl
);
bool
&
stopped_reading
(
dgram_doorman_handle
hdl
);
...
@@ -173,6 +183,8 @@ public:
...
@@ -173,6 +183,8 @@ public:
uint16_t
&
port
(
dgram_doorman_handle
hdl
);
uint16_t
&
port
(
dgram_doorman_handle
hdl
);
uint16_t
&
local_port
(
dgram_doorman_handle
hdl
);
size_t
&
buffer_size
(
dgram_doorman_handle
hdl
);
size_t
&
buffer_size
(
dgram_doorman_handle
hdl
);
size_t
&
buffer_size
(
dgram_scribe_handle
hdl
);
size_t
&
buffer_size
(
dgram_scribe_handle
hdl
);
...
@@ -199,6 +211,13 @@ public:
...
@@ -199,6 +211,13 @@ public:
bool
has_pending_scribe
(
std
::
string
host
,
uint16_t
port
);
bool
has_pending_scribe
(
std
::
string
host
,
uint16_t
port
);
/// Stores `hdl` as a pending endpoint for `src`.
void
add_pending_endpoints
(
dgram_doorman_handle
src
,
dgram_scribe_handle
hdl
);
using
pending_endpoints_map
=
std
::
unordered_multimap
<
dgram_doorman_handle
,
dgram_scribe_handle
>
;
pending_endpoints_map
&
pending_endpoints
();
using
pending_dgram_scribes_map
=
std
::
map
<
std
::
pair
<
std
::
string
,
uint16_t
>
,
using
pending_dgram_scribes_map
=
std
::
map
<
std
::
pair
<
std
::
string
,
uint16_t
>
,
dgram_scribe_handle
>
;
dgram_scribe_handle
>
;
...
@@ -210,18 +229,33 @@ public:
...
@@ -210,18 +229,33 @@ public:
bool
has_pending_dgram_doorman
(
uint16_t
port
);
bool
has_pending_dgram_doorman
(
uint16_t
port
);
/// Accepts a pending connect on `hdl`.
/// Accepts a pending connect on `hdl`.
bool
accept_connection
(
accept_handle
hdl
);
bool
accept_connection
(
accept_handle
hdl
);
bool
accept_endpoint
(
dgram_doorman_handle
hdl
);
/// Reads data from the external input buffer until
/// Reads data from the external input buffer until
/// the configured read policy no longer allows receiving.
/// the configured read policy no longer allows receiving.
void
read_data
(
connection_handle
hdl
);
void
read_data
(
connection_handle
hdl
);
/// Reads a datagram from the external input buffer.
void
read_datagram
(
dgram_scribe_handle
hdl
);
/// Reads a datagram from the external input buffer.
void
read_datagram
(
dgram_doorman_handle
hdl
);
/// Appends `buf` to the virtual network buffer of `hdl`
/// Appends `buf` to the virtual network buffer of `hdl`
/// and calls `read_data(hdl)` afterwards.
/// and calls `read_data(hdl)` afterwards.
void
virtual_send
(
connection_handle
hdl
,
const
buffer_type
&
buf
);
void
virtual_send
(
connection_handle
hdl
,
const
buffer_type
&
buf
);
/// Adds `buf` to the virtual network buffer of `hdl`
/// and calls `read_data(hdl)` afterwards.
void
virtual_send
(
dgram_scribe_handle
hdl
,
const
buffer_type
&
buf
);
/// Adds `buf` to the virtual network buffer of `hdl`
/// and calls `read_data(hdl)` afterwards.
void
virtual_send
(
dgram_doorman_handle
hdl
,
const
buffer_type
&
buf
);
/// Waits until a `runnable` is available and executes it.
/// Waits until a `runnable` is available and executes it.
void
exec_runnable
();
void
exec_runnable
();
...
@@ -260,11 +294,12 @@ private:
...
@@ -260,11 +294,12 @@ private:
};
};
struct
dgram_scribe_data
{
struct
dgram_scribe_data
{
uint16_t
port
;
uint16_t
remote_port
;
buffer_type
xbuf
;
uint16_t
local_port
;
std
::
deque
<
buffer_type
>
xbuf
;
std
::
deque
<
buffer_type
>
wr_buf
;
buffer_type
rd_buf
;
buffer_type
rd_buf
;
buffer_type
wr_buf
;
size_t
rcv_buffer_size
=
1500
;
size_t
buffer_size
;
bool
stopped_reading
=
false
;
bool
stopped_reading
=
false
;
bool
passive_mode
=
false
;
bool
passive_mode
=
false
;
intrusive_ptr
<
dgram_scribe
>
ptr
;
intrusive_ptr
<
dgram_scribe
>
ptr
;
...
@@ -272,9 +307,11 @@ private:
...
@@ -272,9 +307,11 @@ private:
};
};
struct
dgram_doorman_data
{
struct
dgram_doorman_data
{
uint16_t
port
;
uint16_t
remote_port
;
uint16_t
local_port
;
std
::
deque
<
buffer_type
>
xbuf
;
buffer_type
rd_buf
;
buffer_type
rd_buf
;
size_t
buffer_size
;
size_t
rcv_buffer_size
=
1500
;
bool
stopped_reading
=
false
;
bool
stopped_reading
=
false
;
bool
passive_mode
=
false
;
bool
passive_mode
=
false
;
intrusive_ptr
<
dgram_doorman
>
ptr
;
intrusive_ptr
<
dgram_doorman
>
ptr
;
...
@@ -286,13 +323,14 @@ private:
...
@@ -286,13 +323,14 @@ private:
std
::
list
<
resumable_ptr
>
resumables_
;
std
::
list
<
resumable_ptr
>
resumables_
;
pending_scribes_map
scribes_
;
pending_scribes_map
scribes_
;
pending_dgram_scribes_map
dgram_scribes_
;
pending_dgram_scribes_map
dgram_scribes_
;
pending_dgram_doormans_map
dgram_doorm
ans
_
;
pending_dgram_doormans_map
dgram_doorm
en
_
;
std
::
unordered_map
<
uint16_t
,
accept_handle
>
doormen_
;
std
::
unordered_map
<
uint16_t
,
accept_handle
>
doormen_
;
std
::
unordered_map
<
connection_handle
,
scribe_data
>
scribe_data_
;
std
::
unordered_map
<
connection_handle
,
scribe_data
>
scribe_data_
;
std
::
unordered_map
<
accept_handle
,
doorman_data
>
doorman_data_
;
std
::
unordered_map
<
accept_handle
,
doorman_data
>
doorman_data_
;
std
::
unordered_map
<
dgram_scribe_handle
,
dgram_scribe_data
>
dgram_scribe_data_
;
std
::
unordered_map
<
dgram_scribe_handle
,
dgram_scribe_data
>
dgram_scribe_data_
;
std
::
unordered_map
<
dgram_doorman_handle
,
dgram_doorman_data
>
dgram_doorman_data_
;
std
::
unordered_map
<
dgram_doorman_handle
,
dgram_doorman_data
>
dgram_doorman_data_
;
pending_connects_map
pending_connects_
;
pending_connects_map
pending_connects_
;
pending_endpoints_map
pending_endpoints_
;
};
};
}
// namespace network
}
// namespace network
...
...
libcaf_io/src/test_multiplexer.cpp
View file @
3996b8d4
...
@@ -270,20 +270,13 @@ expected<void> test_multiplexer::assign_dgram_scribe(abstract_broker* ptr,
...
@@ -270,20 +270,13 @@ expected<void> test_multiplexer::assign_dgram_scribe(abstract_broker* ptr,
}
}
uint16_t
local_port
()
const
override
{
uint16_t
local_port
()
const
override
{
std
::
cerr
<<
"test_multiplexer::assign_dgram_scribe::impl::local_port "
return
mpx_
->
local_port
(
hdl
());
<<
"not implementd."
<<
std
::
endl
;
abort
();
return
0
;
}
}
uint16_t
port
()
const
override
{
uint16_t
port
()
const
override
{
return
mpx_
->
port
(
hdl
());
return
mpx_
->
port
(
hdl
());
}
}
void
launch
()
{
// nop
}
void
flush
()
override
{
void
flush
()
override
{
// nop
// nop
}
}
...
@@ -325,7 +318,6 @@ test_multiplexer::add_dgram_scribe(abstract_broker* ptr,
...
@@ -325,7 +318,6 @@ test_multiplexer::add_dgram_scribe(abstract_broker* ptr,
auto
result
=
new_dgram_scribe
(
host
,
prt
);
auto
result
=
new_dgram_scribe
(
host
,
prt
);
if
(
!
result
)
if
(
!
result
)
return
std
::
move
(
result
.
error
());
return
std
::
move
(
result
.
error
());
// port(*result) = prt; // TODO: remove this?
assign_dgram_scribe
(
ptr
,
*
result
);
assign_dgram_scribe
(
ptr
,
*
result
);
return
result
;
return
result
;
}
}
...
@@ -334,10 +326,10 @@ expected<std::pair<dgram_doorman_handle, uint16_t>>
...
@@ -334,10 +326,10 @@ expected<std::pair<dgram_doorman_handle, uint16_t>>
test_multiplexer
::
new_dgram_doorman
(
uint16_t
desired_port
,
const
char
*
,
bool
)
{
test_multiplexer
::
new_dgram_doorman
(
uint16_t
desired_port
,
const
char
*
,
bool
)
{
guard_type
guard
{
mx_
};
guard_type
guard
{
mx_
};
dgram_doorman_handle
result
;
dgram_doorman_handle
result
;
auto
i
=
dgram_doorm
ans
_
.
find
(
desired_port
);
auto
i
=
dgram_doorm
en
_
.
find
(
desired_port
);
if
(
i
!=
dgram_doorm
ans
_
.
end
())
{
if
(
i
!=
dgram_doorm
en
_
.
end
())
{
result
=
i
->
second
;
result
=
i
->
second
;
dgram_doorm
ans
_
.
erase
(
i
);
dgram_doorm
en
_
.
erase
(
i
);
}
}
return
std
::
make_pair
(
result
,
desired_port
);
return
std
::
make_pair
(
result
,
desired_port
);
}
}
...
@@ -352,19 +344,16 @@ expected<void> test_multiplexer::assign_dgram_doorman(abstract_broker* ptr,
...
@@ -352,19 +344,16 @@ expected<void> test_multiplexer::assign_dgram_doorman(abstract_broker* ptr,
// nop
// nop
}
}
bool
new_endpoint
(
const
void
*
,
size_t
)
override
{
bool
new_endpoint
(
const
void
*
buf
,
size_t
num_bytes
)
override
{
// TODO: Implement me
auto
&
mm
=
mpx_
->
pending_endpoints
();
/*
auto& mm = mpx_->pending_connects();
auto
i
=
mm
.
find
(
hdl
());
auto
i
=
mm
.
find
(
hdl
());
bool
result
=
true
;
bool
result
=
true
;
if
(
i
!=
mm
.
end
())
{
if
(
i
!=
mm
.
end
())
{
result = d
oorman::new_connection(mpx_, i->second
);
result
=
d
gram_doorman
::
new_endpoint
(
mpx_
,
i
->
second
,
buf
,
num_bytes
);
mm
.
erase
(
i
);
mm
.
erase
(
i
);
// TODO: set remote endpoint data (host / port)?
}
}
return
result
;
return
result
;
*/
return
false
;
}
}
void
configure_datagram_size
(
size_t
buf_size
)
override
{
void
configure_datagram_size
(
size_t
buf_size
)
override
{
...
@@ -389,10 +378,7 @@ expected<void> test_multiplexer::assign_dgram_doorman(abstract_broker* ptr,
...
@@ -389,10 +378,7 @@ expected<void> test_multiplexer::assign_dgram_doorman(abstract_broker* ptr,
}
}
uint16_t
local_port
()
const
override
{
uint16_t
local_port
()
const
override
{
std
::
cerr
<<
"test_multiplexer::assign_dgram_scribe::impl::local_port "
return
mpx_
->
local_port
(
hdl
());
<<
"not implementd."
<<
std
::
endl
;
abort
();
return
0
;
}
}
void
launch
()
override
{
void
launch
()
override
{
...
@@ -458,13 +444,13 @@ void test_multiplexer::provide_dgram_scribe(std::string host,
...
@@ -458,13 +444,13 @@ void test_multiplexer::provide_dgram_scribe(std::string host,
uint16_t
desired_port
,
uint16_t
desired_port
,
dgram_scribe_handle
hdl
)
{
dgram_scribe_handle
hdl
)
{
dgram_scribes_
.
emplace
(
std
::
make_pair
(
std
::
move
(
host
),
desired_port
),
hdl
);
dgram_scribes_
.
emplace
(
std
::
make_pair
(
std
::
move
(
host
),
desired_port
),
hdl
);
dgram_scribe_data_
[
hdl
].
port
=
desired_port
;
dgram_scribe_data_
[
hdl
].
remote_
port
=
desired_port
;
}
}
void
test_multiplexer
::
provide_dgram_doorman
(
uint16_t
desired_port
,
void
test_multiplexer
::
provide_dgram_doorman
(
uint16_t
desired_port
,
dgram_doorman_handle
hdl
)
{
dgram_doorman_handle
hdl
)
{
dgram_doorm
ans
_
.
emplace
(
std
::
make_pair
(
desired_port
,
hdl
));
dgram_doorm
en
_
.
emplace
(
std
::
make_pair
(
desired_port
,
hdl
));
dgram_doorman_data_
[
hdl
].
port
=
desired_port
;
dgram_doorman_data_
[
hdl
].
remote_
port
=
desired_port
;
}
}
/// The external input buffer should be filled by
/// The external input buffer should be filled by
...
@@ -474,6 +460,20 @@ test_multiplexer::virtual_network_buffer(connection_handle hdl) {
...
@@ -474,6 +460,20 @@ test_multiplexer::virtual_network_buffer(connection_handle hdl) {
return
scribe_data_
[
hdl
].
xbuf
;
return
scribe_data_
[
hdl
].
xbuf
;
}
}
test_multiplexer
::
buffer_type
&
test_multiplexer
::
virtual_network_buffer
(
dgram_scribe_handle
hdl
)
{
auto
&
buf
=
dgram_scribe_data_
[
hdl
].
xbuf
;
buf
.
emplace_back
();
return
buf
.
back
();
}
test_multiplexer
::
buffer_type
&
test_multiplexer
::
virtual_network_buffer
(
dgram_doorman_handle
hdl
)
{
auto
&
buf
=
dgram_doorman_data_
[
hdl
].
xbuf
;
buf
.
emplace_back
();
return
buf
.
back
();
}
test_multiplexer
::
buffer_type
&
test_multiplexer
::
buffer_type
&
test_multiplexer
::
output_buffer
(
connection_handle
hdl
)
{
test_multiplexer
::
output_buffer
(
connection_handle
hdl
)
{
return
scribe_data_
[
hdl
].
wr_buf
;
return
scribe_data_
[
hdl
].
wr_buf
;
...
@@ -515,7 +515,9 @@ test_multiplexer::input_buffer(dgram_scribe_handle hdl) {
...
@@ -515,7 +515,9 @@ test_multiplexer::input_buffer(dgram_scribe_handle hdl) {
test_multiplexer
::
buffer_type
&
test_multiplexer
::
buffer_type
&
test_multiplexer
::
output_buffer
(
dgram_scribe_handle
hdl
)
{
test_multiplexer
::
output_buffer
(
dgram_scribe_handle
hdl
)
{
return
dgram_scribe_data_
[
hdl
].
wr_buf
;
auto
&
buf
=
dgram_scribe_data_
[
hdl
].
wr_buf
;
buf
.
emplace_back
();
return
buf
.
back
();
}
}
bool
&
test_multiplexer
::
stopped_reading
(
dgram_scribe_handle
hdl
)
{
bool
&
test_multiplexer
::
stopped_reading
(
dgram_scribe_handle
hdl
)
{
...
@@ -536,7 +538,11 @@ test_multiplexer::impl_ptr(dgram_scribe_handle hdl) {
...
@@ -536,7 +538,11 @@ test_multiplexer::impl_ptr(dgram_scribe_handle hdl) {
}
}
uint16_t
&
test_multiplexer
::
port
(
dgram_scribe_handle
hdl
)
{
uint16_t
&
test_multiplexer
::
port
(
dgram_scribe_handle
hdl
)
{
return
dgram_scribe_data_
[
hdl
].
port
;
return
dgram_scribe_data_
[
hdl
].
remote_port
;
}
uint16_t
&
test_multiplexer
::
local_port
(
dgram_scribe_handle
hdl
)
{
return
dgram_scribe_data_
[
hdl
].
local_port
;
}
}
test_multiplexer
::
buffer_type
&
test_multiplexer
::
buffer_type
&
...
@@ -558,15 +564,19 @@ test_multiplexer::impl_ptr(dgram_doorman_handle hdl) {
...
@@ -558,15 +564,19 @@ test_multiplexer::impl_ptr(dgram_doorman_handle hdl) {
}
}
uint16_t
&
test_multiplexer
::
port
(
dgram_doorman_handle
hdl
)
{
uint16_t
&
test_multiplexer
::
port
(
dgram_doorman_handle
hdl
)
{
return
dgram_doorman_data_
[
hdl
].
port
;
return
dgram_doorman_data_
[
hdl
].
remote_port
;
}
uint16_t
&
test_multiplexer
::
local_port
(
dgram_doorman_handle
hdl
)
{
return
dgram_doorman_data_
[
hdl
].
local_port
;
}
}
size_t
&
test_multiplexer
::
buffer_size
(
dgram_doorman_handle
hdl
)
{
size_t
&
test_multiplexer
::
buffer_size
(
dgram_doorman_handle
hdl
)
{
return
dgram_doorman_data_
[
hdl
].
buffer_size
;
return
dgram_doorman_data_
[
hdl
].
rcv_
buffer_size
;
}
}
size_t
&
test_multiplexer
::
buffer_size
(
dgram_scribe_handle
hdl
)
{
size_t
&
test_multiplexer
::
buffer_size
(
dgram_scribe_handle
hdl
)
{
return
dgram_scribe_data_
[
hdl
].
buffer_size
;
return
dgram_scribe_data_
[
hdl
].
rcv_
buffer_size
;
}
}
bool
&
test_multiplexer
::
stopped_reading
(
accept_handle
hdl
)
{
bool
&
test_multiplexer
::
stopped_reading
(
accept_handle
hdl
)
{
...
@@ -586,15 +596,29 @@ void test_multiplexer::add_pending_connect(accept_handle src,
...
@@ -586,15 +596,29 @@ void test_multiplexer::add_pending_connect(accept_handle src,
pending_connects_
.
emplace
(
src
,
hdl
);
pending_connects_
.
emplace
(
src
,
hdl
);
}
}
void
test_multiplexer
::
add_pending_endpoints
(
dgram_doorman_handle
src
,
dgram_scribe_handle
hdl
)
{
pending_endpoints_
.
emplace
(
src
,
hdl
);
}
test_multiplexer
::
pending_connects_map
&
test_multiplexer
::
pending_connects
()
{
test_multiplexer
::
pending_connects_map
&
test_multiplexer
::
pending_connects
()
{
return
pending_connects_
;
return
pending_connects_
;
}
}
test_multiplexer
::
pending_endpoints_map
&
test_multiplexer
::
pending_endpoints
()
{
return
pending_endpoints_
;
}
bool
test_multiplexer
::
has_pending_scribe
(
std
::
string
x
,
uint16_t
y
)
{
bool
test_multiplexer
::
has_pending_scribe
(
std
::
string
x
,
uint16_t
y
)
{
guard_type
guard
{
mx_
};
guard_type
guard
{
mx_
};
return
scribes_
.
count
(
std
::
make_pair
(
std
::
move
(
x
),
y
))
>
0
;
return
scribes_
.
count
(
std
::
make_pair
(
std
::
move
(
x
),
y
))
>
0
;
}
}
bool
test_multiplexer
::
has_pending_dgram_scribe
(
std
::
string
x
,
uint16_t
y
)
{
guard_type
guard
{
mx_
};
return
dgram_scribes_
.
count
(
std
::
make_pair
(
std
::
move
(
x
),
y
))
>
0
;
}
bool
test_multiplexer
::
accept_connection
(
accept_handle
hdl
)
{
bool
test_multiplexer
::
accept_connection
(
accept_handle
hdl
)
{
if
(
passive_mode
(
hdl
))
if
(
passive_mode
(
hdl
))
return
false
;
return
false
;
...
@@ -606,6 +630,18 @@ bool test_multiplexer::accept_connection(accept_handle hdl) {
...
@@ -606,6 +630,18 @@ bool test_multiplexer::accept_connection(accept_handle hdl) {
return
true
;
return
true
;
}
}
bool
test_multiplexer
::
accept_endpoint
(
dgram_doorman_handle
hdl
)
{
if
(
passive_mode
(
hdl
))
return
false
;
auto
&
dd
=
dgram_doorman_data_
[
hdl
];
if
(
!
dd
.
ptr
)
return
false
;
// TODO: Is this the right new_enpoint call?
if
(
!
dd
.
ptr
->
new_endpoint
(
dd
.
rd_buf
.
data
(),
dd
.
rd_buf
.
size
()))
passive_mode
(
hdl
)
=
true
;
return
true
;
}
void
test_multiplexer
::
read_data
(
connection_handle
hdl
)
{
void
test_multiplexer
::
read_data
(
connection_handle
hdl
)
{
if
(
passive_mode
(
hdl
))
if
(
passive_mode
(
hdl
))
return
;
return
;
...
@@ -648,6 +684,37 @@ void test_multiplexer::read_data(connection_handle hdl) {
...
@@ -648,6 +684,37 @@ void test_multiplexer::read_data(connection_handle hdl) {
}
}
}
}
void
test_multiplexer
::
read_datagram
(
dgram_scribe_handle
hdl
)
{
if
(
passive_mode
(
hdl
))
return
;
flush_runnables
();
auto
&
sd
=
dgram_scribe_data_
[
hdl
];
while
(
!
sd
.
ptr
)
exec_runnable
();
sd
.
rd_buf
=
std
::
move
(
sd
.
xbuf
.
front
());
sd
.
xbuf
.
pop_front
();
if
(
sd
.
rd_buf
.
size
()
>
sd
.
rcv_buffer_size
)
sd
.
rd_buf
.
resize
(
sd
.
rcv_buffer_size
);
if
(
!
sd
.
ptr
->
consume
(
this
,
sd
.
rd_buf
.
data
(),
sd
.
rd_buf
.
size
()))
passive_mode
(
hdl
)
=
true
;
}
void
test_multiplexer
::
read_datagram
(
dgram_doorman_handle
hdl
)
{
if
(
passive_mode
(
hdl
))
return
;
flush_runnables
();
auto
&
sd
=
dgram_doorman_data_
[
hdl
];
while
(
!
sd
.
ptr
)
exec_runnable
();
sd
.
rd_buf
=
std
::
move
(
sd
.
xbuf
.
front
());
sd
.
xbuf
.
pop_front
();
if
(
sd
.
rd_buf
.
size
()
>
sd
.
rcv_buffer_size
)
sd
.
rd_buf
.
resize
(
sd
.
rcv_buffer_size
);
if
(
!
sd
.
ptr
->
new_endpoint
(
sd
.
rd_buf
.
data
(),
sd
.
rd_buf
.
size
()))
passive_mode
(
hdl
)
=
true
;
}
void
test_multiplexer
::
virtual_send
(
connection_handle
hdl
,
void
test_multiplexer
::
virtual_send
(
connection_handle
hdl
,
const
buffer_type
&
buf
)
{
const
buffer_type
&
buf
)
{
CAF_LOG_TRACE
(
CAF_ARG
(
hdl
));
CAF_LOG_TRACE
(
CAF_ARG
(
hdl
));
...
@@ -656,6 +723,20 @@ void test_multiplexer::virtual_send(connection_handle hdl,
...
@@ -656,6 +723,20 @@ void test_multiplexer::virtual_send(connection_handle hdl,
read_data
(
hdl
);
read_data
(
hdl
);
}
}
void
test_multiplexer
::
virtual_send
(
dgram_scribe_handle
hdl
,
const
buffer_type
&
buf
)
{
CAF_LOG_TRACE
(
CAF_ARG
(
hdl
));
virtual_network_buffer
(
hdl
)
=
buf
;
read_datagram
(
hdl
);
}
void
test_multiplexer
::
virtual_send
(
dgram_doorman_handle
hdl
,
const
buffer_type
&
buf
)
{
CAF_LOG_TRACE
(
CAF_ARG
(
hdl
));
virtual_network_buffer
(
hdl
)
=
buf
;
read_datagram
(
hdl
);
}
void
test_multiplexer
::
exec_runnable
()
{
void
test_multiplexer
::
exec_runnable
()
{
CAF_LOG_TRACE
(
""
);
CAF_LOG_TRACE
(
""
);
resumable_ptr
ptr
;
resumable_ptr
ptr
;
...
...
libcaf_io/test/basp.cpp
View file @
3996b8d4
...
@@ -707,7 +707,6 @@ CAF_TEST(actor_serialize_and_deserialize) {
...
@@ -707,7 +707,6 @@ CAF_TEST(actor_serialize_and_deserialize) {
// addressing is available.
// addressing is available.
CAF_TEST
(
indirect_connections
)
{
CAF_TEST
(
indirect_connections
)
{
CAF_MESSAGE
(
"Currently not implemented."
);
CAF_MESSAGE
(
"Currently not implemented."
);
CAF_CHECK_EQUAL
(
true
,
false
);
/*
/*
// this node receives a message from jupiter via mars and responds via mars
// this node receives a message from jupiter via mars and responds via mars
// and any ad-hoc automatic connection requests are ignored
// and any ad-hoc automatic connection requests are ignored
...
@@ -766,7 +765,6 @@ CAF_TEST_FIXTURE_SCOPE(basp_tests_with_autoconn, autoconn_enabled_fixture)
...
@@ -766,7 +765,6 @@ CAF_TEST_FIXTURE_SCOPE(basp_tests_with_autoconn, autoconn_enabled_fixture)
CAF_TEST
(
automatic_connection
)
{
CAF_TEST
(
automatic_connection
)
{
CAF_MESSAGE
(
"Currently not implemented."
);
CAF_MESSAGE
(
"Currently not implemented."
);
CAF_CHECK_EQUAL
(
true
,
false
);
// this tells our BASP broker to enable the automatic connection feature
// this tells our BASP broker to enable the automatic connection feature
//anon_send(aut(), ok_atom::value,
//anon_send(aut(), ok_atom::value,
// "middleman.enable-automatic-connections", make_message(true));
// "middleman.enable-automatic-connections", make_message(true));
...
...
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