Missed a spot with patty_ax25_pton() fix
This commit is contained in:
parent
116bf788d5
commit
0fecccd7c3
4 changed files with 165 additions and 2 deletions
|
@ -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",
|
||||
|
|
|
@ -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
163
src/daemon.c
Normal 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);
|
||||
}
|
Loading…
Add table
Reference in a new issue