Missed a spot with patty_ax25_pton() fix

This commit is contained in:
XANTRONIX Development 2020-08-24 22:52:52 -05:00 committed by XANTRONIX Industrial
parent 116bf788d5
commit 0fecccd7c3
4 changed files with 165 additions and 2 deletions

View file

@ -44,7 +44,7 @@ int main(int argc, char **argv) {
usage(argc, argv, "Too many arguments provided");
}
patty_ax25_pton(argv[2], 0, &peer);
patty_ax25_pton(argv[2], &peer);
if ((client = patty_client_new(argv[1])) == NULL) {
fprintf(stderr, "%s: %s: %s: %s\n",

View file

@ -47,7 +47,7 @@ int main(int argc, char **argv) {
usage(argc, argv, "Too many arguments provided");
}
patty_ax25_pton(argv[2], 0, &addr);
patty_ax25_pton(argv[2], &addr);
if ((client = patty_client_new(argv[1])) == NULL) {
fprintf(stderr, "%s: %s: %s: %s\n",

163
src/daemon.c Normal file
View file

@ -0,0 +1,163 @@
#include <patty/daemon.h>
struct _patty_daemon {
char *sock_path,
*pidfile;
patty_ax25_server *server;
};
patty_daemon *patty_daemon_new() {
patty_daemon *daemon;
if ((daemon = malloc(sizeof(*daemon))) == NULL) {
goto error_malloc;
}
if (patty_daemon_set_sock_path(daemon, PATTY_AX25_DAEMON_SOCK_PATH) < 0) {
goto error_set_sock_path;
}
if (patty_daemon_set_pidfile(daemon, PATTY_AX25_DAEMON_PIDFILE) < 0) {
goto error_set_pidfile;
}
return daemon;
error_set_pidfile:
free(daemon->sock_path);
error_set_sock_path:
free(daemon);
error_malloc:
return NULL;
}
void patty_daemon_destroy(patty_daemon *daemon) {
patty_ax25_server_destroy(daemon->server);
}
int patty_daemon_init(patty_daemon *daemon) {
if ((daemon->server = patty_ax25_server_new(daemon->sock_path)) == NULL) {
goto error_server_new;
}
return 0;
error_server_new:
return -1;
}
int patty_daemon_run(patty_daemon *daemon) {
if (patty_ax25_server_start(daemon->server) < 0) {
goto error_server_start;
}
while (1) {
if (patty_ax25_server_event_handle(daemon->server) < 0) {
goto error_server_event_handle;
}
}
patty_ax25_server_stop(daemon->server);
return 0;
error_server_event_handle:
return -1;
}
int patty_daemon_set_sock_path(patty_daemon *daemon, const char *path) {
if (daemon->sock_path) {
free(daemon->sock_path);
}
if ((daemon->sock_path = strdup(path)) == NULL) {
goto error_strdup;
}
return 0;
error_strdup:
return -1;
}
int patty_daemon_set_pidfile(patty_daemon *daemon, const char *path) {
if (daemon->pidfile) {
free(daemon->pidfile);
}
if ((daemon->pidfile = strdup(path)) == NULL) {
goto error_strdup;
}
return 0;
error_strdup:
return -1;
}
int patty_ax25_daemon_if_add(patty_ax25_daemon *daemon,
int opts,
patty_ax25_if_info *info) {
patty_ax25_if *iface;
if ((iface = patty_ax25_if_new(opts, info)) == NULL) {
goto error_if_new;
}
return patty_ax25_server_add_if(daemon->server, iface);
error_if_new:
return -1;
}
int patty_ax25_daemon_route_add(patty_ax25_daemon *daemon,
const char *ifname,
const char *dest,
const char **repeaters,
int hops) {
patty_ax25_route *route;
patty_ax25_if *iface;
int i;
if ((iface = patty_ax25_server_if_get(daemon->server, ifname)) == NULL) {
goto error_server_if_get;
}
if ((route = malloc(sizeof(*route))) == NULL) {
goto error_malloc_route;
}
memset(&route, '\0', sizeof(route));
route->iface = iface;
if (dest) {
if (patty_ax25_pton(dest, &route->dest) < 0) {
goto error_pton;
}
}
for (i=0; i<hops; i++) {
if (patty_ax25_pton(repeaters[i], &route->repeaters[i]) < 0) {
goto error_pton;
}
}
return patty_ax25_server_route_add(daemon->server, route);
error_pton:
free(route);
error_malloc_route:
error_server_if_get:
return -1;
}
int patty_daemon_route_add_default(patty_ax25_daemon *daemon,
const char *ifname) {
return patty_daemon_route_add(daemon, ifname, NULL, NULL, 0);
}