"Fossies" - the Fresh Open Source Software Archive

Member "citadel/context.h" (5 Jun 2021, 6397 Bytes) of package /linux/www/citadel.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "context.h" see the Fossies "Dox" file reference documentation and the last Fossies "Diffs" side-by-side code changes report: 8.24_vs_9.01.

    1 
    2 #ifndef CONTEXT_H
    3 #define CONTEXT_H
    4 
    5 #include <stdarg.h>
    6 #include "sysdep.h"
    7 #include "server.h"
    8 #include "sysdep_decls.h"
    9 #include "threads.h"
   10 
   11 
   12 /*
   13  * Values for CitContext.state
   14  * 
   15  * A session that is doing nothing is in CON_IDLE state.  When activity
   16  * is detected on the socket, it goes to CON_READY, indicating that it
   17  * needs to have a worker thread bound to it.  When a thread binds to
   18  * the session, it goes to CON_EXECUTING and does its thing.  When the
   19  * transaction is finished, the thread sets it back to CON_IDLE and lets
   20  * it go.
   21  */
   22 typedef enum __CCState {
   23     CON_IDLE,       /* This context is doing nothing */
   24     CON_GREETING,       /* This context needs to output its greeting */
   25     CON_STARTING,       /* This context is outputting its greeting */
   26     CON_READY,      /* This context needs attention */
   27     CON_EXECUTING,      /* This context is bound to a thread */
   28     CON_SYS                 /* This is a system context and mustn't be purged */
   29 } CCState;
   30 
   31 #ifndef __CIT_CONTEXT__
   32 #define __CIT_CONTEXT__
   33 typedef struct CitContext CitContext;
   34 #endif
   35 
   36 /*
   37  * This structure keeps track of all information relating to a running 
   38  * session on the server.  We keep one of these for each session.
   39  */
   40 struct CitContext {
   41     CitContext *prev;   /* Link to previous session in list */
   42     CitContext *next;   /* Link to next session in the list */
   43 
   44     int cs_pid;     /* session ID */
   45     int dont_term;      /* for special activities like artv so we don't get killed */
   46     double created;     /* time of birth */
   47     time_t lastcmd;     /* time of last command executed */
   48     time_t lastidle;    /* For computing idle time */
   49     CCState state;      /* thread state (see CON_ values below) */
   50     int kill_me;        /* Set to nonzero to flag for termination */
   51 
   52     IOBuffer SendBuf,   /* Our write Buffer */
   53         RecvBuf,    /* Our block buffered read buffer */
   54         SBuf;       /* Our block buffered read buffer for clients */
   55 
   56     StrBuf *MigrateBuf; /* Our block buffered read buffer */
   57     StrBuf *sMigrateBuf;    /* Our block buffered read buffer */
   58 
   59     int client_socket;
   60     int is_local_client;    /* set to 1 if client is running on the same host */
   61     /* Redirect this session's output to a memory buffer? */
   62     StrBuf *redirect_buffer;        /* the buffer */
   63     StrBuf *StatusMessage;
   64 #ifdef HAVE_OPENSSL
   65     SSL *ssl;
   66     int redirect_ssl;
   67 #endif
   68 
   69     char curr_user[USERNAME_SIZE];  /* name of current user */
   70     int logged_in;      /* logged in? */
   71     int internal_pgm;   /* authenticated as internal program? */
   72     int nologin;        /* not allowed to log in */
   73     int curr_view;      /* The view type for the current user/room */
   74 
   75     time_t previous_login;  /* Date/time of previous login */
   76     char lastcmdname[5];    /* name of last command executed */
   77     unsigned cs_flags;  /* miscellaneous flags */
   78     int is_async;       /* Nonzero if client accepts async msgs */
   79     int async_waiting;  /* Nonzero if there are async msgs waiting */
   80     int input_waiting;  /* Nonzero if there is client input waiting */
   81     int can_receive_im; /* Session is capable of receiving instant messages */
   82 
   83     /* Client information */
   84     int cs_clientdev;   /* client developer ID */
   85     int cs_clienttyp;   /* client type code */
   86     int cs_clientver;   /* client version number */
   87     char cs_clientinfo[256];/* if its a unix domain socket, some info for logging. */
   88     uid_t cs_UDSclientUID;  /* the uid of the client when talking via UDS */
   89     char cs_clientname[32]; /* name of client software */
   90     char cs_host[64];   /* host logged in from */
   91     char cs_addr[64];   /* address logged in from */
   92 
   93     /* The Internet type of thing */
   94     char cs_principal_id[256];      /* User principal identity for XMPP, ActivityPub, etc. */
   95     char cs_inet_email[128];        /* Return address of outbound Internet mail */
   96     char cs_inet_other_emails[1024];    /* User's other valid Internet email addresses */
   97     char cs_inet_fn[128];           /* Friendly-name of outbound Internet mail */
   98 
   99     FILE *download_fp;  /* Fields relating to file transfer */
  100     size_t download_fp_total;
  101     char download_desired_section[128];
  102     FILE *upload_fp;
  103     char upl_file[256];
  104     char upl_path[PATH_MAX];
  105     char upl_comment[256];
  106     char upl_filedir[PATH_MAX];
  107     char upl_mimetype[64];
  108 
  109     struct ctdluser user;   /* Database record buffers */
  110     struct ctdlroom room;
  111 
  112     /* A linked list of all instant messages sent to us. */
  113     struct ExpressMessage *FirstExpressMessage;
  114     int disable_exp;    /* Set to 1 to disable incoming pages */
  115     int newmail;        /* Other sessions increment this */
  116 
  117     /* Preferred MIME formats */
  118     char preferred_formats[256];
  119     int msg4_dont_decode;
  120 
  121     /* Dynamically allocated session data */
  122     void *session_specific_data;        /* Used by individual protocol modules */
  123     struct cit_ical *CIT_ICAL;      /* calendaring data */
  124     struct ma_info *ma;         /* multipart/alternative data */
  125     const char *ServiceName;        /* readable purpose of this session */
  126     long tcp_port;
  127     void *openid_data;          /* Data stored by the OpenID module */
  128     char *ldap_dn;              /* DN of user when using AUTHMODE_LDAP */
  129 
  130     void (*h_command_function) (void) ; /* service command function */
  131     void (*h_async_function) (void) ;   /* do async msgs function */
  132     void (*h_greeting_function) (void) ;    /* greeting function for session startup */
  133 
  134     long *cached_msglist;           /* results of the previous CtdlForEachMessage() */
  135     int cached_num_msgs;
  136 
  137     char vcard_updated_by_ldap;     /* !0 iff ldap changed the vcard, treat as aide update */
  138 };
  139 
  140 #define CC MyContext()
  141 
  142 extern pthread_key_t MyConKey;          /* TSD key for MyContext() */
  143 extern int num_sessions;
  144 extern CitContext masterCC;
  145 extern CitContext *ContextList;
  146 
  147 CitContext *MyContext (void);
  148 void RemoveContext (struct CitContext *);
  149 CitContext *CreateNewContext (void);
  150 void context_cleanup(void);
  151 void kill_session (int session_to_kill);
  152 void InitializeMasterCC(void);
  153 void dead_session_purge(int force);
  154 void set_async_waiting(struct CitContext *ccptr);
  155 
  156 CitContext *CloneContext(CitContext *CloneMe);
  157 
  158 /* forcibly close and flush fd's on shutdown */
  159 void terminate_all_sessions(void);
  160 
  161 /* Deprecated, user CtdlBumpNewMailCounter() instead */
  162 void BumpNewMailCounter(long) __attribute__ ((deprecated));
  163 
  164 void terminate_idle_sessions(void);
  165 int CtdlTerminateOtherSession (int session_num);
  166 /* bits returned by CtdlTerminateOtherSession */
  167 #define TERM_FOUND  0x01
  168 #define TERM_ALLOWED    0x02
  169 #define TERM_KILLED 0x03
  170 #define TERM_NOTALLOWED -1
  171 
  172 /*
  173  * Bind a thread to a context.  (It's inline merely to speed things up.)
  174  */
  175 static INLINE void become_session(CitContext *which_con) {
  176     pthread_setspecific(MyConKey, (void *)which_con );
  177 }
  178 
  179 #endif /* CONTEXT_H */