⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c2s.h

📁 这是一个完全开放的
💻 H
字号:
/* * jabberd - Jabber Open Source Server * Copyright (c) 2002 Jeremie Miller, Thomas Muldowney, *                    Ryan Eatmon, Robert Norris * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307USA */#ifdef HAVE_CONFIG_H# include <config.h>#endif#include "mio/mio.h"#include "sx/sx.h"#include "sx/ssl.h"#include "sx/sasl.h"#include "util/util.h"#ifdef HAVE_SIGNAL_H# include <signal.h>#endif#ifdef HAVE_SYS_STAT_H# include <sys/stat.h>#endif/* forward decl */typedef struct c2s_st       *c2s_t;typedef struct sess_st      *sess_t;typedef struct authreg_st   *authreg_t;struct sess_st {    c2s_t               c2s;    int                 fd;    char                skey[10];    char                *ip;    int                 port;    sx_t                s;    rate_t              rate;    int                 rate_log;    time_t              last_activity;    char                *realm;    int                 bound;    int                 active;    nad_t               result;    int                 sasl_authd;     /* 1 = they did a sasl auth */    /** full jid of the session */    jid_t               jid;    /** session id for us and them */    char                c2s_id[10], sm_id[41];    /** this holds the id of the current pending SM request */    char                sm_request[41];};/* allowed mechanisms */#define AR_MECH_TRAD_PLAIN      (1<<0)#define AR_MECH_TRAD_DIGEST     (1<<1)#define AR_MECH_TRAD_ZEROK      (1<<2)#define AR_MECH_SASL_ANONYMOUS  (1<<3)#define AR_MECH_SASL_PLAIN      (1<<4)#define AR_MECH_SASL_DIGESTMD5  (1<<5)struct c2s_st {    /** our id (hostname) with the router */    char                *id;    /** how to connect to the router */    char                *router_ip;    int                 router_port;    char                *router_user;    char                *router_pass;    char                *router_pemfile;    /** mio context */    mio_t               mio;    /** sessions */    xht                 sessions;    /** sx environment */    sx_env_t            sx_env;    sx_plugin_t         sx_ssl;    sx_plugin_t         sx_sasl;    /** router's conn */    sx_t                router;    int                 fd;    /** listening sockets */    int                 server_fd;#ifdef HAVE_SSL    int                 server_ssl_fd;#endif    /** config */    config_t            config;    /** logging */    log_t               log;    /** log data */    log_type_t          log_type;    char                *log_facility;    char                *log_ident;    /** connect retry */    int                 retry_init;    int                 retry_lost;    int                 retry_sleep;    int                 retry_left;    /** ip to listen on */    char                *local_ip;    /** unencrypted port */    int                 local_port;    /** starttls pemfile */    char                *local_pemfile;    /** require starttls */    int                 local_require_starttls;    /** certificate chain */    char                *local_cachain;    /** encrypted port */    int                 local_ssl_port;    /** max file descriptors */    int                 io_max_fds;    /** time checks */    int                 io_check_interval;    int                 io_check_idle;    int                 io_check_keepalive;    time_t              next_check;    /** auth/reg module */    char                *ar_module_name;    authreg_t           ar;    /** registration */    int                 ar_register_enable;    char                *ar_register_instructions;    int                 ar_register_password;    /** allowed mechanisms */    int                 ar_mechanisms;    /** connection rates */    int                 conn_rate_total;    int                 conn_rate_seconds;    int                 conn_rate_wait;    xht                 conn_rates;    /** byte rates (karma) */    int                 byte_rate_total;    int                 byte_rate_seconds;    int                 byte_rate_wait;    /** stringprep cache */    prep_cache_t        pc;    /** access controls */    access_t            access;    /** list of sx_t on the way out */    jqueue_t            dead;    /** this is true if we've connected to the router at least once */    int                 started;    /** true if we're bound in the router */    int                 online;    /** domain -> auth realm mapping */    xht                 realms;    /** availability of sms that we are servicing */    xht                 sm_avail;};extern sig_atomic_t c2s_lost_router;int             c2s_router_mio_callback(mio_t m, mio_action_t a, int fd, void *data, void *arg);int             c2s_router_sx_callback(sx_t s, sx_event_t e, void *data, void *arg);void            sm_start(sess_t sess);void            sm_end(sess_t sess);void            sm_create(sess_t sess);void            sm_delete(sess_t sess);void            sm_packet(sess_t sess, nad_t nad);int             bind_init(sx_env_t env, sx_plugin_t p, va_list args);struct authreg_st{    c2s_t       c2s;    /** module private data */    void        *private;    /** returns 1 if the user exists, 0 if not */    int         (*user_exists)(authreg_t ar, char *username, char *realm);    /** return this users cleartext password in the array (digest auth, password auth) */    int         (*get_password)(authreg_t ar, char *username, char *realm, char password[257]);    /** check the given password against the stored password, 0 if equal, !0 if not equal (password auth) */    int         (*check_password)(authreg_t ar, char *username, char *realm, char password[257]);    /** store this password (register) */    int         (*set_password)(authreg_t ar, char *username, char *realm, char password[257]);    /** get/set zerok data for this user (zerok auth, zerok register) */    int         (*get_zerok)(authreg_t ar, char *username, char *realm, char hash[41], char token[11], int *sequence);    int         (*set_zerok)(authreg_t ar, char *username, char *realm, char hash[41], char token[11], int sequence);    /** make or break the user (register / register remove) */    int         (*create_user)(authreg_t ar, char *username, char *realm);    int         (*delete_user)(authreg_t ar, char *username, char *realm);    void        (*free)(authreg_t ar);};/** get a handle for a single module */authreg_t   authreg_init(c2s_t c2s, char *name);/** shut down */void        authreg_free(authreg_t ar);/** type for the module init function */typedef int (*ar_module_init_fn)(authreg_t);/** the main authreg processor */int         authreg_process(c2s_t c2s, sess_t sess, nad_t nad);/*int     authreg_user_exists(authreg_t ar, char *username, char *realm);int     authreg_get_password(authreg_t ar, char *username, char *realm, char password[257]);int     authreg_check_password(authreg_t ar, char *username, char *realm, char password[257]);int     authreg_set_password(authreg_t ar, char *username, char *realm, char password[257]);int     authreg_get_zerok(authreg_t ar, char *username, char *realm, char hash[41], char token[11], int *sequence);int     authreg_set_zerok(authreg_t ar, char *username, char *realm, char hash[41], char token[11], int sequence);int     authreg_create_user(authreg_t ar, char *username, char *realm);int     authreg_delete_user(authreg_t ar, char *username, char *realm);void    authreg_free(authreg_t ar);*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -