ProFTPD Developer's Guide: Controls API Structures

ProFTPD Version 1.2

Table of Contents

Controls API Structures
The Controls API uses and manipulates two structures called pr_ctrls_t and pr_ctrls_cl_t.

The code definining the structures of these objects is in include/ctrls.h, but is included here for your reading pleasure:

/* Controls handler object */
typedef struct ctrls_obj {
  struct ctrls_obj *ctrls_next, *ctrls_prev;

  /* Object ID */
  unsigned int ctrls_id;

  /* Registering module */
  module *ctrls_module;

  /* Requesting client */
  pr_ctrls_cl_t *ctrls_cl;

  /* Control "action" */
  const char *ctrls_action;

  /* Control trigger time; if zero, will trigger immediately */
  time_t ctrls_when;

  /* Temporary pool for control handler use */
  pool *ctrls_tmp_pool;

  /* Control handler callback */
  int (*ctrls_cb)(struct ctrls_ob *, int, char **);

  /* Control handler callback arguments */
  array_header *ctrls_cb_args;

  /* Control handler callback return value; used to determine when to clear this object
    * from the requested handler list
  int ctrls_cb_retval;

  /* Control handler callback responses */
  array_header *ctrls_cb_resps;

  /* For possibly passing arbitrary data among control handlers */
  void *ctrls_data;

  /* For internal use only */
  volatile unsigned long ctrls_flags;

} pr_ctrls_t;

/* Controls client object */
typedef struct cl_obj {
  struct cl_obj *cl_next, *cl_prev;

  /* Pool for this object's use */
  pool *cl_pool;

  /* Client socket file descriptor */
  int cl_fd;

  /* Credentials of the connecting client */
  uid_t cl_uid;
  const char *cl_user;
  gid_t cl_gid;
  const char *cl_group;
  pid_t cl_pid;

  /* For internal use only */
  volatile unsigned long cl_flags;

  /* Pointers to all controls matching client request */
  array_header *cl_ctrls;

} pr_ctrls_cl_t;

Table of Contents

Author: $Author: castaglia $
Last Updated: $Date: 2002/07/19 15:40:17 $

© Copyright 2000-2002 TJ Saunders
All Rights Reserved