#define TCL_SERVER_VERSION "TCL Server 0.1"
#define TCL_MAX_LINE (4096)
-typedef struct tcl_connection_s {
+struct tcl_connection {
int tc_linedrop;
int tc_lineoffset;
char tc_line[TCL_MAX_LINE];
int tc_outerror; /* flag an output error */
-} tcl_connection_t;
+};
static unsigned short tcl_port = 6666;
/* handlers */
-static int tcl_new_connection(connection_t *connection);
-static int tcl_input(connection_t *connection);
-static int tcl_output(connection_t *connection, const void *buf, ssize_t len);
-static int tcl_closed(connection_t *connection);
+static int tcl_new_connection(struct connection *connection);
+static int tcl_input(struct connection *connection);
+static int tcl_output(struct connection *connection, const void *buf, ssize_t len);
+static int tcl_closed(struct connection *connection);
/* write data out to a socket.
*
* this is a blocking write, so the return value must equal the length, if
* that is not the case then flag the connection with an output error.
*/
-int tcl_output(connection_t *connection, const void *data, ssize_t len)
+int tcl_output(struct connection *connection, const void *data, ssize_t len)
{
ssize_t wlen;
- tcl_connection_t *tclc;
+ struct tcl_connection *tclc;
tclc = connection->priv;
if (tclc->tc_outerror)
}
/* connections */
-static int tcl_new_connection(connection_t *connection)
+static int tcl_new_connection(struct connection *connection)
{
- tcl_connection_t *tclc;
+ struct tcl_connection *tclc;
- tclc = malloc(sizeof(tcl_connection_t));
+ tclc = malloc(sizeof(struct tcl_connection));
if (tclc == NULL)
return ERROR_CONNECTION_REJECTED;
- memset(tclc, 0, sizeof(tcl_connection_t));
+ memset(tclc, 0, sizeof(struct tcl_connection));
connection->priv = tclc;
return ERROR_OK;
}
-static int tcl_input(connection_t *connection)
+static int tcl_input(struct connection *connection)
{
+ Jim_Interp *interp = (Jim_Interp *)connection->priv;
int retval;
int i;
ssize_t rlen;
const char *result;
int reslen;
- tcl_connection_t *tclc;
- char in[256];
+ struct tcl_connection *tclc;
+ unsigned char in[256];
rlen = read_socket(connection->fd, &in, sizeof(in));
if (rlen <= 0) {
return ERROR_OK;
}
-static int tcl_closed(connection_t *connection)
+static int tcl_closed(struct connection *connection)
{
/* cleanup connection context */
if (connection->priv) {
return ERROR_OK;
}
-int tcl_init(void)
+int tcl_init(struct command_context *cmd_ctx)
{
int retval;
return ERROR_OK;
}
- retval = add_service("tcl", CONNECTION_TCP, tcl_port, 1, tcl_new_connection, tcl_input, tcl_closed, NULL);
+ retval = add_service("tcl", CONNECTION_TCP, tcl_port, 1,
+ &tcl_new_connection, &tcl_input,
+ &tcl_closed, cmd_ctx->interp);
return retval;
}
COMMAND_HANDLER(handle_tcl_port_command)
{
- return server_port_command(cmd_ctx, cmd, args, argc, &tcl_port);
+ return CALL_COMMAND_HANDLER(server_port_command, &tcl_port);
}
-int tcl_register_commands(command_context_t *cmd_ctx)
+static const struct command_registration tcl_command_handlers[] = {
+ {
+ .name = "tcl_port",
+ .handler = &handle_tcl_port_command,
+ .mode = COMMAND_CONFIG,
+ .help = "port on which to listen "
+ "for incoming TCL syntax",
+ .usage = "<port>",
+ },
+ COMMAND_REGISTRATION_DONE
+};
+
+int tcl_register_commands(struct command_context *cmd_ctx)
{
- register_command(cmd_ctx, NULL, "tcl_port",
- handle_tcl_port_command, COMMAND_CONFIG,
- "port on which to listen for incoming TCL syntax");
- return ERROR_OK;
+ return register_commands(cmd_ctx, NULL, tcl_command_handlers);
}