📄 router.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 *//*! \mainpage jabberd - Jabber Open Source Server * * \section intro Introduction * * The jabberd project aims to provide an open-source server * implementation of the Jabber protocols for instant messaging * and XML routing. The goal of this project is to provide a * scalable, reliable, efficient and extensible server that * provides a complete set of features and is up to date with * the latest protocol revisions. * * The project web page:\n * http://jabberd.jabberstudio.org/ */#ifdef HAVE_CONFIG_H# include <config.h>#endif#include "sx/sx.h"#include "sx/ssl.h"#include "sx/sasl.h"#include "mio/mio.h"#include "util/util.h"#ifdef HAVE_SIGNAL_H# include <signal.h>#endif#ifdef HAVE_SYS_STAT_H# include <sys/stat.h>#endiftypedef struct router_st *router_t;typedef struct component_st *component_t;typedef struct alias_st *alias_t;struct router_st { /** our id */ char *id; /** config */ config_t config; /** user table */ xht users; time_t users_load; /** logging */ log_t log; /** log data */ log_type_t log_type; char *log_facility; char *log_ident; /** how we listen for stuff */ char *local_ip; int local_port; char *local_secret; char *local_pemfile; /** max file descriptors */ int io_max_fds; /** access controls */ access_t access; /** connection rates */ int conn_rate_total; int conn_rate_seconds; int conn_rate_wait; xht conn_rates; /** default byte rates (karma) */ int byte_rate_total; int byte_rate_seconds; int byte_rate_wait; /** sx environment */ sx_env_t sx_env; sx_plugin_t sx_ssl; sx_plugin_t sx_sasl; /** managed io */ mio_t mio; /** listening socket */ int fd; /** stringprep cache */ prep_cache_t pc; /** attached components, key is 'ip:port', var is component_t */ xht components; /** valid routes, key is route name (packet "to" address), var is component_t */ xht routes; /** default route, only one */ char *default_route; /** log sinks, key is route name, var is component_t */ xht log_sinks; /** configured aliases */ alias_t aliases; /** access control lists */ xht aci; /** list of sx_t waiting to be cleaned up */ jqueue_t dead;};/** a single component */struct component_st { router_t r; /** file descriptor */ int fd; /** remote ip and port */ char ip[INET6_ADDRSTRLEN]; int port; /** ip:port pair */ char ipport[INET6_ADDRSTRLEN + 6]; /** our stream */ sx_t s; /** rate limits */ rate_t rate; int rate_log; /** valid routes to this component, key is route name */ xht routes; /** true if this is an old component:accept stream */ int legacy; /** throttle queue */ jqueue_t tq;};struct alias_st { char *name; char *target; alias_t next;};int router_mio_callback(mio_t m, mio_action_t a, int fd, void *data, void *arg);void router_sx_handshake(sx_t s, sx_buf_t buf, void *arg);xht aci_load(router_t r);int aci_check(xht acls, char *type, char *name);int user_table_load(router_t r);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -