--- libaitio/inc/aitio.h 2013/12/12 14:56:38 1.38.10.13 +++ libaitio/inc/aitio.h 2019/10/08 13:00:42 1.42.2.2 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.38.10.13 2013/12/12 14:56:38 misho Exp $ +* $Id: aitio.h,v 1.42.2.2 2019/10/08 13:00:42 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 +Copyright 2004 - 2019 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -51,20 +51,50 @@ SUCH DAMAGE. #include #include -#include +#include #include -#include -#include +#include +#if OPENSSL_VERSION_NUMBER >= 0x10100000L + #include +#endif #include #include #include +#ifndef __linux__ +#include +#include #include #include +#endif #include #include #include +#if OPENSSL_VERSION_NUMBER >= 0x10100000L +#ifndef evp_cipher_ctx_st +struct evp_cipher_ctx_st { + const EVP_CIPHER *cipher; + ENGINE *engine; /* functional reference if 'cipher' is + * ENGINE-provided */ + int encrypt; /* encrypt or decrypt */ + int buf_len; /* number we have left */ + unsigned char oiv[EVP_MAX_IV_LENGTH]; /* original iv */ + unsigned char iv[EVP_MAX_IV_LENGTH]; /* working iv */ + unsigned char buf[EVP_MAX_BLOCK_LENGTH]; /* saved partial block */ + int num; /* used by cfb/ofb/ctr mode */ + /* FIXME: Should this even exist? It appears unused */ + void *app_data; /* application stuff */ + int key_len; /* May change for variable length cipher */ + unsigned long flags; /* Various flags */ + void *cipher_data; /* per EVP data */ + int final_used; + int block_mask; + unsigned char final[EVP_MAX_BLOCK_LENGTH]; /* possible final block */ +} /* EVP_CIPHER_CTX */ ; +#endif +#endif + #ifndef STRSIZ #define STRSIZ 256 #endif @@ -94,7 +124,7 @@ typedef void *(*sock_cb_t)(sock_cli_t*); struct tagCliSock { void *cli_parent; int cli_fd; - int cli_pty; + intptr_t cli_pty; sockaddr_t cli_addr; char cli_name[64]; char cli_cmdline[PATH_MAX]; @@ -149,10 +179,17 @@ prog_t *io_progInit(const char *progName, * * @prg = program pool * @execNum = execute program(s) (0 max) - * return: 0 error, >0 executed programs and abs(<0) executed programs with logged error + * return: -1 error, >0 executed programs */ int io_progOpen(prog_t * __restrict prg, unsigned int execNum); /* + * io_progOpen2() - Start program from pool on first unused slot + * + * @prg = program pool + * return: -1 error, >-1 reside at slot + */ +int io_progOpen2(prog_t * __restrict prg); +/* * io_progGrow() - Execute to number of programs in pool * * @prg = program pool @@ -178,6 +215,18 @@ int io_progVacuum(prog_t * __restrict prg, unsigned in */ int io_progCloseAt(prog_t * __restrict prg, unsigned int idx); /* + * io_progCloseOf() - Close program at pool with certain handle + * + * @prg = program pool + * @h = handle of program + * return: 0 error, >0 closed programs + */ +#ifdef POPEN_STREAM +int io_progCloseOf(prog_t * __restrict prg, FILE *h); +#else +int io_progCloseOf(prog_t * __restrict prg, int h); +#endif +/* * io_progClose() - Close all programs in pool * * @prg = program pool @@ -197,7 +246,7 @@ void io_progDestroy(prog_t ** __restrict pprg); * io_progCheck() - Check exit status of program pool * * @prg = program pool - * @re = resurrect program + * @re = resurrect program to init number * return: -1 error or >-1 exited programs */ int io_progCheck(prog_t * __restrict prg, int re); @@ -257,6 +306,14 @@ void ioCloseSocket(sock_t ** __restrict s); */ int ioCloseClient(sock_cli_t * __restrict c); /* + * ioSetupProg2Socket() - Setup program pool to socket server + * + * @s = Socket + * @p = Program pool + * return: -1 error or 0 ok + */ +int ioSetupProg2Socket(sock_t * __restrict s, prog_t * __restrict p); +/* * ioUpSocket() - Setup socket for use * * @s = Socket @@ -604,37 +661,22 @@ FILE *io_fd2buf(int fd, const char *mode); * return: -1 error or open file handle */ int io_dumbFile(const char *csFile, int mode, off_t size); +#define io_emptyFile io_dumbFile /* - * io_get1stiface() - Get first interface of host - * - * @szIface = interface string buffer - * @iflen = size of interface buffer - * return: -1 error or 0 ok - */ -int io_get1stiface(char *szIface, int iflen); -/* - * io_getmaciface() - Get MAC address from interface name - * - * @csIface = interface name - * @ea = ethernet address - * return: -1 error, 0 ok or 1 not found - */ -int io_getmaciface(const char *csIface, ether_addr_t * __restrict ea); -/* * io_etherOpen() - Open BPF interface to device * * @csIface = interface name * @flags = open flags * @whdr = with complete headers - * @wdlt = with data link type + * @wdlt = with data link type, on Linux is protocol number * @buflen = buffer length * @zcbuf = zero copy buffer, if BPF supports it and isn't NULL * return: -1 error or >-1 bpf handle */ -int io_etherOpen(const char *csIface, int flags, int whdr, int wdlt, - unsigned int *buflen, void **zcbuf); +int io_etherOpen(const char *csIface, int flags, unsigned int whdr, + unsigned int wdlt, unsigned int *buflen, void **zcbuf); /* * io_etherClose() - Close BPF interface * @@ -644,6 +686,7 @@ int io_etherOpen(const char *csIface, int flags, int w */ void io_etherClose(int eth, void **zcbuf); +#ifndef __linux__ /* * io_etherFilter() - BPF filter routine * @@ -655,6 +698,7 @@ void io_etherClose(int eth, void **zcbuf); * return: -1 error or 0 ok */ int io_etherFilter(int eth, int io, struct bpf_insn * __restrict insn, size_t insnlen); +#endif /* * io_etherSend() - Send packet to bpf