tidied up the example
This commit is contained in:
parent
01d8b705c8
commit
5e825b4785
@ -7,4 +7,5 @@ edition = "2018"
|
|||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
num_cpus = "1.0"
|
||||||
afl = { path = "../" }
|
afl = { path = "../" }
|
@ -1,12 +1,13 @@
|
|||||||
|
use core::convert::TryInto;
|
||||||
use core::ffi::c_void;
|
use core::ffi::c_void;
|
||||||
|
use core::mem::size_of;
|
||||||
use std::env::args;
|
use core::ptr;
|
||||||
use std::ptr;
|
use std::thread;
|
||||||
|
use std::time;
|
||||||
|
|
||||||
use afl::events::llmp_translated::*;
|
use afl::events::llmp_translated::*;
|
||||||
|
|
||||||
use std::convert::TryInto;
|
const TAG_SIMPLE_U32_V1: u32 = 0x51300321;
|
||||||
use std::{thread, time};
|
|
||||||
|
|
||||||
fn llmp_test_clientloop(client: *mut llmp_client, _data: *mut c_void) -> ! {
|
fn llmp_test_clientloop(client: *mut llmp_client, _data: *mut c_void) -> ! {
|
||||||
let mut counter: u32 = 0;
|
let mut counter: u32 = 0;
|
||||||
@ -14,13 +15,13 @@ fn llmp_test_clientloop(client: *mut llmp_client, _data: *mut c_void) -> ! {
|
|||||||
counter += 1;
|
counter += 1;
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
let llmp_message = llmp_client_alloc_next(client, 10);
|
let llmp_message = llmp_client_alloc_next(client, size_of::<u32>());
|
||||||
std::ptr::copy(
|
std::ptr::copy(
|
||||||
counter.to_be_bytes().as_ptr(),
|
counter.to_be_bytes().as_ptr(),
|
||||||
(*llmp_message).buf.as_mut_ptr(),
|
(*llmp_message).buf.as_mut_ptr(),
|
||||||
4,
|
size_of::<u32>(),
|
||||||
);
|
);
|
||||||
(*llmp_message).tag = 1;
|
(*llmp_message).tag = TAG_SIMPLE_U32_V1;
|
||||||
llmp_client_send(client, llmp_message);
|
llmp_client_send(client, llmp_message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,12 +37,12 @@ fn broker_message_hook(
|
|||||||
) -> LlmpMessageHookResult {
|
) -> LlmpMessageHookResult {
|
||||||
unsafe {
|
unsafe {
|
||||||
match (*message).tag {
|
match (*message).tag {
|
||||||
1 => {
|
TAG_SIMPLE_U32_V1 => {
|
||||||
println!(
|
println!(
|
||||||
"Client {:?} sent message: {:?}",
|
"Client {:?} sent message: {:?}",
|
||||||
(*client_metadata).pid,
|
(*client_metadata).pid,
|
||||||
u32::from_be_bytes(
|
u32::from_be_bytes(
|
||||||
std::slice::from_raw_parts((*message).buf.as_ptr(), 4)
|
std::slice::from_raw_parts((*message).buf.as_ptr(), size_of::<u32>())
|
||||||
.try_into()
|
.try_into()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
),
|
),
|
||||||
@ -57,7 +58,10 @@ fn broker_message_hook(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
/* The main node has a broker, a tcp server, and a few worker threads */
|
/* The main node has a broker, and a few worker threads */
|
||||||
|
|
||||||
|
let thread_count = num_cpus::get() - 1;
|
||||||
|
println!("Running with 1 broker and {} clients", thread_count);
|
||||||
|
|
||||||
let mut broker = llmp_broker_state {
|
let mut broker = llmp_broker_state {
|
||||||
last_msg_sent: ptr::null_mut(),
|
last_msg_sent: ptr::null_mut(),
|
||||||
@ -68,7 +72,6 @@ fn main() {
|
|||||||
llmp_client_count: 0,
|
llmp_client_count: 0,
|
||||||
llmp_clients: ptr::null_mut(),
|
llmp_clients: ptr::null_mut(),
|
||||||
};
|
};
|
||||||
let thread_count = 3;
|
|
||||||
unsafe {
|
unsafe {
|
||||||
llmp_broker_init(&mut broker).expect("Could not init");
|
llmp_broker_init(&mut broker).expect("Could not init");
|
||||||
for i in 0..thread_count {
|
for i in 0..thread_count {
|
||||||
|
@ -1151,7 +1151,7 @@ pub unsafe fn llmp_client_recv_blocking(client: *mut llmp_client) -> *mut llmp_m
|
|||||||
}
|
}
|
||||||
/* The current page could have changed in recv (EOP) */
|
/* The current page could have changed in recv (EOP) */
|
||||||
/* Alloc the next message, internally handling end of page by allocating a new one. */
|
/* Alloc the next message, internally handling end of page by allocating a new one. */
|
||||||
pub unsafe fn llmp_client_alloc_next(client: *mut llmp_client, size: c_ulong) -> *mut llmp_message {
|
pub unsafe fn llmp_client_alloc_next(client: *mut llmp_client, size: usize) -> *mut llmp_message {
|
||||||
if client.is_null() {
|
if client.is_null() {
|
||||||
panic!("Client is NULL");
|
panic!("Client is NULL");
|
||||||
}
|
}
|
||||||
@ -1159,10 +1159,10 @@ pub unsafe fn llmp_client_alloc_next(client: *mut llmp_client, size: c_ulong) ->
|
|||||||
shmem2page(
|
shmem2page(
|
||||||
&mut *(*client)
|
&mut *(*client)
|
||||||
.out_maps
|
.out_maps
|
||||||
.offset((*client).out_map_count.wrapping_sub(1 as c_int as c_ulong) as isize),
|
.offset((*client).out_map_count.wrapping_sub(1) as isize),
|
||||||
),
|
),
|
||||||
(*client).last_msg_sent,
|
(*client).last_msg_sent,
|
||||||
size,
|
size as c_ulong,
|
||||||
);
|
);
|
||||||
if msg.is_null() {
|
if msg.is_null() {
|
||||||
let last_map_count: c_ulong = (*client).out_map_count;
|
let last_map_count: c_ulong = (*client).out_map_count;
|
||||||
@ -1175,7 +1175,7 @@ pub unsafe fn llmp_client_alloc_next(client: *mut llmp_client, size: c_ulong) ->
|
|||||||
|| (*(*shmem2page(
|
|| (*(*shmem2page(
|
||||||
&mut *(*client)
|
&mut *(*client)
|
||||||
.out_maps
|
.out_maps
|
||||||
.offset((*client).out_map_count.wrapping_sub(1 as c_int as c_ulong) as isize),
|
.offset((*client).out_map_count.wrapping_sub(1) as isize),
|
||||||
))
|
))
|
||||||
.messages
|
.messages
|
||||||
.as_mut_ptr())
|
.as_mut_ptr())
|
||||||
@ -1190,10 +1190,10 @@ pub unsafe fn llmp_client_alloc_next(client: *mut llmp_client, size: c_ulong) ->
|
|||||||
shmem2page(
|
shmem2page(
|
||||||
&mut *(*client)
|
&mut *(*client)
|
||||||
.out_maps
|
.out_maps
|
||||||
.offset((*client).out_map_count.wrapping_sub(1 as c_int as c_ulong) as isize),
|
.offset((*client).out_map_count.wrapping_sub(1) as isize),
|
||||||
),
|
),
|
||||||
0 as *mut llmp_message,
|
0 as *mut llmp_message,
|
||||||
size,
|
size as c_ulong,
|
||||||
);
|
);
|
||||||
if msg.is_null() {
|
if msg.is_null() {
|
||||||
return 0 as *mut llmp_message;
|
return 0 as *mut llmp_message;
|
||||||
@ -1203,7 +1203,7 @@ pub unsafe fn llmp_client_alloc_next(client: *mut llmp_client, size: c_ulong) ->
|
|||||||
(*msg).message_id = if !(*client).last_msg_sent.is_null() {
|
(*msg).message_id = if !(*client).last_msg_sent.is_null() {
|
||||||
(*(*client).last_msg_sent).message_id.wrapping_add(1)
|
(*(*client).last_msg_sent).message_id.wrapping_add(1)
|
||||||
} else {
|
} else {
|
||||||
1 as c_int as c_uint
|
1 as c_uint
|
||||||
};
|
};
|
||||||
/* DBG("Allocated message at loc %p with buflen %ld", msg, msg->buf_len_padded); */
|
/* DBG("Allocated message at loc %p with buflen %ld", msg, msg->buf_len_padded); */
|
||||||
return msg;
|
return msg;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user