aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/rtt_server.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/server/rtt_server.c b/src/server/rtt_server.c
index df2247b..9769153 100644
--- a/src/server/rtt_server.c
+++ b/src/server/rtt_server.c
@@ -25,6 +25,7 @@
struct rtt_service {
unsigned int channel;
+ char *hello_message;
};
static int read_callback(unsigned int channel, const uint8_t *buffer,
@@ -65,6 +66,9 @@ static int rtt_new_connection(struct connection *connection)
if (ret != ERROR_OK)
return ret;
+ if (service->hello_message)
+ connection_write(connection, service->hello_message, strlen(service->hello_message));
+
return ERROR_OK;
}
@@ -117,16 +121,30 @@ COMMAND_HANDLER(handle_rtt_start_command)
int ret;
struct rtt_service *service;
- if (CMD_ARGC != 2)
+ if (CMD_ARGC < 2 || CMD_ARGC > 3)
return ERROR_COMMAND_SYNTAX_ERROR;
- service = malloc(sizeof(struct rtt_service));
+ service = calloc(1, sizeof(struct rtt_service));
if (!service)
return ERROR_FAIL;
COMMAND_PARSE_NUMBER(uint, CMD_ARGV[1], service->channel);
+ if (CMD_ARGC >= 3) {
+ const char *hello_message = CMD_ARGV[2];
+ size_t hello_length = strlen(hello_message);
+
+ service->hello_message = malloc(hello_length + 2);
+ if (!service->hello_message) {
+ LOG_ERROR("Out of memory");
+ free(service);
+ return ERROR_FAIL;
+ }
+ strcpy(service->hello_message, hello_message);
+ service->hello_message[hello_length] = '\n';
+ service->hello_message[hello_length + 1] = '\0';
+ }
ret = add_service(&rtt_service_driver, CMD_ARGV[0], CONNECTION_LIMIT_UNLIMITED, service);
if (ret != ERROR_OK) {
@@ -153,7 +171,7 @@ static const struct command_registration rtt_server_subcommand_handlers[] = {
.handler = handle_rtt_start_command,
.mode = COMMAND_ANY,
.help = "Start a RTT server",
- .usage = "<port> <channel>"
+ .usage = "<port> <channel> [message]"
},
{
.name = "stop",