Files @ 9218a5310d2e
Branch filter:

Location: DistRen/src/common/libremoteio.h

ethanzonca@localhost.localdomain
TODO updates
/*
  Copyright 2009 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 <http://www.gnu.org/licenses/>.
*/

#ifndef _DISTREN_LIBREMOTEIO_H
#define _DISTREN_LIBREMOTEIO_H

#include "remoteio.h"
#include <confuse.h>

/**
  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 */ /*< someday, maybe */
    /*    REMOETIO_METHOD_XMLRPC */ /*< again, maybe someday */
    REMOTEIO_METHOD_MAX = 2 /*< 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