# 1 "../../../server-code/src/login/login.c" # 1 "" # 1 "" # 1 "/usr/include/stdc-predef.h" 1 3 4 # 1 "" 2 # 1 "../../../server-code/src/login/login.c" # 23 "../../../server-code/src/login/login.c" # 1 "../../../server-code/src/login/login.h" 1 # 24 "../../../server-code/src/login/login.h" # 1 "../../../server-code/src/common/hercules.h" 1 # 23 "../../../server-code/src/common/hercules.h" # 1 "../../../server-code/src/config/core.h" 1 # 90 "../../../server-code/src/config/core.h" # 1 "../../../server-code/src/config/./renewal.h" 1 # 91 "../../../server-code/src/config/core.h" 2 # 1 "../../../server-code/src/config/./secure.h" 1 # 92 "../../../server-code/src/config/core.h" 2 # 1 "../../../server-code/src/config/./classes/general.h" 1 # 93 "../../../server-code/src/config/core.h" 2 # 1 "../../../server-code/src/config/./const.h" 1 # 62 "../../../server-code/src/config/./const.h" typedef short defType; # 98 "../../../server-code/src/config/core.h" 2 # 24 "../../../server-code/src/common/hercules.h" 2 # 1 "../../../server-code/src/common/cbasetypes.h" 1 # 116 "../../../server-code/src/common/cbasetypes.h" # 1 "/usr/include/inttypes.h" 1 3 4 # 25 "/usr/include/inttypes.h" 3 4 # 1 "/usr/include/features.h" 1 3 4 # 361 "/usr/include/features.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 1 3 4 # 410 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 411 "/usr/include/x86_64-linux-gnu/sys/cdefs.h" 2 3 4 # 362 "/usr/include/features.h" 2 3 4 # 385 "/usr/include/features.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 1 3 4 # 10 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/gnu/stubs-64.h" 1 3 4 # 11 "/usr/include/x86_64-linux-gnu/gnu/stubs.h" 2 3 4 # 386 "/usr/include/features.h" 2 3 4 # 26 "/usr/include/inttypes.h" 2 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h" 1 3 4 # 9 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h" 3 4 # 1 "/usr/include/stdint.h" 1 3 4 # 26 "/usr/include/stdint.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wchar.h" 1 3 4 # 27 "/usr/include/stdint.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 28 "/usr/include/stdint.h" 2 3 4 # 36 "/usr/include/stdint.h" 3 4 # 36 "/usr/include/stdint.h" 3 4 typedef signed char int8_t; typedef short int int16_t; typedef int int32_t; typedef long int int64_t; typedef unsigned char uint8_t; typedef unsigned short int uint16_t; typedef unsigned int uint32_t; typedef unsigned long int uint64_t; # 65 "/usr/include/stdint.h" 3 4 typedef signed char int_least8_t; typedef short int int_least16_t; typedef int int_least32_t; typedef long int int_least64_t; typedef unsigned char uint_least8_t; typedef unsigned short int uint_least16_t; typedef unsigned int uint_least32_t; typedef unsigned long int uint_least64_t; # 90 "/usr/include/stdint.h" 3 4 typedef signed char int_fast8_t; typedef long int int_fast16_t; typedef long int int_fast32_t; typedef long int int_fast64_t; # 103 "/usr/include/stdint.h" 3 4 typedef unsigned char uint_fast8_t; typedef unsigned long int uint_fast16_t; typedef unsigned long int uint_fast32_t; typedef unsigned long int uint_fast64_t; # 119 "/usr/include/stdint.h" 3 4 typedef long int intptr_t; typedef unsigned long int uintptr_t; # 134 "/usr/include/stdint.h" 3 4 typedef long int intmax_t; typedef unsigned long int uintmax_t; # 10 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stdint.h" 2 3 4 # 28 "/usr/include/inttypes.h" 2 3 4 typedef int __gwchar_t; # 266 "/usr/include/inttypes.h" 3 4 typedef struct { long int quot; long int rem; } imaxdiv_t; # 290 "/usr/include/inttypes.h" 3 4 extern intmax_t imaxabs (intmax_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern intmax_t strtoimax (const char *__restrict __nptr, char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)); extern uintmax_t strtoumax (const char *__restrict __nptr, char ** __restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)); extern intmax_t wcstoimax (const __gwchar_t *__restrict __nptr, __gwchar_t **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)); extern uintmax_t wcstoumax (const __gwchar_t *__restrict __nptr, __gwchar_t ** __restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)); # 432 "/usr/include/inttypes.h" 3 4 # 117 "../../../server-code/src/common/cbasetypes.h" 2 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h" 1 3 4 # 34 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h" 1 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h" 1 3 4 # 168 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h" 3 4 # 1 "/usr/include/limits.h" 1 3 4 # 143 "/usr/include/limits.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 1 3 4 # 160 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 1 3 4 # 38 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 3 4 # 1 "/usr/include/linux/limits.h" 1 3 4 # 39 "/usr/include/x86_64-linux-gnu/bits/local_lim.h" 2 3 4 # 161 "/usr/include/x86_64-linux-gnu/bits/posix1_lim.h" 2 3 4 # 144 "/usr/include/limits.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/posix2_lim.h" 1 3 4 # 148 "/usr/include/limits.h" 2 3 4 # 169 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h" 2 3 4 # 8 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/syslimits.h" 2 3 4 # 35 "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed/limits.h" 2 3 4 # 119 "../../../server-code/src/common/cbasetypes.h" 2 # 1 "/usr/include/time.h" 1 3 4 # 29 "/usr/include/time.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 216 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 3 4 typedef long unsigned int size_t; # 38 "/usr/include/time.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4 # 42 "/usr/include/time.h" 2 3 4 # 55 "/usr/include/time.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/types.h" 1 3 4 # 27 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 28 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4 typedef unsigned char __u_char; typedef unsigned short int __u_short; typedef unsigned int __u_int; typedef unsigned long int __u_long; typedef signed char __int8_t; typedef unsigned char __uint8_t; typedef signed short int __int16_t; typedef unsigned short int __uint16_t; typedef signed int __int32_t; typedef unsigned int __uint32_t; typedef signed long int __int64_t; typedef unsigned long int __uint64_t; typedef long int __quad_t; typedef unsigned long int __u_quad_t; # 121 "/usr/include/x86_64-linux-gnu/bits/types.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/typesizes.h" 1 3 4 # 122 "/usr/include/x86_64-linux-gnu/bits/types.h" 2 3 4 typedef unsigned long int __dev_t; typedef unsigned int __uid_t; typedef unsigned int __gid_t; typedef unsigned long int __ino_t; typedef unsigned long int __ino64_t; typedef unsigned int __mode_t; typedef unsigned long int __nlink_t; typedef long int __off_t; typedef long int __off64_t; typedef int __pid_t; typedef struct { int __val[2]; } __fsid_t; typedef long int __clock_t; typedef unsigned long int __rlim_t; typedef unsigned long int __rlim64_t; typedef unsigned int __id_t; typedef long int __time_t; typedef unsigned int __useconds_t; typedef long int __suseconds_t; typedef int __daddr_t; typedef int __key_t; typedef int __clockid_t; typedef void * __timer_t; typedef long int __blksize_t; typedef long int __blkcnt_t; typedef long int __blkcnt64_t; typedef unsigned long int __fsblkcnt_t; typedef unsigned long int __fsblkcnt64_t; typedef unsigned long int __fsfilcnt_t; typedef unsigned long int __fsfilcnt64_t; typedef long int __fsword_t; typedef long int __ssize_t; typedef long int __syscall_slong_t; typedef unsigned long int __syscall_ulong_t; typedef __off64_t __loff_t; typedef __quad_t *__qaddr_t; typedef char *__caddr_t; typedef long int __intptr_t; typedef unsigned int __socklen_t; # 56 "/usr/include/time.h" 2 3 4 typedef __clock_t clock_t; # 73 "/usr/include/time.h" 3 4 typedef __time_t time_t; # 91 "/usr/include/time.h" 3 4 typedef __clockid_t clockid_t; # 103 "/usr/include/time.h" 3 4 typedef __timer_t timer_t; # 120 "/usr/include/time.h" 3 4 struct timespec { __time_t tv_sec; __syscall_slong_t tv_nsec; }; struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; long int tm_gmtoff; const char *tm_zone; }; struct itimerspec { struct timespec it_interval; struct timespec it_value; }; struct sigevent; typedef __pid_t pid_t; # 186 "/usr/include/time.h" 3 4 extern clock_t clock (void) __attribute__ ((__nothrow__ , __leaf__)); extern time_t time (time_t *__timer) __attribute__ ((__nothrow__ , __leaf__)); extern double difftime (time_t __time1, time_t __time0) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern time_t mktime (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__)); extern size_t strftime (char *__restrict __s, size_t __maxsize, const char *__restrict __format, const struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__)); # 221 "/usr/include/time.h" 3 4 # 1 "/usr/include/xlocale.h" 1 3 4 # 27 "/usr/include/xlocale.h" 3 4 typedef struct __locale_struct { struct __locale_data *__locales[13]; const unsigned short int *__ctype_b; const int *__ctype_tolower; const int *__ctype_toupper; const char *__names[13]; } *__locale_t; typedef __locale_t locale_t; # 222 "/usr/include/time.h" 2 3 4 extern size_t strftime_l (char *__restrict __s, size_t __maxsize, const char *__restrict __format, const struct tm *__restrict __tp, __locale_t __loc) __attribute__ ((__nothrow__ , __leaf__)); # 236 "/usr/include/time.h" 3 4 extern struct tm *gmtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__)); extern struct tm *localtime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__)); extern struct tm *gmtime_r (const time_t *__restrict __timer, struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__)); extern struct tm *localtime_r (const time_t *__restrict __timer, struct tm *__restrict __tp) __attribute__ ((__nothrow__ , __leaf__)); extern char *asctime (const struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__)); extern char *ctime (const time_t *__timer) __attribute__ ((__nothrow__ , __leaf__)); extern char *asctime_r (const struct tm *__restrict __tp, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)); extern char *ctime_r (const time_t *__restrict __timer, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)); extern char *__tzname[2]; extern int __daylight; extern long int __timezone; extern char *tzname[2]; extern void tzset (void) __attribute__ ((__nothrow__ , __leaf__)); extern int daylight; extern long int timezone; extern int stime (const time_t *__when) __attribute__ ((__nothrow__ , __leaf__)); # 319 "/usr/include/time.h" 3 4 extern time_t timegm (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__)); extern time_t timelocal (struct tm *__tp) __attribute__ ((__nothrow__ , __leaf__)); extern int dysize (int __year) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); # 334 "/usr/include/time.h" 3 4 extern int nanosleep (const struct timespec *__requested_time, struct timespec *__remaining); extern int clock_getres (clockid_t __clock_id, struct timespec *__res) __attribute__ ((__nothrow__ , __leaf__)); extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __attribute__ ((__nothrow__ , __leaf__)); extern int clock_settime (clockid_t __clock_id, const struct timespec *__tp) __attribute__ ((__nothrow__ , __leaf__)); extern int clock_nanosleep (clockid_t __clock_id, int __flags, const struct timespec *__req, struct timespec *__rem); extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) __attribute__ ((__nothrow__ , __leaf__)); extern int timer_create (clockid_t __clock_id, struct sigevent *__restrict __evp, timer_t *__restrict __timerid) __attribute__ ((__nothrow__ , __leaf__)); extern int timer_delete (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__)); extern int timer_settime (timer_t __timerid, int __flags, const struct itimerspec *__restrict __value, struct itimerspec *__restrict __ovalue) __attribute__ ((__nothrow__ , __leaf__)); extern int timer_gettime (timer_t __timerid, struct itimerspec *__value) __attribute__ ((__nothrow__ , __leaf__)); extern int timer_getoverrun (timer_t __timerid) __attribute__ ((__nothrow__ , __leaf__)); extern int timespec_get (struct timespec *__ts, int __base) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); # 430 "/usr/include/time.h" 3 4 # 120 "../../../server-code/src/common/cbasetypes.h" 2 # 140 "../../../server-code/src/common/cbasetypes.h" # 140 "../../../server-code/src/common/cbasetypes.h" typedef int8_t int8; typedef int16_t int16; typedef int32_t int32; typedef int64_t int64; typedef int8_t sint8; typedef int16_t sint16; typedef int32_t sint32; typedef int64_t sint64; typedef uint8_t uint8; typedef uint16_t uint16; typedef uint32_t uint32; typedef uint64_t uint64; # 196 "../../../server-code/src/common/cbasetypes.h" typedef long int ppint; typedef long int ppint8; typedef long int ppint16; typedef long int ppint32; typedef unsigned long int ppuint; typedef unsigned long int ppuint8; typedef unsigned long int ppuint16; typedef unsigned long int ppuint32; # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 149 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 3 4 # 149 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 3 4 typedef long int ptrdiff_t; # 328 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 3 4 typedef int wchar_t; # 426 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 3 4 typedef struct { long long __max_align_ll __attribute__((__aligned__(__alignof__(long long)))); long double __max_align_ld __attribute__((__aligned__(__alignof__(long double)))); } max_align_t; # 211 "../../../server-code/src/common/cbasetypes.h" 2 # 227 "../../../server-code/src/common/cbasetypes.h" # 227 "../../../server-code/src/common/cbasetypes.h" typedef intptr_t intptr; typedef uintptr_t uintptr; typedef int64 sysint; typedef uint64 usysint; # 305 "../../../server-code/src/common/cbasetypes.h" # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stdbool.h" 1 3 4 # 306 "../../../server-code/src/common/cbasetypes.h" 2 # 395 "../../../server-code/src/common/cbasetypes.h" # 1 "/usr/include/ctype.h" 1 3 4 # 28 "/usr/include/ctype.h" 3 4 # 39 "/usr/include/ctype.h" 3 4 # 1 "/usr/include/endian.h" 1 3 4 # 36 "/usr/include/endian.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/endian.h" 1 3 4 # 37 "/usr/include/endian.h" 2 3 4 # 60 "/usr/include/endian.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 1 3 4 # 28 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 29 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/byteswap-16.h" 1 3 4 # 36 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 2 3 4 # 44 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4 # 44 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4 static __inline unsigned int __bswap_32 (unsigned int __bsx) { return __builtin_bswap32 (__bsx); } # 108 "/usr/include/x86_64-linux-gnu/bits/byteswap.h" 3 4 static __inline __uint64_t __bswap_64 (__uint64_t __bsx) { return __builtin_bswap64 (__bsx); } # 61 "/usr/include/endian.h" 2 3 4 # 40 "/usr/include/ctype.h" 2 3 4 enum { _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)), _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)), _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)), _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)), _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)), _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)), _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)), _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)), _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)), _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)), _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)), _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8)) }; # 79 "/usr/include/ctype.h" 3 4 extern const unsigned short int **__ctype_b_loc (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern const __int32_t **__ctype_tolower_loc (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern const __int32_t **__ctype_toupper_loc (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); # 104 "/usr/include/ctype.h" 3 4 extern int isalnum (int) __attribute__ ((__nothrow__ , __leaf__)); extern int isalpha (int) __attribute__ ((__nothrow__ , __leaf__)); extern int iscntrl (int) __attribute__ ((__nothrow__ , __leaf__)); extern int isdigit (int) __attribute__ ((__nothrow__ , __leaf__)); extern int islower (int) __attribute__ ((__nothrow__ , __leaf__)); extern int isgraph (int) __attribute__ ((__nothrow__ , __leaf__)); extern int isprint (int) __attribute__ ((__nothrow__ , __leaf__)); extern int ispunct (int) __attribute__ ((__nothrow__ , __leaf__)); extern int isspace (int) __attribute__ ((__nothrow__ , __leaf__)); extern int isupper (int) __attribute__ ((__nothrow__ , __leaf__)); extern int isxdigit (int) __attribute__ ((__nothrow__ , __leaf__)); extern int tolower (int __c) __attribute__ ((__nothrow__ , __leaf__)); extern int toupper (int __c) __attribute__ ((__nothrow__ , __leaf__)); extern int isblank (int) __attribute__ ((__nothrow__ , __leaf__)); # 150 "/usr/include/ctype.h" 3 4 extern int isascii (int __c) __attribute__ ((__nothrow__ , __leaf__)); extern int toascii (int __c) __attribute__ ((__nothrow__ , __leaf__)); extern int _toupper (int) __attribute__ ((__nothrow__ , __leaf__)); extern int _tolower (int) __attribute__ ((__nothrow__ , __leaf__)); # 271 "/usr/include/ctype.h" 3 4 extern int isalnum_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isalpha_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int iscntrl_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isdigit_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int islower_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isgraph_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isprint_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int ispunct_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isspace_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isupper_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isxdigit_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int isblank_l (int, __locale_t) __attribute__ ((__nothrow__ , __leaf__)); extern int __tolower_l (int __c, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)); extern int tolower_l (int __c, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)); extern int __toupper_l (int __c, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)); extern int toupper_l (int __c, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)); # 347 "/usr/include/ctype.h" 3 4 # 396 "../../../server-code/src/common/cbasetypes.h" 2 # 417 "../../../server-code/src/common/cbasetypes.h" # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h" 1 3 4 # 40 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h" 3 4 typedef __builtin_va_list __gnuc_va_list; # 98 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stdarg.h" 3 4 typedef __gnuc_va_list va_list; # 418 "../../../server-code/src/common/cbasetypes.h" 2 # 25 "../../../server-code/src/common/hercules.h" 2 # 25 "../../../server-code/src/login/login.h" 2 # 1 "../../../server-code/src/common/core.h" 1 # 25 "../../../server-code/src/common/core.h" # 1 "../../../server-code/src/common/db.h" 1 # 90 "../../../server-code/src/common/db.h" # 90 "../../../server-code/src/common/db.h" enum DBReleaseOption { DB_RELEASE_NOTHING = 0x0, DB_RELEASE_KEY = 0x1, DB_RELEASE_DATA = 0x2, DB_RELEASE_BOTH = DB_RELEASE_KEY|DB_RELEASE_DATA, }; # 117 "../../../server-code/src/common/db.h" enum DBType { DB_INT, DB_UINT, DB_STRING, DB_ISTRING, DB_INT64, DB_UINT64, }; # 148 "../../../server-code/src/common/db.h" enum DBOptions { DB_OPT_BASE = 0x00, DB_OPT_DUP_KEY = 0x01, DB_OPT_RELEASE_KEY = 0x02, DB_OPT_RELEASE_DATA = 0x04, DB_OPT_RELEASE_BOTH = DB_OPT_RELEASE_KEY|DB_OPT_RELEASE_DATA, DB_OPT_ALLOW_NULL_KEY = 0x08, DB_OPT_ALLOW_NULL_DATA = 0x10, }; # 169 "../../../server-code/src/common/db.h" union DBKey { int i; unsigned int ui; const char *str; char *mutstr; int64 i64; uint64 ui64; }; # 186 "../../../server-code/src/common/db.h" enum DBDataType { DB_DATA_INT, DB_DATA_UINT, DB_DATA_PTR, }; # 201 "../../../server-code/src/common/db.h" struct DBData { enum DBDataType type; union { int i; unsigned int ui; void *ptr; } u; }; # 220 "../../../server-code/src/common/db.h" typedef struct DBData (*DBCreateData)(union DBKey key, va_list args); # 237 "../../../server-code/src/common/db.h" typedef int (*DBApply)(union DBKey key, struct DBData *data, va_list args); # 250 "../../../server-code/src/common/db.h" typedef int (*DBMatcher)(union DBKey key, struct DBData data, va_list args); # 264 "../../../server-code/src/common/db.h" typedef int (*DBComparator)(union DBKey key1, union DBKey key2, unsigned short maxlen); # 276 "../../../server-code/src/common/db.h" typedef uint64 (*DBHasher)(union DBKey key, unsigned short maxlen); # 290 "../../../server-code/src/common/db.h" typedef void (*DBReleaser)(union DBKey key, struct DBData data, enum DBReleaseOption which); # 304 "../../../server-code/src/common/db.h" struct DBIterator { # 314 "../../../server-code/src/common/db.h" struct DBData *(*first)(struct DBIterator *self, union DBKey *out_key); # 325 "../../../server-code/src/common/db.h" struct DBData *(*last)(struct DBIterator *self, union DBKey *out_key); # 336 "../../../server-code/src/common/db.h" struct DBData *(*next)(struct DBIterator *self, union DBKey *out_key); # 347 "../../../server-code/src/common/db.h" struct DBData *(*prev)(struct DBIterator *self, union DBKey *out_key); # 357 "../../../server-code/src/common/db.h" # 357 "../../../server-code/src/common/db.h" 3 4 _Bool # 357 "../../../server-code/src/common/db.h" (*exists)(struct DBIterator *self); # 372 "../../../server-code/src/common/db.h" int (*remove)(struct DBIterator *self, struct DBData *out_data); void (*destroy)(struct DBIterator *self); }; struct DBMap { # 400 "../../../server-code/src/common/db.h" struct DBIterator *(*iterator)(struct DBMap *self); # 409 "../../../server-code/src/common/db.h" # 409 "../../../server-code/src/common/db.h" 3 4 _Bool # 409 "../../../server-code/src/common/db.h" (*exists)(struct DBMap *self, union DBKey key); # 418 "../../../server-code/src/common/db.h" struct DBData *(*get)(struct DBMap *self, union DBKey key); # 438 "../../../server-code/src/common/db.h" unsigned int (*getall)(struct DBMap *self, struct DBData **buf, unsigned int max, DBMatcher match, ...); # 456 "../../../server-code/src/common/db.h" unsigned int (*vgetall)(struct DBMap *self, struct DBData **buf, unsigned int max, DBMatcher match, va_list args); # 472 "../../../server-code/src/common/db.h" struct DBData *(*ensure)(struct DBMap *self, union DBKey key, DBCreateData create, ...); # 486 "../../../server-code/src/common/db.h" struct DBData *(*vensure)(struct DBMap *self, union DBKey key, DBCreateData create, va_list args); # 499 "../../../server-code/src/common/db.h" int (*put)(struct DBMap *self, union DBKey key, struct DBData data, struct DBData *out_data); # 511 "../../../server-code/src/common/db.h" int (*remove)(struct DBMap *self, union DBKey key, struct DBData *out_data); # 525 "../../../server-code/src/common/db.h" int (*foreach)(struct DBMap *self, DBApply func, ...); # 537 "../../../server-code/src/common/db.h" int (*vforeach)(struct DBMap *self, DBApply func, va_list args); # 553 "../../../server-code/src/common/db.h" int (*clear)(struct DBMap *self, DBApply func, ...); # 567 "../../../server-code/src/common/db.h" int (*vclear)(struct DBMap *self, DBApply func, va_list args); # 584 "../../../server-code/src/common/db.h" int (*destroy)(struct DBMap *self, DBApply func, ...); # 599 "../../../server-code/src/common/db.h" int (*vdestroy)(struct DBMap *self, DBApply func, va_list args); unsigned int (*size)(struct DBMap *self); enum DBType (*type)(struct DBMap *self); enum DBOptions (*options)(struct DBMap *self); }; # 745 "../../../server-code/src/common/db.h" struct db_interface { # 758 "../../../server-code/src/common/db.h" enum DBOptions (*fix_options) (enum DBType type, enum DBOptions options); # 768 "../../../server-code/src/common/db.h" DBComparator (*default_cmp) (enum DBType type); # 778 "../../../server-code/src/common/db.h" DBHasher (*default_hash) (enum DBType type); # 797 "../../../server-code/src/common/db.h" DBReleaser (*default_release) (enum DBType type, enum DBOptions options); # 808 "../../../server-code/src/common/db.h" DBReleaser (*custom_release) (enum DBReleaseOption which); # 834 "../../../server-code/src/common/db.h" struct DBMap *(*alloc) (const char *file, const char *func, int line, enum DBType type, enum DBOptions options, unsigned short maxlen); union DBKey (*i2key) (int key); union DBKey (*ui2key) (unsigned int key); union DBKey (*str2key) (const char *key); union DBKey (*i642key) (int64 key); union DBKey (*ui642key) (uint64 key); struct DBData (*i2data) (int data); struct DBData (*ui2data) (unsigned int data); struct DBData (*ptr2data) (void *data); # 907 "../../../server-code/src/common/db.h" int (*data2i) (struct DBData *data); # 916 "../../../server-code/src/common/db.h" unsigned int (*data2ui) (struct DBData *data); # 925 "../../../server-code/src/common/db.h" void* (*data2ptr) (struct DBData *data); void (*init) (void); void (*final) (void); }; struct linkdb_node { struct linkdb_node *next; struct linkdb_node *prev; void *key; void *data; }; typedef void (*LinkDBFunc)(void* key, void* data, va_list args); void linkdb_insert (struct linkdb_node** head, void *key, void* data); void linkdb_replace (struct linkdb_node** head, void *key, void* data); void* linkdb_search (struct linkdb_node** head, void *key); void* linkdb_erase (struct linkdb_node** head, void *key); void linkdb_final (struct linkdb_node** head); void linkdb_vforeach(struct linkdb_node** head, LinkDBFunc func, va_list ap); void linkdb_foreach (struct linkdb_node** head, LinkDBFunc func, ...); void db_defaults(void); extern struct db_interface *DB; # 26 "../../../server-code/src/common/core.h" 2 # 34 "../../../server-code/src/common/core.h" enum server_types { SERVER_TYPE_UNKNOWN = 0x0, SERVER_TYPE_LOGIN = 0x1, SERVER_TYPE_CHAR = 0x2, SERVER_TYPE_MAP = 0x4, }; enum E_CORE_ST { CORE_ST_STOP = 0, CORE_ST_RUN, CORE_ST_LAST }; enum cmdline_options { CMDLINE_OPT_NORMAL = 0x0, CMDLINE_OPT_PARAM = 0x1, CMDLINE_OPT_SILENT = 0x2, CMDLINE_OPT_PREINIT = 0x4, }; typedef # 55 "../../../server-code/src/common/core.h" 3 4 _Bool # 55 "../../../server-code/src/common/core.h" (*CmdlineExecFunc)(const char *name, const char *params); struct CmdlineArgData { unsigned int pluginID; unsigned int options; char *name; char shortname; CmdlineExecFunc func; char *help; }; struct cmdline_interface { struct { int _max_; int _len_; struct CmdlineArgData *_data_; } args_data; void (*init) (void); void (*final) (void); # 70 "../../../server-code/src/common/core.h" 3 4 _Bool # 70 "../../../server-code/src/common/core.h" (*arg_add) (unsigned int pluginID, const char *name, char shortname, CmdlineExecFunc func, const char *help, unsigned int options); int (*exec) (int argc, char **argv, unsigned int options); # 72 "../../../server-code/src/common/core.h" 3 4 _Bool # 72 "../../../server-code/src/common/core.h" (*arg_next_value) (const char *name, int current_arg, int argc); const char *(*arg_source) (struct CmdlineArgData *arg); }; struct core_interface { int arg_c; char **arg_v; int runflag; char *server_name; enum server_types server_type; void (*shutdown_callback)(void); }; extern void cmdline_args_init_local(void); extern int do_init(int,char**); extern void set_server_type(void); extern void do_abort(void); extern int do_final(void); void cmdline_defaults(void); extern struct core_interface *core; extern struct cmdline_interface *cmdline; # 26 "../../../server-code/src/login/login.h" 2 # 1 "../../../server-code/src/common/mmo.h" 1 # 225 "../../../server-code/src/common/mmo.h" struct hplugin_data_store; enum item_types { IT_HEALING = 0, IT_UNKNOWN, IT_USABLE, IT_ETC, IT_WEAPON, IT_ARMOR, IT_CARD, IT_PETEGG, IT_PETARMOR, IT_UNKNOWN2, IT_AMMO, IT_DELAYCONSUME, IT_CASH = 18, IT_MAX }; enum quest_state { Q_INACTIVE, Q_ACTIVE, Q_COMPLETE, }; struct quest { int quest_id; unsigned int time; int count[3]; enum quest_state state; }; struct item { int id; short nameid; short amount; unsigned int equip; char identify; char refine; char attribute; short card[4]; unsigned int expire_time; char favorite; unsigned char bound; uint64 unique_id; }; enum equip_pos { EQP_NONE = 0x000000, EQP_HEAD_LOW = 0x000001, EQP_HEAD_MID = 0x000200, EQP_HEAD_TOP = 0x000100, EQP_HAND_R = 0x000002, EQP_HAND_L = 0x000020, EQP_ARMOR = 0x000010, EQP_SHOES = 0x000040, EQP_GARMENT = 0x000004, EQP_ACC_L = 0x000008, EQP_ACC_R = 0x000080, EQP_COSTUME_HEAD_TOP = 0x000400, EQP_COSTUME_HEAD_MID = 0x000800, EQP_COSTUME_HEAD_LOW = 0x001000, EQP_COSTUME_GARMENT = 0x002000, EQP_AMMO = 0x008000, EQP_SHADOW_ARMOR = 0x010000, EQP_SHADOW_WEAPON = 0x020000, EQP_SHADOW_SHIELD = 0x040000, EQP_SHADOW_SHOES = 0x080000, EQP_SHADOW_ACC_R = 0x100000, EQP_SHADOW_ACC_L = 0x200000, }; struct point { unsigned short map; short x,y; }; enum e_skill_flag { SKILL_FLAG_PERMANENT, SKILL_FLAG_TEMPORARY, SKILL_FLAG_PLAGIARIZED, SKILL_FLAG_UNUSED, SKILL_FLAG_PERM_GRANTED, SKILL_FLAG_REPLACED_LV_0, }; enum e_mmo_charstatus_opt { OPT_NONE = 0x0, OPT_SHOW_EQUIP = 0x1, OPT_ALLOW_PARTY = 0x2, }; enum e_item_bound_type { IBT_NONE = 0x0, IBT_MIN = 0x1, IBT_ACCOUNT = 0x1, IBT_GUILD = 0x2, IBT_PARTY = 0x3, IBT_CHARACTER = 0x4, IBT_MAX = 0x4, }; enum { OPTION_NOTHING = 0x00000000, OPTION_SIGHT = 0x00000001, OPTION_HIDE = 0x00000002, OPTION_CLOAK = 0x00000004, OPTION_FALCON = 0x00000010, OPTION_RIDING = 0x00000020, OPTION_INVISIBLE = 0x00000040, OPTION_ORCISH = 0x00000800, OPTION_WEDDING = 0x00001000, OPTION_RUWACH = 0x00002000, OPTION_CHASEWALK = 0x00004000, OPTION_FLYING = 0x00008000, OPTION_XMAS = 0x00010000, OPTION_TRANSFORM = 0x00020000, OPTION_SUMMER = 0x00040000, OPTION_DRAGON1 = 0x00080000, OPTION_WUG = 0x00100000, OPTION_WUGRIDER = 0x00200000, OPTION_MADOGEAR = 0x00400000, OPTION_DRAGON2 = 0x00800000, OPTION_DRAGON3 = 0x01000000, OPTION_DRAGON4 = 0x02000000, OPTION_DRAGON5 = 0x04000000, OPTION_HANBOK = 0x08000000, OPTION_OKTOBERFEST = 0x10000000, # 372 "../../../server-code/src/common/mmo.h" OPTION_DRAGON = OPTION_DRAGON1|OPTION_DRAGON2|OPTION_DRAGON3|OPTION_DRAGON4|OPTION_DRAGON5, OPTION_COSTUME = OPTION_WEDDING|OPTION_XMAS|OPTION_SUMMER|OPTION_HANBOK|OPTION_OKTOBERFEST, }; struct s_skill { unsigned short id; unsigned char lv; unsigned char flag; }; struct script_reg_state { unsigned int type : 1; unsigned int update : 1; }; struct script_reg_num { struct script_reg_state flag; int value; }; struct script_reg_str { struct script_reg_state flag; char *value; }; struct status_change_data { unsigned short type; int val1, val2, val3, val4; int tick; }; struct storage_data { int storage_amount; struct item items[600]; }; struct guild_storage { int dirty; int guild_id; short storage_status; short storage_amount; struct item items[600]; unsigned short lock; }; struct s_pet { int account_id; int char_id; int pet_id; short class_; short level; short egg_id; short equip; short intimate; short hungry; char name[(23 + 1)]; char rename_flag; char incubate; }; struct s_homunculus { char name[(23 + 1)]; int hom_id; int char_id; short class_; short prev_class; int hp,max_hp,sp,max_sp; unsigned int intimacy; short hunger; struct s_skill hskill[43]; short skillpts; short level; unsigned int exp; short rename_flag; short vaporize; int str; int agi; int vit; int int_; int dex; int luk; int str_value; int agi_value; int vit_value; int int_value; int dex_value; int luk_value; int8 spiritball; }; struct s_mercenary { int mercenary_id; int char_id; short class_; int hp, sp; unsigned int kill_count; unsigned int life_time; }; struct s_elemental { int elemental_id; int char_id; short class_; uint32 mode; int hp, sp, max_hp, max_sp, matk, atk, atk2; short hit, flee, amotion, def, mdef; int life_time; }; struct s_friend { int account_id; int char_id; char name[(23 + 1)]; }; struct hotkey { unsigned int id; unsigned short lv; unsigned char type; }; struct mmo_charstatus { int char_id; int account_id; int partner_id; int father; int mother; int child; unsigned int base_exp,job_exp; int zeny; int bank_vault; short class_; unsigned int status_point,skill_point; int hp,max_hp,sp,max_sp; unsigned int option; short manner; unsigned char karma; short hair,hair_color,clothes_color,body; int party_id,guild_id,pet_id,hom_id,mer_id,ele_id; int fame; int arch_faith, arch_calls; int spear_faith, spear_calls; int sword_faith, sword_calls; short weapon; short shield; short head_top,head_mid,head_bottom; short robe; char name[(23 + 1)]; unsigned int base_level,job_level; short str,agi,vit,int_,dex,luk; unsigned char slot,sex; uint32 mapip; uint16 mapport; struct point last_point,save_point,memo_point[3]; struct item inventory[100],cart[100]; struct storage_data storage; struct s_skill skill[1478]; struct s_friend friends[40]; struct hotkey hotkeys[38]; # 549 "../../../server-code/src/common/mmo.h" 3 4 _Bool # 549 "../../../server-code/src/common/mmo.h" show_equip, allow_party; unsigned short rename; unsigned short slotchange; time_t delete_date; unsigned short mod_exp,mod_drop,mod_death; unsigned char font; uint32 uniqueitem_counter; unsigned char hotkey_rowshift; }; typedef enum mail_status { MAIL_NEW, MAIL_UNREAD, MAIL_READ, } mail_status; struct mail_message { int id; int send_id; char send_name[(23 + 1)]; int dest_id; char dest_name[(23 + 1)]; char title[40]; char body[200]; mail_status status; time_t timestamp; int zeny; struct item item; }; struct mail_data { short amount; # 589 "../../../server-code/src/common/mmo.h" 3 4 _Bool # 589 "../../../server-code/src/common/mmo.h" full; short unchecked, unread; struct mail_message msg[30]; }; struct auction_data { unsigned int auction_id; int seller_id; char seller_name[(23 + 1)]; int buyer_id; char buyer_name[(23 + 1)]; struct item item; char item_name[50]; short type; unsigned short hours; int price, buynow; time_t timestamp; int auction_end_timer; }; struct party_member { int account_id; int char_id; char name[(23 + 1)]; unsigned short class_; unsigned short map; unsigned short lv; unsigned leader : 1, online : 1; }; struct party { int party_id; char name[(23 + 1)]; unsigned char count; unsigned exp : 1, item : 2; struct party_member member[12]; }; struct map_session_data; struct guild_member { int account_id, char_id; short hair,hair_color,gender,class_,lv; uint64 exp; int exp_payper; short online,position; char name[(23 + 1)]; struct map_session_data *sd; unsigned char modified; }; struct guild_position { char name[(23 + 1)]; int mode; int exp_mode; unsigned char modified; }; struct guild_alliance { int opposition; int guild_id; char name[(23 + 1)]; }; struct guild_expulsion { char name[(23 + 1)]; char mes[40]; int account_id; }; struct guild_skill { int id,lv; }; struct channel_data; struct guild { int guild_id; short guild_lv, connect_member, max_member, average_lv; uint64 exp; unsigned int next_exp; int skill_point; char name[(23 + 1)],master[(23 + 1)]; struct guild_member member[(16 +10*6)]; struct guild_position position[20]; char mes1[60],mes2[120]; int emblem_len,emblem_id; char emblem_data[2048]; struct guild_alliance alliance[16]; struct guild_expulsion expulsion[32]; struct guild_skill skill[15]; unsigned short save_flag; short *instance; unsigned short instances; struct channel_data *channel; struct hplugin_data_store *hdata; }; struct guild_castle { int castle_id; int mapindex; char castle_name[(23 + 1)]; char castle_event[(23 + 1)]; int guild_id; int economy; int defense; int triggerE; int triggerD; int nextTime; int payTime; int createTime; int visibleC; struct { unsigned visible : 1; int id; } guardian[8]; int* temp_guardians; int temp_guardians_max; }; struct fame_list { int id; int fame; char name[(23 + 1)]; }; enum fame_list_type { RANKTYPE_BLACKSMITH = 0, RANKTYPE_ALCHEMIST = 1, RANKTYPE_TAEKWON = 2, RANKTYPE_PK = 3, }; enum guild_basic_info { GBI_EXP = 1, GBI_GUILDLV, GBI_SKILLPOINT, GBI_SKILLLV, }; enum { GMI_POSITION = 0, GMI_EXP, GMI_HAIR, GMI_HAIR_COLOR, GMI_GENDER, GMI_CLASS, GMI_LEVEL, }; enum guild_permission { GPERM_INVITE = 0x01, GPERM_EXPEL = 0x10, GPERM_ALL = GPERM_INVITE|GPERM_EXPEL, GPERM_MASK = GPERM_ALL, }; enum { GD_SKILLBASE=10000, GD_APPROVAL=10000, GD_KAFRACONTRACT=10001, GD_GUARDRESEARCH=10002, GD_GUARDUP=10003, GD_EXTENSION=10004, GD_GLORYGUILD=10005, GD_LEADERSHIP=10006, GD_GLORYWOUNDS=10007, GD_SOULCOLD=10008, GD_HAWKEYES=10009, GD_BATTLEORDER=10010, GD_REGENERATION=10011, GD_RESTORE=10012, GD_EMERGENCYCALL=10013, GD_DEVELOPMENT=10014, GD_MAX, }; enum { JOB_NOVICE, JOB_SWORDMAN, JOB_MAGE, JOB_ARCHER, JOB_ACOLYTE, JOB_MERCHANT, JOB_THIEF, JOB_KNIGHT, JOB_PRIEST, JOB_WIZARD, JOB_BLACKSMITH, JOB_HUNTER, JOB_ASSASSIN, JOB_KNIGHT2, JOB_CRUSADER, JOB_MONK, JOB_SAGE, JOB_ROGUE, JOB_ALCHEMIST, JOB_BARD, JOB_DANCER, JOB_CRUSADER2, JOB_WEDDING, JOB_SUPER_NOVICE, JOB_GUNSLINGER, JOB_NINJA, JOB_XMAS, JOB_SUMMER, JOB_MAX_BASIC, JOB_NOVICE_HIGH = 4001, JOB_SWORDMAN_HIGH, JOB_MAGE_HIGH, JOB_ARCHER_HIGH, JOB_ACOLYTE_HIGH, JOB_MERCHANT_HIGH, JOB_THIEF_HIGH, JOB_LORD_KNIGHT, JOB_HIGH_PRIEST, JOB_HIGH_WIZARD, JOB_WHITESMITH, JOB_SNIPER, JOB_ASSASSIN_CROSS, JOB_LORD_KNIGHT2, JOB_PALADIN, JOB_CHAMPION, JOB_PROFESSOR, JOB_STALKER, JOB_CREATOR, JOB_CLOWN, JOB_GYPSY, JOB_PALADIN2, JOB_BABY, JOB_BABY_SWORDMAN, JOB_BABY_MAGE, JOB_BABY_ARCHER, JOB_BABY_ACOLYTE, JOB_BABY_MERCHANT, JOB_BABY_THIEF, JOB_BABY_KNIGHT, JOB_BABY_PRIEST, JOB_BABY_WIZARD, JOB_BABY_BLACKSMITH, JOB_BABY_HUNTER, JOB_BABY_ASSASSIN, JOB_BABY_KNIGHT2, JOB_BABY_CRUSADER, JOB_BABY_MONK, JOB_BABY_SAGE, JOB_BABY_ROGUE, JOB_BABY_ALCHEMIST, JOB_BABY_BARD, JOB_BABY_DANCER, JOB_BABY_CRUSADER2, JOB_SUPER_BABY, JOB_TAEKWON, JOB_STAR_GLADIATOR, JOB_STAR_GLADIATOR2, JOB_SOUL_LINKER, JOB_GANGSI, JOB_DEATH_KNIGHT, JOB_DARK_COLLECTOR, JOB_RUNE_KNIGHT = 4054, JOB_WARLOCK, JOB_RANGER, JOB_ARCH_BISHOP, JOB_MECHANIC, JOB_GUILLOTINE_CROSS, JOB_RUNE_KNIGHT_T, JOB_WARLOCK_T, JOB_RANGER_T, JOB_ARCH_BISHOP_T, JOB_MECHANIC_T, JOB_GUILLOTINE_CROSS_T, JOB_ROYAL_GUARD, JOB_SORCERER, JOB_MINSTREL, JOB_WANDERER, JOB_SURA, JOB_GENETIC, JOB_SHADOW_CHASER, JOB_ROYAL_GUARD_T, JOB_SORCERER_T, JOB_MINSTREL_T, JOB_WANDERER_T, JOB_SURA_T, JOB_GENETIC_T, JOB_SHADOW_CHASER_T, JOB_RUNE_KNIGHT2, JOB_RUNE_KNIGHT_T2, JOB_ROYAL_GUARD2, JOB_ROYAL_GUARD_T2, JOB_RANGER2, JOB_RANGER_T2, JOB_MECHANIC2, JOB_MECHANIC_T2, JOB_BABY_RUNE = 4096, JOB_BABY_WARLOCK, JOB_BABY_RANGER, JOB_BABY_BISHOP, JOB_BABY_MECHANIC, JOB_BABY_CROSS, JOB_BABY_GUARD, JOB_BABY_SORCERER, JOB_BABY_MINSTREL, JOB_BABY_WANDERER, JOB_BABY_SURA, JOB_BABY_GENETIC, JOB_BABY_CHASER, JOB_BABY_RUNE2, JOB_BABY_GUARD2, JOB_BABY_RANGER2, JOB_BABY_MECHANIC2, JOB_SUPER_NOVICE_E = 4190, JOB_SUPER_BABY_E, JOB_KAGEROU = 4211, JOB_OBORO, JOB_REBELLION = 4215, JOB_MAX, }; enum { SEX_FEMALE = 0, SEX_MALE, SEX_SERVER }; enum weapon_type { W_FIST, W_DAGGER, W_1HSWORD, W_2HSWORD, W_1HSPEAR, W_2HSPEAR, W_1HAXE, W_2HAXE, W_MACE, W_2HMACE, W_STAFF, W_BOW, W_KNUCKLE, W_MUSICAL, W_WHIP, W_BOOK, W_KATAR, W_REVOLVER, W_RIFLE, W_GATLING, W_SHOTGUN, W_GRENADE, W_HUUMA, W_2HSTAFF, MAX_SINGLE_WEAPON_TYPE, W_DOUBLE_DD, W_DOUBLE_SS, W_DOUBLE_AA, W_DOUBLE_DS, W_DOUBLE_DA, W_DOUBLE_SA, MAX_WEAPON_TYPE, }; enum ammo_type { A_ARROW = 1, A_DAGGER, A_BULLET, A_SHELL, A_GRENADE, A_SHURIKEN, A_KUNAI, A_CANNONBALL, A_THROWWEAPON, }; enum e_char_server_type { CST_NORMAL = 0, CST_MAINTENANCE = 1, CST_OVER18 = 2, CST_PAYING = 3, CST_F2P = 4, }; enum e_pc_reg_loading { PRL_NONE = 0x0, PRL_CHAR = 0x1, PRL_ACCL = 0x2, PRL_ACCG = 0x4, PRL_ALL = 0xFF, }; enum zh_char_ask_name_type { CHAR_ASK_NAME_BLOCK = 1, CHAR_ASK_NAME_BAN = 2, CHAR_ASK_NAME_UNBLOCK = 3, CHAR_ASK_NAME_UNBAN = 4, CHAR_ASK_NAME_CHANGESEX = 5, CHAR_ASK_NAME_CHARBAN = 6, CHAR_ASK_NAME_CHARUNBAN = 7, CHAR_ASK_NAME_CHANGECHARSEX = 8, }; enum hz_char_ask_name_answer { CHAR_ASK_NAME_ANS_DONE = 0, CHAR_ASK_NAME_ANS_NOTFOUND = 1, CHAR_ASK_NAME_ANS_GMLOW = 2, CHAR_ASK_NAME_ANS_OFFLINE = 3, }; # 28 "../../../server-code/src/login/login.h" 2 struct mmo_account; struct AccountDB; enum E_LOGINSERVER_ST { LOGINSERVER_ST_RUNNING = CORE_ST_LAST, LOGINSERVER_ST_SHUTDOWN, LOGINSERVER_ST_LAST }; enum password_enc { PWENC_NONE = 0x0, PWENC_ENCRYPT = 0x1, PWENC_ENCRYPT2 = 0x2, PWENC_BOTH = PWENC_ENCRYPT|PWENC_ENCRYPT2, }; struct login_session_data { int account_id; int login_id1; int login_id2; char sex; char userid[(23 + 1)]; char passwd[(32+1)]; int passwdenc; char md5key[20]; uint16 md5keylen; char lastlogin[24]; uint8 group_id; uint8 clienttype; uint32 version; uint8 client_hash[16]; int has_client_hash; int fd; time_t expiration_time; }; struct mmo_char_server { char name[20]; int fd; uint32 ip; uint16 port; uint16 users; uint16 type; uint16 new_; }; struct client_hash_node { int group_id; uint8 hash[16]; struct client_hash_node *next; }; struct Login_Config { uint32 login_ip; uint16 login_port; unsigned int ipban_cleanup_interval; unsigned int ip_sync_interval; # 98 "../../../server-code/src/login/login.h" 3 4 _Bool # 98 "../../../server-code/src/login/login.h" log_login; char date_format[32]; # 100 "../../../server-code/src/login/login.h" 3 4 _Bool # 100 "../../../server-code/src/login/login.h" new_account_flag,new_acc_length_limit; int start_limited_time; # 102 "../../../server-code/src/login/login.h" 3 4 _Bool # 102 "../../../server-code/src/login/login.h" use_md5_passwds; int group_id_to_connect; int min_group_id_to_connect; # 105 "../../../server-code/src/login/login.h" 3 4 _Bool # 105 "../../../server-code/src/login/login.h" check_client_version; uint32 client_version_to_connect; int allowed_regs; int time_allowed; # 110 "../../../server-code/src/login/login.h" 3 4 _Bool # 110 "../../../server-code/src/login/login.h" ipban; # 111 "../../../server-code/src/login/login.h" 3 4 _Bool # 111 "../../../server-code/src/login/login.h" dynamic_pass_failure_ban; unsigned int dynamic_pass_failure_ban_interval; unsigned int dynamic_pass_failure_ban_limit; unsigned int dynamic_pass_failure_ban_duration; # 115 "../../../server-code/src/login/login.h" 3 4 _Bool # 115 "../../../server-code/src/login/login.h" use_dnsbl; char dnsbl_servs[1024]; int client_hash_check; struct client_hash_node *client_hash_nodes; }; struct login_auth_node { int account_id; uint32 login_id1; uint32 login_id2; uint32 ip; char sex; uint32 version; uint8 clienttype; int group_id; time_t expiration_time; }; struct online_login_data { int account_id; int waiting_disconnect; int char_server; }; # 151 "../../../server-code/src/login/login.h" struct login_interface { struct DBMap *auth_db; struct DBMap *online_db; int fd; struct Login_Config *config; struct AccountDB* accounts; int (*mmo_auth) (struct login_session_data* sd, # 158 "../../../server-code/src/login/login.h" 3 4 _Bool # 158 "../../../server-code/src/login/login.h" isServer); int (*mmo_auth_new) (const char* userid, const char* pass, const char sex, const char* last_ip); int (*waiting_disconnect_timer) (int tid, int64 tick, int id, intptr_t data); struct DBData (*create_online_user) (union DBKey key, va_list args); struct online_login_data* (*add_online_user) (int char_server, int account_id); void (*remove_online_user) (int account_id); int (*online_db_setoffline) (union DBKey key, struct DBData *data, va_list ap); int (*online_data_cleanup_sub) (union DBKey key, struct DBData *data, va_list ap); int (*online_data_cleanup) (int tid, int64 tick, int id, intptr_t data); int (*sync_ip_addresses) (int tid, int64 tick, int id, intptr_t data); # 168 "../../../server-code/src/login/login.h" 3 4 _Bool # 168 "../../../server-code/src/login/login.h" (*check_encrypted) (const char* str1, const char* str2, const char* passwd); # 169 "../../../server-code/src/login/login.h" 3 4 _Bool # 169 "../../../server-code/src/login/login.h" (*check_password) (const char* md5key, int passwdenc, const char* passwd, const char* refpass); uint32 (*lan_subnet_check) (uint32 ip); void (*fromchar_accinfo) (int fd, int account_id, int u_fd, int u_aid, int u_group, int map_fd, struct mmo_account *acc); void (*fromchar_account) (int fd, int account_id, struct mmo_account *acc); void (*fromchar_account_update_other) (int account_id, unsigned int state); void (*fromchar_auth_ack) (int fd, int account_id, uint32 login_id1, uint32 login_id2, uint8 sex, int request_id, struct login_auth_node* node); void (*fromchar_ban) (int account_id, time_t timestamp); void (*fromchar_change_sex_other) (int account_id, char sex); void (*fromchar_pong) (int fd); void (*fromchar_parse_auth) (int fd, int id, const char *ip); void (*fromchar_parse_update_users) (int fd, int id); void (*fromchar_parse_request_change_email) (int fd, int id, const char *ip); void (*fromchar_parse_account_data) (int fd, int id, const char *ip); void (*fromchar_parse_ping) (int fd); void (*fromchar_parse_change_email) (int fd, int id, const char *ip); void (*fromchar_parse_account_update) (int fd, int id, const char *ip); void (*fromchar_parse_ban) (int fd, int id, const char *ip); void (*fromchar_parse_change_sex) (int fd, int id, const char *ip); void (*fromchar_parse_account_reg2) (int fd, int id, const char *ip); void (*fromchar_parse_unban) (int fd, int id, const char *ip); void (*fromchar_parse_account_online) (int fd, int id); void (*fromchar_parse_account_offline) (int fd); void (*fromchar_parse_online_accounts) (int fd, int id); void (*fromchar_parse_request_account_reg2) (int fd); void (*fromchar_parse_update_wan_ip) (int fd, int id); void (*fromchar_parse_all_offline) (int fd, int id); void (*fromchar_parse_change_pincode) (int fd); # 196 "../../../server-code/src/login/login.h" 3 4 _Bool # 196 "../../../server-code/src/login/login.h" (*fromchar_parse_wrong_pincode) (int fd); void (*fromchar_parse_accinfo) (int fd); int (*parse_fromchar) (int fd); void (*connection_problem) (int fd, uint8 status); void (*kick) (struct login_session_data* sd); void (*auth_ok) (struct login_session_data* sd); void (*auth_failed) (struct login_session_data* sd, int result); void (*login_error) (int fd, uint8 status); void (*parse_ping) (int fd, struct login_session_data* sd); void (*parse_client_md5) (int fd, struct login_session_data* sd); # 206 "../../../server-code/src/login/login.h" 3 4 _Bool # 206 "../../../server-code/src/login/login.h" (*parse_client_login) (int fd, struct login_session_data* sd, const char *ip); void (*send_coding_key) (int fd, struct login_session_data* sd); void (*parse_request_coding_key) (int fd, struct login_session_data* sd); void (*char_server_connection_status) (int fd, struct login_session_data* sd, uint8 status); void (*parse_request_connection) (int fd, struct login_session_data* sd, const char *ip, uint32 ipl); int (*parse_login) (int fd); void (*config_set_defaults) (void); int (*config_read) (const char *cfgName); char *LOGIN_CONF_NAME; char *NET_CONF_NAME; }; extern struct mmo_char_server server[30]; void login_defaults(void); extern struct login_interface *login; # 24 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/login/HPMlogin.h" 1 # 28 "../../../server-code/src/login/HPMlogin.h" # 1 "../../../server-code/src/common/HPM.h" 1 # 29 "../../../server-code/src/common/HPM.h" # 1 "../../../server-code/src/common/HPMi.h" 1 # 24 "../../../server-code/src/common/HPMi.h" # 1 "../../../server-code/src/common/console.h" 1 # 25 "../../../server-code/src/common/console.h" # 1 "../../../server-code/src/common/mutex.h" 1 # 26 "../../../server-code/src/common/mutex.h" typedef struct ramutex ramutex; typedef struct racond racond; ramutex *ramutex_create(void); void ramutex_destroy(ramutex *m); void ramutex_lock(ramutex *m); # 58 "../../../server-code/src/common/mutex.h" # 58 "../../../server-code/src/common/mutex.h" 3 4 _Bool # 58 "../../../server-code/src/common/mutex.h" ramutex_trylock(ramutex *m); void ramutex_unlock(ramutex *m); racond *racond_create(void); void racond_destroy(racond *c); # 89 "../../../server-code/src/common/mutex.h" void racond_wait(racond *c, ramutex *m, sysint timeout_ticks); # 99 "../../../server-code/src/common/mutex.h" void racond_signal(racond *c); # 108 "../../../server-code/src/common/mutex.h" void racond_broadcast(racond *c); # 26 "../../../server-code/src/common/console.h" 2 # 1 "../../../server-code/src/common/spinlock.h" 1 # 31 "../../../server-code/src/common/spinlock.h" # 1 "../../../server-code/src/common/atomic.h" 1 # 110 "../../../server-code/src/common/atomic.h" static __attribute__((always_inline)) inline int64 InterlockedExchangeAdd64(volatile int64 *addend, int64 increment){ return __sync_fetch_and_add(addend, increment); } static __attribute__((always_inline)) inline int32 InterlockedExchangeAdd(volatile int32 *addend, int32 increment){ return __sync_fetch_and_add(addend, increment); } static __attribute__((always_inline)) inline int64 InterlockedIncrement64(volatile int64 *addend){ return __sync_add_and_fetch(addend, 1); } static __attribute__((always_inline)) inline int32 InterlockedIncrement(volatile int32 *addend){ return __sync_add_and_fetch(addend, 1); } static __attribute__((always_inline)) inline int64 InterlockedDecrement64(volatile int64 *addend){ return __sync_sub_and_fetch(addend, 1); } static __attribute__((always_inline)) inline int32 InterlockedDecrement(volatile int32 *addend){ return __sync_sub_and_fetch(addend, 1); } static __attribute__((always_inline)) inline int64 InterlockedCompareExchange64(volatile int64 *dest, int64 exch, int64 cmp){ return __sync_val_compare_and_swap(dest, cmp, exch); } static __attribute__((always_inline)) inline int32 InterlockedCompareExchange(volatile int32 *dest, int32 exch, int32 cmp){ return __sync_val_compare_and_swap(dest, cmp, exch); } static __attribute__((always_inline)) inline int64 InterlockedExchange64(volatile int64 *target, int64 val){ return __sync_lock_test_and_set(target, val); } static __attribute__((always_inline)) inline int32 InterlockedExchange(volatile int32 *target, int32 val){ return __sync_lock_test_and_set(target, val); } # 32 "../../../server-code/src/common/spinlock.h" 2 # 1 "../../../server-code/src/common/thread.h" 1 # 26 "../../../server-code/src/common/thread.h" typedef struct rAthread rAthread; typedef void* (*rAthreadProc)(void*); typedef enum RATHREAD_PRIO { RAT_PRIO_LOW = 0, RAT_PRIO_NORMAL, RAT_PRIO_HIGH } RATHREAD_PRIO; # 45 "../../../server-code/src/common/thread.h" rAthread *rathread_create(rAthreadProc entryPoint, void *param); # 58 "../../../server-code/src/common/thread.h" rAthread *rathread_createEx(rAthreadProc entryPoint, void *param, size_t szStack, RATHREAD_PRIO prio); # 68 "../../../server-code/src/common/thread.h" void rathread_destroy(rAthread *handle); # 79 "../../../server-code/src/common/thread.h" rAthread *rathread_self(void); # 90 "../../../server-code/src/common/thread.h" int rathread_get_tid(void); # 101 "../../../server-code/src/common/thread.h" # 101 "../../../server-code/src/common/thread.h" 3 4 _Bool # 101 "../../../server-code/src/common/thread.h" rathread_wait(rAthread *handle, void **out_exitCode); # 110 "../../../server-code/src/common/thread.h" void rathread_prio_set(rAthread *handle, RATHREAD_PRIO prio); RATHREAD_PRIO rathread_prio_get(rAthread *handle); # 128 "../../../server-code/src/common/thread.h" void rathread_yield(void); void rathread_init(void); void rathread_final(void); # 34 "../../../server-code/src/common/spinlock.h" 2 # 47 "../../../server-code/src/common/spinlock.h" typedef struct SPIN_LOCK{ volatile int32 lock; volatile int32 nest; volatile int32 sync_lock; } __attribute__((aligned(64))) SPIN_LOCK; static __attribute__((always_inline)) inline void InitializeSpinLock(SPIN_LOCK *lck){ lck->lock = 0; lck->nest = 0; lck->sync_lock = 0; } static __attribute__((always_inline)) inline void FinalizeSpinLock(SPIN_LOCK *lck){ return; } static __attribute__((always_inline)) inline void EnterSpinLock(SPIN_LOCK *lck){ int tid = rathread_get_tid(); do { if(InterlockedCompareExchange((&lck->sync_lock), 1, 0) == 0) break; rathread_yield(); } while( 1); if(InterlockedCompareExchange(&lck->lock, tid, tid) == tid){ InterlockedIncrement(&lck->nest); do { InterlockedExchange((&lck->sync_lock), 0); } while(0); return; } do { InterlockedExchange((&lck->sync_lock), 0); } while(0); while(1){ if(InterlockedCompareExchange(&lck->lock, tid, 0) == 0){ InterlockedIncrement(&lck->nest); return; } rathread_yield(); } } static __attribute__((always_inline)) inline void LeaveSpinLock(SPIN_LOCK *lck){ int tid = rathread_get_tid(); do { if(InterlockedCompareExchange((&lck->sync_lock), 1, 0) == 0) break; rathread_yield(); } while( 1); if(InterlockedCompareExchange(&lck->lock, tid, tid) == tid){ if(InterlockedDecrement(&lck->nest) == 0) InterlockedExchange(&lck->lock, 0); } do { InterlockedExchange((&lck->sync_lock), 0); } while(0); } # 27 "../../../server-code/src/common/console.h" 2 struct Sql; # 41 "../../../server-code/src/common/console.h" typedef void (*CParseFunc)(char *line); # 56 "../../../server-code/src/common/console.h" enum CONSOLE_PARSE_ENTRY_TYPE { CPET_UNKNOWN, CPET_FUNCTION, CPET_CATEGORY, }; struct CParseEntry { char cmd[20]; int type; union { CParseFunc func; struct { int _max_; int _len_; struct CParseEntry * *_data_; } children; } u; }; struct console_input_interface { SPIN_LOCK ptlock; rAthread *pthread; volatile int32 ptstate; ramutex *ptmutex; racond *ptcond; struct { int _max_; int _len_; struct CParseEntry * *_data_; } command_list; struct { int _max_; int _len_; struct CParseEntry * *_data_; } commands; struct Sql *SQL; void (*parse_init) (void); void (*parse_final) (void); int (*parse_timer) (int tid, int64 tick, int id, intptr_t data); void *(*pthread_main) (void *x); void (*parse) (char* line); void (*parse_sub) (char* line); int (*key_pressed) (void); void (*load_defaults) (void); void (*parse_list_subs) (struct CParseEntry *cmd, unsigned char depth); void (*addCommand) (char *name, CParseFunc func); void (*setSQL) (struct Sql *SQL_handle); }; struct console_interface { void (*init) (void); void (*final) (void); void (*display_title) (void); void (*display_gplnotice) (void); struct console_input_interface *input; }; void console_defaults(void); extern struct console_interface *console; # 25 "../../../server-code/src/common/HPMi.h" 2 # 1 "../../../server-code/src/common/showmsg.h" 1 # 29 "../../../server-code/src/common/showmsg.h" struct config_setting_t; # 89 "../../../server-code/src/common/showmsg.h" enum msg_type { MSG_NONE, MSG_STATUS, MSG_SQL, MSG_INFORMATION, MSG_NOTICE, MSG_WARNING, MSG_DEBUG, MSG_ERROR, MSG_FATALERROR }; struct showmsg_interface { # 102 "../../../server-code/src/common/showmsg.h" 3 4 _Bool # 102 "../../../server-code/src/common/showmsg.h" stdout_with_ansisequence; int silent; int console_log; char timestamp_format[20]; void (*init) (void); void (*final) (void); void (*clearScreen) (void); int (*showMessageV) (const char *string, va_list ap); void (*showMessage) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showStatus) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showSQL) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showInfo) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showNotice) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showWarning) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showDebug) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showError) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showFatalError) (const char *, ...) __attribute__((format(printf, 1, 2))); void (*showConfigWarning) (struct config_setting_t *config, const char *string, ...) __attribute__((format(printf, 2, 3))); }; # 140 "../../../server-code/src/common/showmsg.h" void showmsg_defaults(void); extern struct showmsg_interface *showmsg; # 27 "../../../server-code/src/common/HPMi.h" 2 struct Sql; struct script_state; struct AtCommandInfo; struct socket_data; struct map_session_data; struct hplugin_data_store; struct hplugin_info { char* name; enum server_types type; char* version; char* req_version; }; struct s_HPMDataCheck { char *name; unsigned int size; int type; }; enum hp_event_types { HPET_INIT, HPET_FINAL, HPET_READY, HPET_POST_FINAL, HPET_PRE_INIT, HPET_MAX, }; enum HPluginPacketHookingPoints { hpClif_Parse, hpChrif_Parse, hpParse_FromMap, hpParse_FromLogin, hpParse_Char, hpParse_FromChar, hpParse_Login, hpPHP_MAX, }; enum HPluginHookType { HOOK_TYPE_PRE, HOOK_TYPE_POST, }; enum HPluginDataTypes { HPDT_UNKNOWN, HPDT_SESSION, HPDT_MSD, HPDT_NPCD, HPDT_MAP, HPDT_INSTANCE, HPDT_GUILD, HPDT_PARTY, HPDT_MOBDB, HPDT_MOBDATA, HPDT_ITEMDATA, HPDT_BGDATA, HPDT_AUTOTRADE_VEND, }; enum HPluginConfType { HPCT_BATTLE, HPCT_LOGIN, HPCT_CHAR, HPCT_CHAR_INTER, HPCT_MAP_INTER, HPCT_LOG, HPCT_SCRIPT, HPCT_MAX, }; # 220 "../../../server-code/src/common/HPMi.h" struct HPMi_interface { unsigned int pid; void (*event[HPET_MAX]) (void); # 225 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 225 "../../../server-code/src/common/HPMi.h" (*addCommand) (char *name, # 225 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 225 "../../../server-code/src/common/HPMi.h" (*func)(const int fd, struct map_session_data* sd, const char* command, const char* message,struct AtCommandInfo *info)); # 226 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 226 "../../../server-code/src/common/HPMi.h" (*addScript) (char *name, char *args, # 226 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 226 "../../../server-code/src/common/HPMi.h" (*func)(struct script_state *st), # 226 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 226 "../../../server-code/src/common/HPMi.h" isDeprecated); void (*addCPCommand) (char *name, CParseFunc func); void (*addToHPData) (enum HPluginDataTypes type, uint32 pluginID, struct hplugin_data_store **storeptr, void *data, uint32 classid, # 229 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 229 "../../../server-code/src/common/HPMi.h" autofree); void *(*getFromHPData) (enum HPluginDataTypes type, uint32 pluginID, struct hplugin_data_store *store, uint32 classid); void (*removeFromHPData) (enum HPluginDataTypes type, uint32 pluginID, struct hplugin_data_store *store, uint32 classid); # 233 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 233 "../../../server-code/src/common/HPMi.h" (*addPacket) (unsigned short cmd, unsigned short length, void (*receive)(int fd), unsigned int point, unsigned int pluginID); # 235 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 235 "../../../server-code/src/common/HPMi.h" (*AddHook) (enum HPluginHookType type, const char *target, void *hook, unsigned int pID); void (*HookStop) (const char *func, unsigned int pID); # 237 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 237 "../../../server-code/src/common/HPMi.h" (*HookStopped) (void); # 239 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 239 "../../../server-code/src/common/HPMi.h" (*addArg) (unsigned int pluginID, char *name, # 239 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 239 "../../../server-code/src/common/HPMi.h" has_param, CmdlineExecFunc func, const char *help); # 241 "../../../server-code/src/common/HPMi.h" 3 4 _Bool # 241 "../../../server-code/src/common/HPMi.h" (*addConf) (unsigned int pluginID, enum HPluginConfType type, char *name, void (*parse_func) (const char *key, const char *val), int (*return_func) (const char *key)); void (*addPCGPermission) (unsigned int pluginID, char *name, unsigned int *mask); struct Sql *sql_handle; }; # 30 "../../../server-code/src/common/HPM.h" 2 # 44 "../../../server-code/src/common/HPM.h" # 1 "/usr/include/dlfcn.h" 1 3 4 # 24 "/usr/include/dlfcn.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 25 "/usr/include/dlfcn.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/dlfcn.h" 1 3 4 # 28 "/usr/include/dlfcn.h" 2 3 4 # 52 "/usr/include/dlfcn.h" 3 4 # 56 "/usr/include/dlfcn.h" 3 4 extern void *dlopen (const char *__file, int __mode) __attribute__ ((__nothrow__)); extern int dlclose (void *__handle) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))); extern void *dlsym (void *__restrict __handle, const char *__restrict __name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); # 82 "/usr/include/dlfcn.h" 3 4 extern char *dlerror (void) __attribute__ ((__nothrow__ , __leaf__)); # 188 "/usr/include/dlfcn.h" 3 4 # 45 "../../../server-code/src/common/HPM.h" 2 # 64 "../../../server-code/src/common/HPM.h" # 1 "/usr/include/string.h" 1 3 4 # 27 "/usr/include/string.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 33 "/usr/include/string.h" 2 3 4 extern void *memcpy (void *__restrict __dest, const void *__restrict __src, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern void *memmove (void *__dest, const void *__src, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern void *memccpy (void *__restrict __dest, const void *__restrict __src, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int memcmp (const void *__s1, const void *__s2, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); # 92 "/usr/include/string.h" 3 4 extern void *memchr (const void *__s, int __c, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); # 123 "/usr/include/string.h" 3 4 extern char *strcpy (char *__restrict __dest, const char *__restrict __src) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern char *strncpy (char *__restrict __dest, const char *__restrict __src, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern char *strcat (char *__restrict __dest, const char *__restrict __src) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern char *strncat (char *__restrict __dest, const char *__restrict __src, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int strcmp (const char *__s1, const char *__s2) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); extern int strncmp (const char *__s1, const char *__s2, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); extern int strcoll (const char *__s1, const char *__s2) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); extern size_t strxfrm (char *__restrict __dest, const char *__restrict __src, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); # 162 "/usr/include/string.h" 3 4 extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3))); extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))); extern char *strdup (const char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); extern char *strndup (const char *__string, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1))); # 206 "/usr/include/string.h" 3 4 # 231 "/usr/include/string.h" 3 4 extern char *strchr (const char *__s, int __c) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); # 258 "/usr/include/string.h" 3 4 extern char *strrchr (const char *__s, int __c) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); # 277 "/usr/include/string.h" 3 4 extern size_t strcspn (const char *__s, const char *__reject) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); extern size_t strspn (const char *__s, const char *__accept) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); # 310 "/usr/include/string.h" 3 4 extern char *strpbrk (const char *__s, const char *__accept) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); # 337 "/usr/include/string.h" 3 4 extern char *strstr (const char *__haystack, const char *__needle) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); extern char *strtok (char *__restrict __s, const char *__restrict __delim) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); extern char *__strtok_r (char *__restrict __s, const char *__restrict __delim, char **__restrict __save_ptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))); extern char *strtok_r (char *__restrict __s, const char *__restrict __delim, char **__restrict __save_ptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))); # 392 "/usr/include/string.h" 3 4 extern size_t strlen (const char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); extern size_t strnlen (const char *__string, size_t __maxlen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); extern char *strerror (int __errnum) __attribute__ ((__nothrow__ , __leaf__)); # 422 "/usr/include/string.h" 3 4 extern int strerror_r (int __errnum, char *__buf, size_t __buflen) __asm__ ("" "__xpg_strerror_r") __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); # 440 "/usr/include/string.h" 3 4 extern char *strerror_l (int __errnum, __locale_t __l) __attribute__ ((__nothrow__ , __leaf__)); extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern void bcopy (const void *__src, void *__dest, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int bcmp (const void *__s1, const void *__s2, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); # 484 "/usr/include/string.h" 3 4 extern char *index (const char *__s, int __c) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); # 512 "/usr/include/string.h" 3 4 extern char *rindex (const char *__s, int __c) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))); extern int ffs (int __i) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); # 529 "/usr/include/string.h" 3 4 extern int strcasecmp (const char *__s1, const char *__s2) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); extern int strncasecmp (const char *__s1, const char *__s2, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2))); # 552 "/usr/include/string.h" 3 4 extern char *strsep (char **__restrict __stringp, const char *__restrict __delim) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern char *strsignal (int __sig) __attribute__ ((__nothrow__ , __leaf__)); extern char *__stpcpy (char *__restrict __dest, const char *__restrict __src) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern char *stpcpy (char *__restrict __dest, const char *__restrict __src) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern char *__stpncpy (char *__restrict __dest, const char *__restrict __src, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern char *stpncpy (char *__restrict __dest, const char *__restrict __src, size_t __n) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); # 639 "/usr/include/string.h" 3 4 # 65 "../../../server-code/src/common/HPM.h" 2 # 68 "../../../server-code/src/common/HPM.h" struct hplugin { void * dll; unsigned int idx; char *filename; struct hplugin_info *info; struct HPMi_interface *hpi; }; struct hpm_symbol { const char *name; void *ptr; }; struct hplugin_data_entry { uint32 pluginID; uint32 classid; struct { unsigned int free : 1; } flag; void *data; }; struct hplugin_data_store { enum HPluginDataTypes type; struct { int _max_; int _len_; struct hplugin_data_entry * *_data_; } entries; }; struct HPluginPacket { unsigned int pluginID; unsigned short cmd; short len; void (*receive) (int fd); }; struct HPMFileNameCache { const char *addr; char *name; }; struct HPConfListenStorage { unsigned int pluginID; char key[40]; void (*parse_func) (const char *key, const char *val); int (*return_func) (const char *key); }; struct HPM_interface { unsigned int version[2]; # 128 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 128 "../../../server-code/src/common/HPM.h" off; # 129 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 129 "../../../server-code/src/common/HPM.h" hooking; # 131 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 131 "../../../server-code/src/common/HPM.h" force_return; struct { int _max_; int _len_; struct hplugin * *_data_; } plugins; struct { int _max_; int _len_; struct hpm_symbol * *_data_; } symbols; struct { int _max_; int _len_; struct HPluginPacket *_data_; } packets[hpPHP_MAX]; struct { int count; struct HPMFileNameCache *data; } filenames; struct { int _max_; int _len_; struct HPConfListenStorage *_data_; } config_listeners[HPCT_MAX]; struct { int _max_; int _len_; char * *_data_; } cmdline_load_plugins; void (*init) (void); void (*final) (void); struct hplugin * (*create) (void); struct hplugin * (*load) (const char* filename); void (*unload) (struct hplugin* plugin); # 153 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 153 "../../../server-code/src/common/HPM.h" (*exists) (const char *filename); # 154 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 154 "../../../server-code/src/common/HPM.h" (*iscompatible) (char* version); void (*event) (enum hp_event_types type); void *(*import_symbol) (char *name, unsigned int pID); void (*share) (void *value, const char *name); void (*config_read) (void); char *(*pid2name) (unsigned int pid); unsigned char (*parse_packets) (int fd, int packet_id, enum HPluginPacketHookingPoints point); void (*load_sub) (struct hplugin *plugin); # 162 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 162 "../../../server-code/src/common/HPM.h" (*addhook_sub) (enum HPluginHookType type, const char *target, void *hook, unsigned int pID); # 164 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 164 "../../../server-code/src/common/HPM.h" (*parseConf) (const char *w1, const char *w2, enum HPluginConfType point); # 165 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 165 "../../../server-code/src/common/HPM.h" (*getBattleConf) (const char* w1, int *value); # 167 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 167 "../../../server-code/src/common/HPM.h" (*DataCheck) (struct s_HPMDataCheck *src, unsigned int size, int version, char *name); void (*datacheck_init) (const struct s_HPMDataCheck *src, unsigned int length, int version); void (*datacheck_final) (void); void (*data_store_create) (struct hplugin_data_store **storeptr, enum HPluginDataTypes type); void (*data_store_destroy) (struct hplugin_data_store **storeptr); # 173 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 173 "../../../server-code/src/common/HPM.h" (*data_store_validate) (enum HPluginDataTypes type, struct hplugin_data_store **storeptr, # 173 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 173 "../../../server-code/src/common/HPM.h" initialize); # 175 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 175 "../../../server-code/src/common/HPM.h" (*data_store_validate_sub) (enum HPluginDataTypes type, struct hplugin_data_store **storeptr, # 175 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 175 "../../../server-code/src/common/HPM.h" initialize); }; # 178 "../../../server-code/src/common/HPM.h" 3 4 _Bool # 178 "../../../server-code/src/common/HPM.h" cmdline_arg_loadplugin (const char *name, const char *params); extern struct HPM_interface *HPM; void hpm_defaults(void); # 29 "../../../server-code/src/login/HPMlogin.h" 2 struct hplugin; # 32 "../../../server-code/src/login/HPMlogin.h" 3 4 _Bool # 32 "../../../server-code/src/login/HPMlogin.h" HPM_login_data_store_validate(enum HPluginDataTypes type, struct hplugin_data_store **storeptr, # 32 "../../../server-code/src/login/HPMlogin.h" 3 4 _Bool # 32 "../../../server-code/src/login/HPMlogin.h" initialize); void HPM_login_plugin_load_sub(struct hplugin *plugin); void HPM_login_do_final(void); void HPM_login_do_init(void); # 26 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/login/account.h" 1 # 28 "../../../server-code/src/login/account.h" struct Sql; typedef struct AccountDB AccountDB; typedef struct AccountDBIterator AccountDBIterator; AccountDB* account_db_sql(void); struct mmo_account { int account_id; char userid[(23 + 1)]; char pass[32+1]; char sex; char email[40]; int group_id; uint8 char_slots; unsigned int state; time_t unban_time; time_t expiration_time; unsigned int logincount; unsigned int pincode_change; char pincode[4+1]; char lastlogin[24]; char last_ip[16]; char birthdate[10+1]; }; struct AccountDBIterator { void (*destroy)(AccountDBIterator* self); # 72 "../../../server-code/src/login/account.h" 3 4 _Bool # 72 "../../../server-code/src/login/account.h" (*next)(AccountDBIterator* self, struct mmo_account* acc); }; struct Account_engine { AccountDB* (*constructor)(void); AccountDB* db; }; struct AccountDB { # 87 "../../../server-code/src/login/account.h" 3 4 _Bool # 87 "../../../server-code/src/login/account.h" (*init)(AccountDB* self); void (*destroy)(AccountDB* self); # 105 "../../../server-code/src/login/account.h" # 105 "../../../server-code/src/login/account.h" 3 4 _Bool # 105 "../../../server-code/src/login/account.h" (*get_property)(AccountDB* self, const char* key, char* buf, size_t buflen); # 113 "../../../server-code/src/login/account.h" 3 4 _Bool # 113 "../../../server-code/src/login/account.h" (*set_property)(AccountDB* self, const char* key, const char* value); # 122 "../../../server-code/src/login/account.h" # 122 "../../../server-code/src/login/account.h" 3 4 _Bool # 122 "../../../server-code/src/login/account.h" (*create)(AccountDB* self, struct mmo_account* acc); # 129 "../../../server-code/src/login/account.h" 3 4 _Bool # 129 "../../../server-code/src/login/account.h" (*remove)(AccountDB* self, const int account_id); # 137 "../../../server-code/src/login/account.h" 3 4 _Bool # 137 "../../../server-code/src/login/account.h" (*save)(AccountDB* self, const struct mmo_account* acc); # 145 "../../../server-code/src/login/account.h" 3 4 _Bool # 145 "../../../server-code/src/login/account.h" (*load_num)(AccountDB* self, struct mmo_account* acc, const int account_id); # 153 "../../../server-code/src/login/account.h" 3 4 _Bool # 153 "../../../server-code/src/login/account.h" (*load_str)(AccountDB* self, struct mmo_account* acc, const char* userid); AccountDBIterator* (*iterator)(AccountDB* self); }; struct Sql *account_db_sql_up(AccountDB* self); void mmo_send_accreg2(AccountDB* self, int fd, int account_id, int char_id); void mmo_save_accreg2(AccountDB* self, int fd, int account_id, int char_id); # 27 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/login/ipban.h" 1 # 29 "../../../server-code/src/login/ipban.h" void ipban_init(void); void ipban_final(void); # 35 "../../../server-code/src/login/ipban.h" 3 4 _Bool # 35 "../../../server-code/src/login/ipban.h" ipban_check(uint32 ip); void ipban_log(uint32 ip); # 41 "../../../server-code/src/login/ipban.h" 3 4 _Bool # 41 "../../../server-code/src/login/ipban.h" ipban_config_read(const char *key, const char* value); # 28 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/login/loginlog.h" 1 # 28 "../../../server-code/src/login/loginlog.h" unsigned long loginlog_failedattempts(uint32 ip, unsigned int minutes); void login_log(uint32 ip, const char* username, int rcode, const char* message); # 30 "../../../server-code/src/login/loginlog.h" 3 4 _Bool # 30 "../../../server-code/src/login/loginlog.h" loginlog_init(void); # 31 "../../../server-code/src/login/loginlog.h" 3 4 _Bool # 31 "../../../server-code/src/login/loginlog.h" loginlog_final(void); # 32 "../../../server-code/src/login/loginlog.h" 3 4 _Bool # 32 "../../../server-code/src/login/loginlog.h" loginlog_config_read(const char* w1, const char* w2); # 29 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/memmgr.h" 1 # 80 "../../../server-code/src/common/memmgr.h" struct malloc_interface { void (*init) (void); void (*final) (void); void* (*malloc)(size_t size, const char *file, int line, const char *func); void* (*calloc)(size_t num, size_t size, const char *file, int line, const char *func); void* (*realloc)(void *p, size_t size, const char *file, int line, const char *func); void* (*reallocz)(void *p, size_t size, const char *file, int line, const char *func); char* (*astrdup)(const char *p, const char *file, int line, const char *func); char *(*astrndup)(const char *p, size_t size, const char *file, int line, const char *func); void (*free)(void *p, const char *file, int line, const char *func); void (*memory_check)(void); # 93 "../../../server-code/src/common/memmgr.h" 3 4 _Bool # 93 "../../../server-code/src/common/memmgr.h" (*verify_ptr)(void* ptr); size_t (*usage) (void); void (*post_shutdown) (void); void (*init_messages) (void); }; void malloc_defaults(void); void memmgr_report(int extra); extern struct malloc_interface *iMalloc; # 34 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/md5calc.h" 1 # 25 "../../../server-code/src/common/md5calc.h" void MD5_String(const char * string, char * output); void MD5_Binary(const char * string, unsigned char * output); void MD5_Salt(unsigned int len, char * output); # 35 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/nullpo.h" 1 # 40 "../../../server-code/src/common/nullpo.h" # 1 "/usr/include/assert.h" 1 3 4 # 66 "/usr/include/assert.h" 3 4 # 69 "/usr/include/assert.h" 3 4 extern void __assert_fail (const char *__assertion, const char *__file, unsigned int __line, const char *__function) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); extern void __assert_perror_fail (int __errnum, const char *__file, unsigned int __line, const char *__function) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); extern void __assert (const char *__assertion, const char *__file, int __line) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); # 41 "../../../server-code/src/common/nullpo.h" 2 # 155 "../../../server-code/src/common/nullpo.h" # 155 "../../../server-code/src/common/nullpo.h" struct nullpo_interface { void (*assert_report) (const char *file, int line, const char *func, const char *targetname, const char *title); }; void nullpo_defaults(void); extern struct nullpo_interface *nullpo; # 36 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/random.h" 1 # 27 "../../../server-code/src/common/random.h" void rnd_init(void); void rnd_seed(uint32); int32 rnd(void); uint32 rnd_roll(uint32 dice_faces); int32 rnd_value(int32 min, int32 max); double rnd_uniform(void); double rnd_uniform53(void); # 37 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/socket.h" 1 # 39 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/strlib.h" 1 # 54 "../../../server-code/src/common/strlib.h" typedef enum e_svopt { SV_NOESCAPE_NOTERMINATE = 0, SV_ESCAPE_C = 1, SV_TERMINATE_LF = 2, SV_TERMINATE_CRLF = 4, SV_TERMINATE_CR = 8, SV_KEEP_TERMINATOR = 16 } e_svopt; struct s_svstate { const char* str; int len; int off; int start; int end; enum e_svopt opt; char delim; # 80 "../../../server-code/src/common/strlib.h" 3 4 _Bool # 80 "../../../server-code/src/common/strlib.h" done; }; struct StringBuf { char *buf_; char *ptr_; unsigned int max_; }; typedef struct StringBuf StringBuf; struct strlib_interface { char *(*jstrescape) (char* pt); char *(*jstrescapecpy) (char* pt, const char* spt); int (*jmemescapecpy) (char* pt, const char* spt, int size); int (*remove_control_chars_) (char* str); char *(*trim_) (char* str); char *(*normalize_name_) (char* str,const char* delims); const char *(*stristr_) (const char *haystack, const char *needle); size_t (*strnlen_) (const char* string, size_t maxlen); char * (*strtok_r_) (char *s1, const char *s2, char **lasts); int (*e_mail_check_) (char* email); int (*config_switch_) (const char* str); char *(*safestrncpy_) (char* dst, const char* src, size_t n); size_t (*safestrnlen_) (const char* string, size_t maxlen); int (*safesnprintf_) (char *buf, size_t sz, const char *fmt, ...) __attribute__((format(printf, 3, 4))); int (*strline_) (const char* str, size_t pos); # 128 "../../../server-code/src/common/strlib.h" 3 4 _Bool # 128 "../../../server-code/src/common/strlib.h" (*bin2hex_) (char* output, unsigned char* input, size_t count); }; struct stringbuf_interface { StringBuf* (*Malloc) (void); void (*Init) (StringBuf* self); int (*Printf) (StringBuf *self, const char *fmt, ...) __attribute__((format(printf, 2, 3))); int (*Vprintf) (StringBuf* self, const char* fmt, va_list args); int (*Append) (StringBuf* self, const StringBuf *sbuf); int (*AppendStr) (StringBuf* self, const char* str); int (*Length) (StringBuf* self); char* (*Value) (StringBuf* self); void (*Clear) (StringBuf* self); void (*Destroy) (StringBuf* self); void (*Free) (StringBuf* self); }; struct sv_interface { int (*parse_next) (struct s_svstate* svstate); int (*parse) (const char* str, int len, int startoff, char delim, int* out_pos, int npos, enum e_svopt opt); int (*split) (char* str, int len, int startoff, char delim, char** out_fields, int nfields, enum e_svopt opt); size_t (*escape_c) (char* out_dest, const char* src, size_t len, const char* escapes); size_t (*unescape_c) (char* out_dest, const char* src, size_t len); const char* (*skip_escaped_c) (const char* p); # 184 "../../../server-code/src/common/strlib.h" 3 4 _Bool # 184 "../../../server-code/src/common/strlib.h" (*readdb) (const char* directory, const char* filename, char delim, int mincols, int maxcols, int maxrows, # 184 "../../../server-code/src/common/strlib.h" 3 4 _Bool # 184 "../../../server-code/src/common/strlib.h" (*parseproc)(char* fields[], int columns, int current)); }; void strlib_defaults(void); extern struct strlib_interface *strlib; extern struct stringbuf_interface *StrBuf; extern struct sv_interface *sv; # 40 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/timer.h" 1 # 32 "../../../server-code/src/common/timer.h" enum { TIMER_ONCE_AUTODEL = 0x01, TIMER_INTERVAL = 0x02, TIMER_REMOVE_HEAP = 0x10, }; typedef int (*TimerFunc)(int tid, int64 tick, int id, intptr_t data); struct TimerData { int64 tick; TimerFunc func; unsigned char type; int interval; int id; intptr_t data; }; struct timer_interface { int64 (*gettick) (void); int64 (*gettick_nocache) (void); int (*add) (int64 tick, TimerFunc func, int id, intptr_t data); int (*add_interval) (int64 tick, TimerFunc func, int id, intptr_t data, int interval); const struct TimerData *(*get) (int tid); int (*delete) (int tid, TimerFunc func); int64 (*addtick) (int tid, int64 tick); int64 (*settick) (int tid, int64 tick); int (*add_func_list) (TimerFunc func, char* name); unsigned long (*get_uptime) (void); int (*perform) (int64 tick); void (*init) (void); void (*final) (void); }; void timer_defaults(void); extern struct timer_interface *timer; # 41 "../../../server-code/src/login/login.c" 2 # 1 "../../../server-code/src/common/utils.h" 1 # 26 "../../../server-code/src/common/utils.h" # 1 "/usr/include/stdio.h" 1 3 4 # 29 "/usr/include/stdio.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 34 "/usr/include/stdio.h" 2 3 4 # 44 "/usr/include/stdio.h" 3 4 # 44 "/usr/include/stdio.h" 3 4 struct _IO_FILE; typedef struct _IO_FILE FILE; # 64 "/usr/include/stdio.h" 3 4 typedef struct _IO_FILE __FILE; # 74 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/libio.h" 1 3 4 # 31 "/usr/include/libio.h" 3 4 # 1 "/usr/include/_G_config.h" 1 3 4 # 15 "/usr/include/_G_config.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 16 "/usr/include/_G_config.h" 2 3 4 # 1 "/usr/include/wchar.h" 1 3 4 # 82 "/usr/include/wchar.h" 3 4 typedef struct { int __count; union { unsigned int __wch; char __wchb[4]; } __value; } __mbstate_t; # 21 "/usr/include/_G_config.h" 2 3 4 typedef struct { __off_t __pos; __mbstate_t __state; } _G_fpos_t; typedef struct { __off64_t __pos; __mbstate_t __state; } _G_fpos64_t; # 32 "/usr/include/libio.h" 2 3 4 # 144 "/usr/include/libio.h" 3 4 struct _IO_jump_t; struct _IO_FILE; typedef void _IO_lock_t; struct _IO_marker { struct _IO_marker *_next; struct _IO_FILE *_sbuf; int _pos; # 173 "/usr/include/libio.h" 3 4 }; enum __codecvt_result { __codecvt_ok, __codecvt_partial, __codecvt_error, __codecvt_noconv }; # 241 "/usr/include/libio.h" 3 4 struct _IO_FILE { int _flags; char* _IO_read_ptr; char* _IO_read_end; char* _IO_read_base; char* _IO_write_base; char* _IO_write_ptr; char* _IO_write_end; char* _IO_buf_base; char* _IO_buf_end; char *_IO_save_base; char *_IO_backup_base; char *_IO_save_end; struct _IO_marker *_markers; struct _IO_FILE *_chain; int _fileno; int _flags2; __off_t _old_offset; unsigned short _cur_column; signed char _vtable_offset; char _shortbuf[1]; _IO_lock_t *_lock; # 289 "/usr/include/libio.h" 3 4 __off64_t _offset; # 298 "/usr/include/libio.h" 3 4 void *__pad1; void *__pad2; void *__pad3; void *__pad4; size_t __pad5; int _mode; char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)]; }; typedef struct _IO_FILE _IO_FILE; struct _IO_FILE_plus; extern struct _IO_FILE_plus _IO_2_1_stdin_; extern struct _IO_FILE_plus _IO_2_1_stdout_; extern struct _IO_FILE_plus _IO_2_1_stderr_; # 334 "/usr/include/libio.h" 3 4 typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes); typedef __ssize_t __io_write_fn (void *__cookie, const char *__buf, size_t __n); typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w); typedef int __io_close_fn (void *__cookie); # 386 "/usr/include/libio.h" 3 4 extern int __underflow (_IO_FILE *); extern int __uflow (_IO_FILE *); extern int __overflow (_IO_FILE *, int); # 430 "/usr/include/libio.h" 3 4 extern int _IO_getc (_IO_FILE *__fp); extern int _IO_putc (int __c, _IO_FILE *__fp); extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__ , __leaf__)); extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__ , __leaf__)); extern int _IO_peekc_locked (_IO_FILE *__fp); extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__)); extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__)); extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__)); # 460 "/usr/include/libio.h" 3 4 extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict, __gnuc_va_list, int *__restrict); extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict, __gnuc_va_list); extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t); extern size_t _IO_sgetn (_IO_FILE *, void *, size_t); extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int); extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int); extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__ , __leaf__)); # 75 "/usr/include/stdio.h" 2 3 4 # 90 "/usr/include/stdio.h" 3 4 typedef __off_t off_t; # 102 "/usr/include/stdio.h" 3 4 typedef __ssize_t ssize_t; typedef _G_fpos_t fpos_t; # 164 "/usr/include/stdio.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/stdio_lim.h" 1 3 4 # 165 "/usr/include/stdio.h" 2 3 4 extern struct _IO_FILE *stdin; extern struct _IO_FILE *stdout; extern struct _IO_FILE *stderr; extern int remove (const char *__filename) __attribute__ ((__nothrow__ , __leaf__)); extern int rename (const char *__old, const char *__new) __attribute__ ((__nothrow__ , __leaf__)); extern int renameat (int __oldfd, const char *__old, int __newfd, const char *__new) __attribute__ ((__nothrow__ , __leaf__)); extern FILE *tmpfile (void) ; # 209 "/usr/include/stdio.h" 3 4 extern char *tmpnam (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ; extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__ , __leaf__)) ; # 227 "/usr/include/stdio.h" 3 4 extern char *tempnam (const char *__dir, const char *__pfx) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ; extern int fclose (FILE *__stream); extern int fflush (FILE *__stream); # 252 "/usr/include/stdio.h" 3 4 extern int fflush_unlocked (FILE *__stream); # 266 "/usr/include/stdio.h" 3 4 extern FILE *fopen (const char *__restrict __filename, const char *__restrict __modes) ; extern FILE *freopen (const char *__restrict __filename, const char *__restrict __modes, FILE *__restrict __stream) ; # 295 "/usr/include/stdio.h" 3 4 # 306 "/usr/include/stdio.h" 3 4 extern FILE *fdopen (int __fd, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) ; # 319 "/usr/include/stdio.h" 3 4 extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) __attribute__ ((__nothrow__ , __leaf__)) ; extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__ , __leaf__)) ; extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)); extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, int __modes, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf, size_t __size) __attribute__ ((__nothrow__ , __leaf__)); extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); extern int fprintf (FILE *__restrict __stream, const char *__restrict __format, ...); extern int printf (const char *__restrict __format, ...); extern int sprintf (char *__restrict __s, const char *__restrict __format, ...) __attribute__ ((__nothrow__)); extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg); extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg); extern int vsprintf (char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __attribute__ ((__nothrow__)); extern int snprintf (char *__restrict __s, size_t __maxlen, const char *__restrict __format, ...) __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4))); extern int vsnprintf (char *__restrict __s, size_t __maxlen, const char *__restrict __format, __gnuc_va_list __arg) __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0))); # 412 "/usr/include/stdio.h" 3 4 extern int vdprintf (int __fd, const char *__restrict __fmt, __gnuc_va_list __arg) __attribute__ ((__format__ (__printf__, 2, 0))); extern int dprintf (int __fd, const char *__restrict __fmt, ...) __attribute__ ((__format__ (__printf__, 2, 3))); extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) ; extern int scanf (const char *__restrict __format, ...) ; extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __attribute__ ((__nothrow__ , __leaf__)); # 443 "/usr/include/stdio.h" 3 4 extern int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...) __asm__ ("" "__isoc99_fscanf") ; extern int scanf (const char *__restrict __format, ...) __asm__ ("" "__isoc99_scanf") ; extern int sscanf (const char *__restrict __s, const char *__restrict __format, ...) __asm__ ("" "__isoc99_sscanf") __attribute__ ((__nothrow__ , __leaf__)) ; # 463 "/usr/include/stdio.h" 3 4 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __attribute__ ((__format__ (__scanf__, 2, 0))) ; extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __attribute__ ((__format__ (__scanf__, 1, 0))) ; extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0))); # 494 "/usr/include/stdio.h" 3 4 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vfscanf") __attribute__ ((__format__ (__scanf__, 2, 0))) ; extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vscanf") __attribute__ ((__format__ (__scanf__, 1, 0))) ; extern int vsscanf (const char *__restrict __s, const char *__restrict __format, __gnuc_va_list __arg) __asm__ ("" "__isoc99_vsscanf") __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__format__ (__scanf__, 2, 0))); # 522 "/usr/include/stdio.h" 3 4 extern int fgetc (FILE *__stream); extern int getc (FILE *__stream); extern int getchar (void); # 550 "/usr/include/stdio.h" 3 4 extern int getc_unlocked (FILE *__stream); extern int getchar_unlocked (void); # 561 "/usr/include/stdio.h" 3 4 extern int fgetc_unlocked (FILE *__stream); extern int fputc (int __c, FILE *__stream); extern int putc (int __c, FILE *__stream); extern int putchar (int __c); # 594 "/usr/include/stdio.h" 3 4 extern int fputc_unlocked (int __c, FILE *__stream); extern int putc_unlocked (int __c, FILE *__stream); extern int putchar_unlocked (int __c); extern int getw (FILE *__stream); extern int putw (int __w, FILE *__stream); extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) ; # 640 "/usr/include/stdio.h" 3 4 # 665 "/usr/include/stdio.h" 3 4 extern __ssize_t __getdelim (char **__restrict __lineptr, size_t *__restrict __n, int __delimiter, FILE *__restrict __stream) ; extern __ssize_t getdelim (char **__restrict __lineptr, size_t *__restrict __n, int __delimiter, FILE *__restrict __stream) ; extern __ssize_t getline (char **__restrict __lineptr, size_t *__restrict __n, FILE *__restrict __stream) ; extern int fputs (const char *__restrict __s, FILE *__restrict __stream); extern int puts (const char *__s); extern int ungetc (int __c, FILE *__stream); extern size_t fread (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) ; extern size_t fwrite (const void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __s); # 737 "/usr/include/stdio.h" 3 4 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream) ; extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, size_t __n, FILE *__restrict __stream); extern int fseek (FILE *__stream, long int __off, int __whence); extern long int ftell (FILE *__stream) ; extern void rewind (FILE *__stream); # 773 "/usr/include/stdio.h" 3 4 extern int fseeko (FILE *__stream, __off_t __off, int __whence); extern __off_t ftello (FILE *__stream) ; # 792 "/usr/include/stdio.h" 3 4 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos); extern int fsetpos (FILE *__stream, const fpos_t *__pos); # 815 "/usr/include/stdio.h" 3 4 # 824 "/usr/include/stdio.h" 3 4 extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); extern int feof (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; extern int ferror (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; extern void perror (const char *__s); # 1 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 1 3 4 # 26 "/usr/include/x86_64-linux-gnu/bits/sys_errlist.h" 3 4 extern int sys_nerr; extern const char *const sys_errlist[]; # 854 "/usr/include/stdio.h" 2 3 4 extern int fileno (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; # 872 "/usr/include/stdio.h" 3 4 extern FILE *popen (const char *__command, const char *__modes) ; extern int pclose (FILE *__stream); extern char *ctermid (char *__s) __attribute__ ((__nothrow__ , __leaf__)); # 912 "/usr/include/stdio.h" 3 4 extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)) ; extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__ , __leaf__)); # 942 "/usr/include/stdio.h" 3 4 # 27 "../../../server-code/src/common/utils.h" 2 # 1 "/usr/include/unistd.h" 1 3 4 # 27 "/usr/include/unistd.h" 3 4 # 205 "/usr/include/unistd.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/posix_opt.h" 1 3 4 # 206 "/usr/include/unistd.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/environments.h" 1 3 4 # 22 "/usr/include/x86_64-linux-gnu/bits/environments.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 23 "/usr/include/x86_64-linux-gnu/bits/environments.h" 2 3 4 # 210 "/usr/include/unistd.h" 2 3 4 # 229 "/usr/include/unistd.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 230 "/usr/include/unistd.h" 2 3 4 typedef __gid_t gid_t; typedef __uid_t uid_t; # 258 "/usr/include/unistd.h" 3 4 typedef __useconds_t useconds_t; # 277 "/usr/include/unistd.h" 3 4 typedef __socklen_t socklen_t; # 290 "/usr/include/unistd.h" 3 4 extern int access (const char *__name, int __type) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); # 307 "/usr/include/unistd.h" 3 4 extern int faccessat (int __fd, const char *__file, int __type, int __flag) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ; # 337 "/usr/include/unistd.h" 3 4 extern __off_t lseek (int __fd, __off_t __offset, int __whence) __attribute__ ((__nothrow__ , __leaf__)); # 356 "/usr/include/unistd.h" 3 4 extern int close (int __fd); extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ; extern ssize_t write (int __fd, const void *__buf, size_t __n) ; # 379 "/usr/include/unistd.h" 3 4 extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset) ; extern ssize_t pwrite (int __fd, const void *__buf, size_t __n, __off_t __offset) ; # 420 "/usr/include/unistd.h" 3 4 extern int pipe (int __pipedes[2]) __attribute__ ((__nothrow__ , __leaf__)) ; # 435 "/usr/include/unistd.h" 3 4 extern unsigned int alarm (unsigned int __seconds) __attribute__ ((__nothrow__ , __leaf__)); # 447 "/usr/include/unistd.h" 3 4 extern unsigned int sleep (unsigned int __seconds); extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) __attribute__ ((__nothrow__ , __leaf__)); extern int usleep (__useconds_t __useconds); # 472 "/usr/include/unistd.h" 3 4 extern int pause (void); extern int chown (const char *__file, __uid_t __owner, __gid_t __group) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __attribute__ ((__nothrow__ , __leaf__)) ; extern int lchown (const char *__file, __uid_t __owner, __gid_t __group) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern int fchownat (int __fd, const char *__file, __uid_t __owner, __gid_t __group, int __flag) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ; extern int chdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern int fchdir (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ; # 514 "/usr/include/unistd.h" 3 4 extern char *getcwd (char *__buf, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) ; # 528 "/usr/include/unistd.h" 3 4 extern char *getwd (char *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) __attribute__ ((__deprecated__)) ; extern int dup (int __fd) __attribute__ ((__nothrow__ , __leaf__)) ; extern int dup2 (int __fd, int __fd2) __attribute__ ((__nothrow__ , __leaf__)); # 546 "/usr/include/unistd.h" 3 4 extern char **__environ; extern int execve (const char *__path, char *const __argv[], char *const __envp[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int fexecve (int __fd, char *const __argv[], char *const __envp[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); extern int execv (const char *__path, char *const __argv[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int execle (const char *__path, const char *__arg, ...) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int execl (const char *__path, const char *__arg, ...) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int execvp (const char *__file, char *const __argv[]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int execlp (const char *__file, const char *__arg, ...) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); # 601 "/usr/include/unistd.h" 3 4 extern int nice (int __inc) __attribute__ ((__nothrow__ , __leaf__)) ; extern void _exit (int __status) __attribute__ ((__noreturn__)); # 1 "/usr/include/x86_64-linux-gnu/bits/confname.h" 1 3 4 # 24 "/usr/include/x86_64-linux-gnu/bits/confname.h" 3 4 enum { _PC_LINK_MAX, _PC_MAX_CANON, _PC_MAX_INPUT, _PC_NAME_MAX, _PC_PATH_MAX, _PC_PIPE_BUF, _PC_CHOWN_RESTRICTED, _PC_NO_TRUNC, _PC_VDISABLE, _PC_SYNC_IO, _PC_ASYNC_IO, _PC_PRIO_IO, _PC_SOCK_MAXBUF, _PC_FILESIZEBITS, _PC_REC_INCR_XFER_SIZE, _PC_REC_MAX_XFER_SIZE, _PC_REC_MIN_XFER_SIZE, _PC_REC_XFER_ALIGN, _PC_ALLOC_SIZE_MIN, _PC_SYMLINK_MAX, _PC_2_SYMLINKS }; enum { _SC_ARG_MAX, _SC_CHILD_MAX, _SC_CLK_TCK, _SC_NGROUPS_MAX, _SC_OPEN_MAX, _SC_STREAM_MAX, _SC_TZNAME_MAX, _SC_JOB_CONTROL, _SC_SAVED_IDS, _SC_REALTIME_SIGNALS, _SC_PRIORITY_SCHEDULING, _SC_TIMERS, _SC_ASYNCHRONOUS_IO, _SC_PRIORITIZED_IO, _SC_SYNCHRONIZED_IO, _SC_FSYNC, _SC_MAPPED_FILES, _SC_MEMLOCK, _SC_MEMLOCK_RANGE, _SC_MEMORY_PROTECTION, _SC_MESSAGE_PASSING, _SC_SEMAPHORES, _SC_SHARED_MEMORY_OBJECTS, _SC_AIO_LISTIO_MAX, _SC_AIO_MAX, _SC_AIO_PRIO_DELTA_MAX, _SC_DELAYTIMER_MAX, _SC_MQ_OPEN_MAX, _SC_MQ_PRIO_MAX, _SC_VERSION, _SC_PAGESIZE, _SC_RTSIG_MAX, _SC_SEM_NSEMS_MAX, _SC_SEM_VALUE_MAX, _SC_SIGQUEUE_MAX, _SC_TIMER_MAX, _SC_BC_BASE_MAX, _SC_BC_DIM_MAX, _SC_BC_SCALE_MAX, _SC_BC_STRING_MAX, _SC_COLL_WEIGHTS_MAX, _SC_EQUIV_CLASS_MAX, _SC_EXPR_NEST_MAX, _SC_LINE_MAX, _SC_RE_DUP_MAX, _SC_CHARCLASS_NAME_MAX, _SC_2_VERSION, _SC_2_C_BIND, _SC_2_C_DEV, _SC_2_FORT_DEV, _SC_2_FORT_RUN, _SC_2_SW_DEV, _SC_2_LOCALEDEF, _SC_PII, _SC_PII_XTI, _SC_PII_SOCKET, _SC_PII_INTERNET, _SC_PII_OSI, _SC_POLL, _SC_SELECT, _SC_UIO_MAXIOV, _SC_IOV_MAX = _SC_UIO_MAXIOV, _SC_PII_INTERNET_STREAM, _SC_PII_INTERNET_DGRAM, _SC_PII_OSI_COTS, _SC_PII_OSI_CLTS, _SC_PII_OSI_M, _SC_T_IOV_MAX, _SC_THREADS, _SC_THREAD_SAFE_FUNCTIONS, _SC_GETGR_R_SIZE_MAX, _SC_GETPW_R_SIZE_MAX, _SC_LOGIN_NAME_MAX, _SC_TTY_NAME_MAX, _SC_THREAD_DESTRUCTOR_ITERATIONS, _SC_THREAD_KEYS_MAX, _SC_THREAD_STACK_MIN, _SC_THREAD_THREADS_MAX, _SC_THREAD_ATTR_STACKADDR, _SC_THREAD_ATTR_STACKSIZE, _SC_THREAD_PRIORITY_SCHEDULING, _SC_THREAD_PRIO_INHERIT, _SC_THREAD_PRIO_PROTECT, _SC_THREAD_PROCESS_SHARED, _SC_NPROCESSORS_CONF, _SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES, _SC_AVPHYS_PAGES, _SC_ATEXIT_MAX, _SC_PASS_MAX, _SC_XOPEN_VERSION, _SC_XOPEN_XCU_VERSION, _SC_XOPEN_UNIX, _SC_XOPEN_CRYPT, _SC_XOPEN_ENH_I18N, _SC_XOPEN_SHM, _SC_2_CHAR_TERM, _SC_2_C_VERSION, _SC_2_UPE, _SC_XOPEN_XPG2, _SC_XOPEN_XPG3, _SC_XOPEN_XPG4, _SC_CHAR_BIT, _SC_CHAR_MAX, _SC_CHAR_MIN, _SC_INT_MAX, _SC_INT_MIN, _SC_LONG_BIT, _SC_WORD_BIT, _SC_MB_LEN_MAX, _SC_NZERO, _SC_SSIZE_MAX, _SC_SCHAR_MAX, _SC_SCHAR_MIN, _SC_SHRT_MAX, _SC_SHRT_MIN, _SC_UCHAR_MAX, _SC_UINT_MAX, _SC_ULONG_MAX, _SC_USHRT_MAX, _SC_NL_ARGMAX, _SC_NL_LANGMAX, _SC_NL_MSGMAX, _SC_NL_NMAX, _SC_NL_SETMAX, _SC_NL_TEXTMAX, _SC_XBS5_ILP32_OFF32, _SC_XBS5_ILP32_OFFBIG, _SC_XBS5_LP64_OFF64, _SC_XBS5_LPBIG_OFFBIG, _SC_XOPEN_LEGACY, _SC_XOPEN_REALTIME, _SC_XOPEN_REALTIME_THREADS, _SC_ADVISORY_INFO, _SC_BARRIERS, _SC_BASE, _SC_C_LANG_SUPPORT, _SC_C_LANG_SUPPORT_R, _SC_CLOCK_SELECTION, _SC_CPUTIME, _SC_THREAD_CPUTIME, _SC_DEVICE_IO, _SC_DEVICE_SPECIFIC, _SC_DEVICE_SPECIFIC_R, _SC_FD_MGMT, _SC_FIFO, _SC_PIPE, _SC_FILE_ATTRIBUTES, _SC_FILE_LOCKING, _SC_FILE_SYSTEM, _SC_MONOTONIC_CLOCK, _SC_MULTI_PROCESS, _SC_SINGLE_PROCESS, _SC_NETWORKING, _SC_READER_WRITER_LOCKS, _SC_SPIN_LOCKS, _SC_REGEXP, _SC_REGEX_VERSION, _SC_SHELL, _SC_SIGNALS, _SC_SPAWN, _SC_SPORADIC_SERVER, _SC_THREAD_SPORADIC_SERVER, _SC_SYSTEM_DATABASE, _SC_SYSTEM_DATABASE_R, _SC_TIMEOUTS, _SC_TYPED_MEMORY_OBJECTS, _SC_USER_GROUPS, _SC_USER_GROUPS_R, _SC_2_PBS, _SC_2_PBS_ACCOUNTING, _SC_2_PBS_LOCATE, _SC_2_PBS_MESSAGE, _SC_2_PBS_TRACK, _SC_SYMLOOP_MAX, _SC_STREAMS, _SC_2_PBS_CHECKPOINT, _SC_V6_ILP32_OFF32, _SC_V6_ILP32_OFFBIG, _SC_V6_LP64_OFF64, _SC_V6_LPBIG_OFFBIG, _SC_HOST_NAME_MAX, _SC_TRACE, _SC_TRACE_EVENT_FILTER, _SC_TRACE_INHERIT, _SC_TRACE_LOG, _SC_LEVEL1_ICACHE_SIZE, _SC_LEVEL1_ICACHE_ASSOC, _SC_LEVEL1_ICACHE_LINESIZE, _SC_LEVEL1_DCACHE_SIZE, _SC_LEVEL1_DCACHE_ASSOC, _SC_LEVEL1_DCACHE_LINESIZE, _SC_LEVEL2_CACHE_SIZE, _SC_LEVEL2_CACHE_ASSOC, _SC_LEVEL2_CACHE_LINESIZE, _SC_LEVEL3_CACHE_SIZE, _SC_LEVEL3_CACHE_ASSOC, _SC_LEVEL3_CACHE_LINESIZE, _SC_LEVEL4_CACHE_SIZE, _SC_LEVEL4_CACHE_ASSOC, _SC_LEVEL4_CACHE_LINESIZE, _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50, _SC_RAW_SOCKETS, _SC_V7_ILP32_OFF32, _SC_V7_ILP32_OFFBIG, _SC_V7_LP64_OFF64, _SC_V7_LPBIG_OFFBIG, _SC_SS_REPL_MAX, _SC_TRACE_EVENT_NAME_MAX, _SC_TRACE_NAME_MAX, _SC_TRACE_SYS_MAX, _SC_TRACE_USER_EVENT_MAX, _SC_XOPEN_STREAMS, _SC_THREAD_ROBUST_PRIO_INHERIT, _SC_THREAD_ROBUST_PRIO_PROTECT }; enum { _CS_PATH, _CS_V6_WIDTH_RESTRICTED_ENVS, _CS_GNU_LIBC_VERSION, _CS_GNU_LIBPTHREAD_VERSION, _CS_V5_WIDTH_RESTRICTED_ENVS, _CS_V7_WIDTH_RESTRICTED_ENVS, _CS_LFS_CFLAGS = 1000, _CS_LFS_LDFLAGS, _CS_LFS_LIBS, _CS_LFS_LINTFLAGS, _CS_LFS64_CFLAGS, _CS_LFS64_LDFLAGS, _CS_LFS64_LIBS, _CS_LFS64_LINTFLAGS, _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, _CS_XBS5_ILP32_OFF32_LDFLAGS, _CS_XBS5_ILP32_OFF32_LIBS, _CS_XBS5_ILP32_OFF32_LINTFLAGS, _CS_XBS5_ILP32_OFFBIG_CFLAGS, _CS_XBS5_ILP32_OFFBIG_LDFLAGS, _CS_XBS5_ILP32_OFFBIG_LIBS, _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, _CS_XBS5_LP64_OFF64_CFLAGS, _CS_XBS5_LP64_OFF64_LDFLAGS, _CS_XBS5_LP64_OFF64_LIBS, _CS_XBS5_LP64_OFF64_LINTFLAGS, _CS_XBS5_LPBIG_OFFBIG_CFLAGS, _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, _CS_XBS5_LPBIG_OFFBIG_LIBS, _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, _CS_POSIX_V6_ILP32_OFF32_CFLAGS, _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, _CS_POSIX_V6_ILP32_OFF32_LIBS, _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, _CS_POSIX_V6_ILP32_OFFBIG_LIBS, _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, _CS_POSIX_V6_LP64_OFF64_CFLAGS, _CS_POSIX_V6_LP64_OFF64_LDFLAGS, _CS_POSIX_V6_LP64_OFF64_LIBS, _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS, _CS_POSIX_V7_ILP32_OFF32_CFLAGS, _CS_POSIX_V7_ILP32_OFF32_LDFLAGS, _CS_POSIX_V7_ILP32_OFF32_LIBS, _CS_POSIX_V7_ILP32_OFF32_LINTFLAGS, _CS_POSIX_V7_ILP32_OFFBIG_CFLAGS, _CS_POSIX_V7_ILP32_OFFBIG_LDFLAGS, _CS_POSIX_V7_ILP32_OFFBIG_LIBS, _CS_POSIX_V7_ILP32_OFFBIG_LINTFLAGS, _CS_POSIX_V7_LP64_OFF64_CFLAGS, _CS_POSIX_V7_LP64_OFF64_LDFLAGS, _CS_POSIX_V7_LP64_OFF64_LIBS, _CS_POSIX_V7_LP64_OFF64_LINTFLAGS, _CS_POSIX_V7_LPBIG_OFFBIG_CFLAGS, _CS_POSIX_V7_LPBIG_OFFBIG_LDFLAGS, _CS_POSIX_V7_LPBIG_OFFBIG_LIBS, _CS_POSIX_V7_LPBIG_OFFBIG_LINTFLAGS, _CS_V6_ENV, _CS_V7_ENV }; # 613 "/usr/include/unistd.h" 2 3 4 extern long int pathconf (const char *__path, int __name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern long int fpathconf (int __fd, int __name) __attribute__ ((__nothrow__ , __leaf__)); extern long int sysconf (int __name) __attribute__ ((__nothrow__ , __leaf__)); extern size_t confstr (int __name, char *__buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__)); extern __pid_t getpid (void) __attribute__ ((__nothrow__ , __leaf__)); extern __pid_t getppid (void) __attribute__ ((__nothrow__ , __leaf__)); extern __pid_t getpgrp (void) __attribute__ ((__nothrow__ , __leaf__)); extern __pid_t __getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__)); extern __pid_t getpgid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__)); extern int setpgid (__pid_t __pid, __pid_t __pgid) __attribute__ ((__nothrow__ , __leaf__)); # 663 "/usr/include/unistd.h" 3 4 extern int setpgrp (void) __attribute__ ((__nothrow__ , __leaf__)); extern __pid_t setsid (void) __attribute__ ((__nothrow__ , __leaf__)); extern __pid_t getsid (__pid_t __pid) __attribute__ ((__nothrow__ , __leaf__)); extern __uid_t getuid (void) __attribute__ ((__nothrow__ , __leaf__)); extern __uid_t geteuid (void) __attribute__ ((__nothrow__ , __leaf__)); extern __gid_t getgid (void) __attribute__ ((__nothrow__ , __leaf__)); extern __gid_t getegid (void) __attribute__ ((__nothrow__ , __leaf__)); extern int getgroups (int __size, __gid_t __list[]) __attribute__ ((__nothrow__ , __leaf__)) ; # 703 "/usr/include/unistd.h" 3 4 extern int setuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) ; extern int setreuid (__uid_t __ruid, __uid_t __euid) __attribute__ ((__nothrow__ , __leaf__)) ; extern int seteuid (__uid_t __uid) __attribute__ ((__nothrow__ , __leaf__)) ; extern int setgid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) ; extern int setregid (__gid_t __rgid, __gid_t __egid) __attribute__ ((__nothrow__ , __leaf__)) ; extern int setegid (__gid_t __gid) __attribute__ ((__nothrow__ , __leaf__)) ; # 759 "/usr/include/unistd.h" 3 4 extern __pid_t fork (void) __attribute__ ((__nothrow__)); extern __pid_t vfork (void) __attribute__ ((__nothrow__ , __leaf__)); extern char *ttyname (int __fd) __attribute__ ((__nothrow__ , __leaf__)); extern int ttyname_r (int __fd, char *__buf, size_t __buflen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))) ; extern int isatty (int __fd) __attribute__ ((__nothrow__ , __leaf__)); extern int ttyslot (void) __attribute__ ((__nothrow__ , __leaf__)); extern int link (const char *__from, const char *__to) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ; extern int linkat (int __fromfd, const char *__from, int __tofd, const char *__to, int __flags) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))) ; extern int symlink (const char *__from, const char *__to) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ; extern ssize_t readlink (const char *__restrict __path, char *__restrict __buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))) ; extern int symlinkat (const char *__from, int __tofd, const char *__to) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 3))) ; extern ssize_t readlinkat (int __fd, const char *__restrict __path, char *__restrict __buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 3))) ; extern int unlink (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int unlinkat (int __fd, const char *__name, int __flag) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); extern int rmdir (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern __pid_t tcgetpgrp (int __fd) __attribute__ ((__nothrow__ , __leaf__)); extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __attribute__ ((__nothrow__ , __leaf__)); extern char *getlogin (void); extern int getlogin_r (char *__name, size_t __name_len) __attribute__ ((__nonnull__ (1))); extern int setlogin (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); # 874 "/usr/include/unistd.h" 3 4 # 1 "/usr/include/getopt.h" 1 3 4 # 57 "/usr/include/getopt.h" 3 4 extern char *optarg; # 71 "/usr/include/getopt.h" 3 4 extern int optind; extern int opterr; extern int optopt; # 150 "/usr/include/getopt.h" 3 4 extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __attribute__ ((__nothrow__ , __leaf__)); # 875 "/usr/include/unistd.h" 2 3 4 extern int gethostname (char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int sethostname (const char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern int sethostid (long int __id) __attribute__ ((__nothrow__ , __leaf__)) ; extern int getdomainname (char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern int setdomainname (const char *__name, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern int vhangup (void) __attribute__ ((__nothrow__ , __leaf__)); extern int revoke (const char *__file) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern int profil (unsigned short int *__sample_buffer, size_t __size, size_t __offset, unsigned int __scale) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int acct (const char *__name) __attribute__ ((__nothrow__ , __leaf__)); extern char *getusershell (void) __attribute__ ((__nothrow__ , __leaf__)); extern void endusershell (void) __attribute__ ((__nothrow__ , __leaf__)); extern void setusershell (void) __attribute__ ((__nothrow__ , __leaf__)); extern int daemon (int __nochdir, int __noclose) __attribute__ ((__nothrow__ , __leaf__)) ; extern int chroot (const char *__path) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern char *getpass (const char *__prompt) __attribute__ ((__nonnull__ (1))); extern int fsync (int __fd); # 972 "/usr/include/unistd.h" 3 4 extern long int gethostid (void); extern void sync (void) __attribute__ ((__nothrow__ , __leaf__)); extern int getpagesize (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); extern int getdtablesize (void) __attribute__ ((__nothrow__ , __leaf__)); # 996 "/usr/include/unistd.h" 3 4 extern int truncate (const char *__file, __off_t __length) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; # 1019 "/usr/include/unistd.h" 3 4 extern int ftruncate (int __fd, __off_t __length) __attribute__ ((__nothrow__ , __leaf__)) ; # 1040 "/usr/include/unistd.h" 3 4 extern int brk (void *__addr) __attribute__ ((__nothrow__ , __leaf__)) ; extern void *sbrk (intptr_t __delta) __attribute__ ((__nothrow__ , __leaf__)); # 1061 "/usr/include/unistd.h" 3 4 extern long int syscall (long int __sysno, ...) __attribute__ ((__nothrow__ , __leaf__)); # 1084 "/usr/include/unistd.h" 3 4 extern int lockf (int __fd, int __cmd, __off_t __len) ; # 1115 "/usr/include/unistd.h" 3 4 extern int fdatasync (int __fildes); # 1154 "/usr/include/unistd.h" 3 4 # 29 "../../../server-code/src/common/utils.h" 2 # 39 "../../../server-code/src/common/utils.h" # 39 "../../../server-code/src/common/utils.h" void WriteDump(FILE* fp, const void* buffer, size_t length); void ShowDump(const void* buffer, size_t length); void findfile(const char *p, const char *pat, void (func)(const char*)); # 43 "../../../server-code/src/common/utils.h" 3 4 _Bool # 43 "../../../server-code/src/common/utils.h" exists(const char* filename); unsigned int get_percentage(const unsigned int A, const unsigned int B); int64 apply_percentrate64(int64 value, int rate, int maxrate); int apply_percentrate(int value, int rate, int maxrate); const char* timestamp2string(char* str, size_t size, time_t timestamp, const char* format); extern uint8 GetByte(uint32 val, int idx); extern uint16 GetWord(uint32 val, int idx); extern uint16 MakeWord(uint8 byte0, uint8 byte1); extern uint32 MakeDWord(uint16 word0, uint16 word1); extern int16 MakeShortLE(int16 val); extern int32 MakeLongLE(int32 val); extern uint16 GetUShort(const unsigned char* buf); extern uint32 GetULong(const unsigned char* buf); extern int32 GetLong(const unsigned char* buf); extern float GetFloat(const unsigned char* buf); size_t hread(void * ptr, size_t size, size_t count, FILE * stream); size_t hwrite(const void * ptr, size_t size, size_t count, FILE * stream); # 83 "../../../server-code/src/common/utils.h" struct HCache_interface { void (*init) (void); # 86 "../../../server-code/src/common/utils.h" 3 4 _Bool # 86 "../../../server-code/src/common/utils.h" (*check) (const char *file); FILE *(*open) (const char *file, const char *opt); time_t recompile_time; # 90 "../../../server-code/src/common/utils.h" 3 4 _Bool # 90 "../../../server-code/src/common/utils.h" enabled; }; void HCache_defaults(void); extern struct HCache_interface *HCache; # 42 "../../../server-code/src/login/login.c" 2 # 1 "/usr/include/stdlib.h" 1 3 4 # 32 "/usr/include/stdlib.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 33 "/usr/include/stdlib.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 1 3 4 # 50 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 3 4 # 50 "/usr/include/x86_64-linux-gnu/bits/waitflags.h" 3 4 typedef enum { P_ALL, P_PID, P_PGID } idtype_t; # 42 "/usr/include/stdlib.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 1 3 4 # 66 "/usr/include/x86_64-linux-gnu/bits/waitstatus.h" 3 4 union wait { int w_status; struct { unsigned int __w_termsig:7; unsigned int __w_coredump:1; unsigned int __w_retcode:8; unsigned int:16; } __wait_terminated; struct { unsigned int __w_stopval:8; unsigned int __w_stopsig:8; unsigned int:16; } __wait_stopped; }; # 43 "/usr/include/stdlib.h" 2 3 4 # 67 "/usr/include/stdlib.h" 3 4 typedef union { union wait *__uptr; int *__iptr; } __WAIT_STATUS __attribute__ ((__transparent_union__)); # 95 "/usr/include/stdlib.h" 3 4 typedef struct { int quot; int rem; } div_t; typedef struct { long int quot; long int rem; } ldiv_t; __extension__ typedef struct { long long int quot; long long int rem; } lldiv_t; # 139 "/usr/include/stdlib.h" 3 4 extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__ , __leaf__)) ; extern double atof (const char *__nptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; extern int atoi (const char *__nptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; extern long int atol (const char *__nptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; __extension__ extern long long int atoll (const char *__nptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; extern double strtod (const char *__restrict __nptr, char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern float strtof (const char *__restrict __nptr, char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern long double strtold (const char *__restrict __nptr, char **__restrict __endptr) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern long int strtol (const char *__restrict __nptr, char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern unsigned long int strtoul (const char *__restrict __nptr, char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); __extension__ extern long long int strtoq (const char *__restrict __nptr, char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); __extension__ extern unsigned long long int strtouq (const char *__restrict __nptr, char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); __extension__ extern long long int strtoll (const char *__restrict __nptr, char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); __extension__ extern unsigned long long int strtoull (const char *__restrict __nptr, char **__restrict __endptr, int __base) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); # 305 "/usr/include/stdlib.h" 3 4 extern char *l64a (long int __n) __attribute__ ((__nothrow__ , __leaf__)) ; extern long int a64l (const char *__s) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ; # 1 "/usr/include/x86_64-linux-gnu/sys/types.h" 1 3 4 # 27 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 typedef __u_char u_char; typedef __u_short u_short; typedef __u_int u_int; typedef __u_long u_long; typedef __quad_t quad_t; typedef __u_quad_t u_quad_t; typedef __fsid_t fsid_t; typedef __loff_t loff_t; typedef __ino_t ino_t; # 60 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 typedef __dev_t dev_t; # 70 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 typedef __mode_t mode_t; typedef __nlink_t nlink_t; # 104 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 typedef __id_t id_t; # 115 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 typedef __daddr_t daddr_t; typedef __caddr_t caddr_t; typedef __key_t key_t; # 146 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 147 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 typedef unsigned long int ulong; typedef unsigned short int ushort; typedef unsigned int uint; # 200 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__))); typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__))); typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__))); typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__))); typedef int register_t __attribute__ ((__mode__ (__word__))); # 219 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/sys/select.h" 1 3 4 # 30 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/select.h" 1 3 4 # 22 "/usr/include/x86_64-linux-gnu/bits/select.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 23 "/usr/include/x86_64-linux-gnu/bits/select.h" 2 3 4 # 31 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 1 3 4 # 22 "/usr/include/x86_64-linux-gnu/bits/sigset.h" 3 4 typedef int __sig_atomic_t; typedef struct { unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))]; } __sigset_t; # 34 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4 typedef __sigset_t sigset_t; # 1 "/usr/include/x86_64-linux-gnu/bits/time.h" 1 3 4 # 30 "/usr/include/x86_64-linux-gnu/bits/time.h" 3 4 struct timeval { __time_t tv_sec; __suseconds_t tv_usec; }; # 46 "/usr/include/x86_64-linux-gnu/sys/select.h" 2 3 4 typedef __suseconds_t suseconds_t; typedef long int __fd_mask; # 64 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 typedef struct { __fd_mask __fds_bits[1024 / (8 * (int) sizeof (__fd_mask))]; } fd_set; typedef __fd_mask fd_mask; # 96 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 # 106 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 extern int select (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, struct timeval *__restrict __timeout); # 118 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 extern int pselect (int __nfds, fd_set *__restrict __readfds, fd_set *__restrict __writefds, fd_set *__restrict __exceptfds, const struct timespec *__restrict __timeout, const __sigset_t *__restrict __sigmask); # 131 "/usr/include/x86_64-linux-gnu/sys/select.h" 3 4 # 220 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 # 1 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 1 3 4 # 24 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4 __extension__ extern unsigned int gnu_dev_major (unsigned long long int __dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); __extension__ extern unsigned int gnu_dev_minor (unsigned long long int __dev) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); __extension__ extern unsigned long long int gnu_dev_makedev (unsigned int __major, unsigned int __minor) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)); # 58 "/usr/include/x86_64-linux-gnu/sys/sysmacros.h" 3 4 # 223 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 typedef __blksize_t blksize_t; typedef __blkcnt_t blkcnt_t; typedef __fsblkcnt_t fsblkcnt_t; typedef __fsfilcnt_t fsfilcnt_t; # 270 "/usr/include/x86_64-linux-gnu/sys/types.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 1 3 4 # 21 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4 # 1 "/usr/include/x86_64-linux-gnu/bits/wordsize.h" 1 3 4 # 22 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 2 3 4 # 60 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4 typedef unsigned long int pthread_t; union pthread_attr_t { char __size[56]; long int __align; }; typedef union pthread_attr_t pthread_attr_t; typedef struct __pthread_internal_list { struct __pthread_internal_list *__prev; struct __pthread_internal_list *__next; } __pthread_list_t; # 90 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4 typedef union { struct __pthread_mutex_s { int __lock; unsigned int __count; int __owner; unsigned int __nusers; int __kind; short __spins; short __elision; __pthread_list_t __list; # 125 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4 } __data; char __size[40]; long int __align; } pthread_mutex_t; typedef union { char __size[4]; int __align; } pthread_mutexattr_t; typedef union { struct { int __lock; unsigned int __futex; __extension__ unsigned long long int __total_seq; __extension__ unsigned long long int __wakeup_seq; __extension__ unsigned long long int __woken_seq; void *__mutex; unsigned int __nwaiters; unsigned int __broadcast_seq; } __data; char __size[48]; __extension__ long long int __align; } pthread_cond_t; typedef union { char __size[4]; int __align; } pthread_condattr_t; typedef unsigned int pthread_key_t; typedef int pthread_once_t; typedef union { struct { int __lock; unsigned int __nr_readers; unsigned int __readers_wakeup; unsigned int __writer_wakeup; unsigned int __nr_readers_queued; unsigned int __nr_writers_queued; int __writer; int __shared; signed char __rwelision; unsigned char __pad1[7]; unsigned long int __pad2; unsigned int __flags; } __data; # 220 "/usr/include/x86_64-linux-gnu/bits/pthreadtypes.h" 3 4 char __size[56]; long int __align; } pthread_rwlock_t; typedef union { char __size[8]; long int __align; } pthread_rwlockattr_t; typedef volatile int pthread_spinlock_t; typedef union { char __size[32]; long int __align; } pthread_barrier_t; typedef union { char __size[4]; int __align; } pthread_barrierattr_t; # 271 "/usr/include/x86_64-linux-gnu/sys/types.h" 2 3 4 # 315 "/usr/include/stdlib.h" 2 3 4 extern long int random (void) __attribute__ ((__nothrow__ , __leaf__)); extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__)); extern char *initstate (unsigned int __seed, char *__statebuf, size_t __statelen) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); struct random_data { int32_t *fptr; int32_t *rptr; int32_t *state; int rand_type; int rand_deg; int rand_sep; int32_t *end_ptr; }; extern int random_r (struct random_data *__restrict __buf, int32_t *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int srandom_r (unsigned int __seed, struct random_data *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); extern int initstate_r (unsigned int __seed, char *__restrict __statebuf, size_t __statelen, struct random_data *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2, 4))); extern int setstate_r (char *__restrict __statebuf, struct random_data *__restrict __buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int rand (void) __attribute__ ((__nothrow__ , __leaf__)); extern void srand (unsigned int __seed) __attribute__ ((__nothrow__ , __leaf__)); extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__ , __leaf__)); extern double drand48 (void) __attribute__ ((__nothrow__ , __leaf__)); extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern long int lrand48 (void) __attribute__ ((__nothrow__ , __leaf__)); extern long int nrand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern long int mrand48 (void) __attribute__ ((__nothrow__ , __leaf__)); extern long int jrand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern void srand48 (long int __seedval) __attribute__ ((__nothrow__ , __leaf__)); extern unsigned short int *seed48 (unsigned short int __seed16v[3]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); struct drand48_data { unsigned short int __x[3]; unsigned short int __old_x[3]; unsigned short int __c; unsigned short int __init; __extension__ unsigned long long int __a; }; extern int drand48_r (struct drand48_data *__restrict __buffer, double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int erand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, double *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int lrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int nrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int mrand48_r (struct drand48_data *__restrict __buffer, long int *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int jrand48_r (unsigned short int __xsubi[3], struct drand48_data *__restrict __buffer, long int *__restrict __result) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int srand48_r (long int __seedval, struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); extern int seed48_r (unsigned short int __seed16v[3], struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern int lcong48_r (unsigned short int __param[7], struct drand48_data *__buffer) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2))); extern void *malloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ; extern void *calloc (size_t __nmemb, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ; extern void *realloc (void *__ptr, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__warn_unused_result__)); extern void free (void *__ptr) __attribute__ ((__nothrow__ , __leaf__)); extern void cfree (void *__ptr) __attribute__ ((__nothrow__ , __leaf__)); # 1 "/usr/include/alloca.h" 1 3 4 # 24 "/usr/include/alloca.h" 3 4 # 1 "/usr/lib/gcc/x86_64-linux-gnu/5/include/stddef.h" 1 3 4 # 25 "/usr/include/alloca.h" 2 3 4 extern void *alloca (size_t __size) __attribute__ ((__nothrow__ , __leaf__)); # 493 "/usr/include/stdlib.h" 2 3 4 extern void *valloc (size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) ; extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; extern void *aligned_alloc (size_t __alignment, size_t __size) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__malloc__)) __attribute__ ((__alloc_size__ (2))) ; extern void abort (void) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int at_quick_exit (void (*__func) (void)) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern void exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); extern void quick_exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); extern void _Exit (int __status) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__noreturn__)); extern char *getenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; # 578 "/usr/include/stdlib.h" 3 4 extern int putenv (char *__string) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int setenv (const char *__name, const char *__value, int __replace) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (2))); extern int unsetenv (const char *__name) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); extern int clearenv (void) __attribute__ ((__nothrow__ , __leaf__)); # 606 "/usr/include/stdlib.h" 3 4 extern char *mktemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); # 619 "/usr/include/stdlib.h" 3 4 extern int mkstemp (char *__template) __attribute__ ((__nonnull__ (1))) ; # 641 "/usr/include/stdlib.h" 3 4 extern int mkstemps (char *__template, int __suffixlen) __attribute__ ((__nonnull__ (1))) ; # 662 "/usr/include/stdlib.h" 3 4 extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; # 711 "/usr/include/stdlib.h" 3 4 extern int system (const char *__command) ; # 733 "/usr/include/stdlib.h" 3 4 extern char *realpath (const char *__restrict __name, char *__restrict __resolved) __attribute__ ((__nothrow__ , __leaf__)) ; typedef int (*__compar_fn_t) (const void *, const void *); # 751 "/usr/include/stdlib.h" 3 4 extern void *bsearch (const void *__key, const void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 2, 5))) ; extern void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4))); # 774 "/usr/include/stdlib.h" 3 4 extern int abs (int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; extern long int labs (long int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; __extension__ extern long long int llabs (long long int __x) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; extern div_t div (int __numer, int __denom) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; extern ldiv_t ldiv (long int __numer, long int __denom) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; __extension__ extern lldiv_t lldiv (long long int __numer, long long int __denom) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__const__)) ; # 811 "/usr/include/stdlib.h" 3 4 extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; extern char *gcvt (double __value, int __ndigit, char *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ; extern char *qecvt (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; extern char *qfcvt (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4))) ; extern char *qgcvt (long double __value, int __ndigit, char *__buf) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3))) ; extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); extern int qecvt_r (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); extern int qfcvt_r (long double __value, int __ndigit, int *__restrict __decpt, int *__restrict __sign, char *__restrict __buf, size_t __len) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (3, 4, 5))); extern int mblen (const char *__s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); extern int mbtowc (wchar_t *__restrict __pwc, const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__ , __leaf__)); extern size_t mbstowcs (wchar_t *__restrict __pwcs, const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); extern size_t wcstombs (char *__restrict __s, const wchar_t *__restrict __pwcs, size_t __n) __attribute__ ((__nothrow__ , __leaf__)); extern int rpmatch (const char *__response) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))) ; # 898 "/usr/include/stdlib.h" 3 4 extern int getsubopt (char **__restrict __optionp, char *const *__restrict __tokens, char **__restrict __valuep) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1, 2, 3))) ; # 950 "/usr/include/stdlib.h" 3 4 extern int getloadavg (double __loadavg[], int __nelem) __attribute__ ((__nothrow__ , __leaf__)) __attribute__ ((__nonnull__ (1))); # 1 "/usr/include/x86_64-linux-gnu/bits/stdlib-float.h" 1 3 4 # 955 "/usr/include/stdlib.h" 2 3 4 # 967 "/usr/include/stdlib.h" 3 4 # 45 "../../../server-code/src/login/login.c" 2 # 46 "../../../server-code/src/login/login.c" struct login_interface login_s; struct login_interface *login; struct Login_Config login_config_; struct mmo_char_server server[30]; struct Account_engine account_engine[] = { {account_db_sql, # 52 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 52 "../../../server-code/src/login/login.c" } }; AccountDB* accounts = # 56 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 56 "../../../server-code/src/login/login.c" ; # 66 "../../../server-code/src/login/login.c" static struct DBData login_create_online_user(union DBKey key, va_list args) { struct online_login_data* p; ((p) = (struct online_login_data *) (iMalloc->calloc(((1)),(sizeof(struct online_login_data)),"../../../server-code/src/login/login.c", 69, __func__))); p->account_id = key.i; p->char_server = -1; p->waiting_disconnect = (-1); return DB->ptr2data(p); } struct online_login_data* login_add_online_user(int char_server, int account_id) { struct online_login_data* p; p = ( DB->data2ptr((login->online_db)->ensure((login->online_db),DB->i2key(account_id),(login->create_online_user))) ); p->char_server = char_server; if( p->waiting_disconnect != (-1) ) { timer->delete(p->waiting_disconnect, login->waiting_disconnect_timer); p->waiting_disconnect = (-1); } return p; } void login_remove_online_user(int account_id) { struct online_login_data* p; p = (struct online_login_data*)( DB->data2ptr((login->online_db)->get((login->online_db),DB->i2key(account_id))) ); if( p == # 93 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 93 "../../../server-code/src/login/login.c" ) return; if( p->waiting_disconnect != (-1) ) timer->delete(p->waiting_disconnect, login->waiting_disconnect_timer); ( (login->online_db)->remove((login->online_db),DB->i2key(account_id), # 98 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 98 "../../../server-code/src/login/login.c" ) ); } static int login_waiting_disconnect_timer(int tid, int64 tick, int id, intptr_t data) { struct online_login_data* p = (struct online_login_data*)( DB->data2ptr((login->online_db)->get((login->online_db),DB->i2key(id))) ); if( p != # 103 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 103 "../../../server-code/src/login/login.c" && p->waiting_disconnect == tid && p->account_id == id ) { p->waiting_disconnect = (-1); login->remove_online_user(id); ( (login->auth_db)->remove((login->auth_db),DB->i2key(id), # 107 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 107 "../../../server-code/src/login/login.c" ) ); } return 0; } static int login_online_db_setoffline(union DBKey key, struct DBData *data, va_list ap) { struct online_login_data* p = DB->data2ptr(data); int server_id = # 118 "../../../server-code/src/login/login.c" 3 4 __builtin_va_arg( # 118 "../../../server-code/src/login/login.c" ap # 118 "../../../server-code/src/login/login.c" 3 4 , # 118 "../../../server-code/src/login/login.c" int # 118 "../../../server-code/src/login/login.c" 3 4 ) # 118 "../../../server-code/src/login/login.c" ; do { if (((void)(p), # 119 "../../../server-code/src/login/login.c" 3 4 0 # 119 "../../../server-code/src/login/login.c" )) return(0); } while(0); if( server_id == -1 ) { p->char_server = -1; if( p->waiting_disconnect != (-1) ) { timer->delete(p->waiting_disconnect, login->waiting_disconnect_timer); p->waiting_disconnect = (-1); } } else if( p->char_server == server_id ) p->char_server = -2; return 0; } static int login_online_data_cleanup_sub(union DBKey key, struct DBData *data, va_list ap) { struct online_login_data *character= DB->data2ptr(data); do { if (((void)(character), # 140 "../../../server-code/src/login/login.c" 3 4 0 # 140 "../../../server-code/src/login/login.c" )) return(0); } while(0); if (character->char_server == -2) login->remove_online_user(character->account_id); return 0; } static int login_online_data_cleanup(int tid, int64 tick, int id, intptr_t data) { login->online_db->foreach(login->online_db, login->online_data_cleanup_sub); return 0; } int charif_sendallwos(int sfd, uint8* buf, size_t len) { int i, c; do { if (((void)(buf), # 159 "../../../server-code/src/login/login.c" 3 4 0 # 159 "../../../server-code/src/login/login.c" )) return(0); } while(0); for( i = 0, c = 0; i < ( (int)(sizeof(server)/sizeof((server)[0])) ); ++i ) { int fd = server[i].fd; if (sockt->session_is_valid(fd) && fd != sfd) { WFIFOHEAD(fd,len); memcpy(WFIFOP(fd,0), buf, len); WFIFOSET(fd,len); ++c; } } return c; } void chrif_server_init(int id) { do { if (( (id >= 0 && id < 30) ? # 178 "../../../server-code/src/login/login.c" 3 4 0 # 178 "../../../server-code/src/login/login.c" : (nullpo->assert_report("../../../server-code/src/login/login.c", 178, __func__, "id >= 0 && id < 30", "failed assertion"), # 178 "../../../server-code/src/login/login.c" 3 4 1 # 178 "../../../server-code/src/login/login.c" ) )) return; } while(0); memset(&server[id], 0, sizeof(server[id])); server[id].fd = -1; } void chrif_server_destroy(int id) { do { if (( (id >= 0 && id < 30) ? # 187 "../../../server-code/src/login/login.c" 3 4 0 # 187 "../../../server-code/src/login/login.c" : (nullpo->assert_report("../../../server-code/src/login/login.c", 187, __func__, "id >= 0 && id < 30", "failed assertion"), # 187 "../../../server-code/src/login/login.c" 3 4 1 # 187 "../../../server-code/src/login/login.c" ) )) return; } while(0); if (server[id].fd != -1) { sockt->close(server[id].fd); server[id].fd = -1; } } void chrif_server_reset(int id) { login->online_db->foreach(login->online_db, login->online_db_setoffline, id); chrif_server_destroy(id); chrif_server_init(id); } void chrif_on_disconnect(int id) { do { if (( (id >= 0 && id < 30) ? # 208 "../../../server-code/src/login/login.c" 3 4 0 # 208 "../../../server-code/src/login/login.c" : (nullpo->assert_report("../../../server-code/src/login/login.c", 208, __func__, "id >= 0 && id < 30", "failed assertion"), # 208 "../../../server-code/src/login/login.c" 3 4 1 # 208 "../../../server-code/src/login/login.c" ) )) return; } while(0); (showmsg->showStatus(("Char-server '%s' has disconnected.\n"), server[id].name)); chrif_server_reset(id); } static int login_sync_ip_addresses(int tid, int64 tick, int id, intptr_t data) { uint8 buf[2]; (showmsg->showInfo(("IP Sync in progress...\n"))); WBUFW(buf,0) = 0x2735; charif_sendallwos(-1, buf, 2); return 0; } # 229 "../../../server-code/src/login/login.c" 3 4 _Bool # 229 "../../../server-code/src/login/login.c" login_check_encrypted(const char* str1, const char* str2, const char* passwd) { char tmpstr[64+1], md5str[32+1]; do { if (((void)(str1), # 233 "../../../server-code/src/login/login.c" 3 4 0 # 233 "../../../server-code/src/login/login.c" )) return(0); } while(0); do { if (((void)(str2), # 234 "../../../server-code/src/login/login.c" 3 4 0 # 234 "../../../server-code/src/login/login.c" )) return(0); } while(0); do { if (((void)(passwd), # 235 "../../../server-code/src/login/login.c" 3 4 0 # 235 "../../../server-code/src/login/login.c" )) return(0); } while(0); (strlib->safesnprintf_((tmpstr),(sizeof(tmpstr)),("%s%s"), str1, str2)); MD5_String(tmpstr, md5str); return (0==strcmp(passwd, md5str)); } # 242 "../../../server-code/src/login/login.c" 3 4 _Bool # 242 "../../../server-code/src/login/login.c" login_check_password(const char* md5key, int passwdenc, const char* passwd, const char* refpass) { do { if (((void)(passwd), # 244 "../../../server-code/src/login/login.c" 3 4 0 # 244 "../../../server-code/src/login/login.c" )) return(0); } while(0); do { if (((void)(refpass), # 245 "../../../server-code/src/login/login.c" 3 4 0 # 245 "../../../server-code/src/login/login.c" )) return(0); } while(0); if(passwdenc == PWENC_NONE) { return (0==strcmp(passwd, refpass)); } else { return ((passwdenc&PWENC_ENCRYPT) && login->check_encrypted(md5key, refpass, passwd)) || ((passwdenc&PWENC_ENCRYPT2) && login->check_encrypted(refpass, md5key, passwd)); } } # 265 "../../../server-code/src/login/login.c" uint32 login_lan_subnet_check(uint32 ip) { return sockt->lan_subnet_check(ip, # 267 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 267 "../../../server-code/src/login/login.c" ); } void login_fromchar_auth_ack(int fd, int account_id, uint32 login_id1, uint32 login_id2, uint8 sex, int request_id, struct login_auth_node* node) { WFIFOHEAD(fd,33); WFIFOW(fd,0) = 0x2713; WFIFOL(fd,2) = account_id; WFIFOL(fd,6) = login_id1; WFIFOL(fd,10) = login_id2; WFIFOB(fd,14) = sex; if (node) { WFIFOB(fd,15) = 0; WFIFOL(fd,16) = request_id; WFIFOL(fd,20) = node->version; WFIFOB(fd,24) = node->clienttype; WFIFOL(fd,25) = node->group_id; WFIFOL(fd,29) = (unsigned int)node->expiration_time; } else { WFIFOB(fd,15) = 1; WFIFOL(fd,16) = request_id; WFIFOL(fd,20) = 0; WFIFOB(fd,24) = 0; WFIFOL(fd,25) = 0; WFIFOL(fd,29) = 0; } WFIFOSET(fd,33); } void login_fromchar_parse_auth(int fd, int id, const char *const ip) { struct login_auth_node* node; int account_id = RFIFOL(fd,2); uint32 login_id1 = RFIFOL(fd,6); uint32 login_id2 = RFIFOL(fd,10); uint8 sex = RFIFOB(fd,14); int request_id = RFIFOL(fd,19); RFIFOSKIP(fd,23); node = (struct login_auth_node*)( DB->data2ptr((login->auth_db)->get((login->auth_db),DB->i2key(account_id))) ); if( core->runflag == LOGINSERVER_ST_RUNNING && node != # 313 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 313 "../../../server-code/src/login/login.c" && node->account_id == account_id && node->login_id1 == login_id1 && node->login_id2 == login_id2 && node->sex == ( ((sex) == SEX_FEMALE) ? 'F' : ((sex) == SEX_MALE) ? 'M' : 'S' ) ) { login->fromchar_auth_ack(fd, account_id, login_id1, login_id2, sex, request_id, node); ( (login->auth_db)->remove((login->auth_db),DB->i2key(account_id), # 325 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 325 "../../../server-code/src/login/login.c" ) ); } else { do { if (((void)(ip), # 329 "../../../server-code/src/login/login.c" 3 4 0 # 329 "../../../server-code/src/login/login.c" )) return; } while(0); (showmsg->showStatus(("Char-server '%s': authentication of the account %d REFUSED (ip: %s).\n"), server[id].name, account_id, ip)); login->fromchar_auth_ack(fd, account_id, login_id1, login_id2, sex, request_id, # 331 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 331 "../../../server-code/src/login/login.c" ); } } void login_fromchar_parse_update_users(int fd, int id) { int users = RFIFOL(fd,2); RFIFOSKIP(fd,6); if( server[id].users != users ) { (showmsg->showStatus(("set users %s : %d\n"), server[id].name, users)); server[id].users = (uint16)users; } } void login_fromchar_parse_request_change_email(int fd, int id, const char *const ip) { struct mmo_account acc; char email[40]; int account_id = RFIFOL(fd,2); (strlib->safestrncpy_((email),(RFIFOP(fd,6)),(40))); (strlib->remove_control_chars_(email)); RFIFOSKIP(fd,46); if( (strlib->e_mail_check_(email)) == 0 ) (showmsg->showNotice(("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - e-mail is invalid (account: %d, ip: %s)\n"), server[id].name, account_id, ip)); else if( !accounts->load_num(accounts, &acc, account_id) || strcmp(acc.email, "a@a.com") == 0 || acc.email[0] == '\0' ) (showmsg->showNotice(("Char-server '%s': Attempt to create an e-mail on an account with a default e-mail REFUSED - account doesn't exist or e-mail of account isn't default e-mail (account: %d, ip: %s).\n"), server[id].name, account_id, ip)); else { memcpy(acc.email, email, sizeof(acc.email)); (showmsg->showNotice(("Char-server '%s': Create an e-mail on an account with a default e-mail (account: %d, new e-mail: %s, ip: %s).\n"), server[id].name, account_id, email, ip)); accounts->save(accounts, &acc); } } void login_fromchar_account(int fd, int account_id, struct mmo_account *acc) { WFIFOHEAD(fd,72); WFIFOW(fd,0) = 0x2717; WFIFOL(fd,2) = account_id; if (acc) { time_t expiration_time = 0; char email[40] = ""; int group_id = 0; uint8 char_slots = 0; char birthdate[10+1] = ""; char pincode[4+1] = "\0\0\0\0"; (strlib->safestrncpy_((email),(acc->email),(sizeof(email)))); expiration_time = acc->expiration_time; group_id = acc->group_id; char_slots = acc->char_slots; (strlib->safestrncpy_((pincode),(acc->pincode),(sizeof(pincode)))); (strlib->safestrncpy_((birthdate),(acc->birthdate),(sizeof(birthdate)))); if (pincode[0] == '\0') memset(pincode,'\0',sizeof(pincode)); (strlib->safestrncpy_((WFIFOP(fd,6)),(email),(40))); WFIFOL(fd,46) = (uint32)expiration_time; WFIFOB(fd,50) = (unsigned char)group_id; WFIFOB(fd,51) = char_slots; (strlib->safestrncpy_((WFIFOP(fd,52)),(birthdate),(10+1))); (strlib->safestrncpy_((WFIFOP(fd,63)),(pincode),(4+1))); WFIFOL(fd,68) = acc->pincode_change; } else { (strlib->safestrncpy_((WFIFOP(fd,6)),(""),(40))); WFIFOL(fd,46) = 0; WFIFOB(fd,50) = 0; WFIFOB(fd,51) = 0; (strlib->safestrncpy_((WFIFOP(fd,52)),(""),(10+1))); (strlib->safestrncpy_((WFIFOP(fd,63)),("\0\0\0\0"),(4+1))); WFIFOL(fd,68) = 0; } WFIFOSET(fd,72); } void login_fromchar_parse_account_data(int fd, int id, const char *const ip) { struct mmo_account acc; int account_id = RFIFOL(fd,2); RFIFOSKIP(fd,6); if( !accounts->load_num(accounts, &acc, account_id) ) { (showmsg->showNotice(("Char-server '%s': account %d NOT found (ip: %s).\n"), server[id].name, account_id, ip)); login->fromchar_account(fd, account_id, # 425 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 425 "../../../server-code/src/login/login.c" ); } else { login->fromchar_account(fd, account_id, &acc); } } void login_fromchar_pong(int fd) { WFIFOHEAD(fd,2); WFIFOW(fd,0) = 0x2718; WFIFOSET(fd,2); } void login_fromchar_parse_ping(int fd) { RFIFOSKIP(fd,2); login->fromchar_pong(fd); } void login_fromchar_parse_change_email(int fd, int id, const char *const ip) { struct mmo_account acc; char actual_email[40]; char new_email[40]; int account_id = RFIFOL(fd,2); (strlib->safestrncpy_((actual_email),(RFIFOP(fd,6)),(40))); (strlib->safestrncpy_((new_email),(RFIFOP(fd,46)),(40))); RFIFOSKIP(fd, 86); if( (strlib->e_mail_check_(actual_email)) == 0 ) (showmsg->showNotice(("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual email is invalid (account: %d, ip: %s)\n"), server[id].name, account_id, ip)); else if( (strlib->e_mail_check_(new_email)) == 0 ) (showmsg->showNotice(("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a invalid new e-mail (account: %d, ip: %s)\n"), server[id].name, account_id, ip)); else if( strcasecmp(new_email, "a@a.com") == 0 ) (showmsg->showNotice(("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command) with a default e-mail (account: %d, ip: %s)\n"), server[id].name, account_id, ip)); else if( !accounts->load_num(accounts, &acc, account_id) ) (showmsg->showNotice(("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but account doesn't exist (account: %d, ip: %s).\n"), server[id].name, account_id, ip)); else if( strcasecmp(acc.email, actual_email) != 0 ) (showmsg->showNotice(("Char-server '%s': Attempt to modify an e-mail on an account (@email GM command), but actual e-mail is incorrect (account: %d (%s), actual e-mail: %s, proposed e-mail: %s, ip: %s).\n"), server[id].name, account_id, acc.userid, acc.email, actual_email, ip)); else { (strlib->safestrncpy_((acc.email),(new_email),(sizeof(acc.email)))); (showmsg->showNotice(("Char-server '%s': Modify an e-mail on an account (@email GM command) (account: %d (%s), new e-mail: %s, ip: %s).\n"), server[id].name, account_id, acc.userid, new_email, ip)); accounts->save(accounts, &acc); } } void login_fromchar_account_update_other(int account_id, unsigned int state) { uint8 buf[11]; WBUFW(buf,0) = 0x2731; WBUFL(buf,2) = account_id; WBUFB(buf,6) = 0; WBUFL(buf,7) = state; charif_sendallwos(-1, buf, 11); } void login_fromchar_parse_account_update(int fd, int id, const char *const ip) { struct mmo_account acc; int account_id = RFIFOL(fd,2); unsigned int state = RFIFOL(fd,6); RFIFOSKIP(fd,10); if( !accounts->load_num(accounts, &acc, account_id) ) (showmsg->showNotice(("Char-server '%s': Error of Status change (account: %d not found, suggested status %u, ip: %s).\n"), server[id].name, account_id, state, ip)); else if( acc.state == state ) (showmsg->showNotice(("Char-server '%s': Error of Status change - actual status is already the good status (account: %d, status %u, ip: %s).\n"), server[id].name, account_id, state, ip)); else { (showmsg->showNotice(("Char-server '%s': Status change (account: %d, new status %u, ip: %s).\n"), server[id].name, account_id, state, ip)); acc.state = state; accounts->save(accounts, &acc); if (state != 0) { login->fromchar_account_update_other(account_id, state); } } } void login_fromchar_ban(int account_id, time_t timestamp) { uint8 buf[11]; WBUFW(buf,0) = 0x2731; WBUFL(buf,2) = account_id; WBUFB(buf,6) = 1; WBUFL(buf,7) = (uint32)timestamp; charif_sendallwos(-1, buf, 11); } void login_fromchar_parse_ban(int fd, int id, const char *const ip) { struct mmo_account acc; int account_id = RFIFOL(fd,2); int year = RFIFOW(fd,6); int month = RFIFOW(fd,8); int mday = RFIFOW(fd,10); int hour = RFIFOW(fd,12); int min = RFIFOW(fd,14); int sec = RFIFOW(fd,16); RFIFOSKIP(fd,18); if (!accounts->load_num(accounts, &acc, account_id)) { (showmsg->showNotice(("Char-server '%s': Error of ban request (account: %d not found, ip: %s).\n"), server[id].name, account_id, ip)); } else { time_t timestamp; struct tm *tmtime; if (acc.unban_time == 0 || acc.unban_time < time( # 543 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 543 "../../../server-code/src/login/login.c" )) timestamp = time( # 544 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 544 "../../../server-code/src/login/login.c" ); else timestamp = acc.unban_time; tmtime = localtime(×tamp); tmtime->tm_year += year; tmtime->tm_mon += month; tmtime->tm_mday += mday; tmtime->tm_hour += hour; tmtime->tm_min += min; tmtime->tm_sec += sec; timestamp = mktime(tmtime); if (timestamp == -1) { (showmsg->showNotice(("Char-server '%s': Error of ban request (account: %d, invalid date, ip: %s).\n"), server[id].name, account_id, ip)); } else if( timestamp <= time( # 557 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 557 "../../../server-code/src/login/login.c" ) || timestamp == 0 ) { (showmsg->showNotice(("Char-server '%s': Error of ban request (account: %d, new date unbans the account, ip: %s).\n"), server[id].name, account_id, ip)); } else { char tmpstr[24]; timestamp2string(tmpstr, sizeof(tmpstr), timestamp, login->config->date_format); (showmsg->showNotice(("Char-server '%s': Ban request (account: %d, new final date of banishment: %ld (%s), ip: %s).\n"), server[id].name, account_id, (long)timestamp, tmpstr, ip)) ; acc.unban_time = timestamp; accounts->save(accounts, &acc); login->fromchar_ban(account_id, timestamp); } } } void login_fromchar_change_sex_other(int account_id, char sex) { unsigned char buf[7]; WBUFW(buf,0) = 0x2723; WBUFL(buf,2) = account_id; WBUFB(buf,6) = ( ((sex) == 'F') ? SEX_FEMALE : ((sex) == 'M') ? SEX_MALE : SEX_SERVER ); charif_sendallwos(-1, buf, 7); } void login_fromchar_parse_change_sex(int fd, int id, const char *const ip) { struct mmo_account acc; int account_id = RFIFOL(fd,2); RFIFOSKIP(fd,6); if( !accounts->load_num(accounts, &acc, account_id) ) (showmsg->showNotice(("Char-server '%s': Error of sex change (account: %d not found, ip: %s).\n"), server[id].name, account_id, ip)); else if( acc.sex == 'S' ) (showmsg->showNotice(("Char-server '%s': Error of sex change - account to change is a Server account (account: %d, ip: %s).\n"), server[id].name, account_id, ip)); else { char sex = ( acc.sex == 'M' ) ? 'F' : 'M'; (showmsg->showNotice(("Char-server '%s': Sex change (account: %d, new sex %c, ip: %s).\n"), server[id].name, account_id, sex, ip)); acc.sex = sex; accounts->save(accounts, &acc); login->fromchar_change_sex_other(account_id, sex); } } void login_fromchar_parse_account_reg2(int fd, int id, const char *const ip) { struct mmo_account acc; int account_id = RFIFOL(fd,4); if( !accounts->load_num(accounts, &acc, account_id) ) (showmsg->showStatus(("Char-server '%s': receiving (from the char-server) of account_reg2 (account: %d not found, ip: %s).\n"), server[id].name, account_id, ip)); else { mmo_save_accreg2(accounts,fd,account_id,RFIFOL(fd, 8)); } RFIFOSKIP(fd,RFIFOW(fd,2)); } void login_fromchar_parse_unban(int fd, int id, const char *const ip) { struct mmo_account acc; int account_id = RFIFOL(fd,2); RFIFOSKIP(fd,6); if( !accounts->load_num(accounts, &acc, account_id) ) (showmsg->showNotice(("Char-server '%s': Error of Unban request (account: %d not found, ip: %s).\n"), server[id].name, account_id, ip)); else if( acc.unban_time == 0 ) (showmsg->showNotice(("Char-server '%s': Error of Unban request (account: %d, no change for unban date, ip: %s).\n"), server[id].name, account_id, ip)); else { (showmsg->showNotice(("Char-server '%s': Unban request (account: %d, ip: %s).\n"), server[id].name, account_id, ip)); acc.unban_time = 0; accounts->save(accounts, &acc); } } void login_fromchar_parse_account_online(int fd, int id) { login->add_online_user(id, RFIFOL(fd,2)); RFIFOSKIP(fd,6); } void login_fromchar_parse_account_offline(int fd) { login->remove_online_user(RFIFOL(fd,2)); RFIFOSKIP(fd,6); } void login_fromchar_parse_online_accounts(int fd, int id) { uint32 i, users; login->online_db->foreach(login->online_db, login->online_db_setoffline, id); users = RFIFOW(fd,4); for (i = 0; i < users; i++) { int aid = RFIFOL(fd,6+i*4); struct online_login_data *p = ( DB->data2ptr((login->online_db)->ensure((login->online_db),DB->i2key(aid),(login->create_online_user))) ); p->char_server = id; if (p->waiting_disconnect != (-1)) { timer->delete(p->waiting_disconnect, login->waiting_disconnect_timer); p->waiting_disconnect = (-1); } } } void login_fromchar_parse_request_account_reg2(int fd) { int account_id = RFIFOL(fd,2); int char_id = RFIFOL(fd,6); RFIFOSKIP(fd,10); mmo_send_accreg2(accounts,fd,account_id,char_id); } void login_fromchar_parse_update_wan_ip(int fd, int id) { server[id].ip = ntohl(RFIFOL(fd,2)); (showmsg->showInfo(("Updated IP of Server #%d to %u.%u.%u.%u.\n"),id, CONVIP(server[id].ip))); RFIFOSKIP(fd,6); } void login_fromchar_parse_all_offline(int fd, int id) { (showmsg->showInfo(("Setting accounts from char-server %d offline.\n"), id)); login->online_db->foreach(login->online_db, login->online_db_setoffline, id); RFIFOSKIP(fd,2); } void login_fromchar_parse_change_pincode(int fd) { struct mmo_account acc; if (accounts->load_num(accounts, &acc, RFIFOL(fd,2))) { (strlib->safestrncpy_((acc.pincode),(RFIFOP(fd,6)),(sizeof(acc.pincode)))); acc.pincode_change = ((unsigned int)time( # 703 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 703 "../../../server-code/src/login/login.c" )); accounts->save(accounts, &acc); } RFIFOSKIP(fd,11); } # 709 "../../../server-code/src/login/login.c" 3 4 _Bool # 709 "../../../server-code/src/login/login.c" login_fromchar_parse_wrong_pincode(int fd) { struct mmo_account acc; if( accounts->load_num(accounts, &acc, RFIFOL(fd,2) ) ) { struct online_login_data* ld = (struct online_login_data*)( DB->data2ptr((login->online_db)->get((login->online_db),DB->i2key(acc.account_id))) ); if (ld == # 716 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 716 "../../../server-code/src/login/login.c" ) { RFIFOSKIP(fd,6); return # 718 "../../../server-code/src/login/login.c" 3 4 1 # 718 "../../../server-code/src/login/login.c" ; } login_log(sockt->host2ip(acc.last_ip), acc.userid, 100, "PIN Code check failed"); } login->remove_online_user(acc.account_id); RFIFOSKIP(fd,6); return # 726 "../../../server-code/src/login/login.c" 3 4 0 # 726 "../../../server-code/src/login/login.c" ; } void login_fromchar_accinfo(int fd, int account_id, int u_fd, int u_aid, int u_group, int map_fd, struct mmo_account *acc) { if (acc) { WFIFOHEAD(fd,183); WFIFOW(fd,0) = 0x2737; (strlib->safestrncpy_((WFIFOP(fd,2)),(acc->userid),((23 + 1)))); if (u_group >= acc->group_id) (strlib->safestrncpy_((WFIFOP(fd,26)),(acc->pass),(33))); else memset(WFIFOP(fd,26), '\0', 33); (strlib->safestrncpy_((WFIFOP(fd,59)),(acc->email),(40))); (strlib->safestrncpy_((WFIFOP(fd,99)),(acc->last_ip),(16))); WFIFOL(fd,115) = acc->group_id; (strlib->safestrncpy_((WFIFOP(fd,119)),(acc->lastlogin),(24))); WFIFOL(fd,143) = acc->logincount; WFIFOL(fd,147) = acc->state; if (u_group >= acc->group_id) (strlib->safestrncpy_((WFIFOP(fd,151)),(acc->pincode),(5))); else memset(WFIFOP(fd,151), '\0', 5); (strlib->safestrncpy_((WFIFOP(fd,156)),(acc->birthdate),(11))); WFIFOL(fd,167) = map_fd; WFIFOL(fd,171) = u_fd; WFIFOL(fd,175) = u_aid; WFIFOL(fd,179) = account_id; WFIFOSET(fd,183); } else { WFIFOHEAD(fd,18); WFIFOW(fd,0) = 0x2736; WFIFOL(fd,2) = map_fd; WFIFOL(fd,6) = u_fd; WFIFOL(fd,10) = u_aid; WFIFOL(fd,14) = account_id; WFIFOSET(fd,18); } } void login_fromchar_parse_accinfo(int fd) { struct mmo_account acc; int account_id = RFIFOL(fd, 2), u_fd = RFIFOL(fd, 6), u_aid = RFIFOL(fd, 10), u_group = RFIFOL(fd, 14), map_fd = RFIFOL(fd, 18); if (accounts->load_num(accounts, &acc, account_id)) { login->fromchar_accinfo(fd, account_id, u_fd, u_aid, u_group, map_fd, &acc); } else { login->fromchar_accinfo(fd, account_id, u_fd, u_aid, u_group, map_fd, # 776 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 776 "../../../server-code/src/login/login.c" ); } RFIFOSKIP(fd,22); } int login_parse_fromchar(int fd) { int id; uint32 ipl; char ip[16]; do { for ((id) = (0); (id) < (( (int)(sizeof(server)/sizeof((server)[0])) )); ++(id)) if (server[id].fd == fd) break; } while( # 790 "../../../server-code/src/login/login.c" 3 4 0 # 790 "../../../server-code/src/login/login.c" ); if( id == ( (int)(sizeof(server)/sizeof((server)[0])) ) ) { (showmsg->showDebug(("login_parse_fromchar: Disconnecting invalid session #%d (is not a char-server)\n"), fd)); sockt->eof(fd); sockt->close(fd); return 0; } if( sockt->session[fd]->flag.eof ) { sockt->close(fd); server[id].fd = -1; chrif_on_disconnect(id); return 0; } ipl = server[id].ip; sockt->ip2str(ipl, ip); while (RFIFOREST(fd) >= 2) { uint16 command = RFIFOW(fd,0); if (( (HPM->packets[hpParse_FromChar])._len_ ) > 0) { int result = HPM->parse_packets(fd,command,hpParse_FromChar); if (result == 1) continue; if (result == 2) return 0; } switch (command) { case 0x2712: if( RFIFOREST(fd) < 23 ) return 0; { login->fromchar_parse_auth(fd, id, ip); } break; case 0x2714: if( RFIFOREST(fd) < 6 ) return 0; { login->fromchar_parse_update_users(fd, id); } break; case 0x2715: if (RFIFOREST(fd) < 46) return 0; { login->fromchar_parse_request_change_email(fd, id, ip); } break; case 0x2716: if( RFIFOREST(fd) < 6 ) return 0; { login->fromchar_parse_account_data(fd, id, ip); } break; case 0x2719: login->fromchar_parse_ping(fd); break; case 0x2722: if (RFIFOREST(fd) < 86) return 0; { login->fromchar_parse_change_email(fd, id, ip); } break; case 0x2724: if (RFIFOREST(fd) < 10) return 0; { login->fromchar_parse_account_update(fd, id, ip); } break; case 0x2725: if (RFIFOREST(fd) < 18) return 0; { login->fromchar_parse_ban(fd, id, ip); } break; case 0x2727: if( RFIFOREST(fd) < 6 ) return 0; { login->fromchar_parse_change_sex(fd, id, ip); } break; case 0x2728: if( RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2) ) return 0; { login->fromchar_parse_account_reg2(fd, id, ip); } break; case 0x272a: if( RFIFOREST(fd) < 6 ) return 0; { login->fromchar_parse_unban(fd, id, ip); } break; case 0x272b: if( RFIFOREST(fd) < 6 ) return 0; login->fromchar_parse_account_online(fd, id); break; case 0x272c: if( RFIFOREST(fd) < 6 ) return 0; login->fromchar_parse_account_offline(fd); break; case 0x272d: if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2)) return 0; { login->fromchar_parse_online_accounts(fd, id); } RFIFOSKIP(fd,RFIFOW(fd,2)); break; case 0x272e: if (RFIFOREST(fd) < 10) return 0; { login->fromchar_parse_request_account_reg2(fd); } break; case 0x2736: if( RFIFOREST(fd) < 6 ) return 0; login->fromchar_parse_update_wan_ip(fd, id); break; case 0x2737: login->fromchar_parse_all_offline(fd, id); break; case 0x2738: if( RFIFOREST(fd) < 11 ) return 0; else { login->fromchar_parse_change_pincode(fd); } break; case 0x2739: if( RFIFOREST(fd) < 6 ) return 0; else { if (login->fromchar_parse_wrong_pincode(fd)) return 0; } break; case 0x2740: if( RFIFOREST(fd) < 22 ) return 0; else { login->fromchar_parse_accinfo(fd); } break; default: (showmsg->showError(("login_parse_fromchar: Unknown packet 0x%x from a char-server! Disconnecting!\n"), command)); sockt->eof(fd); return 0; } } return 0; } int login_mmo_auth_new(const char* userid, const char* pass, const char sex, const char* last_ip) { static int num_regs = 0; static int64 new_reg_tick = 0; int64 tick = timer->gettick(); struct mmo_account acc; do { if (((void)(userid), # 991 "../../../server-code/src/login/login.c" 3 4 0 # 991 "../../../server-code/src/login/login.c" )) return(3); } while(0); do { if (((void)(pass), # 992 "../../../server-code/src/login/login.c" 3 4 0 # 992 "../../../server-code/src/login/login.c" )) return(3); } while(0); do { if (((void)(last_ip), # 993 "../../../server-code/src/login/login.c" 3 4 0 # 993 "../../../server-code/src/login/login.c" )) return(3); } while(0); if( new_reg_tick == 0 ) new_reg_tick = timer->gettick(); if (((tick)-(new_reg_tick)) < 0 && num_regs >= login->config->allowed_regs) { (showmsg->showNotice(("Account registration denied (registration limit exceeded)\n"))); return 3; } if (login->config->new_acc_length_limit && (strlen(userid) < 4 || strlen(pass) < 4)) return 1; if( sex != 'M' && sex != 'F' ) return 0; if( accounts->load_str(accounts, &acc, userid) ) { (showmsg->showNotice(("Attempt of creation of an already existing account (account: %s_%c, pass: %s, received pass: %s)\n"), userid, sex, acc.pass, pass)); return 1; } memset(&acc, '\0', sizeof(acc)); acc.account_id = -1; (strlib->safestrncpy_((acc.userid),(userid),(sizeof(acc.userid)))); (strlib->safestrncpy_((acc.pass),(pass),(sizeof(acc.pass)))); acc.sex = sex; (strlib->safestrncpy_((acc.email),("a@a.com"),(sizeof(acc.email)))); acc.expiration_time = (login->config->start_limited_time != -1) ? time( # 1021 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1021 "../../../server-code/src/login/login.c" ) + login->config->start_limited_time : 0; (strlib->safestrncpy_((acc.lastlogin),("0000-00-00 00:00:00"),(sizeof(acc.lastlogin)))); (strlib->safestrncpy_((acc.last_ip),(last_ip),(sizeof(acc.last_ip)))); (strlib->safestrncpy_((acc.birthdate),("0000-00-00"),(sizeof(acc.birthdate)))); (strlib->safestrncpy_((acc.pincode),("\0"),(sizeof(acc.pincode)))); acc.pincode_change = 0; acc.char_slots = 0; if( !accounts->create(accounts, &acc) ) return 0; (showmsg->showNotice(("Account creation (account %s, id: %d, pass: %s, sex: %c)\n"), acc.userid, acc.account_id, acc.pass, acc.sex)); if( ((tick)-(new_reg_tick)) > 0 ) { num_regs = 0; new_reg_tick = tick + login->config->time_allowed*1000; } ++num_regs; return -1; } int login_mmo_auth(struct login_session_data* sd, # 1047 "../../../server-code/src/login/login.c" 3 4 _Bool # 1047 "../../../server-code/src/login/login.c" isServer) { struct mmo_account acc; size_t len; char ip[16]; do { if (((void)(sd), # 1052 "../../../server-code/src/login/login.c" 3 4 0 # 1052 "../../../server-code/src/login/login.c" )) return(0); } while(0); sockt->ip2str(sockt->session[sd->fd]->client_addr, ip); if (login->config->use_dnsbl) { char r_ip[16]; char ip_dnsbl[256]; char* dnsbl_serv; uint8* sin_addr = (uint8*)&sockt->session[sd->fd]->client_addr; sprintf(r_ip, "%u.%u.%u.%u", sin_addr[0], sin_addr[1], sin_addr[2], sin_addr[3]); for (dnsbl_serv = strtok(login->config->dnsbl_servs,","); dnsbl_serv != # 1064 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1064 "../../../server-code/src/login/login.c" ; dnsbl_serv = strtok( # 1064 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1064 "../../../server-code/src/login/login.c" ,",")) { sprintf(ip_dnsbl, "%s.%s", r_ip, (strlib->trim_(dnsbl_serv))); if (sockt->host2ip(ip_dnsbl)) { (showmsg->showInfo(("DNSBL: (%s) Blacklisted. User Kicked.\n"), r_ip)); return 3; } } } if (login->config->check_client_version && sd->version != login->config->client_version_to_connect) return 5; len = (strlib->strnlen_((sd->userid),((23 + 1)))); if (login->config->new_account_flag) { if (len > 2 && sd->passwd[0] != '\0' && sd->passwdenc == PWENC_NONE && sd->userid[len-2] == '_' && memchr("FfMm", sd->userid[len-1], 4)) { int result; len -= 2; sd->userid[len] = '\0'; result = login->mmo_auth_new(sd->userid, sd->passwd, (toupper((unsigned char)(sd->userid[len+1]))), ip); if( result != -1 ) return result; } } if( len <= 0 ) { (showmsg->showNotice(("Empty userid (received pass: '%s', ip: %s)\n"), sd->passwd, ip)); return 0; } if( !accounts->load_str(accounts, &acc, sd->userid) ) { (showmsg->showNotice(("Unknown account (account: %s, received pass: %s, ip: %s)\n"), sd->userid, sd->passwd, ip)); return 0; } if( !login->check_password(sd->md5key, sd->passwdenc, sd->passwd, acc.pass) ) { (showmsg->showNotice(("Invalid password (account: '%s', pass: '%s', received pass: '%s', ip: %s)\n"), sd->userid, acc.pass, sd->passwd, ip)); return 1; } if( acc.unban_time != 0 && acc.unban_time > time( # 1113 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1113 "../../../server-code/src/login/login.c" ) ) { char tmpstr[24]; timestamp2string(tmpstr, sizeof(tmpstr), acc.unban_time, login->config->date_format); (showmsg->showNotice(("Connection refused (account: %s, pass: %s, banned until %s, ip: %s)\n"), sd->userid, sd->passwd, tmpstr, ip)); return 6; } if( acc.state != 0 ) { (showmsg->showNotice(("Connection refused (account: %s, pass: %s, state: %u, ip: %s)\n"), sd->userid, sd->passwd, acc.state, ip)); return acc.state - 1; } if (login->config->client_hash_check && !isServer) { struct client_hash_node *node = # 1126 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1126 "../../../server-code/src/login/login.c" ; # 1127 "../../../server-code/src/login/login.c" 3 4 _Bool # 1127 "../../../server-code/src/login/login.c" match = # 1127 "../../../server-code/src/login/login.c" 3 4 0 # 1127 "../../../server-code/src/login/login.c" ; for (node = login->config->client_hash_nodes; node; node = node->next) { if( acc.group_id < node->group_id ) continue; if( *node->hash == '\0' || (sd->has_client_hash && memcmp(node->hash, sd->client_hash, 16) == 0 ) ) { match = # 1135 "../../../server-code/src/login/login.c" 3 4 1 # 1135 "../../../server-code/src/login/login.c" ; break; } } if( !match ) { char smd5[33]; int i; if( !sd->has_client_hash ) { (showmsg->showNotice(("Client didn't send client hash (account: %s, pass: %s, ip: %s)\n"), sd->userid, sd->passwd, ip)); return 5; } for( i = 0; i < 16; i++ ) sprintf(&smd5[i * 2], "%02x", sd->client_hash[i]); smd5[32] = '\0'; (showmsg->showNotice(("Invalid client hash (account: %s, pass: %s, sent md5: %s, ip: %s)\n"), sd->userid, sd->passwd, smd5, ip)); return 5; } } (showmsg->showNotice(("Authentication accepted (account: %s, id: %d, ip: %s)\n"), sd->userid, acc.account_id, ip)); sd->account_id = acc.account_id; sd->login_id1 = rnd() + 1; sd->login_id2 = rnd() + 1; (strlib->safestrncpy_((sd->lastlogin),(acc.lastlogin),(sizeof(sd->lastlogin)))); sd->sex = acc.sex; sd->group_id = (uint8)acc.group_id; sd->expiration_time = acc.expiration_time; timestamp2string(acc.lastlogin, sizeof(acc.lastlogin), time( # 1170 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1170 "../../../server-code/src/login/login.c" ), "%Y-%m-%d %H:%M:%S"); (strlib->safestrncpy_((acc.last_ip),(ip),(sizeof(acc.last_ip)))); acc.unban_time = 0; acc.logincount++; accounts->save(accounts, &acc); if( sd->sex != 'S' && sd->account_id < 2000000 ) (showmsg->showWarning(("Account %s has account id %d! Account IDs must be over %d to work properly!\n"), sd->userid, sd->account_id, 2000000)); return -1; } void login_connection_problem(int fd, uint8 status) { WFIFOHEAD(fd,3); WFIFOW(fd,0) = 0x81; WFIFOB(fd,2) = status; WFIFOSET(fd,3); } void login_kick(struct login_session_data* sd) { uint8 buf[6]; do { if (((void)(sd), # 1194 "../../../server-code/src/login/login.c" 3 4 0 # 1194 "../../../server-code/src/login/login.c" )) return; } while(0); WBUFW(buf,0) = 0x2734; WBUFL(buf,2) = sd->account_id; charif_sendallwos(-1, buf, 6); } void login_auth_ok(struct login_session_data* sd) { int fd = 0; uint32 ip; uint8 server_num, n; struct login_auth_node* node; int i; do { if (((void)(sd), # 1208 "../../../server-code/src/login/login.c" 3 4 0 # 1208 "../../../server-code/src/login/login.c" )) return; } while(0); fd = sd->fd; ip = sockt->session[fd]->client_addr; if( core->runflag != LOGINSERVER_ST_RUNNING ) { login->connection_problem(fd, 1); return; } if (login->config->group_id_to_connect >= 0 && sd->group_id != login->config->group_id_to_connect) { (showmsg->showStatus(("Connection refused: the required group id for connection is %d (account: %s, group: %d).\n"), login->config->group_id_to_connect, sd->userid, sd->group_id)); login->connection_problem(fd, 1); return; } else if (login->config->min_group_id_to_connect >= 0 && login->config->group_id_to_connect == -1 && sd->group_id < login->config->min_group_id_to_connect) { (showmsg->showStatus(("Connection refused: the minimum group id required for connection is %d (account: %s, group: %d).\n"), login->config->min_group_id_to_connect, sd->userid, sd->group_id)); login->connection_problem(fd, 1); return; } server_num = 0; for( i = 0; i < ( (int)(sizeof(server)/sizeof((server)[0])) ); ++i ) if (sockt->session_is_active(server[i].fd)) server_num++; if( server_num == 0 ) { (showmsg->showStatus(("Connection refused: there is no char-server online (account: %s).\n"), sd->userid)); login->connection_problem(fd, 1); return; } { struct online_login_data* data = (struct online_login_data*)( DB->data2ptr((login->online_db)->get((login->online_db),DB->i2key(sd->account_id))) ); if( data ) { if( data->char_server > -1 ) { (showmsg->showNotice(("User '%s' is already online - Rejected.\n"), sd->userid)); login->kick(sd); if( data->waiting_disconnect == (-1) ) data->waiting_disconnect = timer->add(timer->gettick()+30000, login->waiting_disconnect_timer, sd->account_id, 0); login->connection_problem(fd, 8); return; } else if( data->char_server == -1 ) { ( (login->auth_db)->remove((login->auth_db),DB->i2key(sd->account_id), # 1258 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1258 "../../../server-code/src/login/login.c" ) ); login->remove_online_user(sd->account_id); data = # 1260 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1260 "../../../server-code/src/login/login.c" ; } } } login_log(ip, sd->userid, 100, "login ok"); (showmsg->showStatus(("Connection of the account '%s' accepted.\n"), sd->userid)); WFIFOHEAD(fd,47+32*server_num); WFIFOW(fd,0) = 0x69; WFIFOW(fd,2) = 47+32*server_num; WFIFOL(fd,4) = sd->login_id1; WFIFOL(fd,8) = sd->account_id; WFIFOL(fd,12) = sd->login_id2; WFIFOL(fd,16) = 0; memset(WFIFOP(fd,20), 0, 24); WFIFOW(fd,44) = 0; WFIFOB(fd,46) = ( ((sd->sex) == 'F') ? SEX_FEMALE : ((sd->sex) == 'M') ? SEX_MALE : SEX_SERVER ); for (i = 0, n = 0; i < ( (int)(sizeof(server)/sizeof((server)[0])) ); ++i) { uint32 subnet_char_ip; if (!sockt->session_is_valid(server[i].fd)) continue; subnet_char_ip = login->lan_subnet_check(ip); WFIFOL(fd,47+n*32) = htonl((subnet_char_ip) ? subnet_char_ip : server[i].ip); WFIFOW(fd,47+n*32+4) = sockt->ntows(htons(server[i].port)); memcpy(WFIFOP(fd,47+n*32+6), server[i].name, 20); WFIFOW(fd,47+n*32+26) = server[i].users; if( server[i].type == CST_PAYING && sd->expiration_time > time( # 1291 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1291 "../../../server-code/src/login/login.c" ) ) WFIFOW(fd,47+n*32+28) = CST_NORMAL; else WFIFOW(fd,47+n*32+28) = server[i].type; WFIFOW(fd,47+n*32+30) = server[i].new_; n++; } WFIFOSET(fd,47+32*server_num); ((node) = (struct login_auth_node *) (iMalloc->calloc(((1)),(sizeof(struct login_auth_node)),"../../../server-code/src/login/login.c", 1302, __func__))); node->account_id = sd->account_id; node->login_id1 = sd->login_id1; node->login_id2 = sd->login_id2; node->sex = sd->sex; node->ip = ip; node->version = sd->version; node->clienttype = sd->clienttype; node->group_id = sd->group_id; node->expiration_time = sd->expiration_time; ( (login->auth_db)->put((login->auth_db),DB->i2key(sd->account_id),DB->ptr2data(node), # 1312 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1312 "../../../server-code/src/login/login.c" ) ); { struct online_login_data* data; data = login->add_online_user(-1, sd->account_id); data->waiting_disconnect = timer->add(timer->gettick()+30000, login->waiting_disconnect_timer, sd->account_id, 0); } } void login_auth_failed(struct login_session_data* sd, int result) { int fd; uint32 ip; do { if (((void)(sd), # 1329 "../../../server-code/src/login/login.c" 3 4 0 # 1329 "../../../server-code/src/login/login.c" )) return; } while(0); fd = sd->fd; ip = sockt->session[fd]->client_addr; if (login->config->log_login) { const char* error; switch( result ) { case 0: error = "Unregistered ID."; break; case 1: error = "Incorrect Password."; break; case 2: error = "Account Expired."; break; case 3: error = "Rejected from server."; break; case 4: error = "Blocked by GM."; break; case 5: error = "Not latest game EXE."; break; case 6: error = "Banned."; break; case 7: error = "Server Over-population."; break; case 8: error = "Account limit from company"; break; case 9: error = "Ban by DBA"; break; case 10: error = "Email not confirmed"; break; case 11: error = "Ban by GM"; break; case 12: error = "Working in DB"; break; case 13: error = "Self Lock"; break; case 14: error = "Not Permitted Group"; break; case 15: error = "Not Permitted Group"; break; case 99: error = "Account gone."; break; case 100: error = "Login info remains."; break; case 101: error = "Hacking investigation."; break; case 102: error = "Bug investigation."; break; case 103: error = "Deleting char."; break; case 104: error = "Deleting spouse char."; break; default : error = "Unknown Error."; break; } login_log(ip, sd->userid, result, error); } if (result == 1 && login->config->dynamic_pass_failure_ban && !sockt->trusted_ip_check(ip)) ipban_log(ip); WFIFOHEAD(fd,26); WFIFOW(fd,0) = 0x83e; WFIFOL(fd,2) = result; if( result != 6 ) memset(WFIFOP(fd,6), '\0', 20); else { struct mmo_account acc; time_t unban_time = ( accounts->load_str(accounts, &acc, sd->userid) ) ? acc.unban_time : 0; timestamp2string(WFIFOP(fd,6), 20, unban_time, login->config->date_format); } WFIFOSET(fd,26); # 1392 "../../../server-code/src/login/login.c" } void login_login_error(int fd, uint8 status) { WFIFOHEAD(fd,23); WFIFOW(fd,0) = 0x6a; WFIFOB(fd,2) = status; WFIFOSET(fd,23); } void login_parse_ping(int fd, struct login_session_data* sd) __attribute__((nonnull (2))); void login_parse_ping(int fd, struct login_session_data* sd) { RFIFOSKIP(fd,26); } void login_parse_client_md5(int fd, struct login_session_data* sd) __attribute__((nonnull (2))); void login_parse_client_md5(int fd, struct login_session_data* sd) { sd->has_client_hash = 1; memcpy(sd->client_hash, RFIFOP(fd, 2), 16); RFIFOSKIP(fd,18); } # 1417 "../../../server-code/src/login/login.c" 3 4 _Bool # 1417 "../../../server-code/src/login/login.c" login_parse_client_login(int fd, struct login_session_data* sd, const char *const ip) __attribute__((nonnull (2))); # 1418 "../../../server-code/src/login/login.c" 3 4 _Bool # 1418 "../../../server-code/src/login/login.c" login_parse_client_login(int fd, struct login_session_data* sd, const char *const ip) { uint32 version; char username[(23 + 1)]; char password[(32+1)]; unsigned char passhash[16]; uint8 clienttype; int result; uint16 command = RFIFOW(fd,0); # 1427 "../../../server-code/src/login/login.c" 3 4 _Bool # 1427 "../../../server-code/src/login/login.c" israwpass = (command==0x0064 || command==0x0277 || command==0x02b0 || command == 0x0825); if(command == 0x0825) { const char *accname = RFIFOP(fd, 9); const char *token = RFIFOP(fd, 0x5C); size_t uAccLen = strlen(accname); size_t uTokenLen = RFIFOREST(fd) - 0x5C; version = RFIFOL(fd,4); if(uAccLen <= 0 || uTokenLen <= 0) { login->auth_failed(sd, 3); return # 1441 "../../../server-code/src/login/login.c" 3 4 1 # 1441 "../../../server-code/src/login/login.c" ; } (strlib->safestrncpy_((username),(accname),((23 + 1)))); (strlib->safestrncpy_((password),(token),((((uTokenLen+1) < ((32+1))) ? (uTokenLen+1) : ((32+1)))))); clienttype = RFIFOB(fd, 8); } else { version = RFIFOL(fd,2); (strlib->safestrncpy_((username),(RFIFOP(fd,6)),((23 + 1)))); if( israwpass ) { (strlib->safestrncpy_((password),(RFIFOP(fd,30)),((23 + 1)))); clienttype = RFIFOB(fd,54); } else { memcpy(passhash, RFIFOP(fd,30), 16); clienttype = RFIFOB(fd,46); } } RFIFOSKIP(fd,RFIFOREST(fd)); sd->clienttype = clienttype; sd->version = version; (strlib->safestrncpy_((sd->userid),(username),((23 + 1)))); if( israwpass ) { (showmsg->showStatus(("Request for connection of %s (ip: %s).\n"), sd->userid, ip)); (strlib->safestrncpy_((sd->passwd),(password),((32+1)))); if (login->config->use_md5_passwds) MD5_String(sd->passwd, sd->passwd); sd->passwdenc = PWENC_NONE; } else { (showmsg->showStatus(("Request for connection (passwdenc mode) of %s (ip: %s).\n"), sd->userid, ip)); (strlib->bin2hex_((sd->passwd),(passhash),(16))); sd->passwdenc = PWENC_BOTH; } if (sd->passwdenc != PWENC_NONE && login->config->use_md5_passwds) { login->auth_failed(sd, 3); return # 1485 "../../../server-code/src/login/login.c" 3 4 1 # 1485 "../../../server-code/src/login/login.c" ; } result = login->mmo_auth(sd, # 1488 "../../../server-code/src/login/login.c" 3 4 0 # 1488 "../../../server-code/src/login/login.c" ); if( result == -1 ) login->auth_ok(sd); else login->auth_failed(sd, result); return # 1494 "../../../server-code/src/login/login.c" 3 4 0 # 1494 "../../../server-code/src/login/login.c" ; } void login_send_coding_key(int fd, struct login_session_data* sd) __attribute__((nonnull (2))); void login_send_coding_key(int fd, struct login_session_data* sd) { WFIFOHEAD(fd,4 + sd->md5keylen); WFIFOW(fd,0) = 0x01dc; WFIFOW(fd,2) = 4 + sd->md5keylen; memcpy(WFIFOP(fd,4), sd->md5key, sd->md5keylen); WFIFOSET(fd,WFIFOW(fd,2)); } void login_parse_request_coding_key(int fd, struct login_session_data* sd) __attribute__((nonnull (2))); void login_parse_request_coding_key(int fd, struct login_session_data* sd) { memset(sd->md5key, '\0', sizeof(sd->md5key)); sd->md5keylen = (uint16)(12 + rnd() % 4); MD5_Salt(sd->md5keylen, sd->md5key); login->send_coding_key(fd, sd); } void login_char_server_connection_status(int fd, struct login_session_data* sd, uint8 status) __attribute__((nonnull (2))); void login_char_server_connection_status(int fd, struct login_session_data* sd, uint8 status) { WFIFOHEAD(fd,3); WFIFOW(fd,0) = 0x2711; WFIFOB(fd,2) = status; WFIFOSET(fd,3); } void login_parse_request_connection(int fd, struct login_session_data* sd, const char *const ip, uint32 ipl) __attribute__((nonnull (2, 3))); void login_parse_request_connection(int fd, struct login_session_data* sd, const char *const ip, uint32 ipl) { char server_name[20]; char message[256]; uint32 server_ip; uint16 server_port; uint16 type; uint16 new_; int result; (strlib->safestrncpy_((sd->userid),(RFIFOP(fd,2)),((23 + 1)))); (strlib->safestrncpy_((sd->passwd),(RFIFOP(fd,26)),((23 + 1)))); if (login->config->use_md5_passwds) MD5_String(sd->passwd, sd->passwd); sd->passwdenc = PWENC_NONE; sd->version = login->config->client_version_to_connect; server_ip = ntohl(RFIFOL(fd,54)); server_port = ntohs(RFIFOW(fd,58)); (strlib->safestrncpy_((server_name),(RFIFOP(fd,60)),(20))); type = RFIFOW(fd,82); new_ = RFIFOW(fd,84); RFIFOSKIP(fd,86); (showmsg->showInfo(("Connection request of the char-server '%s' @ %u.%u.%u.%u:%u (account: '%s', pass: '%s', ip: '%s')\n"), server_name, CONVIP(server_ip), server_port, sd->userid, sd->passwd, ip)); sprintf(message, "charserver - %s@%u.%u.%u.%u:%u", server_name, CONVIP(server_ip), server_port); login_log(sockt->session[fd]->client_addr, sd->userid, 100, message); result = login->mmo_auth(sd, # 1554 "../../../server-code/src/login/login.c" 3 4 1 # 1554 "../../../server-code/src/login/login.c" ); if (core->runflag == LOGINSERVER_ST_RUNNING && result == -1 && sd->sex == 'S' && sd->account_id >= 0 && sd->account_id < ( (int)(sizeof(server)/sizeof((server)[0])) ) && !sockt->session_is_valid(server[sd->account_id].fd) && sockt->allowed_ip_check(ipl)) { (showmsg->showStatus(("Connection of the char-server '%s' accepted.\n"), server_name)); (strlib->safestrncpy_((server[sd->account_id].name),(server_name),(sizeof(server[sd->account_id].name)))); server[sd->account_id].fd = fd; server[sd->account_id].ip = server_ip; server[sd->account_id].port = server_port; server[sd->account_id].users = 0; server[sd->account_id].type = type; server[sd->account_id].new_ = new_; sockt->session[fd]->func_parse = login->parse_fromchar; sockt->session[fd]->flag.server = 1; sockt->realloc_fifo(fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK); login->char_server_connection_status(fd, sd, 0); } else { (showmsg->showNotice(("Connection of the char-server '%s' REFUSED.\n"), server_name)); login->char_server_connection_status(fd, sd, 3); } } int login_parse_login(int fd) { struct login_session_data* sd = (struct login_session_data*)sockt->session[fd]->session_data; char ip[16]; uint32 ipl = sockt->session[fd]->client_addr; sockt->ip2str(ipl, ip); if( sockt->session[fd]->flag.eof ) { (showmsg->showInfo(("Closed connection from '""\033[1;37m""%s""\033[0m""'.\n"), ip)); sockt->close(fd); return 0; } if( sd == # 1604 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1604 "../../../server-code/src/login/login.c" ) { if (login->config->ipban && !sockt->trusted_ip_check(ipl) && ipban_check(ipl)) { (showmsg->showStatus(("Connection refused: IP isn't authorized (deny/allow, ip: %s).\n"), ip)); login_log(ipl, "unknown", -3, "ip banned"); login->login_error(fd, 3); sockt->eof(fd); return 0; } ((sockt->session[fd]->session_data) = (struct login_session_data *) (iMalloc->calloc(((1)),(sizeof(struct login_session_data)),"../../../server-code/src/login/login.c", 1616, __func__))); sd = (struct login_session_data*)sockt->session[fd]->session_data; sd->fd = fd; } while (RFIFOREST(fd) >= 2) { uint16 command = RFIFOW(fd,0); if (( (HPM->packets[hpParse_Login])._len_ ) > 0) { int result = HPM->parse_packets(fd,command,hpParse_Login); if (result == 1) continue; if (result == 2) return 0; } switch (command) { case 0x0200: if (RFIFOREST(fd) < 26) return 0; login->parse_ping(fd, sd); break; case 0x0204: if (RFIFOREST(fd) < 18) return 0; login->parse_client_md5(fd, sd); break; case 0x0064: case 0x0277: case 0x02b0: case 0x01dd: case 0x01fa: case 0x027c: case 0x0825: { size_t packet_len = RFIFOREST(fd); if( (command == 0x0064 && packet_len < 55) || (command == 0x0277 && packet_len < 84) || (command == 0x02b0 && packet_len < 85) || (command == 0x01dd && packet_len < 47) || (command == 0x01fa && packet_len < 48) || (command == 0x027c && packet_len < 60) || (command == 0x0825 && (packet_len < 4 || packet_len < RFIFOW(fd, 2))) ) return 0; } { if (login->parse_client_login(fd, sd, ip)) return 0; } break; case 0x01db: RFIFOSKIP(fd,2); { login->parse_request_coding_key(fd, sd); } break; case 0x2710: if (RFIFOREST(fd) < 86) return 0; { login->parse_request_connection(fd, sd, ip, ipl); } return 0; default: (showmsg->showNotice(("Abnormal end of connection (ip: %s): Unknown packet 0x%x\n"), ip, command)); sockt->eof(fd); return 0; } } return 0; } void login_config_set_defaults(void) { login->config->login_ip = INADDR_ANY; login->config->login_port = 6900; login->config->ipban_cleanup_interval = 60; login->config->ip_sync_interval = 0; login->config->log_login = # 1707 "../../../server-code/src/login/login.c" 3 4 1 # 1707 "../../../server-code/src/login/login.c" ; (strlib->safestrncpy_((login->config->date_format),("%Y-%m-%d %H:%M:%S"),(sizeof(login->config->date_format)))); login->config->new_account_flag = # 1709 "../../../server-code/src/login/login.c" 3 4 1 # 1709 "../../../server-code/src/login/login.c" ; login->config->new_acc_length_limit = # 1710 "../../../server-code/src/login/login.c" 3 4 1 # 1710 "../../../server-code/src/login/login.c" ; login->config->use_md5_passwds = # 1711 "../../../server-code/src/login/login.c" 3 4 0 # 1711 "../../../server-code/src/login/login.c" ; login->config->group_id_to_connect = -1; login->config->min_group_id_to_connect = -1; login->config->check_client_version = # 1714 "../../../server-code/src/login/login.c" 3 4 0 # 1714 "../../../server-code/src/login/login.c" ; login->config->client_version_to_connect = 20; login->config->allowed_regs = 1; login->config->time_allowed = 10; login->config->ipban = # 1719 "../../../server-code/src/login/login.c" 3 4 1 # 1719 "../../../server-code/src/login/login.c" ; login->config->dynamic_pass_failure_ban = # 1720 "../../../server-code/src/login/login.c" 3 4 1 # 1720 "../../../server-code/src/login/login.c" ; login->config->dynamic_pass_failure_ban_interval = 5; login->config->dynamic_pass_failure_ban_limit = 7; login->config->dynamic_pass_failure_ban_duration = 5; login->config->use_dnsbl = # 1724 "../../../server-code/src/login/login.c" 3 4 0 # 1724 "../../../server-code/src/login/login.c" ; (strlib->safestrncpy_((login->config->dnsbl_servs),(""),(sizeof(login->config->dnsbl_servs)))); login->config->client_hash_check = 0; login->config->client_hash_nodes = # 1728 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1728 "../../../server-code/src/login/login.c" ; } int login_config_read(const char *cfgName) { char line[1024], w1[1024], w2[1024]; FILE* fp; do { if (((void)(cfgName), # 1738 "../../../server-code/src/login/login.c" 3 4 0 # 1738 "../../../server-code/src/login/login.c" )) return(1); } while(0); fp = fopen(cfgName, "r"); if (fp == # 1740 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1740 "../../../server-code/src/login/login.c" ) { (showmsg->showError(("Configuration file (%s) not found.\n"), cfgName)); return 1; } while(fgets(line, sizeof(line), fp)) { if (line[0] == '/' && line[1] == '/') continue; if (sscanf(line, "%1023[^:]: %1023[^\r\n]", w1, w2) < 2) continue; if(!strcasecmp(w1,"timestamp_format")) (strlib->safestrncpy_((showmsg->timestamp_format),(w2),(20))); else if(!strcasecmp(w1,"stdout_with_ansisequence")) showmsg->stdout_with_ansisequence = (strlib->config_switch_(w2)) ? # 1754 "../../../server-code/src/login/login.c" 3 4 1 # 1754 "../../../server-code/src/login/login.c" : # 1754 "../../../server-code/src/login/login.c" 3 4 0 # 1754 "../../../server-code/src/login/login.c" ; else if(!strcasecmp(w1,"console_silent")) { showmsg->silent = atoi(w2); if (showmsg->silent) (showmsg->showInfo(("Console Silent Setting: %d\n"), atoi(w2))); } else if( !strcasecmp(w1, "bind_ip") ) { login->config->login_ip = sockt->host2ip(w2); if (login->config->login_ip) { char ip_str[16]; (showmsg->showStatus(("Login server binding IP address : %s -> %s\n"), w2, sockt->ip2str(login->config->login_ip, ip_str))); } } else if( !strcasecmp(w1, "login_port") ) { login->config->login_port = (uint16)atoi(w2); } else if(!strcasecmp(w1, "log_login")) login->config->log_login = ( # 1771 "../../../server-code/src/login/login.c" 3 4 _Bool # 1771 "../../../server-code/src/login/login.c" )(strlib->config_switch_(w2)); else if(!strcasecmp(w1, "new_account")) login->config->new_account_flag = ( # 1774 "../../../server-code/src/login/login.c" 3 4 _Bool # 1774 "../../../server-code/src/login/login.c" )(strlib->config_switch_(w2)); else if(!strcasecmp(w1, "new_acc_length_limit")) login->config->new_acc_length_limit = ( # 1776 "../../../server-code/src/login/login.c" 3 4 _Bool # 1776 "../../../server-code/src/login/login.c" )(strlib->config_switch_(w2)); else if(!strcasecmp(w1, "start_limited_time")) login->config->start_limited_time = atoi(w2); else if(!strcasecmp(w1, "check_client_version")) login->config->check_client_version = ( # 1780 "../../../server-code/src/login/login.c" 3 4 _Bool # 1780 "../../../server-code/src/login/login.c" )(strlib->config_switch_(w2)); else if(!strcasecmp(w1, "client_version_to_connect")) login->config->client_version_to_connect = (unsigned int)strtoul(w2, # 1782 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1782 "../../../server-code/src/login/login.c" , 10); else if(!strcasecmp(w1, "use_MD5_passwords")) login->config->use_md5_passwds = ( # 1784 "../../../server-code/src/login/login.c" 3 4 _Bool # 1784 "../../../server-code/src/login/login.c" )(strlib->config_switch_(w2)); else if(!strcasecmp(w1, "group_id_to_connect")) login->config->group_id_to_connect = atoi(w2); else if(!strcasecmp(w1, "min_group_id_to_connect")) login->config->min_group_id_to_connect = atoi(w2); else if(!strcasecmp(w1, "date_format")) (strlib->safestrncpy_((login->config->date_format),(w2),(sizeof(login->config->date_format)))); else if(!strcasecmp(w1, "allowed_regs")) login->config->allowed_regs = atoi(w2); else if(!strcasecmp(w1, "time_allowed")) login->config->time_allowed = atoi(w2); else if(!strcasecmp(w1, "use_dnsbl")) login->config->use_dnsbl = ( # 1796 "../../../server-code/src/login/login.c" 3 4 _Bool # 1796 "../../../server-code/src/login/login.c" )(strlib->config_switch_(w2)); else if(!strcasecmp(w1, "dnsbl_servers")) (strlib->safestrncpy_((login->config->dnsbl_servs),(w2),(sizeof(login->config->dnsbl_servs)))); else if(!strcasecmp(w1, "ipban_cleanup_interval")) login->config->ipban_cleanup_interval = (unsigned int)atoi(w2); else if(!strcasecmp(w1, "ip_sync_interval")) login->config->ip_sync_interval = (unsigned int)1000*60*atoi(w2); else if(!strcasecmp(w1, "client_hash_check")) login->config->client_hash_check = (strlib->config_switch_(w2)); else if(!strcasecmp(w1, "client_hash")) { int group = 0; char md5[33]; memset(md5, '\0', 33); if (sscanf(w2, "%d, %32s", &group, md5) == 2) { struct client_hash_node *nnode; ((nnode) = (struct client_hash_node *) (iMalloc->calloc(((1)),(sizeof(struct client_hash_node)),"../../../server-code/src/login/login.c", 1812, __func__))); if (strcasecmp(md5, "disabled") == 0) { nnode->hash[0] = '\0'; } else { int i; for (i = 0; i < 32; i += 2) { char buf[3]; unsigned int byte; memcpy(buf, &md5[i], 2); buf[2] = 0; sscanf(buf, "%x", &byte); nnode->hash[i / 2] = (uint8)(byte & 0xFF); } } nnode->group_id = group; nnode->next = login->config->client_hash_nodes; login->config->client_hash_nodes = nnode; } } else if(!strcasecmp(w1, "import")) login_config_read(w2); else { AccountDB* db = account_engine[0].db; if (db) db->set_property(db, w1, w2); ipban_config_read(w1, w2); loginlog_config_read(w1, w2); HPM->parseConf(w1, w2, HPCT_LOGIN); } } fclose(fp); (showmsg->showInfo(("Finished reading %s.\n"), cfgName)); return 0; } int do_final(void) { int i; struct client_hash_node *hn = login->config->client_hash_nodes; (showmsg->showStatus(("Terminating...\n"))); HPM->event(HPET_FINAL); while (hn) { struct client_hash_node *tmp = hn; hn = hn->next; (iMalloc->free((tmp),"../../../server-code/src/login/login.c", 1867, __func__)); } login_log(0, "login server", 100, "login server shutdown"); if (login->config->log_login) loginlog_final(); ipban_final(); if( account_engine[0].db ) { account_engine[0].db->destroy(account_engine[0].db); account_engine[0].db = # 1880 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1880 "../../../server-code/src/login/login.c" ; } accounts = # 1882 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1882 "../../../server-code/src/login/login.c" ; login->online_db->destroy(login->online_db, # 1883 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1883 "../../../server-code/src/login/login.c" ); login->auth_db->destroy(login->auth_db, # 1884 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1884 "../../../server-code/src/login/login.c" ); for( i = 0; i < ( (int)(sizeof(server)/sizeof((server)[0])) ); ++i ) chrif_server_destroy(i); if( login->fd != -1 ) { sockt->close(login->fd); login->fd = -1; } HPM_login_do_final(); (iMalloc->free((login->LOGIN_CONF_NAME),"../../../server-code/src/login/login.c", 1897, __func__)); (iMalloc->free((login->NET_CONF_NAME),"../../../server-code/src/login/login.c", 1898, __func__)); HPM->event(HPET_POST_FINAL); (showmsg->showStatus(("Finished.\n"))); return # 1903 "../../../server-code/src/login/login.c" 3 4 0 # 1903 "../../../server-code/src/login/login.c" ; } void do_abort(void) { } void set_server_type(void) { (core->server_type) = SERVER_TYPE_LOGIN; } void do_shutdown_login(void) { if( core->runflag != LOGINSERVER_ST_SHUTDOWN ) { int id; core->runflag = LOGINSERVER_ST_SHUTDOWN; (showmsg->showStatus(("Shutting down...\n"))); for( id = 0; id < ( (int)(sizeof(server)/sizeof((server)[0])) ); ++id ) chrif_server_reset(id); sockt->flush_fifos(); core->runflag = CORE_ST_STOP; } } static # 1941 "../../../server-code/src/login/login.c" 3 4 _Bool # 1941 "../../../server-code/src/login/login.c" cmdline_arg_loginconfig (const char *name, const char *params) { (iMalloc->free((login->LOGIN_CONF_NAME),"../../../server-code/src/login/login.c", 1943, __func__)); login->LOGIN_CONF_NAME = (iMalloc->astrdup((params),"../../../server-code/src/login/login.c", 1944, __func__)); return # 1945 "../../../server-code/src/login/login.c" 3 4 1 # 1945 "../../../server-code/src/login/login.c" ; } static # 1953 "../../../server-code/src/login/login.c" 3 4 _Bool # 1953 "../../../server-code/src/login/login.c" cmdline_arg_netconfig (const char *name, const char *params) { (iMalloc->free((login->NET_CONF_NAME),"../../../server-code/src/login/login.c", 1955, __func__)); login->NET_CONF_NAME = (iMalloc->astrdup((params),"../../../server-code/src/login/login.c", 1956, __func__)); return # 1957 "../../../server-code/src/login/login.c" 3 4 1 # 1957 "../../../server-code/src/login/login.c" ; } void cmdline_args_init_local(void) { cmdline->arg_add(((unsigned int)-1), "--" "login-config", '\0', cmdline_arg_loginconfig, "Alternative login-server configuration.", CMDLINE_OPT_PARAM); cmdline->arg_add(((unsigned int)-1), "--" "net-config", '\0', cmdline_arg_netconfig, "Alternative subnet configuration.", CMDLINE_OPT_PARAM); } int do_init(int argc, char** argv) { int i; account_engine[0].db = account_engine[0].constructor(); accounts = account_engine[0].db; if( accounts == # 1978 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 1978 "../../../server-code/src/login/login.c" ) { (showmsg->showFatalError(("do_init: account engine 'sql' not found.\n"))); exit( # 1980 "../../../server-code/src/login/login.c" 3 4 1 # 1980 "../../../server-code/src/login/login.c" ); } login_defaults(); login->config_set_defaults(); login->LOGIN_CONF_NAME = (iMalloc->astrdup(("conf/login-server.conf"),"../../../server-code/src/login/login.c", 1988, __func__)); login->NET_CONF_NAME = (iMalloc->astrdup(("conf/network.conf"),"../../../server-code/src/login/login.c", 1989, __func__)); HPM_login_do_init(); cmdline->exec(argc, argv, CMDLINE_OPT_PREINIT); HPM->config_read(); HPM->event(HPET_PRE_INIT); cmdline->exec(argc, argv, CMDLINE_OPT_NORMAL); login_config_read(login->LOGIN_CONF_NAME); sockt->net_config_read(login->NET_CONF_NAME); for( i = 0; i < ( (int)(sizeof(server)/sizeof((server)[0])) ); ++i ) chrif_server_init(i); if (login->config->log_login) loginlog_init(); ipban_init(); login->online_db = DB->alloc("../../../server-code/src/login/login.c",__func__,2011,DB_INT,(DB_OPT_RELEASE_DATA),sizeof(int)); timer->add_func_list(login->waiting_disconnect_timer, "login->waiting_disconnect_timer"); login->auth_db = DB->alloc("../../../server-code/src/login/login.c",__func__,2015,DB_INT,(DB_OPT_RELEASE_DATA),sizeof(int)); sockt->set_defaultparse(login->parse_login); timer->add_func_list(login->online_data_cleanup, "login->online_data_cleanup"); timer->add_interval(timer->gettick() + 600*1000, login->online_data_cleanup, 0, 0, 600*1000); if (login->config->ip_sync_interval) { timer->add_func_list(login->sync_ip_addresses, "login->sync_ip_addresses"); timer->add_interval(timer->gettick() + login->config->ip_sync_interval, login->sync_ip_addresses, 0, 0, login->config->ip_sync_interval); } if(!accounts->init(accounts)) { (showmsg->showFatalError(("do_init: Failed to initialize account engine 'sql'.\n"))); exit( # 2033 "../../../server-code/src/login/login.c" 3 4 1 # 2033 "../../../server-code/src/login/login.c" ); } HPM->event(HPET_INIT); if ((login->fd = sockt->make_listen_bind(login->config->login_ip,login->config->login_port)) == -1) { (showmsg->showFatalError(("Failed to bind to port '""\033[1;37m""%d""\033[0m""'\n"),login->config->login_port)); exit( # 2041 "../../../server-code/src/login/login.c" 3 4 1 # 2041 "../../../server-code/src/login/login.c" ); } if( core->runflag != CORE_ST_STOP ) { core->shutdown_callback = do_shutdown_login; core->runflag = LOGINSERVER_ST_RUNNING; } console->display_gplnotice(); (showmsg->showStatus(("The login-server is ""\033[1;32m""ready""\033[0m"" (Server is listening on the port %u).\n\n"), login->config->login_port)); login_log(0, "login server", 100, "login server started"); HPM->event(HPET_READY); return 0; } void login_defaults(void) { login = &login_s; login->config = &login_config_; login->accounts = accounts; login->mmo_auth = login_mmo_auth; login->mmo_auth_new = login_mmo_auth_new; login->waiting_disconnect_timer = login_waiting_disconnect_timer; login->create_online_user = login_create_online_user; login->add_online_user = login_add_online_user; login->remove_online_user = login_remove_online_user; login->online_db_setoffline = login_online_db_setoffline; login->online_data_cleanup_sub = login_online_data_cleanup_sub; login->online_data_cleanup = login_online_data_cleanup; login->sync_ip_addresses = login_sync_ip_addresses; login->check_encrypted = login_check_encrypted; login->check_password = login_check_password; login->lan_subnet_check = login_lan_subnet_check; login->fromchar_auth_ack = login_fromchar_auth_ack; login->fromchar_accinfo = login_fromchar_accinfo; login->fromchar_account = login_fromchar_account; login->fromchar_account_update_other = login_fromchar_account_update_other; login->fromchar_ban = login_fromchar_ban; login->fromchar_change_sex_other = login_fromchar_change_sex_other; login->fromchar_pong = login_fromchar_pong; login->fromchar_parse_auth = login_fromchar_parse_auth; login->fromchar_parse_update_users = login_fromchar_parse_update_users; login->fromchar_parse_request_change_email = login_fromchar_parse_request_change_email; login->fromchar_parse_account_data = login_fromchar_parse_account_data; login->fromchar_parse_ping = login_fromchar_parse_ping; login->fromchar_parse_change_email = login_fromchar_parse_change_email; login->fromchar_parse_account_update = login_fromchar_parse_account_update; login->fromchar_parse_ban = login_fromchar_parse_ban; login->fromchar_parse_change_sex = login_fromchar_parse_change_sex; login->fromchar_parse_account_reg2 = login_fromchar_parse_account_reg2; login->fromchar_parse_unban = login_fromchar_parse_unban; login->fromchar_parse_account_online = login_fromchar_parse_account_online; login->fromchar_parse_account_offline = login_fromchar_parse_account_offline; login->fromchar_parse_online_accounts = login_fromchar_parse_online_accounts; login->fromchar_parse_request_account_reg2 = login_fromchar_parse_request_account_reg2; login->fromchar_parse_update_wan_ip = login_fromchar_parse_update_wan_ip; login->fromchar_parse_all_offline = login_fromchar_parse_all_offline; login->fromchar_parse_change_pincode = login_fromchar_parse_change_pincode; login->fromchar_parse_wrong_pincode = login_fromchar_parse_wrong_pincode; login->fromchar_parse_accinfo = login_fromchar_parse_accinfo; login->parse_fromchar = login_parse_fromchar; login->parse_login = login_parse_login; login->parse_ping = login_parse_ping; login->parse_client_md5 = login_parse_client_md5; login->parse_client_login = login_parse_client_login; login->parse_request_coding_key = login_parse_request_coding_key; login->parse_request_connection = login_parse_request_connection; login->auth_ok = login_auth_ok; login->auth_failed = login_auth_failed; login->char_server_connection_status = login_char_server_connection_status; login->connection_problem = login_connection_problem; login->kick = login_kick; login->login_error = login_login_error; login->send_coding_key = login_send_coding_key; login->config_set_defaults = login_config_set_defaults; login->config_read = login_config_read; login->LOGIN_CONF_NAME = # 2126 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 2126 "../../../server-code/src/login/login.c" ; login->NET_CONF_NAME = # 2127 "../../../server-code/src/login/login.c" 3 4 ((void *)0) # 2127 "../../../server-code/src/login/login.c" ; }