Allow running echoserver on a different port

This commit is contained in:
Jan Schär 2022-06-02 21:25:20 +02:00
parent b89763493d
commit 449975c376

View File

@ -3,58 +3,13 @@
#include <aos/aos.h>
#include <aos/simpleslab.h>
#include <aos/deferred.h>
#include <aos/aos_rpc.h>
#include <aos/ump_binding.h>
#include <aos/ump_chan.h>
#include <aos/ump_net.h>
#include <aos/ump_net_client.h>
// Echo Protocol: https://datatracker.ietf.org/doc/html/rfc862
#define PORT_ECHO 7
#define ECHO_TEST_MESSAGE "Hello Client! Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
__attribute__((__used__))
static void handle_payload_recv(void *arg, size_t payload_size, void *payload) {
printf("Echo server: Received payload(%lu): %.*s\n", payload_size, payload_size, payload);
}
__attribute__((__used__))
static void handle_header_recv(void *arg, size_t header_size, void *header, size_t payload_size) {
printf("Echo server: Received header: %u\n", *(uint8_t *)header);
printf("Echo server: Payload is %lu bytes\n", payload_size);
void *payload = malloc(payload_size);
assert(payload != NULL);
ump_recv_payload(arg, payload, handle_payload_recv, NULL);
}
__attribute__((__used__))
static void handle_send(void *arg, struct ump_send_queue_entry *entry) {
printf("Echo server: Message sent!\n");
}
static errval_t connect_server (void *arg, struct capref cap) {
errval_t err;
printf("Echo server: incoming connection\n");
struct ump_send_chan *send_chan;
struct ump_recv_chan *recv_chan;
err = ump_chan_init(UMP_ROLE_SERVER, &send_chan, &recv_chan, 1, cap, get_default_waitset());
if (err_is_fail(err)) return err;
uint8_t *value_to_send = malloc(sizeof(uint8_t));
*value_to_send = 123;
struct ump_send_queue_entry *entry = malloc(sizeof(struct ump_send_queue_entry));
printf("Echo server: Sending Message\n");
ump_send(send_chan, entry, 1, value_to_send, sizeof(ECHO_TEST_MESSAGE), ECHO_TEST_MESSAGE, handle_send, NULL);
printf("Echo server: Receiving Message\n");
ump_recv_header(recv_chan, handle_header_recv, recv_chan);
return SYS_ERR_OK;
}
static uint16_t listen_port = PORT_ECHO;
// UDP echo server
@ -71,7 +26,8 @@ static uint8_t slab_buf[sizeof(struct echo_buf) * 128];
static void udp_listen_callback (void *arg, errval_t err, uint16_t src_port) {
if (err_is_fail(err)) {
DEBUG_ERR(err, "failed to listen on UDP");
printf("Failed to listen on UDP port %d:\n", listen_port);
err_print_calltrace(err);
return;
}
DEBUG_PRINTF("Listening on UDP port %d.\n", src_port);
@ -95,7 +51,7 @@ static void net_recv_packet (void *arg, size_t payload_size, void *payload) {
ump_net_udp_send(
&echo_buf->call,
net_udp_recv.src_ip,
PORT_ECHO, net_udp_recv.src_port,
listen_port, net_udp_recv.src_port,
payload_size, &echo_buf->payload,
net_reply_callback, echo_buf
);
@ -130,7 +86,8 @@ static int tcp_connection_count = 0;
static void tcp_listen_callback (void *arg, errval_t err, uint16_t src_port) {
if (err_is_fail(err)) {
DEBUG_ERR(err, "failed to listen on TCP");
printf("Failed to listen on TCP port %d:\n", listen_port);
err_print_calltrace(err);
return;
}
DEBUG_PRINTF("Listening on TCP port %d.\n", src_port);
@ -188,12 +145,9 @@ int main (int argc, char *argv[]) {
errval_t err;
struct waitset *default_ws = get_default_waitset();
// printf("Echo server: registering\n");
struct ump_binding_server server;
err = ump_binding_register(&server, UMP_SERVER_ECHO, connect_server, NULL);
if (err_is_fail(err)) USER_PANIC_ERR(err, "Failed to register UMP server");
// printf("Echo server: listening\n");
if (argc >= 2) {
listen_port = strtol(argv[1], NULL, 10);
}
simpleslab_init(&slabs, sizeof(struct echo_buf), slab_buf, sizeof(slab_buf));
@ -201,10 +155,10 @@ int main (int argc, char *argv[]) {
if (err_is_fail(err)) USER_PANIC_ERR(err, "Failed to connect to net server");
struct ump_net_call call_udp_listen;
ump_net_udp_listen(&call_udp_listen, PORT_ECHO, handle_udp_recv, NULL, udp_listen_callback, NULL);
ump_net_udp_listen(&call_udp_listen, listen_port, handle_udp_recv, NULL, udp_listen_callback, NULL);
struct ump_net_call call_tcp_listen;
ump_net_tcp_listen(&call_tcp_listen, PORT_ECHO, handle_tcp_connect, NULL, tcp_listen_callback, NULL);
ump_net_tcp_listen(&call_tcp_listen, listen_port, handle_tcp_connect, NULL, tcp_listen_callback, NULL);
while (true) {
err = event_dispatch(default_ws);