Codebase list dnscat2 / f5f284a2-3c95-48e0-94ba-d58d7eba3012/main client / drivers / driver.h
f5f284a2-3c95-48e0-94ba-d58d7eba3012/main

Tree @f5f284a2-3c95-48e0-94ba-d58d7eba3012/main (Download .tar.gz)

driver.h @f5f284a2-3c95-48e0-94ba-d58d7eba3012/mainraw · history · blame

/* driver.h
 * By Ron Bowes
 *
 * See LICENSE.md
 *
 * This is basically a hack to make a polymorphic class in C. It just lets
 * other stuff call functions, and passes it to the appropriate implementation.
 */

#ifndef __DRIVER_H__
#define __DRIVER_H__

#include "driver_console.h"
#include "driver_exec.h"
#include "driver_ping.h"
#include "drivers/command/driver_command.h"

typedef enum
{
  DRIVER_TYPE_CONSOLE,
  DRIVER_TYPE_EXEC,
  DRIVER_TYPE_COMMAND,
  DRIVER_TYPE_PING,
} driver_type_t;

typedef struct
{
  driver_type_t type;

  union
  {
    driver_console_t *console;
    driver_exec_t    *exec;
    driver_command_t *command;
    driver_ping_t    *ping;
  } real_driver;
} driver_t;

driver_t *driver_create(driver_type_t type, void *real_driver);
void      driver_destroy(driver_t *driver);
void      driver_close(driver_t *driver);
void      driver_data_received(driver_t *driver, uint8_t *data, size_t length);
uint8_t  *driver_get_outgoing(driver_t *driver, size_t *length, size_t max_length);

#endif