/* Copyright 2010 Nathan Phillip Brink This file is a part of DistRen. DistRen is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. DistRen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with DistRen. If not, see . */ #ifndef _DISTREN_LIBREMOTEIO_H #define _DISTREN_LIBREMOTEIO_H #include "remoteio.h" #include /** private declarations for remoteio, to be included by options.c and remoteio.c */ enum remoteio_method { REMOTEIO_METHOD_SSH = 0, #ifndef WINDOWS REMOTEIO_METHOD_UNIX = 1, #endif REMOTEIO_METHOD_TCP = 2, /* REMOETIO_METHOD_XMLRPC */ /*< maybe someday */ REMOTEIO_METHOD_MAX = 3 /*< This is a number used to check the consitency of remoteio_server structs */ }; struct remoteio_server { struct remoteio_server *next; char *name; /*< The friendly named passed to remoteio_open() */ char *hostname; char *username; enum remoteio_method method; unsigned int types; /*< See ``Server types'' in protocol.h */ }; struct remoteio_opts { char *ssh_command; struct remoteio_server *servers; }; struct remoteio { enum remoteio_method method; struct remoteio_opts *opts; struct execio *execio; #ifndef WINDOWS int sock; #endif }; /* lookup table */ typedef int remoteio_open_func_t(struct remoteio *rem, struct remoteio_server *server); typedef int remoteio_read_func_t(struct remoteio *rem, void *buf, size_t len, size_t *bytesread); typedef int remoteio_write_func_t(struct remoteio *rem, void *buf, size_t len, size_t *bytesread); typedef int remoteio_close_func_t(struct remoteio *rem); struct remoteio_method_funcmap { enum remoteio_method method; remoteio_open_func_t *open_func; remoteio_read_func_t *read_func; remoteio_write_func_t *write_func; remoteio_close_func_t *close_func; char *name; /*< used for error messages */ }; int remoteio_config(cfg_t *cfg, struct remoteio_opts *opts); #endif