Diff for /libaitio/inc/aitio.h between versions 1.35 and 1.39

version 1.35, 2013/09/02 11:16:27 version 1.39, 2013/12/15 22:57:20
Line 62  SUCH DAMAGE. Line 62  SUCH DAMAGE.
 #include <net/bpf.h>  #include <net/bpf.h>
 #include <netinet/in.h>  #include <netinet/in.h>
 #include <elwix.h>  #include <elwix.h>
   #include <aitsched.h>
   
   
 #ifndef STRSIZ  #ifndef STRSIZ
Line 71  SUCH DAMAGE. Line 72  SUCH DAMAGE.
 #define IO_SOCK_ROLE_CLIENT     0  #define IO_SOCK_ROLE_CLIENT     0
 #define IO_SOCK_ROLE_SERVER     1  #define IO_SOCK_ROLE_SERVER     1
   
   #define IO_ETHER_FILTER_PROMISC 0
   #define IO_ETHER_FILTER_NOTREAD -1
   #define IO_ETHER_FILTER_READ    1
   #define IO_ETHER_FILTER_WRITE   2
   
   
   typedef struct {
           unsigned int                    prog_inin;      /* init progs */
           unsigned int                    prog_maxn;      /* max progs */
           unsigned int                    prog_cnum;      /* current progs */
           char                            prog_name[PATH_MAX];
   
           pthread_mutex_t                 prog_mtx;
           array_t                         *prog_fds;
           unsigned int                    *prog_used;
   } prog_t;
   
 typedef struct tagCliSock sock_cli_t;  typedef struct tagCliSock sock_cli_t;
 typedef void *(*sock_cb_t)(sock_cli_t*);  typedef void *(*sock_cb_t)(sock_cli_t*);
 struct tagCliSock {  struct tagCliSock {
         void                            *cli_parent;          void                            *cli_parent;
         pthread_t                       cli_tid;  
         int                             cli_fd;          int                             cli_fd;
        int                             cli_pty;        intptr_t                        cli_pty;
         sockaddr_t                      cli_addr;          sockaddr_t                      cli_addr;
         char                            cli_name[64];          char                            cli_name[64];
           char                            cli_cmdline[PATH_MAX];
           pid_t                           cli_pid;
   
        sock_cb_t                       cli_func;        sched_task_func_t                cli_func;
        void                            *cli_arg; 
   
        ait_val_t                       cli_buf;        ait_val_t                       cli_buf[2];
   
         TAILQ_ENTRY(tagCliSock)         cli_node;          TAILQ_ENTRY(tagCliSock)         cli_node;
 };  };
   
 typedef struct {  typedef struct {
         int                             sock_role;          int                             sock_role;
         int                             sock_backq;          int                             sock_backq;
         int                             sock_type;          int                             sock_type;
         int                             sock_proto;          int                             sock_proto;
         int                             sock_fd;          int                             sock_fd;
           struct timespec                 sock_timeout;
         sockaddr_t                      sock_addr;          sockaddr_t                      sock_addr;
         sockaddr_t                      sock_peer;          sockaddr_t                      sock_peer;
   
         ait_val_t                       sock_buf;          ait_val_t                       sock_buf;
           prog_t                          *sock_prog;
   
           volatile intptr_t               sock_kill;
           sched_root_task_t               *sock_root;
   
         pthread_mutex_t                 sock_mtx;          pthread_mutex_t                 sock_mtx;
         TAILQ_HEAD(, tagCliSock)        sock_cli;          TAILQ_HEAD(, tagCliSock)        sock_cli;
 } sock_t;  } sock_t;
Line 112  const char *io_GetError(); Line 135  const char *io_GetError();
   
   
 /*  /*
    * io_progInit() - Init program pool
    *
    * @progName = program name for execution
    * @initNum = initial started programs
    * @maxNum = maximum started programs
    * return: NULL error or !=NULL allocated pool (must destroied with io_progDestroy())
    */
   prog_t *io_progInit(const char *progName, 
                   unsigned int initNum, unsigned int maxNum);
   /*
    * io_progOpen() - Execute number of program(s)
    *
    * @prg = program pool
    * @execNum = execute program(s) (0 max)
    * 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
    * @toNum = execute to number of programs (0 max)
    * return: 0 error or nothing to do, 
    *      >0 executed programs and abs(<0) executed programs with logged error
    */
   int io_progGrow(prog_t * __restrict prg, unsigned int toNum);
   /*
    * io_progVacuum() - Vacuum pool to running number of programs
    *
    * @prg = program pool
    * @toNum = vacuum to number of programs (0 to init number)
    * return: 0 error or >0 closed programs
    */
   int io_progVacuum(prog_t * __restrict prg, unsigned int toNum);
   /*
    * io_progCloseAt() - Close program at pool of certain position
    *
    * @prg = program pool
    * @idx = index at pool
    * return: 0 error or !=0 closed program
    */
   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
    * @closeNum = close program(s) (0 all)
    * return: 0 error, >0 closed programs
    */
   int io_progClose(prog_t * __restrict prg, unsigned int closeNum);
   /*
    * io_progDestroy() - Destroy entire program pool
    *
    * @pprg = program pool
    * return: none
    */
   void io_progDestroy(prog_t ** __restrict pprg);
   
   /*
    * io_progCheck() - Check exit status of program pool
    *
    * @prg = program pool
    * @re = resurrect program to init number
    * return: -1 error or >-1 exited programs
    */
   int io_progCheck(prog_t * __restrict prg, int re);
   
   /*
    * io_progAttach() - Attach to open program
    *
    * @prg = program pool
    * @newOne = Execute new one program after attach
    * return: NULL error or !=NULL attached program handle
    */
   #ifdef POPEN_STREAM
   FILE *io_progAttach(prog_t * __restrict prg, int newOne);
   #else
   int io_progAttach(prog_t * __restrict prg, int newOne);
   #endif
   /*
    * io_progDetach() - Detch from open program
    *
    * @prg= program pool
    * @pfd = attached program handle
    * return: none
    */
   #ifdef POPEN_STREAM
   void io_progDetach(prog_t * __restrict prg, FILE *pfd);
   #else
   void io_progDetach(prog_t * __restrict prg, int pfd);
   #endif
   
   
   /*
  * ioInitSocket() - Init socket and allocate resources   * ioInitSocket() - Init socket and allocate resources
  *   *
  * @role = Socket role   * @role = Socket role
Line 131  sock_t *ioInitSocket(int role, int type, int proto,  Line 267  sock_t *ioInitSocket(int role, int type, int proto, 
  * return: none   * return: none
  */   */
 void ioCloseSocket(sock_t ** __restrict s);  void ioCloseSocket(sock_t ** __restrict s);
   #define ioKillSocket(x)         (assert((x)), (x)->sock_kill = 1)
 /*  /*
    * ioCloseClient() - Close client socket
    *
    * @c = Client socket
    * return: 0 ok or !=0 error
    */
   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   * ioUpSocket() - Setup socket for use
  *   *
  * @s = Socket   * @s = Socket
  * @arg = Server role = listen backlog queue and Client role = peer address   * @arg = Server role = listen backlog queue and Client role = peer address
    * @timeout = Socket timeout in ms (default -1 infinit)
  * return: -1 error or 0 ok   * return: -1 error or 0 ok
  */   */
int ioUpSocket(sock_t * __restrict s, void *arg);int ioUpSocket(sock_t * __restrict s, void *arg, int timeout);
 /*  /*
 * ioAcceptSocket() - Accept clients * ioUpdTimerSocket() - Update timeout of socket
  *   *
    * @c = Client socket
    * return:  none
    */
   void ioUpdTimerSocket(sock_cli_t * __restrict c);
   /*
    * ioLoopSocket() - Start socket scheduler
    *
  * @s = Socket   * @s = Socket
 * @f = callback function for client handling * @rcb = Read callback
 * @arg = optional argument for callback function * return: -1 error or return result from scheduler
 * return: -1 error or 0 ok 
  */   */
int ioAcceptSocket(sock_t * __restrict s, sock_cb_t f, void *arg);int ioLoopSocket(sock_t * __restrict s, sched_task_func_t rcb);
 /*
  * ioBridgeProg2Socket() - Start socket scheduler and bridge program to socket
  *
  * @s = Socket
  * @prgname = Program name
  * return: 0 ok or !=0 error
  */
 int ioBridgeProg2Socket(sock_t * __restrict s, const char *prgname);
   
   
 /*  /*
  * ioPromptRead() - Read data from input h[0] with prompt to output h[1]   * ioPromptRead() - Read data from input h[0] with prompt to output h[1]
  *   *
Line 158  int ioAcceptSocket(sock_t * __restrict s, sock_cb_t f, Line 326  int ioAcceptSocket(sock_t * __restrict s, sock_cb_t f,
  * @dataLen = Length of data   * @dataLen = Length of data
  * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars   * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars
 */  */
int ioPromptRead(int *h, const char *csPrompt, char * __restrict psData, int dataLen);int ioPromptRead(int *h, const char *csPrompt, 
                 char * __restrict psData, int dataLen);
 /*  /*
  * ioPromptPassword() - Read password from input h[0] with prompt to output h[1]   * ioPromptPassword() - Read password from input h[0] with prompt to output h[1]
  *   *
Line 169  int ioPromptRead(int *h, const char *csPrompt, char *  Line 338  int ioPromptRead(int *h, const char *csPrompt, char * 
  * @confirm = Confirm password, 0 - get password, !=0 Ask for confirmation   * @confirm = Confirm password, 0 - get password, !=0 Ask for confirmation
  * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars   * return: 0 EOF; -1 error:: can`t read; >0 count of readed chars
 */  */
int ioPromptPassword(int *h, const char *csPrompt, char * __restrict psPass, int passLen, int confirm);int ioPromptPassword(int *h, const char *csPrompt, 
                 char * __restrict psPass, int passLen, int confirm);
   
   
 /*  /*
Line 472  int io_dumbFile(const char *csFile, int mode, off_t si Line 642  int io_dumbFile(const char *csFile, int mode, off_t si
  */   */
 int io_get1stiface(char *szIface, int iflen);  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   * io_etherOpen() - Open BPF interface to device
  *   *
  * @csIface = interface name   * @csIface = interface name
Line 492  int io_etherOpen(const char *csIface, int flags, int w Line 670  int io_etherOpen(const char *csIface, int flags, int w
  * return: none   * return: none
  */   */
 void io_etherClose(int eth, void **zcbuf);  void io_etherClose(int eth, void **zcbuf);
   
   /*
    * io_etherFilter() - BPF filter routine
    *
    * @eth = bpf handle
    * @io = filter direction 
    *  (IO_ETHER_FILTER_PROMISC|IO_ETHER_FILTER_NOTREAD|IO_ETHER_FILTER_READ|IO_ETHER_FILTER_WRITE)
    * @insn = BPF filter instruction array
    * @insnlen = Length of BPF filter instruction array
    * return: -1 error or 0 ok
    */
   int io_etherFilter(int eth, int io, struct bpf_insn * __restrict insn, size_t insnlen);
   
 /*  /*
  * io_etherSend() - Send packet to bpf   * io_etherSend() - Send packet to bpf

Removed from v.1.35  
changed lines
  Added in v.1.39


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>