connection.h
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:18k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /*
  2.  * Copyright (C) 1998,1999,2000,2001  Ross Combs (rocombs@cs.nmsu.edu)
  3.  * Copyright (C) 2000,2001  Marco Ziech (mmz@gmx.net)
  4.  *
  5.  * This program is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU General Public License
  7.  * as published by the Free Software Foundation; either version 2
  8.  * of the License, or (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  */
  19. #ifndef INCLUDED_CONNECTION_TYPES
  20. #define INCLUDED_CONNECTION_TYPES
  21. #ifdef CONNECTION_INTERNAL_ACCESS
  22. #ifdef JUST_NEED_TYPES
  23. # ifdef TIME_WITH_SYS_TIME
  24. #  include <sys/time.h>
  25. #  include <time.h>
  26. # else
  27. #   if HAVE_SYS_TIME_H
  28. #    include <sys/time.h>
  29. #   else
  30. #    include <time.h>
  31. #   endif
  32. # endif
  33. # include "game.h"
  34. # include "common/queue.h"
  35. # include "channel.h"
  36. # include "account.h"
  37. # include "quota.h"
  38. # include "character.h"
  39. # include "versioncheck.h"
  40. # include "anongame.h"
  41. #else
  42. # define JUST_NEED_TYPES
  43. # ifdef TIME_WITH_SYS_TIME
  44. #  include <sys/time.h>
  45. #  include <time.h>
  46. # else
  47. #   if HAVE_SYS_TIME_H
  48. #    include <sys/time.h>
  49. #   else
  50. #    include <time.h>
  51. #   endif
  52. # endif
  53. # include "game.h"
  54. # include "common/queue.h"
  55. # include "channel.h"
  56. # include "account.h"
  57. # include "quota.h"
  58. # include "character.h"
  59. # include "versioncheck.h"
  60. # include "anongame.h"
  61. # undef JUST_NEED_TYPES
  62. #endif
  63. #endif
  64. #include "compat/uint.h"
  65. #ifdef CONNECTION_INTERNAL_ACCESS
  66. typedef struct
  67. {
  68.     char const *  away;
  69.     char const *  dnd;
  70.     t_account * * ignore_list;
  71.     unsigned int  ignore_count;
  72.     t_quota   quota;
  73. } t_usersettings;
  74. #endif
  75. typedef enum
  76. {
  77.     conn_class_init,
  78.     conn_class_defer,
  79.     conn_class_bnet,
  80.     conn_class_file,
  81.     conn_class_bot,
  82.     conn_class_auth,
  83.     conn_class_telnet,
  84.     conn_class_irc,     /* Internet Relay Chat */
  85.     conn_class_d2cs_bnetd,
  86.     conn_class_w3route,
  87.     conn_class_none
  88. } t_conn_class;
  89. typedef enum
  90. {
  91.     conn_state_empty,
  92.     conn_state_initial,
  93.     conn_state_connected,
  94.     conn_state_loggedin,
  95.     conn_state_destroy,
  96.     conn_state_bot_username,
  97.     conn_state_bot_password,
  98.     conn_state_untrusted,
  99.     conn_state_pending_raw
  100. } t_conn_state;
  101. typedef struct connection
  102. #ifdef CONNECTION_INTERNAL_ACCESS
  103. {
  104.    int                           tcp_sock;
  105.    unsigned int                  tcp_addr;
  106.    unsigned short                tcp_port;
  107.    int                           udp_sock;
  108.    unsigned int                  udp_addr;
  109.    unsigned short                udp_port;
  110.    unsigned int                  local_addr;
  111.    unsigned short                local_port;
  112.    unsigned int                  real_local_addr;
  113.    unsigned short                real_local_port;
  114.    t_conn_class                  class;
  115.    t_conn_state                  state;
  116.    unsigned int                  sessionkey;
  117.    unsigned int                  sessionnum;
  118.    unsigned int                  secret; /* random number... never sent over net unencrypted */
  119.    unsigned int                  flags;
  120.    unsigned int                  latency;
  121.    t_usersettings                settings;
  122.    char const *                  archtag;
  123.    unsigned int  gamelang;
  124.    char const *                  clienttag;
  125.    char const *                  clientver;
  126.    unsigned long                 versionid; /* AKA bnversion */
  127.    unsigned long  gameversion;
  128.    unsigned long  checksum;
  129.    char const *                  country;
  130.    int                           tzbias;
  131.    t_account *                   account;
  132.    t_channel *                   channel;
  133.    t_game *                      game;
  134.    t_queue *                     outqueue;  /* packets waiting to be sent */
  135.    unsigned int                  outsize;   /* amount sent from the current output packet */
  136.    unsigned int  outsizep;
  137.    t_queue *                     inqueue;   /* packet waiting to be processed */
  138.    unsigned int                  insize;    /* amount received into the current input packet */
  139.    int                           welcomed;  /* 1 = sent welcome message, 0 = have not */
  140.    char const *                  host;
  141.    char const *                  user;
  142.    char const *                  clientexe;
  143.    char const *                  owner;
  144.    char const *                  cdkey;
  145.    char const *                  botuser;   /* username for remote connections (not taken from account) */
  146.    time_t                        last_message;
  147.    char const *                  realmname; /* to remember until character is created */
  148.    t_character *                 character;
  149.    struct connection *           bound; /* matching Diablo II auth connection */
  150.    
  151.    /* [zap-zero] 20020527 - matching w3route connection for game connection /
  152.     matching game connection for w3route connection */
  153.    struct connection *   routeconn;
  154.    t_anongame *   anongame;
  155.    
  156.    char const *          lastsender; /* last person to whisper to this connection */
  157.    char const *          realminfo;
  158.    char const *          charname;
  159.    t_versioncheck * versioncheck; /* equation and MPQ file used to validate game checksum */
  160.    char const *       ircline; /* line cache for IRC connections */
  161.    unsigned int   ircping; /* value of last ping */
  162.    char const *   ircpass; /* hashed password for PASS authentication */
  163.    int                   udpok;     /* udp packets can be received by client */
  164.    char const *          w3_username; /* filled between 0x53ff and 0x54ff -- NonReal */
  165.    char const *    w3_playerinfo; /* ADDED BY UNDYING SOULZZ 4/7/02 */
  166.    int   joingamewhisper;
  167.    int                            leavegamewhisper;
  168.    
  169.    // [quetzal] 20020828 - creation time, can be used for killing idling init connections
  170.    int   cr_time;
  171.    time_t                 anongame_search_starttime;
  172.    int   echoback;
  173.    /* Pass fail count for bruteforce protection */
  174.    unsigned int passfail_count;
  175. }
  176. #endif
  177. t_connection;
  178. #endif
  179. /*****/
  180. #ifndef JUST_NEED_TYPES
  181. #ifndef INCLUDED_CONNECTION_PROTOS
  182. #define INCLUDED_CONNECTION_PROTOS
  183. #define JUST_NEED_TYPES
  184. #include "common/packet.h"
  185. #include "common/queue.h"
  186. #include "channel.h"
  187. #include "game.h"
  188. #include "account.h"
  189. #include "common/list.h"
  190. #include "character.h"
  191. #include "versioncheck.h"
  192. #include "timer.h"
  193. #include "anongame.h"
  194. #include "message.h"
  195. #undef JUST_NEED_TYPES
  196. extern t_anongame * conn_create_anongame(t_connection * c);
  197. extern void conn_destroy_anongame(t_connection * c);
  198. extern t_anongame * conn_get_anongame(t_connection *c);
  199. extern void conn_shutdown(t_connection * c, time_t now, t_timer_data foo);
  200. extern void conn_test_latency(t_connection * c, time_t now, t_timer_data delta);
  201. extern char const * conn_class_get_str(t_conn_class class) ;
  202. extern char const * conn_state_get_str(t_conn_state state) ;
  203. extern t_connection * conn_create(int tsock, int usock, unsigned int real_local_addr, unsigned short real_local_port, unsigned int local_addr, unsigned short local_port, unsigned int addr, unsigned short port) ;
  204. extern void conn_destroy(t_connection * c);
  205. extern int conn_match(t_connection const * c, char const * user);
  206. extern t_conn_class conn_get_class(t_connection const * c) ;
  207. extern void conn_set_class(t_connection * c, t_conn_class class);
  208. extern t_conn_state conn_get_state(t_connection const * c) ;
  209. extern void conn_set_state(t_connection * c, t_conn_state state);
  210. extern unsigned int conn_get_sessionkey(t_connection const * c) ;
  211. extern unsigned int conn_get_sessionnum(t_connection const * c) ;
  212. extern unsigned int conn_get_secret(t_connection const * c) ;
  213. extern unsigned int conn_get_addr(t_connection const * c) ;
  214. extern unsigned short conn_get_port(t_connection const * c) ;
  215. extern unsigned int conn_get_local_addr(t_connection const * c);
  216. extern unsigned short conn_get_local_port(t_connection const * c) ;
  217. extern unsigned int conn_get_real_local_addr(t_connection const * c) ;
  218. extern unsigned short conn_get_real_local_port(t_connection const * c) ;
  219. extern unsigned int conn_get_game_addr(t_connection const * c) ;
  220. extern int conn_set_game_addr(t_connection * c, unsigned int game_addr);
  221. extern unsigned short conn_get_game_port(t_connection const * c) ;
  222. extern int conn_set_game_port(t_connection * c, unsigned short game_port);
  223. extern void conn_set_host(t_connection * c, char const * host);
  224. extern void conn_set_user(t_connection * c, char const * user);
  225. extern const char * conn_get_user(t_connection const * c);
  226. extern void conn_set_owner(t_connection * c, char const * owner);
  227. extern const char * conn_get_owner(t_connection const * c);
  228. extern void conn_set_cdkey(t_connection * c, char const * cdkey);
  229. extern char const * conn_get_clientexe(t_connection const * c) ;
  230. extern void conn_set_clientexe(t_connection * c, char const * clientexe);
  231. extern char const * conn_get_archtag(t_connection const * c) ;
  232. extern void conn_set_archtag(t_connection * c, char const * archtag);
  233. extern unsigned int conn_get_gamelang(t_connection const * c) ;
  234. extern void conn_set_gamelang(t_connection * c, unsigned int gamelang);
  235. extern char const * conn_get_clienttag(t_connection const * c) ;
  236. extern char const * conn_get_fake_clienttag(t_connection const * c) ;
  237. extern void conn_set_clienttag(t_connection * c, char const * clienttag);
  238. extern unsigned long conn_get_versionid(t_connection const * c) ;
  239. extern int conn_set_versionid(t_connection * c, unsigned long versionid);
  240. extern unsigned long conn_get_gameversion(t_connection const * c) ;
  241. extern int conn_set_gameversion(t_connection * c, unsigned long gameversion);
  242. extern unsigned long conn_get_checksum(t_connection const * c) ;
  243. extern int conn_set_checksum(t_connection * c, unsigned long checksum);
  244. extern char const * conn_get_clientver(t_connection const * c) ;
  245. extern void conn_set_clientver(t_connection * c, char const * clientver);
  246. extern int conn_get_tzbias(t_connection const * c) ;
  247. extern void conn_set_tzbias(t_connection * c, int tzbias);
  248. extern int conn_set_botuser(t_connection * c, char const * username);
  249. extern char const * conn_get_botuser(t_connection const * c);
  250. extern unsigned int conn_get_flags(t_connection const * c) ;
  251. extern int conn_set_flags(t_connection * c, unsigned int flags);
  252. extern void conn_add_flags(t_connection * c, unsigned int flags);
  253. extern void conn_del_flags(t_connection * c, unsigned int flags);
  254. extern unsigned int conn_get_latency(t_connection const * c) ;
  255. extern void conn_set_latency(t_connection * c, unsigned int ms);
  256. extern char const * conn_get_awaystr(t_connection const * c) ;
  257. extern int conn_set_awaystr(t_connection * c, char const * away);
  258. extern char const * conn_get_dndstr(t_connection const * c) ;
  259. extern int conn_set_dndstr(t_connection * c, char const * dnd);
  260. extern int conn_add_ignore(t_connection * c, t_account * account);
  261. extern int conn_del_ignore(t_connection * c, t_account const * account);
  262. extern int conn_add_watch(t_connection * c, t_account * account, char const * clienttag);
  263. extern int conn_del_watch(t_connection * c, t_account * account, char const * clienttag);
  264. extern t_channel * conn_get_channel(t_connection const * c) ;
  265. extern int conn_set_channel_var(t_connection * c, t_channel * channel);
  266. extern int conn_set_channel(t_connection * c, char const * channelname);
  267. extern t_game * conn_get_game(t_connection const * c) ;
  268. extern int conn_set_game(t_connection * c, char const * gamename, char const * gamepass, char const * gameinfo, t_game_type type, int version);
  269. extern unsigned int conn_get_tcpaddr(t_connection * c) ;
  270. extern t_queue * * conn_get_in_queue(t_connection * c) ;
  271. extern unsigned int conn_get_in_size(t_connection const * c) ;
  272. extern void conn_set_in_size(t_connection * c, unsigned int size);
  273. extern t_queue * * conn_get_out_queue(t_connection * c) ;
  274. extern unsigned int conn_get_out_size(t_connection const * c) ;
  275. extern void conn_set_out_size(t_connection * c, unsigned int size);
  276. extern int conn_push_outqueue(t_connection * c, t_packet * packet);
  277. extern t_packet * conn_peek_outqueue(t_connection * c);
  278. extern t_packet * conn_pull_outqueue(t_connection * c);
  279. extern int conn_push_inqueue(t_connection * c, t_packet * packet);
  280. extern t_packet * conn_peek_inqueue(t_connection * c);
  281. extern t_packet * conn_pull_inqueue(t_connection * c);
  282. extern int conn_check_ignoring(t_connection const * c, char const * me) ;
  283. extern t_account * conn_get_account(t_connection const * c) ;
  284. extern void conn_set_account(t_connection * c, t_account * account);
  285. extern int conn_get_socket(t_connection const * c) ;
  286. extern int conn_get_game_socket(t_connection const * c) ;
  287. extern int conn_set_game_socket(t_connection * c, int usock);
  288. #ifdef DEBUG_ACCOUNT
  289. extern char const * conn_get_username_real(t_connection const * c, char const * fn, unsigned int ln);
  290. #define conn_get_username(C) conn_get_username_real(C,__FILE__,__LINE__)
  291. #else
  292. extern char const * conn_get_username(t_connection const * c);
  293. #endif
  294. extern void conn_unget_username(t_connection const * c, char const * name);
  295. extern char const * conn_get_chatname(t_connection const * c);
  296. extern int conn_unget_chatname(t_connection const * c, char const * name);
  297. extern char const * conn_get_chatcharname(t_connection const * c, t_connection const * dst);
  298. extern int conn_unget_chatcharname(t_connection const * c, char const * name);
  299. extern t_message_class conn_get_message_class(t_connection const * c, t_connection const * dst);
  300. extern unsigned int conn_get_userid(t_connection const * c);
  301. extern char const * conn_get_playerinfo(t_connection const * c);
  302. extern int conn_set_playerinfo(t_connection const * c, char const * playerinfo);
  303. extern char const * conn_get_realminfo(t_connection const * c);
  304. extern int conn_set_realminfo(t_connection * c, char const * realminfo);
  305. extern char const * conn_get_charname(t_connection const * c);
  306. extern int conn_set_charname(t_connection * c, char const * charname);
  307. extern int conn_set_idletime(t_connection * c);
  308. extern unsigned int conn_get_idletime(t_connection const * c) ;
  309. extern char const * conn_get_realmname(t_connection const * c);
  310. extern int conn_set_realmname(t_connection * c, char const * realmname);
  311. extern int conn_set_character(t_connection * c, t_character * ch);
  312. extern int conn_bind(t_connection * c1, t_connection * c2);
  313. extern void conn_set_country(t_connection * c, char const * country);
  314. extern char const * conn_get_country(t_connection const * c);
  315. extern int conn_quota_exceeded(t_connection * c, char const * message);
  316. extern int conn_set_lastsender(t_connection * c, char const * sender);
  317. extern char const * conn_get_lastsender(t_connection const * c);
  318. extern t_versioncheck * conn_get_versioncheck(t_connection * c) ;
  319. extern int conn_set_versioncheck(t_connection * c, t_versioncheck * versioncheck);
  320. extern int conn_get_echoback(t_connection * c) ;
  321. extern void conn_set_echoback(t_connection * c, int echoback);
  322. extern int conn_set_ircline(t_connection * c, char const * line);
  323. extern char const * conn_get_ircline(t_connection const * c);
  324. extern int conn_set_ircpass(t_connection * c, char const * pass);
  325. extern char const * conn_get_ircpass(t_connection const * c);
  326. extern int conn_set_ircping(t_connection * c, unsigned int ping);
  327. extern unsigned int conn_get_ircping(t_connection const * c);
  328. extern int conn_set_udpok(t_connection * c);
  329. extern char const * conn_get_w3_username(t_connection const * c) ;
  330. extern void conn_set_w3_username(t_connection * c, char const * w3_username);
  331. extern int conn_get_welcomed(t_connection const * c) ;
  332. extern void conn_set_welcomed(t_connection * c, int welcomed);
  333. /* ADDED BY UNDYING SOULZZ 4/7/02 */
  334. extern int conn_set_w3_playerinfo( t_connection * c, char const * w3_playerinfo );
  335. extern const char * conn_get_w3_playerinfo( t_connection * c );
  336. // [quetzal] 20020822
  337. extern int conn_get_crtime(t_connection *c);
  338. // [zap-zero] 20020522
  339. extern int conn_set_w3_loginreq(t_connection * c, char const * loginreq);
  340. extern char const * conn_get_w3_loginreq(t_connection * c);
  341. // [zap-zero] 20020527
  342. extern int conn_set_routeconn(t_connection * c, t_connection * rc);
  343. extern t_connection * conn_get_routeconn(t_connection const * c);
  344. extern int connlist_create(void);
  345. extern void connlist_reap(void);
  346. extern int connlist_destroy(void);
  347. extern t_list * connlist(void) ;
  348. extern t_connection * connlist_find_connection_by_sessionkey(unsigned int sessionkey);
  349. extern t_connection * connlist_find_connection_by_socket(int socket);
  350. extern t_connection * connlist_find_connection_by_sessionnum(unsigned int sessionnum);
  351. extern t_connection * connlist_find_connection_by_name(char const * name, char const * realmname); /* any chat name format */
  352. extern t_connection * connlist_find_connection_by_accountname(char const * username);
  353. extern t_connection * connlist_find_connection_by_charname(char const * charname, char const * realmname);
  354. extern t_connection * connlist_find_connection_by_account(t_account * account);
  355. extern t_connection * connlist_find_connection_by_uid(unsigned int uid);
  356. extern int connlist_get_length(void) ;
  357. extern unsigned int connlist_login_get_length(void) ;
  358. extern int connlist_total_logins(void) ;
  359. extern int conn_set_joingamewhisper_ack(t_connection * c, unsigned int value);
  360. extern int conn_get_joingamewhisper_ack(t_connection * c);
  361. extern int conn_set_leavegamewhisper_ack(t_connection * c, unsigned int value);
  362. extern int conn_get_leavegamewhisper_ack(t_connection * c);
  363. extern int conn_set_anongame_search_starttime(t_connection * c, time_t t);
  364. extern time_t conn_get_anongame_search_starttime(t_connection * c);
  365. extern int conn_get_user_count_by_clienttag(char const * ct);
  366. extern char const * conn_get_user_game_title(char const * ct);
  367. extern unsigned int connlist_count_connections(unsigned int addr);
  368. extern int conn_update_w3_playerinfo(t_connection * c);
  369. extern int conn_get_passfail_count(t_connection * c);
  370. extern int conn_set_passfail_count(t_connection * c, unsigned int failcount);
  371. extern int conn_increment_passfail_count (t_connection * c);
  372. #endif
  373. #endif