--- libaitio/inc/aitio.h 2011/09/19 22:41:04 1.11.2.15 +++ libaitio/inc/aitio.h 2011/10/14 07:39:47 1.11.2.27 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitio.h,v 1.11.2.15 2011/09/19 22:41:04 misho Exp $ +* $Id: aitio.h,v 1.11.2.27 2011/10/14 07:39:47 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -47,8 +47,13 @@ SUCH DAMAGE. #define __AITIO_H +#define COMPAT_43TTY + #include #include +#include +#include +#include #define VACUUM_LEFT 1 @@ -227,7 +232,11 @@ typedef struct { AIT_LEN(__val) = 0; \ } while (0) +struct io_ether_addr { + u_int8_t ether_addr_octet[6]; +}; + // io_GetErrno() Get error code of last operation inline int io_GetErrno(); // io_GetError() Get error text of last operation @@ -235,6 +244,22 @@ inline const char *io_GetError(); /* + * io_ether_ntoa() Convert ethernet address to string + * @n = ethernet address structure, like struct ether_addr + * @a = string + * @len = string length + * return: NULL error or !=NULL string a + */ +inline char *io_ether_ntoa(const struct io_ether_addr *n, char * __restrict a, int len); +/* + * io_ether_aton() Convert string to ethernet address + * @a = string + * @e = ethernet address structure, like struct ether_addr + * return: NULL error or !=NULL ethernet address structure + */ +inline struct io_ether_addr *io_ether_aton(const char *a, struct io_ether_addr *e); + +/* * io_vals2buffer() Marshaling data from array with variables to buffer * @buf = Buffer * @buflen = Size of buffer @@ -749,10 +774,21 @@ int ioCipher(unsigned char *pInput, int inLen, unsigne */ int io_Blowfish(unsigned char *pInput, int inLen, unsigned char **ppOutput, unsigned char *pKey, unsigned char *pIV, int nMode); +/* + * io_ctr_AES() Encrypt/Decrypt stream cipher CTR_AES + * @pInput = Input buffer with ASCII + * @inLen = Input buffer data length + * @ppOutput = Output buffer with cipher data, must be free after use + * @pKey = Key + * @IV = IVector/Nonce/Counter, Warning: IV must be variable, because we write there!!! + * return: -1 error or >-1 how many cipher blocks proceeded + */ +int io_ctr_AES(unsigned char *pInput, int inLen, unsigned char **ppOutput, + unsigned char *pKey, unsigned char IV[AES_BLOCK_SIZE]); /* - * ioAllocPTY() Allocate new PTY + * ioAllocPTY() Allocate new PTY and TTY * @ptyfd = master fd, pty * @ttyfd = slave fd, tty * @name = tty device name if not null @@ -764,11 +800,12 @@ int io_Blowfish(unsigned char *pInput, int inLen, unsi inline int ioAllocPTY(int *ptyfd, int *ttyfd, char * __restrict name, int namesiz, struct termios * __restrict term, struct winsize * __restrict winz); /* - * ioFreePTY() Release PTY + * ioFreePTY() Release PTY and TTY device + * @ptyfd = master fd, pty (==-1 skip closing pty) * @ttyname = tty filename * return: none */ -inline void ioFreePTY(const char *ttyname); +inline void ioFreePTY(int ptyfd, const char *ttyname); /* * ioChgWinPTY() Change window size of PTY * @ptyfd = master fd, pty @@ -778,15 +815,57 @@ inline void ioFreePTY(const char *ttyname); * @ypxl = y pixels * return: -1 error or 0 ok */ -inline int ioChgWinPTY(int ptyfd, u_short row, u_short col, u_short xpxl, u_short ypxl); +inline int ioChgWinPTY(int ptyfd, unsigned short row, unsigned short col, + unsigned short xpxl, unsigned short ypxl); /* - * ioSetOwnerPTY() Set owner to PTY + * ioSetOwnerTTY() Set owner to TTY * @ttyname = tty filename * @UID = uid * @GID = gid * return: -1 error or 0 ok */ -int ioSetOwnerPTY(const char *ttyname, uid_t UID, gid_t GID); +int ioSetOwnerTTY(const char *ttyname, uid_t UID, gid_t GID); +/* + * ioSetSidTTY() Makes the process's controlling TTY and sets it to sane modes. + * @ttyfd = slave fd, tty + * @ttyname = tty filename + * return: -1 error or 0 ok + */ +int ioSetSidTTY(int *ttyfd, const char *ttyname); +/* + * ioSetRAWMode() Enter into RAW mode + * @fd = tty fd + * @otio = saved old termios for later restore if !=NULL + * return: -1 error or 0 ok + */ +inline int ioSetRAWMode(int fd, struct termios *otio); +/* + * ioRestoreMode() Restore termios to tty fd + * @fd = tty fd + * @tio = termios structure for restore + * return: -1 error or 0 ok + */ +inline int ioRestoreMode(int fd, struct termios tio); +/* + * ioForkPTY() Fork new process with session leader and new TTY + * @ptyfd = master fd, pty + * @name = tty device name if not null + * @namesiz = name length, must be above 63 bytes. + * @term = termios for terminal + * @winz = winsize for terminal + * @otio = old termios structure for restore + * return: -1 error, 0 child process or >0 parent: pid of child + */ +pid_t ioForkPTY(int *ptyfd, char * __restrict name, int namesiz, struct termios * __restrict term, + struct winsize * __restrict winz, struct termios * __restrict otio); + +/* + * ioCreatePIDFile() Create PID file + * @csName = PID filename + * @ifExists = !=0 if filename exists return error + * return: -1 error or 0 ok + */ +inline int ioCreatePIDFile(const char *csName, int ifExists); #endif