-/* SPDX-License-Identifier: GPL-2.0-or-later */
+// SPDX-License-Identifier: GPL-2.0-or-later
/*
* Copyright (C) 2016-2017 by Marc Schink <dev@zapb.de>
struct rtt_service {
unsigned int channel;
+ char *hello_message;
};
static int read_callback(unsigned int channel, const uint8_t *buffer,
if (ret != ERROR_OK)
return ret;
+ if (service->hello_message)
+ connection_write(connection, service->hello_message, strlen(service->hello_message));
+
return ERROR_OK;
}
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) {
.handler = handle_rtt_start_command,
.mode = COMMAND_ANY,
.help = "Start a RTT server",
- .usage = "<port> <channel>"
+ .usage = "<port> <channel> [message]"
},
{
.name = "stop",