亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? irc-proto.c

?? Serveez是一個服務(wù)器框架
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * irc-proto.c - basic IRC protocol functions * * Copyright (C) 2000, 2001 Stefan Jahn <stefan@lkcc.org> * * This 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, or (at your option) * any later version. *  * This software 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 package; see the file COPYING.  If not, write to * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA.   * * $Id: irc-proto.c,v 1.35 2001/07/06 16:40:02 ela Exp $ * */#if HAVE_CONFIG_H# include <config.h>#endif#if ENABLE_IRC_PROTO#define _GNU_SOURCE#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>#if HAVE_STRINGS_H# include <strings.h>#endif#ifdef __MINGW32__# include <winsock2.h>#endif#ifndef __MINGW32__# include <sys/types.h># include <netinet/in.h>#endif#include "libserveez.h"#include "irc-core/irc-core.h"#include "irc-proto.h"#include "irc-event.h"#include "irc-server.h"#include "irc-config.h"/* * The IRC server instance default configuration, */irc_config_t irc_config ={  0,                      /* logged in operators */  0,                      /* logged in users */  0,                      /* unknown connections */  0,                      /* invisible users */  NULL,                   /* virtual host name */  NULL,                   /* read server host name */  42424,                  /* listening tcp port */  0,                      /* is USERS command disable ? */#if ENABLE_TIMESTAMP  0,                      /* delta value to UTC */#endif  { NULL },               /* message of the day */  0,                      /* message of the day lines */  0,                      /* motd last modified date */  "../data/irc-MOTD.txt", /* file name of message of the day */  NULL,                   /* MLine */  NULL,                   /* ALine */  NULL,                   /* YLines */  NULL,                   /* ILines */  NULL,                   /* OLines */  NULL,                   /* oLines */  NULL,                   /* CLines */  NULL,                   /* NLines */  NULL,                   /* KLines */  NULL,                   /* server password */  NULL,                   /* server info */  NULL,                   /* email address of maintainers */  NULL,                   /* admininfo */  NULL,                   /* location1 */  NULL,                   /* location2 */  NULL,                   /* irc channel hash */  NULL,                   /* irc client hash */  NULL,                   /* irc server list root */  NULL,                   /* client history list root */  NULL,                   /* connection classes list */  NULL,                   /* user authorizations */  NULL,                   /* operator authorizations */  NULL,                   /* banned users */  NULL                    /* name of the /INFO file */};/* * Definition of the configuration items. */svz_key_value_pair_t irc_config_prototype[] ={  SVZ_REGISTER_STR ("MOTD-file", irc_config.MOTD_file, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STR ("INFO-file", irc_config.info_file, SVZ_ITEM_DEFAULTABLE),#if ENABLE_TIMESTAMP  SVZ_REGISTER_INT ("tsdelta", irc_config.tsdelta, SVZ_ITEM_DEFAULTABLE),#endif  SVZ_REGISTER_STR ("admininfo", irc_config.admininfo, 		    SVZ_ITEM_NOTDEFAULTABLE),  SVZ_REGISTER_STR ("M-line", irc_config.MLine, SVZ_ITEM_NOTDEFAULTABLE),  SVZ_REGISTER_STR ("A-line", irc_config.ALine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STRARRAY ("Y-lines", irc_config.YLine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STRARRAY ("I-lines", irc_config.ILine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STRARRAY ("O-lines", irc_config.OLine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STRARRAY ("o-lines", irc_config.oLine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STRARRAY ("C-lines", irc_config.CLine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STRARRAY ("N-lines", irc_config.NLine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_STRARRAY ("K-lines", irc_config.KLine, SVZ_ITEM_DEFAULTABLE),  SVZ_REGISTER_END ()};/* * Definition of the IRC server. */svz_servertype_t irc_server_definition ={  "irc server",        /* long description */  "irc",               /* short description for instantiating */  irc_global_init,     /* global initializer */  irc_init,            /* instance initializer */  irc_detect_proto,    /* detection routine */  irc_connect_socket,  /* connection routine */  irc_finalize,        /* instance finalizer */  irc_global_finalize, /* global finalizer */  NULL,                /* client info */  NULL,                /* server info */  NULL,                /* server timer */  NULL,                /* handle request callback */  &irc_config,         /* default configuration */  sizeof (irc_config), /* size of configuration */  irc_config_prototype /* configuration prototypes */};/* Static forward declarations. */static int irc_delete_channel (irc_config_t *cfg, irc_channel_t *);static irc_channel_t *irc_add_channel (irc_config_t *cfg, char *channel);/* * Global IRC server initializer. */intirc_global_init (svz_servertype_t *server){#if 0  printf ("sizeof (socket_t)             = %d\n", sizeof (socket_data_t));  printf ("sizeof (irc_ban_t)            = %d\n", sizeof (irc_ban_t));  printf ("sizeof (irc_channel_t)        = %d\n", sizeof (irc_channel_t));  printf ("sizeof (irc_client_t)         = %d\n", sizeof (irc_client_t));  printf ("sizeof (irc_client_history_t) = %d\n", 	  sizeof (irc_client_history_t));  printf ("sizeof (irc_server_t)         = %d\n", sizeof (irc_server_t));  printf ("sizeof (irc_user_t)           = %d\n", sizeof (irc_user_t));  printf ("sizeof (irc_kill_t)           = %d\n", sizeof (irc_kill_t));  printf ("sizeof (irc_oper_t)           = %d\n", sizeof (irc_oper_t));  printf ("sizeof (irc_class_t)          = %d\n", sizeof (irc_class_t));#endif  irc_create_lcset ();  return 0;}/* * Global IRC server finalizer. */intirc_global_finalize (svz_servertype_t *server){  return 0;}/* * Initialization of the IRC server instance. */intirc_init (svz_server_t *server){  irc_config_t *cfg = server->cfg;  char tmp[3][256];  /* scan the M line (server configuration) */  if (!cfg->MLine ||       irc_parse_line (cfg->MLine, "M:%s:%s:%s:%d", 		      tmp[0], tmp[1], tmp[2], &cfg->port) != 4)    {      svz_log (LOG_ERROR, "irc: invalid M line: %s\n", 	       cfg->MLine ? cfg->MLine : "(nil)");      return -1;    }  /* FIXME: ???  if (cfg->port != cfg->netport->port)    {      svz_log (LOG_WARNING, "irc: port in M line clashes\n");      cfg->netport->port = (short) cfg->port;    }  */  cfg->host = svz_strdup (tmp[0]);  cfg->realhost = svz_strdup (tmp[1]);  cfg->info = svz_strdup (tmp[2]);  /* scan the A line (administrative information) */  if (!cfg->ALine ||      irc_parse_line (cfg->ALine, "A:%s:%s:%s", tmp[0], tmp[1], tmp[2]) != 3)    {      svz_log (LOG_ERROR, "irc: invalid A line: %s\n", 	       cfg->ALine ? cfg->ALine : "(nil)");      return -1;    }  cfg->location1 = svz_strdup (tmp[0]);  cfg->location2 = svz_strdup (tmp[1]);  cfg->email = svz_strdup (tmp[2]);  /* initialize hashes and lists */  cfg->clients = svz_hash_create (4);  cfg->channels = svz_hash_create (4);  cfg->clients->equals = irc_string_equal;  cfg->channels->equals = irc_string_equal;  cfg->servers = NULL;  cfg->history = NULL;  irc_parse_config_lines (cfg);  irc_connect_servers (cfg);  return 0;}/* * IRC server instance finalizer. */intirc_finalize (svz_server_t *server){  irc_config_t *cfg = server->cfg;  int n;  /* free the MOTD */  for (n = 0; n < cfg->MOTDs; n++)    svz_free (cfg->MOTD[n]);  /* free configuration hash variables */  svz_free (cfg->host);  svz_free (cfg->info);  svz_free (cfg->realhost);  svz_free (cfg->location1);  svz_free (cfg->location2);  svz_free (cfg->email);  irc_free_config_lines (cfg);  /* free the client history */  irc_delete_client_history (cfg);  /* free the server IRC list */  irc_delete_servers (cfg);  svz_hash_destroy (cfg->clients);  svz_hash_destroy (cfg->channels);  return 0;}/* * Check if a certain client is in a channel. Return -1 if not and * return the client's position in the channel list. This is useful to * to detect its channel flags. If you passed a valid socket the  * ERR_NOTONCHANNEL reply is sent to the socket. */intirc_client_in_channel (svz_socket_t *sock,     /* client's socket */		       irc_client_t *client,   /* the client structure */		       irc_channel_t *channel) /* the channel to search */{  irc_config_t *cfg;  int n;  /* find client in the channel, return position if found */  for (n = 0; n < channel->clients; n++)    if (channel->client[n] == client)      return n;    /* not in channel ! */  if (sock)    {      cfg = sock->cfg;      irc_printf (sock, ":%s %03d %s " ERR_NOTONCHANNEL_TEXT "\n",		  cfg->host, ERR_NOTONCHANNEL, client->nick, channel->name);    }  return -1;}/* * Add a nick to a certain channel. */intirc_join_channel (irc_config_t *cfg, irc_client_t *client, char *chan){  irc_channel_t *channel;  int n;  /* does the channel exist locally ? */  if ((channel = irc_find_channel (cfg, chan)) != NULL)    {      /* is the nick already in the channel ? */      for (n = 0; n < channel->clients; n++)	if (channel->client[n] == client)	  break;      /* no, add nick to channel */      if (n == channel->clients)	{	  /* joined just too many channels ? */	  if (client->channels >= MAX_CHANNELS)	    {	      irc_printf (client->sock, 			  ":%s %03d %s " ERR_TOOMANYCHANNELS_TEXT "\n",			  cfg->host, ERR_TOOMANYCHANNELS, client->nick,			  channel->name);	    }	  else	    {	      channel->client = svz_realloc (channel->client,					     sizeof (irc_client_t *) * 					     (n + 1));	      channel->cflag = svz_realloc (channel->cflag,					    sizeof (int) * (n + 1));	      channel->client[n] = client;	      channel->cflag[n] = 0;	      channel->clients++;#if ENABLE_DEBUG	      svz_log (LOG_DEBUG, "irc: %s joined channel %s\n", 		       client->nick, channel->name);#endif	      n = client->channels;	      client->channel = svz_realloc (client->channel, 					     sizeof (irc_channel_t *) * 					     (n + 1));	      client->channel[n] = channel;	      client->channels++;	    }	}    }  /* no, the channel does not exists, yet */  else    {      /* check if the client has not joined too many channels */      if (client->channels >= MAX_CHANNELS)	{	  irc_printf (client->sock, 		      ":%s %03d %s " ERR_TOOMANYCHANNELS_TEXT "\n",		      cfg->host, ERR_TOOMANYCHANNELS, client->nick, chan);	  return 0;	}      /* create one and set the first client as operator */      channel = irc_add_channel (cfg, chan);      channel->client = svz_malloc (sizeof (irc_client_t *));      channel->cflag = svz_malloc (sizeof (int));      channel->client[0] = client;      channel->cflag[0] = MODE_OPERATOR;      channel->clients = 1;      channel->by = svz_strdup (client->nick);      channel->since = time (NULL);#if ENABLE_DEBUG      svz_log (LOG_DEBUG, "irc: channel %s created\n", channel->name);      svz_log (LOG_DEBUG, "irc: %s joined channel %s\n", 	       client->nick, channel->name);#endif      n = client->channels;      client->channel = svz_realloc (client->channel, 				     sizeof (irc_channel_t *) * (n + 1));      client->channel[n] = channel;      client->channels++;    }  return 0;}/* * Delete a client of a given channel. */intirc_leave_channel (irc_config_t *cfg, 		   irc_client_t *client, irc_channel_t *channel){  int n, i, last;  /* delete the client of this channel */  last = channel->clients - 1;  for (n = 0; n < channel->clients; n++)    if (channel->client[n] == client)      {	channel->clients--;	if (last)	  {	    channel->client[n] = channel->client[last];	    channel->cflag[n] = channel->cflag[last];	    channel->client = svz_realloc (channel->client, 					   sizeof (irc_client_t *) * last);	    channel->cflag = svz_realloc (channel->cflag, 					  sizeof (int) * last);	  }	else	  {	    svz_free (channel->client);	    channel->client = NULL;	    svz_free (channel->cflag);	    channel->cflag = NULL;	  }#if ENABLE_DEBUG	svz_log (LOG_DEBUG, "irc: %s left channel %s\n",		 client->nick, channel->name);#endif	/* clear this channel of client's list */	last = client->channels - 1;	for (i = 0; i < client->channels; i++)	  if (client->channel[i] == channel)	    {	      if (--client->channels != 0)		{		  client->channel[i] = client->channel[last];		  client->channel = svz_realloc (client->channel, 						 sizeof (irc_channel_t *) * 						 client->channels);		}	      else		{		  svz_free (client->channel);		  client->channel = NULL;		}	      break;	    }	break;      }  /* no client in channel ? */  if (channel->clients == 0)    {#if ENABLE_DEBUG      svz_log (LOG_DEBUG, "irc: channel %s destroyed\n", channel->name);#endif      irc_delete_channel (cfg, channel);    }  return 0;}/* * Send an error message if there are not enough arguments given.  * Return non zero if there are less than necessary. */intirc_check_args (svz_socket_t *sock,      /* the client's socket */		irc_client_t *client,    /* the irc client itself */		irc_config_t *conf,      /* config hash */		irc_request_t *request,  /* the request */		int n)                   /* necessary arguments */{  if (request->paras < n)    {      irc_printf (sock, ":%s %03d %s " ERR_NEEDMOREPARAMS_TEXT "\n",		  conf->host, ERR_NEEDMOREPARAMS, client->nick,		  request->request);      return -1;    }  return 0;}/* * This routine checks if a given client is away or not, then * sends this clients away message back to the client which requested * this. Return non-zero if away. */intirc_client_absent (irc_client_t *client,  /* requested client */		   irc_client_t *rclient) /* who want to know about */{  irc_config_t *cfg;  svz_socket_t *sock;  if (client->flag & UMODE_AWAY)    {      sock = rclient->sock;      cfg = sock->cfg;      irc_printf (sock, ":%s %03d %s " RPL_AWAY_TEXT "\n",		  cfg->host, RPL_AWAY, rclient->nick, client->nick,		  client->away);      return -1;    }  return 0;}/* * This routine erases a client from all channels by a quit reason, * then the client is deleted itself. */intirc_leave_all_channels (irc_config_t *cfg, 			irc_client_t *client, char *reason){  irc_channel_t *channel;  irc_client_t *cl;  svz_socket_t *sock, *xsock;  int i;  sock = client->sock;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品无人区卡一卡二卡三乱码免费卡 | 亚洲国产精品综合小说图片区| 欧美日韩一区成人| 韩国成人精品a∨在线观看| 一区二区三区在线视频观看| 亚洲精品一区二区在线观看| 欧美人成免费网站| 91黄色免费观看| 色哟哟一区二区| 91网站最新网址| 国产成人午夜精品影院观看视频| 看电视剧不卡顿的网站| 日韩中文欧美在线| 亚洲一区在线看| 午夜久久久影院| 午夜精品久久久久久不卡8050| 极品少妇一区二区三区精品视频 | 国产日韩欧美在线一区| 欧美成人欧美edvon| 日韩欧美自拍偷拍| 欧美一区二区三区免费| 在线不卡中文字幕播放| 欧美一区二区视频在线观看2020| 蜜臀久久久久久久| 欧美精品一区视频| 亚洲综合在线电影| 国产精品一区二区在线播放| 粉嫩在线一区二区三区视频| 成人性色生活片| 99精品国产热久久91蜜凸| 色综合天天狠狠| www一区二区| 国产日产欧美一区二区视频| 午夜a成v人精品| av中文字幕一区| 欧美日韩在线播放三区| 国产精品人妖ts系列视频| 综合久久给合久久狠狠狠97色| 国产精品欧美极品| 精品在线播放午夜| 欧美日韩视频一区二区| 亚洲色图19p| 成人综合在线网站| 国产亚洲精品7777| 成人欧美一区二区三区小说| 亚洲福中文字幕伊人影院| 成人高清视频在线观看| 欧洲另类一二三四区| 欧美大胆人体bbbb| 国产欧美日产一区| 麻豆成人91精品二区三区| 欧美色精品在线视频| 亚洲精品国产成人久久av盗摄| 日本午夜精品视频在线观看| 成人精品gif动图一区| 精品久久久久香蕉网| 日韩精品欧美精品| 欧洲精品在线观看| 亚洲精品视频在线观看网站| 成人免费看的视频| 国产精品丝袜黑色高跟| 国产精品18久久久久久久网站| 日韩免费视频一区| 蓝色福利精品导航| 欧美成人女星排名| 裸体在线国模精品偷拍| 日韩欧美高清在线| 免费的成人av| 欧美大片免费久久精品三p| 蜜臀国产一区二区三区在线播放 | 日韩高清一区在线| 欧美高清一级片在线| 日韩精品一级中文字幕精品视频免费观看 | 久久久亚洲国产美女国产盗摄 | 色偷偷88欧美精品久久久| 1000部国产精品成人观看| www.成人网.com| 亚洲日本在线a| 在线观看视频一区二区欧美日韩| 亚洲一区免费视频| 在线播放国产精品二区一二区四区| 亚洲精品成人悠悠色影视| 99久久免费国产| 亚洲精品福利视频网站| 欧美日韩成人综合| 欧美96一区二区免费视频| 精品国产成人在线影院| 国产精品自拍网站| 一区精品在线播放| 欧美自拍丝袜亚洲| 秋霞影院一区二区| 国产日韩欧美麻豆| av成人老司机| 亚洲成人一区二区| 91社区在线播放| 亚洲一区二区影院| 日韩欧美一二三| 成人午夜免费电影| 一区二区国产盗摄色噜噜| 欧美日韩国产bt| 狠狠网亚洲精品| 国产精品女主播在线观看| 欧美三级一区二区| 美女视频免费一区| 日本一区二区三级电影在线观看 | 亚洲天堂2016| 在线观看日产精品| 免费在线成人网| 日本一区二区免费在线| 欧美性受xxxx黑人xyx性爽| 国产精品久久一卡二卡| 国产一区二区三区不卡在线观看| 日韩一区二区三区四区| 国产成人在线观看| 亚洲高清免费一级二级三级| 精品国产99国产精品| 91一区二区在线| 青椒成人免费视频| 国产精品免费久久久久| 欧美精品在线视频| 国产**成人网毛片九色| 亚洲高清免费视频| 亚洲国产精品t66y| 国产宾馆实践打屁股91| 亚洲国产精品欧美一二99| 26uuu久久综合| 欧美三级中文字幕| 国产精品资源网站| 亚洲福利一区二区| 久久久久9999亚洲精品| 欧美日韩日本视频| 成人教育av在线| 日本不卡视频在线| 亚洲欧洲日韩av| 精品国偷自产国产一区| 91成人看片片| 成人a区在线观看| 蜜桃视频在线观看一区| 亚洲一区二区三区在线播放| 日产国产高清一区二区三区| 国产精品久久久久精k8| 91精品国产91热久久久做人人| 99免费精品视频| 国产专区综合网| 视频一区中文字幕国产| 亚洲日本护士毛茸茸| 久久久蜜桃精品| 6080午夜不卡| 在线欧美日韩精品| 高清不卡在线观看| 精品综合久久久久久8888| 性感美女极品91精品| 亚洲男同性恋视频| 91久久线看在观草草青青| 国产一区二区在线观看免费| 图片区小说区区亚洲影院| 一区在线观看视频| 亚洲国产成人一区二区三区| 日韩欧美一区二区不卡| 欧美久久高跟鞋激| 欧美日韩精品高清| 色婷婷久久久亚洲一区二区三区 | 国产精品三级视频| 久久久不卡网国产精品二区 | 国内精品久久久久影院色| 午夜精品久久久久久久| 一区二区三区国产精华| 亚洲人午夜精品天堂一二香蕉| 欧美国产综合色视频| 亚洲精品在线观| www久久久久| 久久五月婷婷丁香社区| 欧美不卡激情三级在线观看| 欧美乱熟臀69xxxxxx| 欧美日韩精品电影| 欧美日韩一区小说| 欧美日韩国产一级| 欧美午夜寂寞影院| 欧美最猛性xxxxx直播| 色综合天天狠狠| 在线亚洲欧美专区二区| 色噜噜狠狠成人中文综合| 91亚洲男人天堂| 色综合久久综合网97色综合| 91视频观看免费| 色婷婷亚洲一区二区三区| 国产精品拍天天在线| 中文字幕av不卡| 国产精品不卡视频| 亚洲欧美偷拍另类a∨色屁股| 亚洲欧美经典视频| 一区二区三区色| 午夜精品一区在线观看| 日韩专区一卡二卡| 奇米一区二区三区av| 久久99久久99小草精品免视看| 国内精品视频666| 成人理论电影网| 91麻豆.com| 欧美理论片在线|