reorganize files, only pvpgn source here now
This commit is contained in:
parent
a66afd0d43
commit
34262706ea
850 changed files with 1624 additions and 38364 deletions
|
@ -18,7 +18,6 @@ New commands
|
||||||
* `/save` immediately save changes of accounts and clans from the cache to a storage (useful for testing) <sup>[commit](https://github.com/HarpyWar/pvpgn/commit/be8d65d16f910b2090b0db9e7eb2c043b816dae7)</sup>
|
* `/save` immediately save changes of accounts and clans from the cache to a storage (useful for testing) <sup>[commit](https://github.com/HarpyWar/pvpgn/commit/be8d65d16f910b2090b0db9e7eb2c043b816dae7)</sup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Minor changes
|
Minor changes
|
||||||
--
|
--
|
||||||
* add original MOTD files with UTF-8 encoding
|
* add original MOTD files with UTF-8 encoding
|
||||||
|
@ -26,7 +25,8 @@ Minor changes
|
||||||
* add ODBC support for CMake
|
* add ODBC support for CMake
|
||||||
* add latest versioncheck.conf
|
* add latest versioncheck.conf
|
||||||
* skip_versioncheck, allow_bad_version are enabled by default in bnetd.conf - for easy start
|
* skip_versioncheck, allow_bad_version are enabled by default in bnetd.conf - for easy start
|
||||||
|
* source code is formatted for better reading
|
||||||
|
* unused files are removed, only pvpgn source here
|
||||||
|
|
||||||
Build source code
|
Build source code
|
||||||
--
|
--
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,245 +0,0 @@
|
||||||
PvPGN CREDITS (also please see the original BNETD credits bellow):
|
|
||||||
--------------------------------------------------------------------
|
|
||||||
|
|
||||||
CREDITS
|
|
||||||
This file contains the names of people who have contributed to the
|
|
||||||
development of the PvPGN BNETD mod in some way. This file is not
|
|
||||||
complete and we would like to thank everyone who helped us in any way.
|
|
||||||
|
|
||||||
PROGRAMMING CONTRIBUTORS
|
|
||||||
Zzzoom (servers@3dgames.com.ar)
|
|
||||||
For persistent SQL connections patch, password brute force attacks
|
|
||||||
protection and various bug reports.
|
|
||||||
|
|
||||||
Lots of other people who do not whish to be mentioned here.
|
|
||||||
|
|
||||||
BINARY PACKAGES:
|
|
||||||
- Birzan George Cristian <gcbirzan@wolfheart.ro> (Debian packages)
|
|
||||||
- Dorin Lazar <spooky_cbs@yahoo.com> (RPMs)
|
|
||||||
- Mihai Maties <mihai@xcyb.org> (RPMs & src.rpm snapshot script)
|
|
||||||
- Radu Radoveneanu <rakware@go.ro> (Slackware packages)
|
|
||||||
|
|
||||||
ORIGINAL BNETD CREDITS:
|
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
CREDITS
|
|
||||||
|
|
||||||
This file contains the names of people who have contributed to the
|
|
||||||
development of the BNETD server in some way. This project has made an
|
|
||||||
enormous amount of progress since the development has become public,
|
|
||||||
and this is one place where members of the community can be thanked.
|
|
||||||
|
|
||||||
|
|
||||||
PROGRAMMING CONTRIBUTORS
|
|
||||||
|
|
||||||
The following people have contributed code, code ideas, bug fixes, and
|
|
||||||
debugging work:
|
|
||||||
|
|
||||||
Mark Baysinger (mbaysing@ucsd.edu)
|
|
||||||
For the original idea, original implementation, documentation of the
|
|
||||||
protocol, starhack.ml.org, the tracking server, etc.
|
|
||||||
|
|
||||||
Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
Various cleanups, release coordination, / commands, config files, etc.
|
|
||||||
|
|
||||||
Rob Crittenden (rcrit@greyoak.com)
|
|
||||||
For many bug fixes, protocol work, file downloads, man pages, user
|
|
||||||
icons, better channel handling, autoconf, ladder, etc. as well as
|
|
||||||
working on the FAQ and user support.
|
|
||||||
|
|
||||||
Descolada (dyn1-tnt9-237.chicago.il.ameritech.net)
|
|
||||||
For the hashing algorithm complete with a sample C implementation.
|
|
||||||
|
|
||||||
Gediminas (gediminas_lt@mailexcite.com)
|
|
||||||
For work on the client command "readline" code, the initial help
|
|
||||||
system, and a better /conn command.
|
|
||||||
|
|
||||||
Oleg Drokin (green@ccssu.crimea.ua)
|
|
||||||
For patches to fix bnchat and bnstat.
|
|
||||||
|
|
||||||
Damien Clermonte (clermond@esiee.fr)
|
|
||||||
For portability (to cygnus B20.1 on win32) work, testing, and helpful
|
|
||||||
observations, and the TCP keepalive patch.
|
|
||||||
|
|
||||||
Denis Moreaux (vapula@endor.be)
|
|
||||||
For working out the correct ladder equations.
|
|
||||||
|
|
||||||
Philippe Dubois (pdubois@matrox.com)
|
|
||||||
For working on the Win32 port, UDP stuff, auto-update, and the
|
|
||||||
bnettime code.
|
|
||||||
|
|
||||||
Typhoon [Marco Ziech] (mmz@gmx.net)
|
|
||||||
For lots of good work on the BNI utilities, BITS (server inter-
|
|
||||||
connectivity) support, and his bnetmasq.sh script. He also
|
|
||||||
answers a lot of user questions and put together most of the
|
|
||||||
web site.
|
|
||||||
|
|
||||||
Dizzy (dizzy@roedu.net)
|
|
||||||
For help with NAT issues, a much improved help system, channel
|
|
||||||
flooding prevention, new /-commands, a mail system, and more.
|
|
||||||
|
|
||||||
Razvan Jianu (roger@hell.gameover.ro)
|
|
||||||
For many useful coredumps :) Also for the /addacct command.
|
|
||||||
|
|
||||||
Qlex (qlex@eoliss.com)
|
|
||||||
For kick starting the Diablo II stuff, testing thousands quick
|
|
||||||
changes, moral support, and digging up all the information.
|
|
||||||
|
|
||||||
Kenshin (kenshin_@hotmail.com)
|
|
||||||
For helping Qlex with the character stuff, fixing some major
|
|
||||||
bugs in the Diablo II code, and starting work on saving
|
|
||||||
characters.
|
|
||||||
|
|
||||||
Hakan Tandogan (hakan@gurkensalat.com)
|
|
||||||
For always making RPMs for bnetd and the tracker and some patches to
|
|
||||||
correct startup/shutdown issues. Also for continuing Diablo II work.
|
|
||||||
|
|
||||||
Jung-woo Sohn (logout@aeroguy.snu.ac.kr)
|
|
||||||
For /watch feedback, dobae flooding disconnect, better disconnect
|
|
||||||
game result handling, and generally for lots of good ideas. And
|
|
||||||
also for spotting the failed account creation crashing bug.
|
|
||||||
|
|
||||||
YobGuls (yobguls@yobguls.2ndmail.com)
|
|
||||||
Actually contributed to the DSBot code, but see next entry.
|
|
||||||
|
|
||||||
Eurijk! (wc2@zefga.net)
|
|
||||||
For pointing out how the new cdkey hashing works and also how
|
|
||||||
version checking is performed. This was some really ugly but
|
|
||||||
important stuff! He figured this out working on DSBot but
|
|
||||||
kindly explained it to us and showed us example code. He's
|
|
||||||
also working on the Prolix bot project and has provided lots
|
|
||||||
of useful bug reports and other commentary.
|
|
||||||
|
|
||||||
Fred Wittekind (rom@twister.dyndns.org)
|
|
||||||
For autoupdate version range support. For pointing out all the
|
|
||||||
update MPQ files we didn't know about. Also for the message
|
|
||||||
force-command patch.
|
|
||||||
|
|
||||||
Mathieu Legare (Mathieu_Legare@uqtr.uquebec.ca)
|
|
||||||
For picking up bnetdStats and making it report all kinds of
|
|
||||||
statistics.
|
|
||||||
|
|
||||||
Onlyer (onlyer@users.sourceforge.net)
|
|
||||||
For new commands, Diablo II protocol work, Diablo II closed server
|
|
||||||
work, FSGS account conversion, etc.
|
|
||||||
|
|
||||||
faster (lqx@cic.tsinghua.edu.cn)
|
|
||||||
For Diablo II closed communication (S2S) and for finding that
|
|
||||||
check_alloc bug.
|
|
||||||
|
|
||||||
sousou (liupeng.cs@263.net)
|
|
||||||
For Diablo II closed database server and ladder.
|
|
||||||
|
|
||||||
esper (esperpale@263.net)
|
|
||||||
Diablo II closed server gui and ladder.
|
|
||||||
|
|
||||||
sherpya (sherpya@netfarm.it)
|
|
||||||
For lots of help with adbanners, the d2close merge, reporting
|
|
||||||
bugs (like the 100% poll() CPU usage bug), and lots of good
|
|
||||||
suggestions. Also for work on channel list reloads.
|
|
||||||
|
|
||||||
Yoss (bartek@milc.com.pl)
|
|
||||||
For helpful suggestions for the mail code and for patching
|
|
||||||
the emote flooding hole. Also for the /admin command and for
|
|
||||||
the patch to fix the "operator can ban admins" bug. A big
|
|
||||||
thanks for much improved kill and ban commands and the new
|
|
||||||
dynamic ipban with better address matching and timeouts.
|
|
||||||
|
|
||||||
Roland Stahn (blue@cs.tu-berlin.de)
|
|
||||||
For all the work tracking down the versioncheck information
|
|
||||||
for revision of the STAR and SEXP clients. For information about
|
|
||||||
Blizzard's numbering scheme. For helpful packet information.
|
|
||||||
Also for the bug reports and simple patches which probably should
|
|
||||||
have been fixed a long time ago but he was the only person with
|
|
||||||
enough patience to figure out what was happening. Specifically,
|
|
||||||
the "all countries in one channel" feature, the empty game pass
|
|
||||||
bug, the multiple game with same name bug, and the memory
|
|
||||||
corruption after autoupdates. For updated version information.
|
|
||||||
For diagnosing the autoupdate crash (bug in server.c handling
|
|
||||||
closed sockets).
|
|
||||||
|
|
||||||
KWS (vizi@csucs.net)
|
|
||||||
For the nice bug reports on gameinfo parsing on game join, win32
|
|
||||||
socket and file portability problems. Also for patches to update
|
|
||||||
versioncheck info, implement IP storage, the patch for better
|
|
||||||
eventlogs, and Makefile improvements.
|
|
||||||
|
|
||||||
Jack (jack@takeovertheworld.org)
|
|
||||||
For Diablo II open game difficulty patch.
|
|
||||||
|
|
||||||
forester (laterk@inbox.lv)
|
|
||||||
Working on the Win32 port, bnetd GUI for Win32, small patches.
|
|
||||||
|
|
||||||
TESTING AND DEBUGGING CONTRIBUTORS
|
|
||||||
|
|
||||||
The following people have sent in ideas, bug reports, and minor
|
|
||||||
patches.
|
|
||||||
|
|
||||||
187 (187@infoceptor.com)
|
|
||||||
For bug reports and the idea for the /news command.
|
|
||||||
|
|
||||||
Shin DongJun (djshin@oslab.snu.ac.kr)
|
|
||||||
For some bug reports and patches.
|
|
||||||
|
|
||||||
Jeffery Jones (jeffery_jones@mtlusa.com)
|
|
||||||
For the game address translation idea.
|
|
||||||
|
|
||||||
Maxim Tereshenkov (max@ostin.ru)
|
|
||||||
For the stack trace which found the 8-bit account.c bug.
|
|
||||||
|
|
||||||
Yanoch (yanoch@loginnovation.com)
|
|
||||||
For suggesting the /kill improvement.
|
|
||||||
|
|
||||||
stacker (stacker@mail.ee.ntou.edu.tw)
|
|
||||||
For lots of bug reports and also the sbnetd front end.
|
|
||||||
|
|
||||||
Mike Hindman (mhindman@bnetd.nmsu.edu)
|
|
||||||
David Fitzpatrick (dfitzpat@bnetd.nmsu.edu)
|
|
||||||
For lots of ideas and all the help with Diablo.
|
|
||||||
|
|
||||||
Homer (homer@ogn.de)
|
|
||||||
For the helpful info on game info strings and ladder maps.
|
|
||||||
|
|
||||||
Alvin Sim (elflord@faerie.cx)
|
|
||||||
For lots of testing and figuring out that Diablo II open gameplay was
|
|
||||||
actually not too hard to implement.
|
|
||||||
|
|
||||||
AsmodeusB
|
|
||||||
For finding annoying the gameinfo bug in connection.c :)
|
|
||||||
|
|
||||||
forester (http://forester.yo.lv)
|
|
||||||
For pointing out what gameresult 5 means.
|
|
||||||
|
|
||||||
jerome (imeepmeep@mac.com)
|
|
||||||
For the MacOS X package.
|
|
||||||
|
|
||||||
acbcdde (acbcdde@hotmail.com)
|
|
||||||
For Win32 Makefile and config.h fixes.
|
|
||||||
|
|
||||||
mojohead ( Andrey Ilyin )
|
|
||||||
For d2dbs/d2ladder.c fixes.
|
|
||||||
|
|
||||||
|
|
||||||
OTHER CONTRIBUTORS
|
|
||||||
|
|
||||||
The following people have contributed their time, talent, and other
|
|
||||||
resources to the project:
|
|
||||||
|
|
||||||
Josh (josh@bnetd.org)
|
|
||||||
For a wonderful web site, quick mirroring of new releases, testing,
|
|
||||||
organization, documentation, and user support.
|
|
||||||
|
|
||||||
Tim Jung (tjung@igateway.net)
|
|
||||||
For kindly hosting our mailing lists, domain, web pages, etc. as well
|
|
||||||
as regular feedback and testing.
|
|
||||||
|
|
||||||
Allan Clark (allanc@sco.com)
|
|
||||||
For putting together some nice RPMs.
|
|
||||||
|
|
||||||
|
|
||||||
NOTE
|
|
||||||
|
|
||||||
This list is not complete. I have lost track of the names of some
|
|
||||||
people who have contributed, and likely forgotten about others. If you
|
|
||||||
think you should be listed here but aren't, please contact the
|
|
||||||
bnetd-dev mailing list and we will take care of it right away.
|
|
|
@ -1,44 +0,0 @@
|
||||||
Readme for Player vs. Player Gaming Network
|
|
||||||
---------------------------------------------
|
|
||||||
D2Pack 1.09
|
|
||||||
-------------
|
|
||||||
|
|
||||||
PvPGN is a BNETD mod which aims to provide support for all Blizzard
|
|
||||||
clients (thus it supports all BNETD supported clients plus the most recent
|
|
||||||
ones).
|
|
||||||
This release only includes d2cs/d2dbs as needed to host a Diablo II 1.09
|
|
||||||
closed realm. It only supports d2gs 1.09d. This package NEEDS a "bnetd" server
|
|
||||||
configured to work (for example use a "bnetd" from a PvPGN release).
|
|
||||||
|
|
||||||
The list of supported clients and their minimum verion required is:
|
|
||||||
- Diablo 2 v1.09
|
|
||||||
- Diablo 2 LOD v1.09
|
|
||||||
------------
|
|
||||||
|
|
||||||
The documentation is located in the docs directory. Please read docs/INDEX
|
|
||||||
for a list of files and what they contain.
|
|
||||||
If you are updating from a previous PvPGN version check the file UPDATE
|
|
||||||
first.
|
|
||||||
|
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
We're always looking for good coders (C coders) or
|
|
||||||
anyone who can contribute to our project in any way.
|
|
||||||
|
|
||||||
Project homepages/distribution sites:
|
|
||||||
- project home and main distribution site: http://pvpgn.berlios.de
|
|
||||||
- alternate project home: http://www.pvpgn.org
|
|
||||||
- alternate distribution site: http://www.pvpgn.de
|
|
||||||
|
|
||||||
Support channels:
|
|
||||||
|
|
||||||
1. BugTracker (preffered support method):
|
|
||||||
http://developer.berlios.de/bugs/?group_id=2291
|
|
||||||
|
|
||||||
2. Mailing List: pvpgn-users@lists.berlios.de ( to subscribe go here
|
|
||||||
https://lists.berlios.de/mailman/listinfo/pvpgn-users )
|
|
||||||
|
|
||||||
3. Forums: http://forums.pvpgn.org
|
|
||||||
|
|
||||||
4. IRC live support: #pvpgn on irc.pvpgn.org
|
|
|
@ -1,493 +0,0 @@
|
||||||
# Project: d2pack109 Package
|
|
||||||
# Makefile: MinGW (http://www.mingw.org)
|
|
||||||
#
|
|
||||||
# Copyright (C) 2005 CreepLord (creeplord@pvpgn.org)
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
ifndef DEST
|
|
||||||
DEST = ./win32-builds
|
|
||||||
endif
|
|
||||||
|
|
||||||
VERSION = 0.7
|
|
||||||
RELEASE = CVS
|
|
||||||
PACKAGE = $(DEST)/D2Pack109-$(VERSION)-$(RELEASE)-Win32$(TYPE).zip
|
|
||||||
|
|
||||||
ifndef prefix
|
|
||||||
prefix = ./d2pack109
|
|
||||||
installdir = $(prefix)-$(VERSION)
|
|
||||||
else
|
|
||||||
installdir = $(prefix)
|
|
||||||
endif
|
|
||||||
|
|
||||||
confdir = $(installdir)/conf
|
|
||||||
docsdir = $(installdir)/docs
|
|
||||||
filesdir = $(installdir)/files
|
|
||||||
sharedir = $(installdir)/var
|
|
||||||
bakdir = $(sharedir)/bak
|
|
||||||
bakcharsavedir = $(sharedir)/bak/charsave
|
|
||||||
bakcharinfodir = $(sharedir)/bak/charinfo
|
|
||||||
charsavedir = $(sharedir)/charinfo
|
|
||||||
charinfodir = $(sharedir)/charsave
|
|
||||||
laddersdir = $(sharedir)/ladders
|
|
||||||
reportsdir = $(sharedir)/reports
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
TOP_DIR = ./..
|
|
||||||
|
|
||||||
SRC_CONFDIR = $(TOP_DIR)/conf
|
|
||||||
SRC_DOCSDIR = $(TOP_DIR)/docs
|
|
||||||
SRC_FILESDIR = $(TOP_DIR)/files
|
|
||||||
SRC_SBINDIR = $(TOP_DIR)/sbin
|
|
||||||
SRC_SRCDIR = $(TOP_DIR)/src
|
|
||||||
SRC_COMMONDIR = $(SRC_SRCDIR)/common
|
|
||||||
SRC_COMPATDIR = $(SRC_SRCDIR)/compat
|
|
||||||
SRC_D2CSDIR = $(SRC_SRCDIR)/d2cs
|
|
||||||
SRC_D2DBSDIR = $(SRC_SRCDIR)/d2dbs
|
|
||||||
SRC_WIN32DIR = $(SRC_SRCDIR)/win32
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
CC = gcc
|
|
||||||
INSTALL = install
|
|
||||||
INSTALL_DIR = install -d
|
|
||||||
RMF = rm -f
|
|
||||||
STRIP = strip
|
|
||||||
WINDRES = windres
|
|
||||||
ZIP = zip -rm9q
|
|
||||||
ECHO = echo
|
|
||||||
|
|
||||||
ifdef CROSS_BUILD
|
|
||||||
PCC = /usr/bin/gcc
|
|
||||||
ENV =
|
|
||||||
WFLAGS = -W -Wall -Wno-unused
|
|
||||||
#WFLAGS =
|
|
||||||
UNIX2DOS = ./u2d
|
|
||||||
else
|
|
||||||
PCC = $(CC)
|
|
||||||
ENV = -e
|
|
||||||
WFLAGS =
|
|
||||||
UNIX2DOS = u2d.exe
|
|
||||||
endif
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
CFLAGS = $(WFLAGS) -I$(SRC_SRCDIR) -I$(SRC_SRCDIR)/include
|
|
||||||
LDFLAGS = -lws2_32 -L$(SRC_SRCDIR)/lib
|
|
||||||
|
|
||||||
ifdef WITH_MYSQL
|
|
||||||
CFLAGS += -DWITH_SQL_MYSQL
|
|
||||||
LDFLAGS += -lmysql
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef WITH_PGSQL
|
|
||||||
CFLAGS += -DWITH_SQL_PGSQL
|
|
||||||
LDFLAGS += -lpq
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef WITH_SQLITE3
|
|
||||||
CFLAGS += -DWITH_SQL_SQLITE3 -DHAVE_SQLITE3_H
|
|
||||||
LDFLAGS += -lsqlite3
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef WITH_ODBC
|
|
||||||
CFLAGS += -DWITH_SQL_ODBC
|
|
||||||
LDFLAGS += -lodbc32
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef WITH_GUI
|
|
||||||
CFLAGS += -DWIN32_GUI
|
|
||||||
LDFLAGS += -mwindows
|
|
||||||
endif
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# EXECUTABLES
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
ifdef WITH_GUI
|
|
||||||
d2cs_SBIN = $(SRC_SBINDIR)/d2cs109.exe
|
|
||||||
d2dbs_SBIN = $(SRC_SBINDIR)/d2dbs109.exe
|
|
||||||
else
|
|
||||||
d2cs_SBIN = $(SRC_SBINDIR)/d2cs109Console.exe
|
|
||||||
d2dbs_SBIN = $(SRC_SBINDIR)/d2dbs109Console.exe
|
|
||||||
endif
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# RESOURCES
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
ifdef WITH_GUI
|
|
||||||
d2cs_RES = $(SRC_WIN32DIR)/d2cs_resource.res
|
|
||||||
d2dbs_RES = $(SRC_WIN32DIR)/d2dbs_resource.res
|
|
||||||
else
|
|
||||||
d2cs_RES = $(SRC_WIN32DIR)/console_resource.res
|
|
||||||
d2dbs_RES = $(SRC_WIN32DIR)/console_resource.res
|
|
||||||
endif
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# SOURCE
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
d2cs_SOURCE = \
|
|
||||||
$(SRC_D2CSDIR)/main.c \
|
|
||||||
$(SRC_D2CSDIR)/d2gs.c \
|
|
||||||
$(SRC_D2CSDIR)/handle_d2gs.c \
|
|
||||||
$(SRC_D2CSDIR)/serverqueue.c \
|
|
||||||
$(SRC_D2CSDIR)/connection.c \
|
|
||||||
$(SRC_D2CSDIR)/game.c \
|
|
||||||
$(SRC_D2CSDIR)/server.c \
|
|
||||||
$(SRC_D2CSDIR)/handle_init.c \
|
|
||||||
$(SRC_D2CSDIR)/handle_d2cs.c \
|
|
||||||
$(SRC_D2CSDIR)/d2charfile.c \
|
|
||||||
$(SRC_D2CSDIR)/d2charlist.c \
|
|
||||||
$(SRC_D2CSDIR)/xstring.c \
|
|
||||||
$(SRC_D2CSDIR)/gamequeue.c \
|
|
||||||
$(SRC_D2CSDIR)/prefs.c \
|
|
||||||
$(SRC_D2CSDIR)/conf.c \
|
|
||||||
$(SRC_D2CSDIR)/cmdline_parse.c \
|
|
||||||
$(SRC_D2CSDIR)/bnetd.c \
|
|
||||||
$(SRC_D2CSDIR)/handle_bnetd.c \
|
|
||||||
$(SRC_D2CSDIR)/s2s.c \
|
|
||||||
$(SRC_D2CSDIR)/net.c \
|
|
||||||
$(SRC_D2CSDIR)/d2ladder.c \
|
|
||||||
$(SRC_D2CSDIR)/handle_signal.c \
|
|
||||||
$(SRC_COMMONDIR)/eventlog.c \
|
|
||||||
$(SRC_COMMONDIR)/hashtable.c \
|
|
||||||
$(SRC_COMMONDIR)/hexdump.c \
|
|
||||||
$(SRC_COMMONDIR)/list.c \
|
|
||||||
$(SRC_COMMONDIR)/packet.c \
|
|
||||||
$(SRC_COMMONDIR)/bn_type.c \
|
|
||||||
$(SRC_COMMONDIR)/addr.c \
|
|
||||||
$(SRC_COMMONDIR)/util.c \
|
|
||||||
$(SRC_COMMONDIR)/queue.c \
|
|
||||||
$(SRC_COMMONDIR)/network.c \
|
|
||||||
$(SRC_COMMONDIR)/fdwatch.c\
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_select.c\
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_poll.c\
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_kqueue.c\
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_epoll.c\
|
|
||||||
$(SRC_COMMONDIR)/trans.c \
|
|
||||||
$(SRC_COMMONDIR)/xalloc.c \
|
|
||||||
$(SRC_COMMONDIR)/rlimit.c \
|
|
||||||
$(SRC_COMMONDIR)/tag.c \
|
|
||||||
$(SRC_COMPATDIR)/inet_aton.c \
|
|
||||||
$(SRC_COMPATDIR)/inet_ntoa.c \
|
|
||||||
$(SRC_COMPATDIR)/strdup.c \
|
|
||||||
$(SRC_COMPATDIR)/strerror.c \
|
|
||||||
$(SRC_COMPATDIR)/strtoul.c \
|
|
||||||
$(SRC_COMPATDIR)/strftime.c \
|
|
||||||
$(SRC_COMPATDIR)/strcasecmp.c \
|
|
||||||
$(SRC_COMPATDIR)/strncasecmp.c \
|
|
||||||
$(SRC_COMPATDIR)/strsep.c \
|
|
||||||
$(SRC_COMPATDIR)/psock.c \
|
|
||||||
$(SRC_COMPATDIR)/uname.c \
|
|
||||||
$(SRC_COMPATDIR)/gettimeofday.c \
|
|
||||||
$(SRC_COMPATDIR)/difftime.c \
|
|
||||||
$(SRC_COMPATDIR)/pdir.c \
|
|
||||||
$(SRC_COMPATDIR)/memset.c \
|
|
||||||
$(SRC_COMPATDIR)/memcpy.c \
|
|
||||||
$(SRC_COMPATDIR)/memmove.c \
|
|
||||||
$(SRC_WIN32DIR)/service.c \
|
|
||||||
$(SRC_WIN32DIR)/d2cs_winmain.c
|
|
||||||
|
|
||||||
d2dbs_SOURCE = \
|
|
||||||
$(SRC_D2DBSDIR)/main.c \
|
|
||||||
$(SRC_D2DBSDIR)/charlock.c \
|
|
||||||
$(SRC_D2DBSDIR)/d2ladder.c \
|
|
||||||
$(SRC_D2DBSDIR)/dbserver.c \
|
|
||||||
$(SRC_D2DBSDIR)/dbspacket.c \
|
|
||||||
$(SRC_D2DBSDIR)/prefs.c \
|
|
||||||
$(SRC_D2DBSDIR)/handle_signal.c \
|
|
||||||
$(SRC_D2DBSDIR)/dbsdupecheck.c \
|
|
||||||
$(SRC_D2DBSDIR)/cmdline_parse.c \
|
|
||||||
$(SRC_D2CSDIR)/conf.c \
|
|
||||||
$(SRC_D2CSDIR)/xstring.c \
|
|
||||||
$(SRC_COMMONDIR)/eventlog.c \
|
|
||||||
$(SRC_COMMONDIR)/list.c \
|
|
||||||
$(SRC_COMMONDIR)/bn_type.c \
|
|
||||||
$(SRC_COMMONDIR)/util.c \
|
|
||||||
$(SRC_COMMONDIR)/addr.c \
|
|
||||||
$(SRC_COMMONDIR)/xalloc.c \
|
|
||||||
$(SRC_COMMONDIR)/fdwatch.c \
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_select.c \
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_poll.c \
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_epoll.c \
|
|
||||||
$(SRC_COMMONDIR)/fdwatch_kqueue.c \
|
|
||||||
$(SRC_COMMONDIR)/tag.c \
|
|
||||||
$(SRC_COMMONDIR)/rlimit.c \
|
|
||||||
$(SRC_COMPATDIR)/inet_aton.c \
|
|
||||||
$(SRC_COMPATDIR)/psock.c \
|
|
||||||
$(SRC_COMPATDIR)/strerror.c \
|
|
||||||
$(SRC_COMPATDIR)/strsep.c \
|
|
||||||
$(SRC_WIN32DIR)/service.c \
|
|
||||||
$(SRC_WIN32DIR)/d2dbs_winmain.c
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# OBJECTS
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
d2cs_OBJECTS = $(d2cs_SOURCE:.c=.o)
|
|
||||||
d2dbs_OBJECTS = $(d2dbs_SOURCE:.c=.o)
|
|
||||||
|
|
||||||
d2server_OBJECTS = $(d2cs_OBJECTS) $(d2dbs_OBJECTS)
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# Targets
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all:
|
|
||||||
@$(ECHO) ===============================================================================
|
|
||||||
@$(ECHO) = =
|
|
||||||
@$(ECHO) = Targets: =
|
|
||||||
@$(ECHO) = =
|
|
||||||
@$(ECHO) = make_mingw gui Build GUI Programs =
|
|
||||||
# @$(ECHO) = make_mingw gui-mysql Build GUI Programs with mySQL Support =
|
|
||||||
# @$(ECHO) = make_mingw gui-pgsql Build GUI Programs with pgSQL Support =
|
|
||||||
# @$(ECHO) = make_mingw gui-sqlite3 Build GUI Programs with SQLite3 Support =
|
|
||||||
# @$(ECHO) = make_mingw gui-odbc Build GUI Programs with ODBC Support =
|
|
||||||
# @$(ECHO) = =
|
|
||||||
@$(ECHO) = make_mingw console Build Console Programs =
|
|
||||||
# @$(ECHO) = make_mingw console-mysql Build Console Programs with mySQL Support =
|
|
||||||
# @$(ECHO) = make_mingw console-pgsql Build Console Programs with pgSQL Support =
|
|
||||||
# @$(ECHO) = make_mingw console-sqlite3 Build Console Programs with SQLite3 Support =
|
|
||||||
# @$(ECHO) = make_mingw console-odbc Build Console Programs with ODBC Support =
|
|
||||||
@$(ECHO) = =
|
|
||||||
@$(ECHO) = make_mingw clean Remove All Objects, Resources, Executables =
|
|
||||||
@$(ECHO) = =
|
|
||||||
@$(ECHO) = make_mingw install [InstallPath] Installs the D2Pack109 Package =
|
|
||||||
@$(ECHO) = =
|
|
||||||
@$(ECHO) ===============================================================================
|
|
||||||
@pause
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# COMPILING TARGETS
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
.PHONY: gui
|
|
||||||
gui: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_GUI=1
|
|
||||||
|
|
||||||
.PHONY: gui-mysql
|
|
||||||
gui-mysql: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_GUI=1 $(ENV) WITH_MYSQL=1
|
|
||||||
|
|
||||||
.PHONY: gui-pgsql
|
|
||||||
gui-pgsql: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_GUI=1 $(ENV) WITH_PGSQL=1
|
|
||||||
|
|
||||||
.PHONY: gui-sqlite3
|
|
||||||
gui-sqlite3: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_GUI=1 $(ENV) WITH_SQLITE3=1
|
|
||||||
|
|
||||||
.PHONY: gui-odbc
|
|
||||||
gui-odbc: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_GUI=1 $(ENV) WITH_ODBC=1
|
|
||||||
|
|
||||||
.PHONY: console
|
|
||||||
console: clean servers
|
|
||||||
|
|
||||||
.PHONY: console-mysql
|
|
||||||
console-mysql: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_MYSQL=1
|
|
||||||
|
|
||||||
.PHONY: console-pgsql
|
|
||||||
console-pgsql: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_PGSQL=1
|
|
||||||
|
|
||||||
.PHONY: console-sqlite3
|
|
||||||
console-sqlite3: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_SQLITE3=1
|
|
||||||
|
|
||||||
.PHONY: console-odbc
|
|
||||||
console-odbc: clean
|
|
||||||
@$(MAKE) -s -fMakefile.mingw servers $(ENV) WITH_ODBC=1
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
.PHONY: servers
|
|
||||||
servers: $(d2cs_SBIN) $(d2dbs_SBIN)
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# CLEANING
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean: clean-obj clean-res clean-exe
|
|
||||||
|
|
||||||
.PHONY: clean-obj
|
|
||||||
clean-obj:
|
|
||||||
@$(ECHO) Removing Objects
|
|
||||||
@-$(RMF) $(SRC_COMMONDIR)/*.o
|
|
||||||
@-$(RMF) $(SRC_COMPATDIR)/*.o
|
|
||||||
@-$(RMF) $(SRC_D2CSDIR)/*.o
|
|
||||||
@-$(RMF) $(SRC_D2DBSDIR)/*.o
|
|
||||||
@-$(RMF) $(SRC_WIN32DIR)/*.o
|
|
||||||
|
|
||||||
.PHONY: clean-res
|
|
||||||
clean-res:
|
|
||||||
@$(ECHO) Removing Resourses
|
|
||||||
@-$(RMF) $(SRC_WIN32DIR)/*.res
|
|
||||||
|
|
||||||
.PHONY: clean-exe
|
|
||||||
clean-exe:
|
|
||||||
@$(ECHO) Removing Executables
|
|
||||||
@-$(RMF) $(SRC_SBINDIR)/*.exe
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# PACKAGING
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
.PHONY: gui-package
|
|
||||||
gui-package:
|
|
||||||
@$(MAKE) -s -fMakefile.mingw gui
|
|
||||||
@$(MAKE) -s -fMakefile.mingw package $(ENV) TYPE=-GUI $(ENV)
|
|
||||||
|
|
||||||
.PHONY: console-package
|
|
||||||
console-package:
|
|
||||||
@$(MAKE) -s -fMakefile.mingw console
|
|
||||||
@$(MAKE) -s -fMakefile.mingw package $(ENV) TYPE=-Console $(ENV) NAME_TYPE=Console
|
|
||||||
|
|
||||||
.PHONY: releases
|
|
||||||
releases: console-package gui-package
|
|
||||||
|
|
||||||
.PHONY: package
|
|
||||||
package: $(DEST) install
|
|
||||||
@$(ECHO) Making PvPGN$(TYPE) Package
|
|
||||||
@$(ECHO) @echo off > $(installdir)/install.bat
|
|
||||||
@$(ECHO) d2cs109$(NAME_TYPE).exe -s install >> $(installdir)/install.bat
|
|
||||||
@$(ECHO) d2dbs109$(NAME_TYPE).exe -s install >> $(installdir)/install.bat
|
|
||||||
@$(ECHO) @echo off > $(installdir)/uninstall.bat
|
|
||||||
@$(ECHO) d2cs109$(NAME_TYPE).exe -s uninstall >> $(installdir)/uninstall.bat
|
|
||||||
@$(ECHO) d2dbs109$(NAME_TYPE).exe -s uninstall >> $(installdir)/uninstall.bat
|
|
||||||
@-$(RMF) $(PACKAGE)
|
|
||||||
@$(ZIP) $(PACKAGE) $(installdir)
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# INSTALLING
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install: install-dirs install-confs install-docs install-files install-exes install-misc install-u2d
|
|
||||||
|
|
||||||
.PHONY: install-dirs
|
|
||||||
install-dirs:
|
|
||||||
@$(ECHO) Creating Directorys
|
|
||||||
@-$(INSTALL_DIR) $(installdir)
|
|
||||||
@-$(INSTALL_DIR) $(confdir)
|
|
||||||
@-$(INSTALL_DIR) $(docsdir)
|
|
||||||
@-$(INSTALL_DIR) $(filesdir)
|
|
||||||
@-$(INSTALL_DIR) $(sharedir)
|
|
||||||
@-$(INSTALL_DIR) $(bakdir)
|
|
||||||
@-$(INSTALL_DIR) $(bakcharsavedir)
|
|
||||||
@-$(INSTALL_DIR) $(bakcharinfodir)
|
|
||||||
@-$(INSTALL_DIR) $(charsavedir)
|
|
||||||
@-$(INSTALL_DIR) $(charinfodir)
|
|
||||||
@-$(INSTALL_DIR) $(laddersdir)
|
|
||||||
|
|
||||||
.PHONY: install-confs
|
|
||||||
install-confs:
|
|
||||||
@$(ECHO) Installing Configuration Files
|
|
||||||
@-$(INSTALL) $(SRC_CONFDIR)/d2cs.conf.win32 $(confdir)/d2cs.conf
|
|
||||||
@-$(INSTALL) $(SRC_CONFDIR)/d2dbs.conf.win32 $(confdir)/d2dbs.conf
|
|
||||||
@-$(INSTALL) $(SRC_CONFDIR)/address_translation.conf $(confdir)
|
|
||||||
|
|
||||||
.PHONY: install-docs
|
|
||||||
install-docs:
|
|
||||||
@$(ECHO) Installing Docs
|
|
||||||
@-$(INSTALL) $(SRC_DOCSDIR)/Service.Win32.txt $(docsdir)
|
|
||||||
@-$(INSTALL) $(SRC_DOCSDIR)/INSTALL.unix $(docsdir)/INSTALL.unix.txt
|
|
||||||
|
|
||||||
.PHONY: install-files
|
|
||||||
install-files:
|
|
||||||
@$(ECHO) Installing Server Files
|
|
||||||
@-$(INSTALL) $(SRC_FILESDIR)/newbie.save $(filesdir)
|
|
||||||
|
|
||||||
.PHONY: install-exes
|
|
||||||
install-exes:
|
|
||||||
@$(ECHO) Installing Executables
|
|
||||||
@-$(INSTALL) $(SRC_SBINDIR)/*.exe $(installdir)
|
|
||||||
# @-$(INSTALL) $(SRC_SBINDIR)/*.dll $(installdir)
|
|
||||||
|
|
||||||
.PHONY: install-misc
|
|
||||||
install-misc:
|
|
||||||
@$(ECHO) Installing Misc Files
|
|
||||||
@-$(INSTALL) $(TOP_DIR)/COPYING $(installdir)/COPYING.txt
|
|
||||||
@-$(INSTALL) $(TOP_DIR)/CREDITS $(installdir)/CREDITS.txt
|
|
||||||
@-$(INSTALL) $(TOP_DIR)/README $(installdir)/README.txt
|
|
||||||
|
|
||||||
.PHONY: install-u2d
|
|
||||||
install-u2d:
|
|
||||||
@$(ECHO) Converting Unix Style Text Files to Dos Format
|
|
||||||
@$(PCC) $(SRC_WIN32DIR)/u2d.c -o $(UNIX2DOS)
|
|
||||||
@-$(UNIX2DOS) $(confdir)/*.conf
|
|
||||||
@-$(UNIX2DOS) $(docsdir)/*.txt
|
|
||||||
@-$(UNIX2DOS) $(installdir)/*.txt
|
|
||||||
@-$(RMF) $(UNIX2DOS)
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# DIRECTORYS
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
$(SRC_SBINDIR):
|
|
||||||
$(INSTALL_DIR) $(SRC_SBINDIR)
|
|
||||||
|
|
||||||
$(DEST):
|
|
||||||
$(INSTALL_DIR) $(DEST)
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# HEADER
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
.PHONY: SHOWHEADER
|
|
||||||
SHOWHEADER:
|
|
||||||
@$(ECHO) ============================================================
|
|
||||||
@$(ECHO) CFLAGS..= $(CFLAGS)
|
|
||||||
@$(ECHO) LDFLAGS.= $(LDFLAGS)
|
|
||||||
@$(ECHO) ============================================================
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# SERVER BINS
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
$(d2cs_SBIN): SHOWHEADER $(d2cs_OBJECTS) $(d2cs_RES) $(SRC_SBINDIR)
|
|
||||||
@$(ECHO) Linking $@
|
|
||||||
@$(CC) $(d2cs_OBJECTS) $(d2cs_RES) $(LDFLAGS) -o $@
|
|
||||||
@$(STRIP) $@
|
|
||||||
|
|
||||||
$(d2dbs_SBIN): SHOWHEADER $(d2dbs_OBJECTS) $(d2dbs_RES) $(SRC_SBINDIR)
|
|
||||||
@$(ECHO) Linking $@
|
|
||||||
@$(CC) $(d2dbs_OBJECTS) $(d2dbs_RES) $(LDFLAGS) -o $@
|
|
||||||
@$(STRIP) $@
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# Object Files
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
%.o: %.c
|
|
||||||
@$(ECHO) Compiling $*.c
|
|
||||||
@$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
#####################################################################
|
|
||||||
# Resource Files
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
%.res: %.rc
|
|
||||||
@$(ECHO) Compiling $*.rc
|
|
||||||
@$(WINDRES) -i $< -o $@ -O coff --include-dir $(SRC_SRCDIR)
|
|
|
@ -1,24 +0,0 @@
|
||||||
@echo off
|
|
||||||
path = C:\MinGW\bin
|
|
||||||
|
|
||||||
if %1X == installX goto install
|
|
||||||
|
|
||||||
mingw32-make -fMakefile.mingw %1
|
|
||||||
goto end
|
|
||||||
|
|
||||||
:install
|
|
||||||
if %2X == X goto error
|
|
||||||
|
|
||||||
mingw32-make -fMakefile.mingw %1 -e prefix=%2
|
|
||||||
goto end
|
|
||||||
|
|
||||||
:error
|
|
||||||
echo:
|
|
||||||
echo You didn't supply the Install Path!
|
|
||||||
echo:
|
|
||||||
echo example: make_mingw install C:\d2pack109
|
|
||||||
echo:
|
|
||||||
pause
|
|
||||||
goto end
|
|
||||||
|
|
||||||
:end
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
PREFIX=/usr/local/cross-tools
|
|
||||||
TARGET=i386-mingw32msvc
|
|
||||||
export PATH="$PREFIX/bin:$PREFIX/$TARGET/bin:$PATH"
|
|
||||||
export CROSS_BUILD=1
|
|
||||||
export DEST="./win32-builds"
|
|
||||||
exec make -fMakefile.mingw $*
|
|
|
@ -1,94 +0,0 @@
|
||||||
########################################################################################################
|
|
||||||
#------------------------------------------------------------------------------------------------------#
|
|
||||||
# Address Translation table #
|
|
||||||
#------------------------------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# This is a list of ip:port addresses that get translated #
|
|
||||||
# #
|
|
||||||
# The entries are broken into four parts: #
|
|
||||||
# #
|
|
||||||
# * the IP address w/port to be translated #
|
|
||||||
# * the output IP address w/port #
|
|
||||||
# * comma delimited list of networks to be excluded from translation #
|
|
||||||
# * comma delimited list of networks to be included in translation #
|
|
||||||
# #
|
|
||||||
# Each line must contain all four parts or the entire entry will be rejected #
|
|
||||||
# There are no default ports, make sure input and output includes the port number #
|
|
||||||
# #
|
|
||||||
# The entries are searched in the order listed in this file #
|
|
||||||
# Exclude networks are searched before include networks #
|
|
||||||
# Only the first matching line is used #
|
|
||||||
# Lines begining with '#' are ignored #
|
|
||||||
# #
|
|
||||||
# If no match is found, the input ip will be returned. #
|
|
||||||
# #
|
|
||||||
# NONE = There are no neworks to exclude/include (just a place holder, no entries will be added) #
|
|
||||||
# ANY = All networks will be excluded/included (same as 0.0.0.0/0) #
|
|
||||||
# #
|
|
||||||
########################################################################################################
|
|
||||||
|
|
||||||
########################################################################################################
|
|
||||||
# w3route server ip (removed from w3trans.conf) (Port 6200) #
|
|
||||||
# #
|
|
||||||
# Set input address the same as the w3routeaddr setting in the bnetd.conf #
|
|
||||||
# Set output address to the address to be sent to war3 clients #
|
|
||||||
# Set exclude to the range of clients you want to recieve the input address #
|
|
||||||
# instead of the output address #
|
|
||||||
# Set include to the range of clients you want to recieve the output address #
|
|
||||||
# #
|
|
||||||
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
|
|
||||||
#--------------------- ---------------------- ---------------------------- -------------------------#
|
|
||||||
|
|
||||||
#0.0.0.0:6200 192.168.1.100:6200 NONE 192.168.1.0/24
|
|
||||||
#0.0.0.0:6200 internetip:6200 NONE ANY
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
########################################################################################################
|
|
||||||
# Game Translations for clients (removed from gametrans.conf) (client data ports) #
|
|
||||||
# #
|
|
||||||
# Set input address to the client to be translated #
|
|
||||||
# Set output address to the address to be sent to the other clients #
|
|
||||||
# Set exclude to the range of clients you want to recieve the input address #
|
|
||||||
# instead of the output address #
|
|
||||||
# Set include to the range of clients you want to recieve the output address #
|
|
||||||
# #
|
|
||||||
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
|
|
||||||
#--------------------- ---------------------- ---------------------------- -------------------------#
|
|
||||||
|
|
||||||
#192.168.1.1:6119 internetip:6119 192.168.1.0/24,10.0.0.0/8 ANY
|
|
||||||
#192.168.1.2:6118 internetip:6118 192.168.1.0/24 ANY
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
########################################################################################################
|
|
||||||
# Diablo II Charactar Server (d2cs) - (removed from realm.conf) (Port 6113) #
|
|
||||||
# #
|
|
||||||
# Set input address to the ip of d2cs (same as the ip in the realm.conf) #
|
|
||||||
# Set output address to the address to be sent to the clients #
|
|
||||||
# Set exclude to the range of clients you want to recieve the input address #
|
|
||||||
# instead of the output address #
|
|
||||||
# Set include to the range of client you want to recieve the output address #
|
|
||||||
# #
|
|
||||||
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
|
|
||||||
#--------------------- ---------------------- ---------------------------- -------------------------#
|
|
||||||
|
|
||||||
#192.168.1.100:6113 internetip:6113 192.168.1.0/24 ANY
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
########################################################################################################
|
|
||||||
# Diablo II Game Server (d2gs) - (removed from d2gstrans.conf) (Port 4000) #
|
|
||||||
# #
|
|
||||||
# Set input address to the ip of d2gs (same as the gameservlist in d2cs.conf) #
|
|
||||||
# Set output address to the address to be sent to the clients #
|
|
||||||
# Set exclude to the range of clients you want to recieve the input address #
|
|
||||||
# instead of the output address #
|
|
||||||
# Set include to the range of client you want to recieve the output address #
|
|
||||||
# #
|
|
||||||
# input (ip:port) output (ip:port) exclude (ip/netmask) include (ip/netmask) #
|
|
||||||
#--------------------- ---------------------- ---------------------------- -------------------------#
|
|
||||||
|
|
||||||
#192.168.1.100:4000 internetip:4000 192.168.1.0/24 ANY
|
|
||||||
|
|
||||||
|
|
|
@ -1,201 +0,0 @@
|
||||||
#################################################################################
|
|
||||||
# d2cs.conf - Configuration file for the diablo2 game control server #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# This file is an example configuration and may require modification to #
|
|
||||||
# suit your needs or your site. Blank lines and lines starting with a "#" #
|
|
||||||
# are ignored. Use quotes around values that contain spaces. #
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Server Major Settings #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# Your realm server name #
|
|
||||||
realmname = D2CS
|
|
||||||
|
|
||||||
# This is a comma delimited list of hostnames that the server should
|
|
||||||
# listen on. It might be useful to make an internal-only server on a
|
|
||||||
# gateway machine for example. If the list is not set or if it has a
|
|
||||||
# entry with no host component, the server will bind to that port on all
|
|
||||||
# interfaces.
|
|
||||||
# d2cs default listening port is 6113
|
|
||||||
servaddrs = 0.0.0.0:6113
|
|
||||||
|
|
||||||
# This is a comma delimited list of game servers
|
|
||||||
#gameservlist = your.gameserver,another.gameserver
|
|
||||||
|
|
||||||
# This is bnetd server address with port
|
|
||||||
# bnetd default listening port is 6112
|
|
||||||
#bnetdaddr = xxx.xxx.xxx.xxx:6112
|
|
||||||
|
|
||||||
# Set this to the maximum number of concurrent connections allowed on
|
|
||||||
# this server.
|
|
||||||
max_connections = 1000
|
|
||||||
|
|
||||||
# This sets the realm to Classic or LOD or Both
|
|
||||||
# Classic = 0
|
|
||||||
# LOD = 1
|
|
||||||
# Both = 2 (default)
|
|
||||||
lod_realm = 2
|
|
||||||
|
|
||||||
# This sets whether you can convert a clasic char to
|
|
||||||
# an expansion char.
|
|
||||||
# Allow Convert = 1
|
|
||||||
# Don't allow Convert = 0
|
|
||||||
allow_convert = 0
|
|
||||||
|
|
||||||
# here u can enter the symbols allowed in accountnames (additional to
|
|
||||||
# alphanumerical symbals which are always accepted). please note that
|
|
||||||
# it is absolutly mandatory that u set up the same symbols here as in
|
|
||||||
# bnetd.conf or else u wont be able to play D2 with some characters
|
|
||||||
# (those whose symbols are allowed in bnetd.conf but not here)
|
|
||||||
# same warnings as in bnetd.conf apply here - be warned - and just
|
|
||||||
# change something if you know what you are doing
|
|
||||||
#default setting is "-_[]"
|
|
||||||
account_allowed_symbols = "-_[]"
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Message logs #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# Multiple log levels can be defined by connecting them with a comma (,)
|
|
||||||
# Available loglevels are:
|
|
||||||
# none
|
|
||||||
# trace
|
|
||||||
# debug
|
|
||||||
# info
|
|
||||||
# warn
|
|
||||||
# error
|
|
||||||
# fatal
|
|
||||||
#loglevels = fatal,error,warn,info
|
|
||||||
loglevels = fatal,error,warn,info,debug,trace
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# File and Path section #
|
|
||||||
# Use absolute paths in these lines to avoid problems! #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
logfile = /usr/local/var/d2cs.log
|
|
||||||
charsavedir = /usr/local/var/charsave
|
|
||||||
charinfodir = /usr/local/var/charinfo
|
|
||||||
bak_charsavedir = /usr/local/var/bak/charsave
|
|
||||||
bak_charinfodir = /usr/local/var/bak/charinfo
|
|
||||||
ladderdir = /usr/local/var/ladders
|
|
||||||
newbiefile = /usr/local/var/files/newbie.save
|
|
||||||
transfile = /usr/local/etc/address_translation.conf
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Misc #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# Message Of The Day, support hexcode
|
|
||||||
motd = "Tips: How to use color in your profile(Right click on your portrait to open pr ofile editing). Use \\\\xffc as Prefix (\\\\xff means ascii code 0xff,but you should use copy/paste trick to in put it, c means character 'c'. Color also works in game chat,but have input limit). Then append the Color chara cter list below: \\xffc0White '0' \\xffc1Red '1' \\xffc2Green '2' \\xffc3Blue '3' \\xffc4Gold '4' \\xffc5Gray '5' Black '6' \\xffc7DarkYellow '7' \\xffc8Orange '8' \\xffc9Yellow '9' \\xffc:DarkGreen ':' \\xffc;Purple ';' \\xffc<LightDarkGreen '<'"
|
|
||||||
|
|
||||||
# Set to non-zero to allow creation of new realm character
|
|
||||||
allow_newchar = 1
|
|
||||||
|
|
||||||
# Do you want d2cs to check client for multilogin for security reason?
|
|
||||||
check_multilogin = 0
|
|
||||||
|
|
||||||
# Maxinum number of character per account
|
|
||||||
# Max allowed value is 21 (enforced by server)
|
|
||||||
maxchar = 8
|
|
||||||
|
|
||||||
# Character sorting. Options are: level, mtime, name, none. (none assumed if
|
|
||||||
# not specified).
|
|
||||||
#charlist_sort = "none"
|
|
||||||
|
|
||||||
# Do we need ascending or descending order for charlist?
|
|
||||||
#charlist_sort_order = "ASC"
|
|
||||||
|
|
||||||
# Maxinum number of games will be shown in join game list
|
|
||||||
# Zero = infinite
|
|
||||||
maxgamelist = 20
|
|
||||||
|
|
||||||
# Set to non-zero to allow show all games with difficulty < character difficulty
|
|
||||||
# Otherwise, only game with difficulty = character difficulty will be shown
|
|
||||||
gamelist_showall = 0
|
|
||||||
|
|
||||||
# Maxinum time in seconds that a user can idle
|
|
||||||
# Zero = infinite
|
|
||||||
idletime = 3600
|
|
||||||
|
|
||||||
# Amount of time to delay shutting down server in seconds.
|
|
||||||
shutdown_delay = 300
|
|
||||||
|
|
||||||
# Amount of time delay period is decremented by either a SIGTERM or SIGINT
|
|
||||||
# (control-c) signal in seconds.
|
|
||||||
shutdown_decr = 60
|
|
||||||
#
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Internal System Settings #
|
|
||||||
# You may just ignore them and use the default value #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
#
|
|
||||||
# How often will the server purge all list to clean unused data (in seconds)
|
|
||||||
listpurgeinterval = 300
|
|
||||||
|
|
||||||
# How often will the server check game queues (in seconds)
|
|
||||||
gqcheckinterval = 60
|
|
||||||
|
|
||||||
# How often will the server retry to connect to bnetd
|
|
||||||
# when connection lost (in seconds)
|
|
||||||
s2s_retryinterval = 10
|
|
||||||
|
|
||||||
# How long time the s2s connection will timeout
|
|
||||||
s2s_timeout = 10
|
|
||||||
|
|
||||||
# How often the server will check server queues for expired data
|
|
||||||
sq_checkinterval = 300
|
|
||||||
|
|
||||||
# How long time will a server queue data expire
|
|
||||||
sq_timeout = 300
|
|
||||||
|
|
||||||
# Game serer binary files checksum, use zero to skip this checking
|
|
||||||
d2gs_checksum = 0
|
|
||||||
|
|
||||||
# Game server version, use zero to skip this checking
|
|
||||||
d2gs_version = 0
|
|
||||||
|
|
||||||
# Game server password
|
|
||||||
d2gs_password = ""
|
|
||||||
|
|
||||||
# Maxinum number of second that a game will be shown on list( zero = infinite )
|
|
||||||
game_maxlifetime = 0
|
|
||||||
|
|
||||||
# A game will be automatically destroied after how long time idle
|
|
||||||
max_game_idletime = 0
|
|
||||||
|
|
||||||
# Allow Limitation created game with password, player number or level limit?
|
|
||||||
allow_gamelimit = 1
|
|
||||||
|
|
||||||
# Ladder refresh time
|
|
||||||
ladder_refresh_interval = 3600
|
|
||||||
|
|
||||||
# server to server connection max idle time in seconds
|
|
||||||
s2s_idletime = 300
|
|
||||||
|
|
||||||
# server to server connection keepalive interval
|
|
||||||
s2s_keepalive_interval = 60
|
|
||||||
|
|
||||||
# all connection timeout check interval
|
|
||||||
timeout_checkinterval = 60
|
|
||||||
|
|
||||||
# game server restart interval
|
|
||||||
d2gs_restart_delay = 300
|
|
||||||
|
|
||||||
#
|
|
||||||
#################################################################################
|
|
|
@ -1,201 +0,0 @@
|
||||||
#################################################################################
|
|
||||||
# d2cs.conf - Configuration file for the diablo2 game control server #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# This file is an example configuration and may require modification to #
|
|
||||||
# suit your needs or your site. Blank lines and lines starting with a "#" #
|
|
||||||
# are ignored. Use quotes around values that contain spaces. #
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Server Major Settings #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# Your realm server name #
|
|
||||||
realmname = D2CS
|
|
||||||
|
|
||||||
# This is a comma delimited list of hostnames that the server should
|
|
||||||
# listen on. It might be useful to make an internal-only server on a
|
|
||||||
# gateway machine for example. If the list is not set or if it has a
|
|
||||||
# entry with no host component, the server will bind to that port on all
|
|
||||||
# interfaces.
|
|
||||||
# d2cs default listening port is 6113
|
|
||||||
servaddrs = 0.0.0.0:6113
|
|
||||||
|
|
||||||
# This is a comma delimited list of game servers
|
|
||||||
#gameservlist = your.gameserver,another.gameserver
|
|
||||||
|
|
||||||
# This is bnetd server address with port
|
|
||||||
# bnetd default listening port is 6112
|
|
||||||
#bnetdaddr = xxx.xxx.xxx.xxx:6112
|
|
||||||
|
|
||||||
# Set this to the maximum number of concurrent connections allowed on
|
|
||||||
# this server.
|
|
||||||
max_connections = 1000
|
|
||||||
|
|
||||||
# This sets the realm to Classic or LOD or Both
|
|
||||||
# Classic = 0
|
|
||||||
# LOD = 1
|
|
||||||
# Both = 2 (default)
|
|
||||||
lod_realm = 2
|
|
||||||
|
|
||||||
# This sets whether you can convert a clasic char to
|
|
||||||
# an expansion char.
|
|
||||||
# Allow Convert = 1
|
|
||||||
# Don't allow Convert = 0
|
|
||||||
allow_convert = 0
|
|
||||||
|
|
||||||
# here u can enter the symbols allowed in accountnames (additional to
|
|
||||||
# alphanumerical symbals which are always accepted). please note that
|
|
||||||
# it is absolutly mandatory that u set up the same symbols here as in
|
|
||||||
# bnetd.conf or else u wont be able to play D2 with some characters
|
|
||||||
# (those whose symbols are allowed in bnetd.conf but not here)
|
|
||||||
# same warnings as in bnetd.conf apply here - be warned - and just
|
|
||||||
# change something if you know what you are doing
|
|
||||||
#default setting is "-_[]"
|
|
||||||
account_allowed_symbols = "-_[]"
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Message logs #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# Multiple log levels can be defined by connecting them with a comma (,)
|
|
||||||
# Available loglevels are:
|
|
||||||
# none
|
|
||||||
# trace
|
|
||||||
# debug
|
|
||||||
# info
|
|
||||||
# warn
|
|
||||||
# error
|
|
||||||
# fatal
|
|
||||||
#loglevels = fatal,error,warn,info
|
|
||||||
loglevels = fatal,error,warn,info,debug,trace
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# File and Path section #
|
|
||||||
# Use absolute paths in these lines to avoid problems! #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
logfile = var\d2cs.log
|
|
||||||
charsavedir = var\charsave
|
|
||||||
charinfodir = var\charinfo
|
|
||||||
bak_charsavedir = var\bak\charsave
|
|
||||||
bak_charinfodir = var\bak\charinfo
|
|
||||||
ladderdir = var\ladders
|
|
||||||
newbiefile = files\newbie.save
|
|
||||||
transfile = conf\address_translation.conf
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Misc #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# Message Of The Day, support hexcode
|
|
||||||
motd = "Tips: How to use color in your profile(Right click on your portrait to open pr ofile editing). Use \\\\xffc as Prefix (\\\\xff means ascii code 0xff,but you should use copy/paste trick to in put it, c means character 'c'. Color also works in game chat,but have input limit). Then append the Color chara cter list below: \\xffc0White '0' \\xffc1Red '1' \\xffc2Green '2' \\xffc3Blue '3' \\xffc4Gold '4' \\xffc5Gray '5' Black '6' \\xffc7DarkYellow '7' \\xffc8Orange '8' \\xffc9Yellow '9' \\xffc:DarkGreen ':' \\xffc;Purple ';' \\xffc<LightDarkGreen '<'"
|
|
||||||
|
|
||||||
# Set to non-zero to allow creation of new realm character
|
|
||||||
allow_newchar = 1
|
|
||||||
|
|
||||||
# Do you want d2cs to check client for multilogin for security reason?
|
|
||||||
check_multilogin = 0
|
|
||||||
|
|
||||||
# Maxinum number of character per account
|
|
||||||
# Max allowed value is 21 (enforced by server)
|
|
||||||
maxchar = 8
|
|
||||||
|
|
||||||
# Character sorting. Options are: level, mtime, name, none. (none assumed if
|
|
||||||
# not specified).
|
|
||||||
#charlist_sort = "none"
|
|
||||||
|
|
||||||
# Do we need ascending or descending order for charlist?
|
|
||||||
#charlist_sort_order = "ASC"
|
|
||||||
|
|
||||||
# Maxinum number of games will be shown in join game list
|
|
||||||
# Zero = infinite
|
|
||||||
maxgamelist = 20
|
|
||||||
|
|
||||||
# Set to non-zero to allow show all games with difficulty < character difficulty
|
|
||||||
# Otherwise, only game with difficulty = character difficulty will be shown
|
|
||||||
gamelist_showall = 0
|
|
||||||
|
|
||||||
# Maxinum time in seconds that a user can idle
|
|
||||||
# Zero = infinite
|
|
||||||
idletime = 3600
|
|
||||||
|
|
||||||
# Amount of time to delay shutting down server in seconds.
|
|
||||||
shutdown_delay = 300
|
|
||||||
|
|
||||||
# Amount of time delay period is decremented by either a SIGTERM or SIGINT
|
|
||||||
# (control-c) signal in seconds.
|
|
||||||
shutdown_decr = 60
|
|
||||||
#
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Internal System Settings #
|
|
||||||
# You may just ignore them and use the default value #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
#
|
|
||||||
# How often will the server purge all list to clean unused data (in seconds)
|
|
||||||
listpurgeinterval = 300
|
|
||||||
|
|
||||||
# How often will the server check game queues (in seconds)
|
|
||||||
gqcheckinterval = 60
|
|
||||||
|
|
||||||
# How often will the server retry to connect to bnetd
|
|
||||||
# when connection lost (in seconds)
|
|
||||||
s2s_retryinterval = 10
|
|
||||||
|
|
||||||
# How long time the s2s connection will timeout
|
|
||||||
s2s_timeout = 10
|
|
||||||
|
|
||||||
# How often the server will check server queues for expired data
|
|
||||||
sq_checkinterval = 300
|
|
||||||
|
|
||||||
# How long time will a server queue data expire
|
|
||||||
sq_timeout = 300
|
|
||||||
|
|
||||||
# Game serer binary files checksum, use zero to skip this checking
|
|
||||||
d2gs_checksum = 0
|
|
||||||
|
|
||||||
# Game server version, use zero to skip this checking
|
|
||||||
d2gs_version = 0
|
|
||||||
|
|
||||||
# Game server password
|
|
||||||
d2gs_password = ""
|
|
||||||
|
|
||||||
# Maxinum number of second that a game will be shown on list( zero = infinite )
|
|
||||||
game_maxlifetime = 0
|
|
||||||
|
|
||||||
# A game will be automatically destroied after how long time idle
|
|
||||||
max_game_idletime = 0
|
|
||||||
|
|
||||||
# Allow Limitation created game with password, player number or level limit?
|
|
||||||
allow_gamelimit = 1
|
|
||||||
|
|
||||||
# Ladder refresh time
|
|
||||||
ladder_refresh_interval = 3600
|
|
||||||
|
|
||||||
# server to server connection max idle time in seconds
|
|
||||||
s2s_idletime = 300
|
|
||||||
|
|
||||||
# server to server connection keepalive interval
|
|
||||||
s2s_keepalive_interval = 60
|
|
||||||
|
|
||||||
# all connection timeout check interval
|
|
||||||
timeout_checkinterval = 60
|
|
||||||
|
|
||||||
# game server restart interval
|
|
||||||
d2gs_restart_delay = 300
|
|
||||||
|
|
||||||
#
|
|
||||||
#################################################################################
|
|
|
@ -1,104 +0,0 @@
|
||||||
#################################################################################
|
|
||||||
# d2dbs.conf - Configuration file for the Diablo2 Game database server #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# This file is an example configuration and may require modification to #
|
|
||||||
# suit your needs or your site. Blank lines and lines starting with a "#" #
|
|
||||||
# are ignored. Use quotes around values that contain spaces. #
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Server Major Settings #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# This is a comma delimited list of hostnames that the server should
|
|
||||||
# listen on. It might be useful to make an internal-only server on a
|
|
||||||
# gateway machine for example. If the list is not set or if it has a
|
|
||||||
# entry with no host component, the server will bind to that port on all
|
|
||||||
# interfaces.
|
|
||||||
# dbs default listening port is 6114
|
|
||||||
servaddrs = 0.0.0.0:6114
|
|
||||||
|
|
||||||
# This is a comma delimited list of game servers
|
|
||||||
#gameservlist = your.gameserver,another.gameserver
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Message logs #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# Multiple log levels can be defined by connecting them with a comma (,)
|
|
||||||
# Available loglevels are:
|
|
||||||
# none
|
|
||||||
# trace
|
|
||||||
# debug
|
|
||||||
# info
|
|
||||||
# warn
|
|
||||||
# error
|
|
||||||
# fatal
|
|
||||||
#loglevels = fatal,error,warn,info
|
|
||||||
loglevels = fatal,error,warn,info,debug,trace
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# File and Path section #
|
|
||||||
# Use absolute paths in these lines to avoid problems! #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
logfile = /usr/local/var/d2dbs.log
|
|
||||||
logfile-gs = /usr/local/var/d2dbs-gs.log
|
|
||||||
charsavedir = /usr/local/var/charsave
|
|
||||||
charinfodir = /usr/local/var/charinfo
|
|
||||||
ladderdir = /usr/local/var/ladders
|
|
||||||
bak_charsavedir = /usr/local/var/bak/charsave
|
|
||||||
bak_charinfodir = /usr/local/var/bak/charinfo
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Misc #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# Ladder save interval
|
|
||||||
laddersave_interval = 3600
|
|
||||||
|
|
||||||
# Time that allow characters create after it insert into ladder
|
|
||||||
# These code should be rewritted to support string formmated time
|
|
||||||
ladderinit_time = 0
|
|
||||||
|
|
||||||
# create extra ladder file in XML format that can be parsed more easy
|
|
||||||
# 0 = turn extra output off (default)
|
|
||||||
# 1 = turn on the XML output
|
|
||||||
XML_ladder_output = 0
|
|
||||||
|
|
||||||
# Amount of time to delay shutting down server in seconds.
|
|
||||||
shutdown_delay = 360
|
|
||||||
|
|
||||||
# Amount of time delay period is decremented by either a SIGTERM or SIGINT
|
|
||||||
# (control-c) signal in seconds.
|
|
||||||
shutdown_decr = 60
|
|
||||||
|
|
||||||
# connection max idle time in seconds
|
|
||||||
idletime = 300
|
|
||||||
|
|
||||||
# connection keep alive interval
|
|
||||||
keepalive_interval = 60
|
|
||||||
|
|
||||||
# connection time out check interval
|
|
||||||
timeout_checkinterval = 60
|
|
||||||
|
|
||||||
# experience threshold, minimum experience needed to register on the ladder
|
|
||||||
ladderupdate_threshold = 0
|
|
||||||
|
|
||||||
# This setting activates a workaround for the well known "Lvl 100" bug.
|
|
||||||
# It should be activated for mods where the max level is greater than 99.
|
|
||||||
# Activating this should work for mods with any max level
|
|
||||||
# If level is greater than 255, it will be set to 255
|
|
||||||
# 0 = deactivated
|
|
||||||
# 1 = activated
|
|
||||||
difficulty_hack = 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
|
@ -1,104 +0,0 @@
|
||||||
#################################################################################
|
|
||||||
# d2dbs.conf - Configuration file for the Diablo2 Game database server #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# This file is an example configuration and may require modification to #
|
|
||||||
# suit your needs or your site. Blank lines and lines starting with a "#" #
|
|
||||||
# are ignored. Use quotes around values that contain spaces. #
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Server Major Settings #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# This is a comma delimited list of hostnames that the server should
|
|
||||||
# listen on. It might be useful to make an internal-only server on a
|
|
||||||
# gateway machine for example. If the list is not set or if it has a
|
|
||||||
# entry with no host component, the server will bind to that port on all
|
|
||||||
# interfaces.
|
|
||||||
# dbs default listening port is 6114
|
|
||||||
servaddrs = 0.0.0.0:6114
|
|
||||||
|
|
||||||
# This is a comma delimited list of game servers
|
|
||||||
#gameservlist = your.gameserver,another.gameserver
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Message logs #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# Multiple log levels can be defined by connecting them with a comma (,)
|
|
||||||
# Available loglevels are:
|
|
||||||
# none
|
|
||||||
# trace
|
|
||||||
# debug
|
|
||||||
# info
|
|
||||||
# warn
|
|
||||||
# error
|
|
||||||
# fatal
|
|
||||||
#loglevels = fatal,error,warn,info
|
|
||||||
loglevels = fatal,error,warn,info,debug,trace
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# File and Path section #
|
|
||||||
# Use absolute paths in these lines to avoid problems! #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
logfile = var\d2dbs.log
|
|
||||||
logfile-gs = var\d2dbs-gs.log
|
|
||||||
charsavedir = var\charsave
|
|
||||||
charinfodir = var\charinfo
|
|
||||||
ladderdir = var\ladders
|
|
||||||
bak_charsavedir = var\bak\charsave
|
|
||||||
bak_charinfodir = var\bak\charinfo
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
||||||
|
|
||||||
#################################################################################
|
|
||||||
# Misc #
|
|
||||||
#-------------------------------------------------------------------------------#
|
|
||||||
# #
|
|
||||||
# Ladder save interval
|
|
||||||
laddersave_interval = 3600
|
|
||||||
|
|
||||||
# Time that allow characters create after it insert into ladder
|
|
||||||
# These code should be rewritted to support string formmated time
|
|
||||||
ladderinit_time = 0
|
|
||||||
|
|
||||||
# create extra ladder file in XML format that can be parsed more easy
|
|
||||||
# 0 = turn extra output off (default)
|
|
||||||
# 1 = turn on the XML output
|
|
||||||
XML_ladder_output = 0
|
|
||||||
|
|
||||||
# Amount of time to delay shutting down server in seconds.
|
|
||||||
shutdown_delay = 360
|
|
||||||
|
|
||||||
# Amount of time delay period is decremented by either a SIGTERM or SIGINT
|
|
||||||
# (control-c) signal in seconds.
|
|
||||||
shutdown_decr = 60
|
|
||||||
|
|
||||||
# connection max idle time in seconds
|
|
||||||
idletime = 300
|
|
||||||
|
|
||||||
# connection keep alive interval
|
|
||||||
keepalive_interval = 60
|
|
||||||
|
|
||||||
# connection time out check interval
|
|
||||||
timeout_checkinterval = 60
|
|
||||||
|
|
||||||
# experience threshold, minimum experience needed to register on the ladder
|
|
||||||
ladderupdate_threshold = 0
|
|
||||||
|
|
||||||
# This setting activates a workaround for the well known "Lvl 100" bug.
|
|
||||||
# It should be activated for mods where the max level is greater than 99.
|
|
||||||
# Activating this should work for mods with any max level
|
|
||||||
# If level is greater than 255, it will be set to 255
|
|
||||||
# 0 = deactivated
|
|
||||||
# 1 = activated
|
|
||||||
difficulty_hack = 0
|
|
||||||
|
|
||||||
# #
|
|
||||||
#################################################################################
|
|
|
@ -1,25 +0,0 @@
|
||||||
D2Pack109 Win32 MinGW Compile Instructions
|
|
||||||
This file explains how to compile D2Pack109 for Win32 using MinGW
|
|
||||||
|
|
||||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
||||||
|
|
||||||
1. Download and install 'MinGW-3.1.0-1.exe' to 'C:\MinGW'
|
|
||||||
http://prdownloads.sf.net/mingw/MinGW-3.1.0-1.exe
|
|
||||||
|
|
||||||
2. Download and extract 'w32api-3.2.tar.gz' to 'C:\MinGW"
|
|
||||||
http://prdownloads.sf.net/mingw/w32api-3.2.tar.gz
|
|
||||||
|
|
||||||
3. Download 'UnxUtils.zip' and extract the following files
|
|
||||||
(install.exe and rm.exe) to 'C:\MinGW\bin'
|
|
||||||
http://unxutils.sourceforge.net/UnxUtils.zip
|
|
||||||
Location of files in UnxUtils.zip
|
|
||||||
/usr/local/wbin/install.exe
|
|
||||||
/usr/local/wbin/rm.exe
|
|
||||||
|
|
||||||
4. From a command line, change to the Win32-Projects directory
|
|
||||||
of the D2Pack109 source. Execute 'make_mingw.bat' for command
|
|
||||||
line options.
|
|
||||||
|
|
||||||
5. Compile the desired package, and install.
|
|
||||||
|
|
||||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
|
|
|
@ -1,48 +0,0 @@
|
||||||
PvPGN Install instructions for the Linux/Unix version
|
|
||||||
-------------------------------------------------------
|
|
||||||
|
|
||||||
1. First get your hands on a PvPGN source tarball or a binary package (RPM/etc).
|
|
||||||
If you got the source follow instructions bellow, if you got a binary package
|
|
||||||
jump to step 4
|
|
||||||
|
|
||||||
2. Unpack the tarball, change current directory to the source directory (ex.
|
|
||||||
pvpgn-<version>/src) and run configure. You will need to provide configure with
|
|
||||||
your custom options, ex.
|
|
||||||
|
|
||||||
./configure --prefix=<path>
|
|
||||||
|
|
||||||
It will configure the source distribution to compile and install in the <path>
|
|
||||||
location.
|
|
||||||
|
|
||||||
Check using ./configure --help for all available options.
|
|
||||||
|
|
||||||
3. Compile and install PvPGN using
|
|
||||||
|
|
||||||
$ make
|
|
||||||
$ make install
|
|
||||||
|
|
||||||
WARNING !! make install it will also overwrite the configuration files. Make a
|
|
||||||
backup of them before doing "make install" (read more about this in the UPDATE
|
|
||||||
file).
|
|
||||||
|
|
||||||
Now you just need to edit the config files and adjust them acording to your
|
|
||||||
system. Have fun!
|
|
||||||
|
|
||||||
4. (only for binary PvPGN distributions)
|
|
||||||
Depending on the type of package you have obtained (ex RPM, deb, tgz) you will
|
|
||||||
have to install the package using the right package tool.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
$ rpm -ivh pvpgn-<ver>.rpm
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
$ installpkg pvpgn-<ver>.tgz
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
$ dpkg -i pvpgn-<ver>.deb
|
|
||||||
|
|
||||||
After you install the binary package you will need to adjust PvPGN configuration
|
|
||||||
files (usually installed in /etc/pvpgn dir). Have fun!
|
|
|
@ -1,5 +0,0 @@
|
||||||
To Install:
|
|
||||||
run the install.bat in the main dir
|
|
||||||
|
|
||||||
To Uninstall:
|
|
||||||
run the uninstall.bat in the main dir
|
|
|
@ -1,348 +0,0 @@
|
||||||
#
|
|
||||||
# Copyright (C) 1999 Rob Crittenden (rcrit@greyoak.com)
|
|
||||||
# Copyright (C) 1999,2000 Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or
|
|
||||||
# modify it under the terms of the GNU General Public License
|
|
||||||
# as published by the Free Software Foundation; either version 2
|
|
||||||
# of the License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
#
|
|
||||||
|
|
||||||
prefix = @prefix@
|
|
||||||
exec_prefix = @exec_prefix@
|
|
||||||
|
|
||||||
bindir = @bindir@
|
|
||||||
sbindir = @sbindir@
|
|
||||||
mandir = @mandir@
|
|
||||||
confdir = @sysconfdir@
|
|
||||||
sharedir = @localstatedir@
|
|
||||||
filesdir = @localstatedir@/files
|
|
||||||
charinfodir = @localstatedir@/charinfo
|
|
||||||
charsavedir = @localstatedir@/charsave
|
|
||||||
ladderdir = @localstatedir@/ladders
|
|
||||||
statusdir = @localstatedir@/status
|
|
||||||
bak_charsavedir = @localstatedir@/bak/charsave
|
|
||||||
bak_charinfodir = @localstatedir@/bak/charinfo
|
|
||||||
|
|
||||||
SRC_SRCDIR = @srcdir@
|
|
||||||
SRC_SBINDIR = @srcdir@/../sbin
|
|
||||||
SRC_MANDIR = @srcdir@/../man
|
|
||||||
SRC_CONFDIR = @srcdir@/../conf
|
|
||||||
SRC_SHAREDIR = @srcdir@/../files
|
|
||||||
SRC_SCRIPTDIR = @srcdir@/../scripts
|
|
||||||
|
|
||||||
SRC_ACDIR = ${SRC_SRCDIR}/autoconf
|
|
||||||
SRC_D2CSDIR = ${SRC_SRCDIR}/d2cs
|
|
||||||
SRC_D2DBSDIR = ${SRC_SRCDIR}/d2dbs
|
|
||||||
SRC_COMMONDIR = ${SRC_SRCDIR}/common
|
|
||||||
SRC_COMPATDIR = ${SRC_SRCDIR}/compat
|
|
||||||
|
|
||||||
RMF = rm -f
|
|
||||||
|
|
||||||
RMDIR = rmdir
|
|
||||||
|
|
||||||
ECHO = echo
|
|
||||||
|
|
||||||
SED = sed
|
|
||||||
|
|
||||||
INSTALL = @INSTALL@
|
|
||||||
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
||||||
INSTALL_DATA = @INSTALL_DATA@
|
|
||||||
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
||||||
INSTALL_DIRS = @INSTALL@ -d -m 755
|
|
||||||
|
|
||||||
# CC set by configure
|
|
||||||
# CFLAGS set by configure
|
|
||||||
CPPFLAGS = @DEFS@ @DEFINES@ -DD2CS_DEFAULT_CONF_FILE=\"${confdir}/d2cs.conf\" -DD2DBS_DEFAULT_CONF_FILE=\"${confdir}/d2dbs.conf\" -I"${SRC_SRCDIR}" @CPPFLAGS@
|
|
||||||
COMPILE = @CC@ @CFLAGS@ ${CPPFLAGS} -fno-strict-aliasing -c
|
|
||||||
#PREPROCESS = @CPP@ ${CPPFLAGS}
|
|
||||||
LINK = @CC@ @CFLAGS@ @LDFLAGS@
|
|
||||||
LINK_LIBS = @LIBS@
|
|
||||||
|
|
||||||
PARTS = common compat d2cs d2dbs
|
|
||||||
|
|
||||||
d2cs_SBIN = ${SRC_SBINDIR}/d2cs
|
|
||||||
d2cs_CONFS = d2cs.conf address_translation.conf
|
|
||||||
d2cs_OBJECTS = ${SRC_D2CSDIR}/main.o \
|
|
||||||
${SRC_D2CSDIR}/d2gs.o \
|
|
||||||
${SRC_D2CSDIR}/handle_d2gs.o \
|
|
||||||
${SRC_D2CSDIR}/serverqueue.o \
|
|
||||||
${SRC_D2CSDIR}/connection.o \
|
|
||||||
${SRC_D2CSDIR}/game.o \
|
|
||||||
${SRC_D2CSDIR}/server.o \
|
|
||||||
${SRC_D2CSDIR}/handle_init.o \
|
|
||||||
${SRC_D2CSDIR}/handle_d2cs.o \
|
|
||||||
${SRC_D2CSDIR}/d2charfile.o \
|
|
||||||
${SRC_D2CSDIR}/d2charlist.o \
|
|
||||||
${SRC_D2CSDIR}/xstring.o \
|
|
||||||
${SRC_D2CSDIR}/gamequeue.o \
|
|
||||||
${SRC_D2CSDIR}/conf.o \
|
|
||||||
${SRC_D2CSDIR}/prefs.o \
|
|
||||||
${SRC_D2CSDIR}/cmdline_parse.o \
|
|
||||||
${SRC_D2CSDIR}/bnetd.o \
|
|
||||||
${SRC_D2CSDIR}/handle_bnetd.o \
|
|
||||||
${SRC_D2CSDIR}/s2s.o \
|
|
||||||
${SRC_D2CSDIR}/net.o \
|
|
||||||
${SRC_D2CSDIR}/d2ladder.o \
|
|
||||||
${SRC_D2CSDIR}/handle_signal.o \
|
|
||||||
${SRC_COMMONDIR}/hashtable.o \
|
|
||||||
${SRC_COMMONDIR}/hexdump.o \
|
|
||||||
${SRC_COMMONDIR}/eventlog.o \
|
|
||||||
${SRC_COMMONDIR}/list.o \
|
|
||||||
${SRC_COMMONDIR}/packet.o \
|
|
||||||
${SRC_COMMONDIR}/bn_type.o \
|
|
||||||
${SRC_COMMONDIR}/addr.o \
|
|
||||||
${SRC_COMMONDIR}/util.o \
|
|
||||||
${SRC_COMMONDIR}/queue.o \
|
|
||||||
${SRC_COMMONDIR}/network.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_select.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_poll.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_epoll.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_kqueue.o \
|
|
||||||
${SRC_COMMONDIR}/rlimit.o \
|
|
||||||
${SRC_COMMONDIR}/trans.o \
|
|
||||||
${SRC_COMMONDIR}/tag.o \
|
|
||||||
${SRC_COMMONDIR}/xalloc.o \
|
|
||||||
${SRC_COMPATDIR}/inet_aton.o \
|
|
||||||
${SRC_COMPATDIR}/inet_ntoa.o \
|
|
||||||
${SRC_COMPATDIR}/strdup.o \
|
|
||||||
${SRC_COMPATDIR}/strerror.o \
|
|
||||||
${SRC_COMPATDIR}/strtoul.o \
|
|
||||||
${SRC_COMPATDIR}/strftime.o \
|
|
||||||
${SRC_COMPATDIR}/strcasecmp.o \
|
|
||||||
${SRC_COMPATDIR}/strncasecmp.o \
|
|
||||||
${SRC_COMPATDIR}/strsep.o \
|
|
||||||
${SRC_COMPATDIR}/psock.o \
|
|
||||||
${SRC_COMPATDIR}/uname.o \
|
|
||||||
${SRC_COMPATDIR}/gettimeofday.o \
|
|
||||||
${SRC_COMPATDIR}/difftime.o \
|
|
||||||
${SRC_COMPATDIR}/pdir.o \
|
|
||||||
${SRC_COMPATDIR}/memset.o \
|
|
||||||
${SRC_COMPATDIR}/memcpy.o \
|
|
||||||
${SRC_COMPATDIR}/memmove.o
|
|
||||||
|
|
||||||
d2dbs_SBIN = ${SRC_SBINDIR}/d2dbs
|
|
||||||
d2dbs_CONFS = d2dbs.conf
|
|
||||||
d2dbs_OBJECTS = ${SRC_D2DBSDIR}/main.o \
|
|
||||||
${SRC_D2DBSDIR}/charlock.o \
|
|
||||||
${SRC_D2DBSDIR}/d2ladder.o \
|
|
||||||
${SRC_D2DBSDIR}/dbserver.o \
|
|
||||||
${SRC_D2DBSDIR}/dbspacket.o \
|
|
||||||
${SRC_D2DBSDIR}/cmdline_parse.o \
|
|
||||||
${SRC_D2DBSDIR}/prefs.o \
|
|
||||||
${SRC_D2DBSDIR}/handle_signal.o \
|
|
||||||
${SRC_D2DBSDIR}/dbsdupecheck.o \
|
|
||||||
${SRC_D2CSDIR}/conf.o \
|
|
||||||
${SRC_D2CSDIR}/xstring.o \
|
|
||||||
${SRC_COMMONDIR}/list.o \
|
|
||||||
${SRC_COMMONDIR}/eventlog.o \
|
|
||||||
${SRC_COMMONDIR}/bn_type.o \
|
|
||||||
${SRC_COMMONDIR}/util.o \
|
|
||||||
${SRC_COMMONDIR}/addr.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_select.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_poll.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_epoll.o \
|
|
||||||
${SRC_COMMONDIR}/fdwatch_kqueue.o \
|
|
||||||
${SRC_COMMONDIR}/rlimit.o \
|
|
||||||
${SRC_COMMONDIR}/tag.o \
|
|
||||||
${SRC_COMMONDIR}/xalloc.o \
|
|
||||||
${SRC_COMPATDIR}/psock.o \
|
|
||||||
${SRC_COMPATDIR}/strerror.o \
|
|
||||||
${SRC_COMPATDIR}/strsep.o
|
|
||||||
|
|
||||||
OBJECTS = ${d2cs_OBJECTS} ${d2dbs_OBJECTS}
|
|
||||||
SBINS = ${d2cs_SBIN} ${d2dbs_SBIN}
|
|
||||||
|
|
||||||
CONFS = ${d2cs_CONFS} ${d2dbs_CONFS}
|
|
||||||
|
|
||||||
SHARES = newbie.save
|
|
||||||
|
|
||||||
OTHERRM = ${SRC_ACDIR}/ansi2knr ${SRC_ACDIR}/ansi2knr.o @ANSI2KNR_TMP@
|
|
||||||
DIRS = ${SRC_SBINDIR}
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: .dep @ANSI2KNR_DEP@ config ${SBINS} ${SRC_CONFDIR}/d2cs.conf ${SRC_CONFDIR}/d2dbs.conf
|
|
||||||
|
|
||||||
.PHONY: clean
|
|
||||||
clean:
|
|
||||||
-${RMF} core
|
|
||||||
-${RMF} ${OBJECTS}
|
|
||||||
-${RMF} ${SBINS}
|
|
||||||
-${RMF} ${OTHERRM}
|
|
||||||
|
|
||||||
.PHONY: distclean
|
|
||||||
distclean: clean
|
|
||||||
-${RMF} ${SRC_CONFDIR}/d2cs.conf
|
|
||||||
-${RMF} ${SRC_CONFDIR}/d2dbs.conf
|
|
||||||
-${RMF} ${SRC_SRCDIR}/config.cache ${SRC_SRCDIR}/config.log
|
|
||||||
-${RMF} ${SRC_SRCDIR}/config.status
|
|
||||||
-${RMF} ${SRC_SRCDIR}/Makefile ${SRC_SRCDIR}/config.h
|
|
||||||
-${RMDIR} ${DIRS}
|
|
||||||
|
|
||||||
.PHONY: cvsclean
|
|
||||||
cvsclean: distclean
|
|
||||||
-${RMF} ${SRC_SRCDIR}/configure ${SRC_SRCDIR}/config.h.in
|
|
||||||
|
|
||||||
.PHONY: clean-compile
|
|
||||||
clean-compile: clean all
|
|
||||||
|
|
||||||
.PHONY: config
|
|
||||||
config: .dep ${SRC_SRCDIR}/Makefile ${SRC_SRCDIR}/config.h
|
|
||||||
|
|
||||||
${SRC_SRCDIR}/configure: ${SRC_SRCDIR}/configure.in
|
|
||||||
@${ECHO} "The configure script is out of date; rebuilding..."
|
|
||||||
cd ${SRC_SRCDIR} && autoconf
|
|
||||||
@${ECHO} >> ${SRC_SRCDIR}/config.h.in
|
|
||||||
@${ECHO} >> $@
|
|
||||||
|
|
||||||
${SRC_SRCDIR}/config.h.in: ${SRC_SRCDIR}/configure.in
|
|
||||||
@${ECHO} "The config.h.in header is out of date; rebuilding..."
|
|
||||||
cd ${SRC_SRCDIR} && autoheader
|
|
||||||
@${ECHO} >> $@
|
|
||||||
@${ECHO} >> ${SRC_SRCDIR}/configure
|
|
||||||
|
|
||||||
${SRC_SRCDIR}/config.status: ${SRC_SRCDIR}/configure
|
|
||||||
@${ECHO} "The config.status script is out of date; rechecking..."
|
|
||||||
${SRC_SRCDIR}/config.status --recheck
|
|
||||||
@${ECHO} >> $@
|
|
||||||
|
|
||||||
${SRC_SRCDIR}/config.h: ${SRC_SRCDIR}/config.h.in ${SRC_SRCDIR}/config.status
|
|
||||||
@${ECHO} "The config.h header is out of date; rewriting..."
|
|
||||||
${SRC_SRCDIR}/config.status
|
|
||||||
@${ECHO} >> ${SRC_SRCDIR}/Makefile
|
|
||||||
@${ECHO} >> $@
|
|
||||||
|
|
||||||
${SRC_SRCDIR}/Makefile: ${SRC_SRCDIR}/Makefile.in ${SRC_SRCDIR}/config.status
|
|
||||||
@${ECHO} "The Makefile is out of date; rewriting..."
|
|
||||||
${SRC_SRCDIR}/config.status
|
|
||||||
@${ECHO} >> ${SRC_SRCDIR}/config.h
|
|
||||||
@${ECHO} >> $@
|
|
||||||
|
|
||||||
${SRC_SBINDIR}:
|
|
||||||
${INSTALL_DIRS} $@
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install: .dep install-sbin install-conf install-share
|
|
||||||
|
|
||||||
.PHONY: install-sbin
|
|
||||||
install-sbin: ${SBINS}
|
|
||||||
${INSTALL_DIRS} ${DESTDIR}/${sbindir}
|
|
||||||
@list='${SBINS}'; for p in $$list; do \
|
|
||||||
if test -f $$p; then \
|
|
||||||
${ECHO} " ${INSTALL_PROGRAM} $$p ${DESTDIR}/${sbindir}"; \
|
|
||||||
${INSTALL_PROGRAM} $$p ${DESTDIR}/${sbindir}; \
|
|
||||||
else :; fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: install-conf
|
|
||||||
install-conf: ${SRC_CONFDIR}/d2cs.conf ${SRC_CONFDIR}/d2dbs.conf
|
|
||||||
${INSTALL_DIRS} ${DESTDIR}/${confdir}
|
|
||||||
@list='${CONFS}'; for p in $$list; do \
|
|
||||||
if test -f ${SRC_CONFDIR}/$$p; then \
|
|
||||||
${ECHO} " ${INSTALL_DATA} ${SRC_CONFDIR}/$$p ${DESTDIR}/${confdir}"; \
|
|
||||||
${INSTALL_DATA} ${SRC_CONFDIR}/$$p ${DESTDIR}/${confdir}; \
|
|
||||||
else :; fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: install-share
|
|
||||||
install-share:
|
|
||||||
${INSTALL_DIRS} ${DESTDIR}/${sharedir} ${DESTDIR}/${filesdir} \
|
|
||||||
${DESTDIR}/${charinfodir} ${DESTDIR}/${charsavedir} ${DESTDIR}/${bak_charsavedir} \
|
|
||||||
${DESTDIR}/${bak_charinfodir} ${DESTDIR}/${ladderdir} ${DESTDIR}/${statusdir}
|
|
||||||
@list='${SHARES}'; for p in $$list; do \
|
|
||||||
if test -f ${SRC_SHAREDIR}/$$p; then \
|
|
||||||
${ECHO} " ${INSTALL_DATA} ${SRC_SHAREDIR}/$$p ${DESTDIR}/${filesdir}"; \
|
|
||||||
${INSTALL_DATA} ${SRC_SHAREDIR}/$$p ${DESTDIR}/${filesdir}; \
|
|
||||||
else :; fi; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: uninstall
|
|
||||||
uninstall: uninstall-sbin uninstall-conf uninstall-share
|
|
||||||
|
|
||||||
.PHONY: uninstall-sbin
|
|
||||||
uninstall-sbin:
|
|
||||||
@list='${SBINS}'; for p in $$list; do \
|
|
||||||
${ECHO} " ${RMF} ${sbindir}/$$p"; \
|
|
||||||
${RMF} ${sbindir}/$$p; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: uninstall-conf
|
|
||||||
uninstall-conf:
|
|
||||||
@list='${CONFS}'; for p in $$list; do \
|
|
||||||
${ECHO} " ${RMF} ${confdir}/$$p"; \
|
|
||||||
${RMF} ${confdir}/$$p; \
|
|
||||||
done
|
|
||||||
|
|
||||||
.PHONY: uninstall-share
|
|
||||||
uninstall-share:
|
|
||||||
@list='${SHARES}'; for p in $$list; do \
|
|
||||||
${ECHO} " ${RMF} ${sharedir}/$$p"; \
|
|
||||||
${RMF} ${sharedir}/$$p; \
|
|
||||||
done
|
|
||||||
|
|
||||||
${SRC_CONFDIR}/d2cs.conf: ${SRC_CONFDIR}/d2cs.conf.in ${SRC_SRCDIR}/config.status
|
|
||||||
@${RMF} $@
|
|
||||||
${SED} -e "s@/usr/local/var/@${sharedir}/@g" -e "s@/usr/local/etc/@${confdir}/@g" ${SRC_CONFDIR}/d2cs.conf.in > $@
|
|
||||||
|
|
||||||
${SRC_CONFDIR}/d2dbs.conf: ${SRC_CONFDIR}/d2dbs.conf.in ${SRC_SRCDIR}/config.status
|
|
||||||
@${RMF} $@
|
|
||||||
${SED} -e "s@/usr/local/var/@${sharedir}/@g" -e "s@/usr/local/etc/@${confdir}/@g" ${SRC_CONFDIR}/d2dbs.conf.in > $@
|
|
||||||
|
|
||||||
${SRC_ACDIR}/ansi2knr: ${SRC_ACDIR}/ansi2knr.o
|
|
||||||
@${RMF} $@
|
|
||||||
${LINK} ${SRC_ACDIR}/ansi2knr.o ${LINK_LIBS} -o $@
|
|
||||||
|
|
||||||
${SRC_ACDIR}/ansi2knr.o: ${SRC_ACDIR}/ansi2knr.c
|
|
||||||
@${RMF} $@
|
|
||||||
${COMPILE} ${SRC_ACDIR}/ansi2knr.c -o $@
|
|
||||||
|
|
||||||
SHOWHEADER:
|
|
||||||
@echo
|
|
||||||
@echo "Using compile command: ${COMPILE}"
|
|
||||||
@echo
|
|
||||||
|
|
||||||
.c.o: SHOWHEADER
|
|
||||||
@${RMF} $@
|
|
||||||
@echo "Compiling $*.c"
|
|
||||||
@@COMPILEANSI1@
|
|
||||||
@@COMPILEANSI2@
|
|
||||||
@@COMPILEANSI3@
|
|
||||||
|
|
||||||
.dep:
|
|
||||||
${MAKE} dep
|
|
||||||
|
|
||||||
dep:
|
|
||||||
@${RMF} .dep
|
|
||||||
@for a in ${PARTS}; do \
|
|
||||||
echo Dependency check: $$a; \
|
|
||||||
${COMPILE} -MM `ls $$a/*.c` | sed -e "s@\(.*\)\.o:\(.*\)@$$a\/\1\.o:\2@g" 1>>.dep; \
|
|
||||||
done
|
|
||||||
|
|
||||||
${d2cs_SBIN}: SHOWHEADER ${d2cs_OBJECTS}
|
|
||||||
@${INSTALL_DIRS} ${SRC_SBINDIR}
|
|
||||||
@${RMF} $@
|
|
||||||
${LINK} ${d2cs_OBJECTS} ${LINK_LIBS} -o $@
|
|
||||||
|
|
||||||
${d2dbs_SBIN}: SHOWHEADER ${d2dbs_OBJECTS}
|
|
||||||
@${INSTALL_DIRS} ${SRC_SBINDIR}
|
|
||||||
@${RMF} $@
|
|
||||||
${LINK} ${d2dbs_OBJECTS} ${LINK_LIBS} -o $@
|
|
||||||
|
|
||||||
ifneq ($(wildcard .dep),)
|
|
||||||
include .dep
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Tell versions (3.59,3.63) of GNU make to not export all variables.
|
|
||||||
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
||||||
.NOEXPORT:
|
|
|
@ -1,637 +0,0 @@
|
||||||
/* Copyright (C) 1989, 1997, 1998 Aladdin Enterprises. All rights reserved. */
|
|
||||||
|
|
||||||
/*$Id: ansi2knr.c,v 1.1.1.1 2004/03/11 18:57:30 dizzy Exp $*/
|
|
||||||
/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
|
|
||||||
|
|
||||||
/*
|
|
||||||
ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY. No author or distributor accepts responsibility to anyone for the
|
|
||||||
consequences of using it or for whether it serves any particular purpose or
|
|
||||||
works at all, unless he says so in writing. Refer to the GNU General Public
|
|
||||||
License (the "GPL") for full details.
|
|
||||||
|
|
||||||
Everyone is granted permission to copy, modify and redistribute ansi2knr,
|
|
||||||
but only under the conditions described in the GPL. A copy of this license
|
|
||||||
is supposed to have been given to you along with ansi2knr so you can know
|
|
||||||
your rights and responsibilities. It should be in a file named COPYLEFT,
|
|
||||||
or, if there is no file named COPYLEFT, a file named COPYING. Among other
|
|
||||||
things, the copyright notice and this notice must be preserved on all
|
|
||||||
copies.
|
|
||||||
|
|
||||||
We explicitly state here what we believe is already implied by the GPL: if
|
|
||||||
the ansi2knr program is distributed as a separate set of sources and a
|
|
||||||
separate executable file which are aggregated on a storage medium together
|
|
||||||
with another program, this in itself does not bring the other program under
|
|
||||||
the GPL, nor does the mere fact that such a program or the procedures for
|
|
||||||
constructing it invoke the ansi2knr executable bring any other part of the
|
|
||||||
program under the GPL.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Usage:
|
|
||||||
ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]
|
|
||||||
* --filename provides the file name for the #line directive in the output,
|
|
||||||
* overriding input_file (if present).
|
|
||||||
* If no input_file is supplied, input is read from stdin.
|
|
||||||
* If no output_file is supplied, output goes to stdout.
|
|
||||||
* There are no error messages.
|
|
||||||
*
|
|
||||||
* ansi2knr recognizes function definitions by seeing one or more
|
|
||||||
* identifiers at the left margin, possibly including function pointer
|
|
||||||
* types, eventually followed by a left parenthesis with a right
|
|
||||||
* parenthesis after that and with a left brace as the first token on
|
|
||||||
* the next line. ansi2knr will recognize a multi-line header provided
|
|
||||||
* that no intervening line ends with a left or right brace or a
|
|
||||||
* semicolon. These algorithms ignore whitespace and comments.
|
|
||||||
* The following constructs will confuse it:
|
|
||||||
* - Any other construct that starts at the left margin and
|
|
||||||
* follows the above syntax (such as a macro or function call).
|
|
||||||
* - Some macros that tinker with the syntax of the function header.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The original and principal author of ansi2knr is L. Peter Deutsch
|
|
||||||
* <ghost@aladdin.com>. Other authors are noted in the change history
|
|
||||||
* that follows (in reverse chronological order):
|
|
||||||
rac 2000-08-02 modified to not force the return values to be
|
|
||||||
on the preceding line, to transform prototypes, to
|
|
||||||
remove the "void" single parameter restriction, and to
|
|
||||||
handle function pointers with ANSI style parameters.
|
|
||||||
lpd 1998-11-09 added further hack to recognize identifier(void)
|
|
||||||
as being a procedure
|
|
||||||
lpd 1998-10-23 added hack to recognize lines consisting of
|
|
||||||
identifier1(identifier2) as *not* being procedures
|
|
||||||
lpd 1997-12-08 made input_file optional; only closes input and/or
|
|
||||||
output file if not stdin or stdout respectively; prints
|
|
||||||
usage message on stderr rather than stdout; adds
|
|
||||||
--filename switch (changes suggested by
|
|
||||||
<ceder@lysator.liu.se>)
|
|
||||||
lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with
|
|
||||||
compilers that don't understand void, as suggested by
|
|
||||||
Tom Lane
|
|
||||||
lpd 1996-01-15 changed to require that the first non-comment token
|
|
||||||
on the line following a function header be a left brace,
|
|
||||||
to reduce sensitivity to macros, as suggested by Tom Lane
|
|
||||||
<tgl@sss.pgh.pa.us>
|
|
||||||
lpd 1995-06-22 removed #ifndefs whose sole purpose was to define
|
|
||||||
undefined preprocessor symbols as 0; changed all #ifdefs
|
|
||||||
for configuration symbols to #ifs
|
|
||||||
lpd 1995-04-05 changed copyright notice to make it clear that
|
|
||||||
including ansi2knr in a program does not bring the entire
|
|
||||||
program under the GPL
|
|
||||||
lpd 1994-12-18 added conditionals for systems where ctype macros
|
|
||||||
don't handle 8-bit characters properly, suggested by
|
|
||||||
Francois Pinard <pinard@iro.umontreal.ca>;
|
|
||||||
removed --varargs switch (this is now the default)
|
|
||||||
lpd 1994-10-10 removed CONFIG_BROKETS conditional
|
|
||||||
lpd 1994-07-16 added some conditionals to help GNU `configure',
|
|
||||||
suggested by Francois Pinard <pinard@iro.umontreal.ca>;
|
|
||||||
properly erase prototype args in function parameters,
|
|
||||||
contributed by Jim Avera <jima@netcom.com>;
|
|
||||||
correct error in writeblanks (it shouldn't erase EOLs)
|
|
||||||
lpd 1989-xx-xx original version
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Most of the conditionals here are to make ansi2knr work with */
|
|
||||||
/* or without the GNU configure machinery. */
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
|
||||||
# include <config.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
|
|
||||||
#if HAVE_CONFIG_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).
|
|
||||||
This will define HAVE_CONFIG_H and so, activate the following lines.
|
|
||||||
*/
|
|
||||||
|
|
||||||
# if STDC_HEADERS || HAVE_STRING_H
|
|
||||||
# include <string.h>
|
|
||||||
# else
|
|
||||||
# include <strings.h>
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#else /* not HAVE_CONFIG_H */
|
|
||||||
|
|
||||||
/* Otherwise do it the hard way */
|
|
||||||
|
|
||||||
# ifdef BSD
|
|
||||||
# include <strings.h>
|
|
||||||
# else
|
|
||||||
# ifdef VMS
|
|
||||||
extern int strlen(), strncmp();
|
|
||||||
# else
|
|
||||||
# include <string.h>
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif /* not HAVE_CONFIG_H */
|
|
||||||
|
|
||||||
#if STDC_HEADERS
|
|
||||||
# include <stdlib.h>
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
malloc and free should be declared in stdlib.h,
|
|
||||||
but if you've got a K&R compiler, they probably aren't.
|
|
||||||
*/
|
|
||||||
# ifdef MSDOS
|
|
||||||
# include <malloc.h>
|
|
||||||
# else
|
|
||||||
# ifdef VMS
|
|
||||||
extern char *malloc();
|
|
||||||
extern void free();
|
|
||||||
# else
|
|
||||||
extern char *malloc();
|
|
||||||
extern int free();
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The ctype macros don't always handle 8-bit characters correctly.
|
|
||||||
* Compensate for this here.
|
|
||||||
*/
|
|
||||||
#ifdef isascii
|
|
||||||
# undef HAVE_ISASCII /* just in case */
|
|
||||||
# define HAVE_ISASCII 1
|
|
||||||
#else
|
|
||||||
#endif
|
|
||||||
#if STDC_HEADERS || !HAVE_ISASCII
|
|
||||||
# define is_ascii(c) 1
|
|
||||||
#else
|
|
||||||
# define is_ascii(c) isascii(c)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define is_space(c) (is_ascii(c) && isspace(c))
|
|
||||||
#define is_alpha(c) (is_ascii(c) && isalpha(c))
|
|
||||||
#define is_alnum(c) (is_ascii(c) && isalnum(c))
|
|
||||||
|
|
||||||
/* Scanning macros */
|
|
||||||
#define isidchar(ch) (is_alnum(ch) || (ch) == '_')
|
|
||||||
#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')
|
|
||||||
|
|
||||||
/* Forward references */
|
|
||||||
static char *skipspace();
|
|
||||||
static int writeblanks();
|
|
||||||
static int test1();
|
|
||||||
static int convert1();
|
|
||||||
|
|
||||||
static char *startfn;
|
|
||||||
static char *endfn;
|
|
||||||
|
|
||||||
/* The main program */
|
|
||||||
int
|
|
||||||
main(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char *argv[];
|
|
||||||
{ FILE *in = stdin;
|
|
||||||
FILE *out = stdout;
|
|
||||||
char *filename = 0;
|
|
||||||
#define bufsize 5000 /* arbitrary size */
|
|
||||||
char *buf;
|
|
||||||
char *line;
|
|
||||||
char *more;
|
|
||||||
char *usage =
|
|
||||||
"Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n";
|
|
||||||
/*
|
|
||||||
* In previous versions, ansi2knr recognized a --varargs switch.
|
|
||||||
* If this switch was supplied, ansi2knr would attempt to convert
|
|
||||||
* a ... argument to va_alist and va_dcl; if this switch was not
|
|
||||||
* supplied, ansi2knr would simply drop any such arguments.
|
|
||||||
* Now, ansi2knr always does this conversion, and we only
|
|
||||||
* check for this switch for backward compatibility.
|
|
||||||
*/
|
|
||||||
int convert_varargs = 1;
|
|
||||||
|
|
||||||
while ( argc > 1 && argv[1][0] == '-' ) {
|
|
||||||
if ( !strcmp(argv[1], "--varargs") ) {
|
|
||||||
convert_varargs = 1;
|
|
||||||
argc--;
|
|
||||||
argv++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( !strcmp(argv[1], "--filename") && argc > 2 ) {
|
|
||||||
filename = argv[2];
|
|
||||||
argc -= 2;
|
|
||||||
argv += 2;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
fprintf(stderr, "Unrecognized switch: %s\n", argv[1]);
|
|
||||||
fprintf(stderr, usage);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
switch ( argc )
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
fprintf(stderr, usage);
|
|
||||||
exit(0);
|
|
||||||
case 3:
|
|
||||||
out = fopen(argv[2], "w");
|
|
||||||
if ( out == NULL ) {
|
|
||||||
fprintf(stderr, "Cannot open output file %s\n", argv[2]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
/* falls through */
|
|
||||||
case 2:
|
|
||||||
in = fopen(argv[1], "r");
|
|
||||||
if ( in == NULL ) {
|
|
||||||
fprintf(stderr, "Cannot open input file %s\n", argv[1]);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
if ( filename == 0 )
|
|
||||||
filename = argv[1];
|
|
||||||
/* falls through */
|
|
||||||
case 1:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ( filename )
|
|
||||||
fprintf(out, "#line 1 \"%s\"\n", filename);
|
|
||||||
buf = malloc(bufsize);
|
|
||||||
line = buf;
|
|
||||||
while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
|
|
||||||
{
|
|
||||||
test: line += strlen(line);
|
|
||||||
switch ( test1(buf) )
|
|
||||||
{
|
|
||||||
case 3: /* a function pointer */
|
|
||||||
case 2: /* a function prototype */
|
|
||||||
convert1(buf, out, 1, convert_varargs);
|
|
||||||
break;
|
|
||||||
case 1: /* a function */
|
|
||||||
/* Check for a { at the start of the next line. */
|
|
||||||
more = ++line;
|
|
||||||
f: if ( line >= buf + (bufsize - 1) ) /* overflow check */
|
|
||||||
goto wl;
|
|
||||||
if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL )
|
|
||||||
goto wl;
|
|
||||||
switch ( *skipspace(more, 1) )
|
|
||||||
{
|
|
||||||
case '{':
|
|
||||||
/* Definitely a function */
|
|
||||||
convert1(buf, out, 0, convert_varargs);
|
|
||||||
fputs(more, out);
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
/* The next line was blank or a comment: */
|
|
||||||
/* keep scanning for a non-comment. */
|
|
||||||
line += strlen(line);
|
|
||||||
goto f;
|
|
||||||
default:
|
|
||||||
/* buf isn't a function header, but */
|
|
||||||
/* more might be. */
|
|
||||||
fputs(buf, out);
|
|
||||||
strcpy(buf, more);
|
|
||||||
line = buf;
|
|
||||||
goto test;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case -1: /* maybe the start of a function */
|
|
||||||
if ( line != buf + (bufsize - 1) ) /* overflow check */
|
|
||||||
continue;
|
|
||||||
/* falls through */
|
|
||||||
default: /* not a function */
|
|
||||||
wl: fputs(buf, out);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
line = buf;
|
|
||||||
}
|
|
||||||
if ( line != buf )
|
|
||||||
fputs(buf, out);
|
|
||||||
free(buf);
|
|
||||||
if ( out != stdout )
|
|
||||||
fclose(out);
|
|
||||||
if ( in != stdin )
|
|
||||||
fclose(in);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Skip over space and comments, in either direction. */
|
|
||||||
static char *
|
|
||||||
skipspace(p, dir)
|
|
||||||
char *p;
|
|
||||||
int dir; /* 1 for forward, -1 for backward */
|
|
||||||
{ if (*p=='\0') return p;
|
|
||||||
for ( ; ; )
|
|
||||||
{ while ( is_space(*p) )
|
|
||||||
p += dir;
|
|
||||||
if ( !(*p == '/' && p[dir] == '*') )
|
|
||||||
break;
|
|
||||||
p += dir; p += dir;
|
|
||||||
while ( !(*p == '*' && p[dir] == '/') )
|
|
||||||
{ if ( *p == 0 )
|
|
||||||
return p; /* multi-line comment?? */
|
|
||||||
p += dir;
|
|
||||||
}
|
|
||||||
p += dir; p += dir;
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Write blanks over part of a string.
|
|
||||||
* Don't overwrite end-of-line characters.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
writeblanks(start, end)
|
|
||||||
char *start;
|
|
||||||
char *end;
|
|
||||||
{ char *p;
|
|
||||||
for ( p = start; p < end; p++ )
|
|
||||||
if ( *p != '\r' && *p != '\n' )
|
|
||||||
*p = ' ';
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Test whether the string in buf is a function definition.
|
|
||||||
* The string may contain and/or end with a newline.
|
|
||||||
* Return as follows:
|
|
||||||
* 0 - definitely not a function definition;
|
|
||||||
* 1 - definitely a function definition;
|
|
||||||
* 2 - definitely a function prototype;
|
|
||||||
* 3 - definitely a function pointer;
|
|
||||||
* -1 - may be the beginning of a function definition,
|
|
||||||
* append another line and look again.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
test1(buf)
|
|
||||||
char *buf;
|
|
||||||
{ char *p;
|
|
||||||
char *bend;
|
|
||||||
int contin;
|
|
||||||
|
|
||||||
if ( !isalpha(*buf) )
|
|
||||||
return 0; /* no name at left margin */
|
|
||||||
bend = skipspace(buf + strlen(buf) - 1, -1);
|
|
||||||
switch ( *bend )
|
|
||||||
{
|
|
||||||
case ';': contin = 2; break;
|
|
||||||
case ')': contin = 1; break;
|
|
||||||
case '{':
|
|
||||||
case '}':
|
|
||||||
return 0; /* not a function */
|
|
||||||
default: contin = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* find start and end of function name */
|
|
||||||
startfn=buf;
|
|
||||||
while (*startfn!='\0' && *startfn!='(')
|
|
||||||
{
|
|
||||||
startfn++;
|
|
||||||
startfn = skipspace(startfn, 1);
|
|
||||||
}
|
|
||||||
if (*startfn=='\0')
|
|
||||||
return 0; /* not a function */
|
|
||||||
startfn--;
|
|
||||||
p = startfn;
|
|
||||||
startfn = skipspace(startfn,-1);
|
|
||||||
endfn = startfn+1;
|
|
||||||
while (isidchar(*startfn)) startfn--;
|
|
||||||
startfn++;
|
|
||||||
if (startfn>=endfn)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
p = skipspace(endfn, 1);
|
|
||||||
#if 0
|
|
||||||
/* v v */
|
|
||||||
/* typedef __ssize_t __io_read_ */
|
|
||||||
fprintf(stderr,"found %s\n",buf);
|
|
||||||
fprintf(stderr,"func=");
|
|
||||||
{ int i; for (i=0; i<endfn-startfn; i++) fprintf(stderr,"%c",startfn[i]); }
|
|
||||||
fprintf(stderr,"\n");
|
|
||||||
fprintf(stderr,"p=%s\n",p);
|
|
||||||
#endif
|
|
||||||
p++; /* skip ( */
|
|
||||||
p = skipspace(p, 1);
|
|
||||||
if (*p=='*') /* maybe a function pointer */
|
|
||||||
{
|
|
||||||
startfn = p;
|
|
||||||
while (*p!='\0' && *p!=')')
|
|
||||||
p++;
|
|
||||||
if (*p=='\0')
|
|
||||||
return -1; /* wraps to the next line */
|
|
||||||
endfn = p-1;
|
|
||||||
if (contin!=-1) contin = 3;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
if (!isidfirstchar(*p))
|
|
||||||
return 0; /* ok... no parameters anyway */
|
|
||||||
|
|
||||||
/* Check that the apparent function name isn't a keyword. */
|
|
||||||
/* We only need to check for keywords that could be followed */
|
|
||||||
/* by a left parenthesis (which, unfortunately, is most of them). */
|
|
||||||
if (contin != 3)
|
|
||||||
{ static char *words[] =
|
|
||||||
{ "asm", "auto", "case", "char", "const", "double",
|
|
||||||
"extern", "float", "for", "if", "int", "long",
|
|
||||||
"register", "return", "short", "signed", "sizeof",
|
|
||||||
"static", "switch", "typedef", "unsigned",
|
|
||||||
"void", "volatile", "while", 0
|
|
||||||
};
|
|
||||||
char **key = words;
|
|
||||||
char *kp;
|
|
||||||
int len = endfn - startfn;
|
|
||||||
|
|
||||||
while ( (kp = *key) != 0 )
|
|
||||||
{ if ( strlen(kp) == len && !strncmp(kp, startfn, len) )
|
|
||||||
{
|
|
||||||
fprintf(stderr,"it was a keyword\n");
|
|
||||||
return 0; /* name is a keyword */
|
|
||||||
}
|
|
||||||
key++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* If the last significant character was a ), we need to count
|
|
||||||
* parentheses, because it might be part of a formal parameter
|
|
||||||
* that is a procedure.
|
|
||||||
*/
|
|
||||||
if (contin > 0) {
|
|
||||||
int level = 0;
|
|
||||||
|
|
||||||
for (p = endfn; *p; p = skipspace(p + 1, 1))
|
|
||||||
level += (*p == '(' ? 1 : *p == ')' ? -1 : 0);
|
|
||||||
if (level > 0)
|
|
||||||
contin = -1;
|
|
||||||
}
|
|
||||||
return contin;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert a recognized function definition or header to K&R syntax. */
|
|
||||||
static int
|
|
||||||
convert1(buf, out, header, convert_varargs)
|
|
||||||
char *buf;
|
|
||||||
FILE *out;
|
|
||||||
int header; /* Boolean */
|
|
||||||
int convert_varargs; /* Boolean */
|
|
||||||
{
|
|
||||||
char *p;
|
|
||||||
/*
|
|
||||||
* The breaks table contains pointers to the beginning and end
|
|
||||||
* of each argument.
|
|
||||||
*/
|
|
||||||
char **breaks;
|
|
||||||
unsigned num_breaks = 2; /* for testing */
|
|
||||||
char **btop;
|
|
||||||
char **bp;
|
|
||||||
char **ap;
|
|
||||||
char *vararg = 0;
|
|
||||||
|
|
||||||
for (p=buf; p<startfn; p++)
|
|
||||||
fprintf(out,"%c",*p);
|
|
||||||
|
|
||||||
while (*(endfn++) != '(');
|
|
||||||
|
|
||||||
top: p = endfn;
|
|
||||||
breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
|
|
||||||
if ( breaks == 0 )
|
|
||||||
{ /* Couldn't allocate break table, give up */
|
|
||||||
fprintf(stderr, "Unable to allocate break table!\n");
|
|
||||||
fputs(startfn, out);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
btop = breaks + num_breaks * 2 - 2;
|
|
||||||
bp = breaks;
|
|
||||||
/* Parse the argument list */
|
|
||||||
do
|
|
||||||
{ int level = 0;
|
|
||||||
char *lp = NULL;
|
|
||||||
char *rp;
|
|
||||||
char *end = NULL;
|
|
||||||
|
|
||||||
if ( bp >= btop )
|
|
||||||
{ /* Filled up break table. */
|
|
||||||
/* Allocate a bigger one and start over. */
|
|
||||||
free((char *)breaks);
|
|
||||||
num_breaks <<= 1;
|
|
||||||
goto top;
|
|
||||||
}
|
|
||||||
*bp++ = p;
|
|
||||||
/* Find the end of the argument */
|
|
||||||
for ( ; end == NULL; p++ )
|
|
||||||
{ switch(*p)
|
|
||||||
{
|
|
||||||
case ',':
|
|
||||||
if ( !level ) end = p;
|
|
||||||
break;
|
|
||||||
case '(':
|
|
||||||
if ( !level ) lp = p;
|
|
||||||
level++;
|
|
||||||
break;
|
|
||||||
case ')':
|
|
||||||
if ( --level < 0 ) end = p;
|
|
||||||
else rp = p;
|
|
||||||
break;
|
|
||||||
case '/':
|
|
||||||
p = skipspace(p, 1) - 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Erase any embedded function pointer parameters. */
|
|
||||||
if ( lp )
|
|
||||||
writeblanks(lp + 1, rp);
|
|
||||||
p--; /* back up over terminator */
|
|
||||||
/* Find the name being declared. */
|
|
||||||
/* This is complicated because of procedure and */
|
|
||||||
/* array modifiers. */
|
|
||||||
for ( ; ; )
|
|
||||||
{ p = skipspace(p - 1, -1);
|
|
||||||
switch ( *p )
|
|
||||||
{
|
|
||||||
case ']': /* skip array dimension(s) */
|
|
||||||
case ')': /* skip procedure args OR name */
|
|
||||||
{ int level = 1;
|
|
||||||
while ( level )
|
|
||||||
switch ( *--p )
|
|
||||||
{
|
|
||||||
case ']': case ')': level++; break;
|
|
||||||
case '[': case '(': level--; break;
|
|
||||||
case '/': p = skipspace(p, -1) + 1; break;
|
|
||||||
default: ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( *p == '(' && *skipspace(p + 1, 1) == '*' )
|
|
||||||
{ /* We found the name of the function pointer */
|
|
||||||
while ( !isidfirstchar(*p) )
|
|
||||||
p = skipspace(p, 1) + 1;
|
|
||||||
goto found;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
goto found;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
|
|
||||||
{ if ( convert_varargs )
|
|
||||||
{ *bp++ = "va_alist";
|
|
||||||
vararg = p-2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ p++;
|
|
||||||
if ( bp == breaks + 1 ) /* sole argument */
|
|
||||||
writeblanks(breaks[0], p);
|
|
||||||
else
|
|
||||||
writeblanks(bp[-1] - 1, p);
|
|
||||||
bp--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ while ( isidchar(*p) ) p--;
|
|
||||||
*bp++ = p+1;
|
|
||||||
}
|
|
||||||
p = end;
|
|
||||||
}
|
|
||||||
while ( *p++ == ',' );
|
|
||||||
*bp = p;
|
|
||||||
/* Make a special check for 'void' arglist */
|
|
||||||
if ( bp == breaks+2 )
|
|
||||||
{ p = skipspace(breaks[0], 1);
|
|
||||||
if ( !strncmp(p, "void", 4) )
|
|
||||||
{ p = skipspace(p+4, 1);
|
|
||||||
if ( p == breaks[2] - 1 )
|
|
||||||
{ bp = breaks; /* yup, pretend arglist is empty */
|
|
||||||
writeblanks(breaks[0], p + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Put out the function name and left parenthesis. */
|
|
||||||
for (p=startfn; p != endfn; p++) putc(*p, out);
|
|
||||||
/* Put out the declaration. */
|
|
||||||
if ( header )
|
|
||||||
{ fputs(");", out);
|
|
||||||
for ( p = breaks[0]; *p; p++ )
|
|
||||||
if ( *p == '\r' || *p == '\n' )
|
|
||||||
putc(*p, out);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{ for ( ap = breaks+1; ap < bp; ap += 2 )
|
|
||||||
{ p = *ap;
|
|
||||||
while ( isidchar(*p) )
|
|
||||||
putc(*p, out), p++;
|
|
||||||
if ( ap < bp - 1 )
|
|
||||||
fputs(", ", out);
|
|
||||||
}
|
|
||||||
fputs(") ", out);
|
|
||||||
/* Put out the argument declarations */
|
|
||||||
for ( ap = breaks+2; ap <= bp; ap += 2 )
|
|
||||||
(*ap)[-1] = ';';
|
|
||||||
if ( vararg != 0 )
|
|
||||||
{ *vararg = 0;
|
|
||||||
fputs(breaks[0], out); /* any prior args */
|
|
||||||
fputs("va_dcl", out); /* the final arg */
|
|
||||||
fputs(bp[0], out);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
fputs(breaks[0], out);
|
|
||||||
}
|
|
||||||
free((char *)breaks);
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
## ----------------------------------------- ##
|
|
||||||
## ANSIfy the C compiler whenever possible. ##
|
|
||||||
## From Franc,ois Pinard ##
|
|
||||||
## ----------------------------------------- ##
|
|
||||||
|
|
||||||
# serial 1
|
|
||||||
|
|
||||||
# @defmac AC_PROG_CC_STDC
|
|
||||||
# @maindex PROG_CC_STDC
|
|
||||||
# @ovindex CC
|
|
||||||
# If the C compiler in not in ANSI C mode by default, try to add an option
|
|
||||||
# to output variable @code{CC} to make it so. This macro tries various
|
|
||||||
# options that select ANSI C on some system or another. It considers the
|
|
||||||
# compiler to be in ANSI C mode if it handles function prototypes correctly.
|
|
||||||
#
|
|
||||||
# If you use this macro, you should check after calling it whether the C
|
|
||||||
# compiler has been set to accept ANSI C; if not, the shell variable
|
|
||||||
# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source
|
|
||||||
# code in ANSI C, you can make an un-ANSIfied copy of it by using the
|
|
||||||
# program @code{ansi2knr}, which comes with Ghostscript.
|
|
||||||
# @end defmac
|
|
||||||
|
|
||||||
AC_DEFUN(AM_PROG_CC_STDC,
|
|
||||||
[AC_REQUIRE([AC_PROG_CC])
|
|
||||||
AC_BEFORE([$0], [AC_C_INLINE])
|
|
||||||
AC_BEFORE([$0], [AC_C_CONST])
|
|
||||||
dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require
|
|
||||||
dnl a magic option to avoid problems with ANSI preprocessor commands
|
|
||||||
dnl like #elif.
|
|
||||||
dnl FIXME: can't do this because then AC_AIX won't work due to a
|
|
||||||
dnl circular dependency.
|
|
||||||
dnl AC_BEFORE([$0], [AC_PROG_CPP])
|
|
||||||
AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
|
|
||||||
AC_CACHE_VAL(am_cv_prog_cc_stdc,
|
|
||||||
[am_cv_prog_cc_stdc=no
|
|
||||||
ac_save_CC="$CC"
|
|
||||||
# Don't try gcc -ansi; that turns off useful extensions and
|
|
||||||
# breaks some systems' header files.
|
|
||||||
# AIX -qlanglvl=ansi
|
|
||||||
# Ultrix and OSF/1 -std1
|
|
||||||
# HP-UX -Aa -D_HPUX_SOURCE
|
|
||||||
# SVR4 -Xc -D__EXTENSIONS__
|
|
||||||
for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
|
|
||||||
do
|
|
||||||
CC="$ac_save_CC $ac_arg"
|
|
||||||
AC_TRY_COMPILE(
|
|
||||||
[#include <stdarg.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
|
|
||||||
struct buf { int x; };
|
|
||||||
FILE * (*rcsopen) (struct buf *, struct stat *, int);
|
|
||||||
static char *e (p, i)
|
|
||||||
char **p;
|
|
||||||
int i;
|
|
||||||
{
|
|
||||||
return p[i];
|
|
||||||
}
|
|
||||||
static char *f (char * (*g) (char **, int), char **p, ...)
|
|
||||||
{
|
|
||||||
char *s;
|
|
||||||
va_list v;
|
|
||||||
va_start (v,p);
|
|
||||||
s = g (p, va_arg (v,int));
|
|
||||||
va_end (v);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
int test (int i, double x);
|
|
||||||
struct s1 {int (*f) (int a);};
|
|
||||||
struct s2 {int (*f) (double a);};
|
|
||||||
int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
], [
|
|
||||||
return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
|
|
||||||
],
|
|
||||||
[am_cv_prog_cc_stdc="$ac_arg"; break])
|
|
||||||
done
|
|
||||||
CC="$ac_save_CC"
|
|
||||||
])
|
|
||||||
if test -z "$am_cv_prog_cc_stdc"; then
|
|
||||||
AC_MSG_RESULT([none needed])
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT($am_cv_prog_cc_stdc)
|
|
||||||
fi
|
|
||||||
case "x$am_cv_prog_cc_stdc" in
|
|
||||||
x|xno) ;;
|
|
||||||
*) CC="$CC $am_cv_prog_cc_stdc" ;;
|
|
||||||
esac
|
|
||||||
])
|
|
1410
d2pack109/src/autoconf/config.guess
vendored
1410
d2pack109/src/autoconf/config.guess
vendored
File diff suppressed because it is too large
Load diff
1508
d2pack109/src/autoconf/config.sub
vendored
1508
d2pack109/src/autoconf/config.sub
vendored
File diff suppressed because it is too large
Load diff
|
@ -1,14 +0,0 @@
|
||||||
dnl From Jim Meyering.
|
|
||||||
|
|
||||||
# serial 1
|
|
||||||
|
|
||||||
AC_DEFUN(AM_SYS_POSIX_TERMIOS,
|
|
||||||
[AC_CACHE_CHECK([POSIX termios], am_cv_sys_posix_termios,
|
|
||||||
[AC_TRY_LINK([#include <sys/types.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <termios.h>],
|
|
||||||
[/* SunOS 4.0.3 has termios.h but not the library calls. */
|
|
||||||
tcgetattr(0, 0);],
|
|
||||||
am_cv_sys_posix_termios=yes,
|
|
||||||
am_cv_sys_posix_termios=no)])
|
|
||||||
])
|
|
|
@ -1,36 +0,0 @@
|
||||||
dnl From Jim Meyering.
|
|
||||||
|
|
||||||
# serial 1
|
|
||||||
|
|
||||||
AC_DEFUN(AM_HEADER_TIOCGWINSZ_NEEDS_SYS_IOCTL,
|
|
||||||
[AC_REQUIRE([AM_SYS_POSIX_TERMIOS])
|
|
||||||
AC_CACHE_CHECK([whether use of TIOCGWINSZ requires sys/ioctl.h],
|
|
||||||
am_cv_sys_tiocgwinsz_needs_sys_ioctl_h,
|
|
||||||
[am_cv_sys_tiocgwinsz_needs_sys_ioctl_h=no
|
|
||||||
|
|
||||||
gwinsz_in_termios_h=no
|
|
||||||
if test $am_cv_sys_posix_termios = yes; then
|
|
||||||
AC_EGREP_CPP([yes],
|
|
||||||
[#include <sys/types.h>
|
|
||||||
# include <termios.h>
|
|
||||||
# ifdef TIOCGWINSZ
|
|
||||||
yes
|
|
||||||
# endif
|
|
||||||
], gwinsz_in_termios_h=yes)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $gwinsz_in_termios_h = no; then
|
|
||||||
AC_EGREP_CPP([yes],
|
|
||||||
[#include <sys/types.h>
|
|
||||||
# include <sys/ioctl.h>
|
|
||||||
# ifdef TIOCGWINSZ
|
|
||||||
yes
|
|
||||||
# endif
|
|
||||||
], am_cv_sys_tiocgwinsz_needs_sys_ioctl_h=yes)
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
if test $am_cv_sys_tiocgwinsz_needs_sys_ioctl_h = yes; then
|
|
||||||
AC_DEFINE(GWINSZ_IN_SYS_IOCTL,1,
|
|
||||||
[Define if TIOCGWINSZ requires sys/ioctl.h])
|
|
||||||
fi
|
|
||||||
])
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
autoconf
|
|
||||||
autoheader
|
|
|
@ -1,626 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 1999,2000,2001 Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
#define ADDR_INTERNAL_ACCESS
|
|
||||||
#include "common/setup_before.h"
|
|
||||||
#ifdef HAVE_STDDEF_H
|
|
||||||
# include <stddef.h>
|
|
||||||
#else
|
|
||||||
# ifndef NULL
|
|
||||||
# define NULL ((void *)0)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#ifdef STDC_HEADERS
|
|
||||||
# include <stdlib.h>
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_MALLOC_H
|
|
||||||
# include <malloc.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_STRING_H
|
|
||||||
# include <string.h>
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_STRINGS_H
|
|
||||||
# include <strings.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_MEMORY_H
|
|
||||||
# include <memory.h>
|
|
||||||
#endif
|
|
||||||
#include "compat/memset.h"
|
|
||||||
#include "compat/memcpy.h"
|
|
||||||
#include "compat/strrchr.h"
|
|
||||||
#include "compat/strdup.h"
|
|
||||||
#ifdef HAVE_SYS_TYPES_H
|
|
||||||
# include <sys/types.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_SYS_SOCKET_H
|
|
||||||
# include <sys/socket.h>
|
|
||||||
#endif
|
|
||||||
#include "compat/socket.h"
|
|
||||||
#ifdef HAVE_SYS_PARAM_H
|
|
||||||
# include <sys/param.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_NETINET_IN_H
|
|
||||||
# include <netinet/in.h>
|
|
||||||
#endif
|
|
||||||
#include "compat/netinet_in.h"
|
|
||||||
#ifdef HAVE_ARPA_INET_H
|
|
||||||
# include <arpa/inet.h>
|
|
||||||
#endif
|
|
||||||
#include "compat/inet_aton.h"
|
|
||||||
#include "compat/inet_ntoa.h"
|
|
||||||
#ifdef HAVE_NETDB_H
|
|
||||||
# include <netdb.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_ASSERT_H
|
|
||||||
# include <assert.h>
|
|
||||||
#endif
|
|
||||||
#include "compat/psock.h"
|
|
||||||
#include "common/eventlog.h"
|
|
||||||
#include "common/list.h"
|
|
||||||
#include "common/util.h"
|
|
||||||
#include "common/xalloc.h"
|
|
||||||
#include "common/addr.h"
|
|
||||||
#include "common/setup_after.h"
|
|
||||||
|
|
||||||
|
|
||||||
static char const * netaddr_num_to_addr_str(unsigned int netipaddr, unsigned int netmask);
|
|
||||||
|
|
||||||
|
|
||||||
#define HACK_SIZE 4
|
|
||||||
|
|
||||||
/* both arguments are in host byte order */
|
|
||||||
extern char const * addr_num_to_addr_str(unsigned int ipaddr, unsigned short port)
|
|
||||||
{
|
|
||||||
static unsigned int curr=0;
|
|
||||||
static char temp[HACK_SIZE][64];
|
|
||||||
struct sockaddr_in tsa;
|
|
||||||
|
|
||||||
curr = (curr+1)%HACK_SIZE;
|
|
||||||
|
|
||||||
memset(&tsa,0,sizeof(tsa));
|
|
||||||
tsa.sin_family = PSOCK_AF_INET;
|
|
||||||
tsa.sin_port = htons((unsigned short)0);
|
|
||||||
tsa.sin_addr.s_addr = htonl(ipaddr);
|
|
||||||
sprintf(temp[curr],"%.32s:%hu",inet_ntoa(tsa.sin_addr),port);
|
|
||||||
|
|
||||||
return temp[curr];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* ipaddr is in host byte order */
|
|
||||||
extern char const * addr_num_to_ip_str(unsigned int ipaddr)
|
|
||||||
{
|
|
||||||
static unsigned int curr=0;
|
|
||||||
static char temp[HACK_SIZE][64];
|
|
||||||
struct sockaddr_in tsa;
|
|
||||||
|
|
||||||
curr = (curr+1)%HACK_SIZE;
|
|
||||||
|
|
||||||
memset(&tsa,0,sizeof(tsa));
|
|
||||||
tsa.sin_family = PSOCK_AF_INET;
|
|
||||||
tsa.sin_port = htons((unsigned short)0);
|
|
||||||
tsa.sin_addr.s_addr = htonl(ipaddr);
|
|
||||||
sprintf(temp[curr],"%.32s",inet_ntoa(tsa.sin_addr));
|
|
||||||
|
|
||||||
return temp[curr];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static char const * netaddr_num_to_addr_str(unsigned int netipaddr, unsigned int netmask)
|
|
||||||
{
|
|
||||||
static unsigned int curr=0;
|
|
||||||
static char temp[HACK_SIZE][64];
|
|
||||||
struct sockaddr_in tsa;
|
|
||||||
|
|
||||||
curr = (curr+1)%HACK_SIZE;
|
|
||||||
|
|
||||||
memset(&tsa,0,sizeof(tsa));
|
|
||||||
tsa.sin_family = PSOCK_AF_INET;
|
|
||||||
tsa.sin_port = htons((unsigned short)0);
|
|
||||||
tsa.sin_addr.s_addr = htonl(netipaddr);
|
|
||||||
sprintf(temp[curr],"%.32s/0x%08x",inet_ntoa(tsa.sin_addr),netmask);
|
|
||||||
|
|
||||||
return temp[curr];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
extern char const * host_lookup(char const * hoststr, unsigned int * ipaddr)
|
|
||||||
{
|
|
||||||
struct sockaddr_in tsa;
|
|
||||||
#ifdef HAVE_GETHOSTBYNAME
|
|
||||||
struct hostent * hp;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!hoststr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL hoststr");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (!ipaddr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL ipaddr");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(&tsa,0,sizeof(tsa));
|
|
||||||
tsa.sin_family = PSOCK_AF_INET;
|
|
||||||
tsa.sin_port = htons(0);
|
|
||||||
|
|
||||||
#ifdef HAVE_GETHOSTBYNAME
|
|
||||||
#ifdef WIN32
|
|
||||||
psock_init();
|
|
||||||
#endif
|
|
||||||
hp = gethostbyname(hoststr);
|
|
||||||
if (!hp || !hp->h_addr_list)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
if (inet_aton(hoststr,&tsa.sin_addr))
|
|
||||||
{
|
|
||||||
*ipaddr = ntohl(tsa.sin_addr.s_addr);
|
|
||||||
return hoststr; /* We could call gethostbyaddr() on tsa to try and get the
|
|
||||||
official hostname but most systems would have already found
|
|
||||||
it when sending a dotted-quad to gethostbyname(). This is
|
|
||||||
good enough when that fails. */
|
|
||||||
}
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not lookup host \"%s\"",hoststr);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_GETHOSTBYNAME
|
|
||||||
memcpy(&tsa.sin_addr,(void *)hp->h_addr_list[0],sizeof(struct in_addr)); /* avoid warning */
|
|
||||||
*ipaddr = ntohl(tsa.sin_addr.s_addr);
|
|
||||||
if (hp->h_name)
|
|
||||||
return hp->h_name;
|
|
||||||
return hoststr;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_addr * addr_create_num(unsigned int ipaddr, unsigned short port)
|
|
||||||
{
|
|
||||||
t_addr * temp;
|
|
||||||
|
|
||||||
temp = xmalloc(sizeof(t_addr));
|
|
||||||
temp->str = xstrdup(addr_num_to_addr_str(ipaddr,port));
|
|
||||||
temp->str = NULL;
|
|
||||||
temp->ip = ipaddr;
|
|
||||||
temp->port = port;
|
|
||||||
temp->data.p = NULL;
|
|
||||||
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_addr * addr_create_str(char const * str, unsigned int defipaddr, unsigned short defport)
|
|
||||||
{
|
|
||||||
char * tstr;
|
|
||||||
t_addr * temp;
|
|
||||||
unsigned int ipaddr;
|
|
||||||
unsigned short port;
|
|
||||||
char const * hoststr;
|
|
||||||
char * portstr;
|
|
||||||
char const * hostname;
|
|
||||||
|
|
||||||
if (!str)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL str");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
tstr = xstrdup(str);
|
|
||||||
|
|
||||||
if ((portstr = strrchr(tstr,':')))
|
|
||||||
{
|
|
||||||
char * protstr;
|
|
||||||
|
|
||||||
*portstr = '\0';
|
|
||||||
portstr++;
|
|
||||||
|
|
||||||
if ((protstr = strrchr(portstr,'/')))
|
|
||||||
{
|
|
||||||
*protstr = '\0';
|
|
||||||
protstr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (portstr[0]!='\0')
|
|
||||||
{
|
|
||||||
if (str_to_ushort(portstr,&port)<0)
|
|
||||||
{
|
|
||||||
#ifdef HAVE_GETSERVBYNAME
|
|
||||||
struct servent * sp;
|
|
||||||
|
|
||||||
if (!(sp = getservbyname(portstr,protstr?protstr:"tcp")))
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not convert \"%s\" to a port number",portstr);
|
|
||||||
xfree(tstr);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#ifdef HAVE_GETSERVBYNAME
|
|
||||||
port = ntohs(sp->s_port);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
port = defport;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
port = defport;
|
|
||||||
|
|
||||||
if (tstr[0]!='\0')
|
|
||||||
hoststr = tstr;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
struct sockaddr_in tsa;
|
|
||||||
|
|
||||||
tsa.sin_addr.s_addr = htonl(defipaddr);
|
|
||||||
hoststr = inet_ntoa(tsa.sin_addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(hostname = host_lookup(hoststr,&ipaddr)))
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not lookup host \"%s\"",hoststr);
|
|
||||||
xfree(tstr);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = xmalloc(sizeof(t_addr));
|
|
||||||
temp->str = xstrdup(hostname);
|
|
||||||
xfree(tstr);
|
|
||||||
|
|
||||||
temp->ip = ipaddr;
|
|
||||||
temp->port = port;
|
|
||||||
temp->data.p = NULL;
|
|
||||||
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int addr_destroy(t_addr const * addr)
|
|
||||||
{
|
|
||||||
if (!addr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addr");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (addr->str)
|
|
||||||
xfree((void *)addr->str); /* avoid warning */
|
|
||||||
xfree((void *)addr); /* avoid warning */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* hostname or IP */
|
|
||||||
extern char * addr_get_host_str(t_addr const * addr, char * str, unsigned int len)
|
|
||||||
{
|
|
||||||
if (!addr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addr");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (!str)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL str");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (len<2)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"str too short");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!addr->str)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"addr has NULL str");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(str,addr->str,len-1);
|
|
||||||
str[len-1] = '\0';
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* IP:port */
|
|
||||||
extern char * addr_get_addr_str(t_addr const * addr, char * str, unsigned int len)
|
|
||||||
{
|
|
||||||
if (!addr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addr");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (!str)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL str");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (len<2)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"str too short");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(str,addr_num_to_addr_str(addr->ip,addr->port),len-1);
|
|
||||||
str[len-1] = '\0';
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern unsigned int addr_get_ip(t_addr const * addr)
|
|
||||||
{
|
|
||||||
if (!addr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addr");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr->ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern unsigned short addr_get_port(t_addr const * addr)
|
|
||||||
{
|
|
||||||
if (!addr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addr");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr->port;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int addr_set_data(t_addr * addr, t_addr_data data)
|
|
||||||
{
|
|
||||||
if (!addr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addr");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
addr->data = data;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_addr_data addr_get_data(t_addr const * addr)
|
|
||||||
{
|
|
||||||
t_addr_data tdata;
|
|
||||||
|
|
||||||
if (!addr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addr");
|
|
||||||
tdata.p = NULL;
|
|
||||||
return tdata;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr->data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_netaddr * netaddr_create_str(char const * netstr)
|
|
||||||
{
|
|
||||||
t_netaddr * netaddr;
|
|
||||||
char * temp;
|
|
||||||
char const * netipstr;
|
|
||||||
char const * netmaskstr;
|
|
||||||
unsigned int netip;
|
|
||||||
unsigned int netmask;
|
|
||||||
|
|
||||||
if (!netstr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"unable to allocate memory for netaddr");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = xstrdup(netstr);
|
|
||||||
if (!(netipstr = strtok(temp,"/")))
|
|
||||||
{
|
|
||||||
xfree(temp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (!(netmaskstr = strtok(NULL,"/")))
|
|
||||||
{
|
|
||||||
xfree(temp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
netaddr = xmalloc(sizeof(t_netaddr));
|
|
||||||
|
|
||||||
/* FIXME: call getnetbyname() first, then host_lookup() */
|
|
||||||
if (!host_lookup(netipstr,&netip))
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not lookup net");
|
|
||||||
xfree(netaddr);
|
|
||||||
xfree(temp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
netaddr->ip = netip;
|
|
||||||
|
|
||||||
if (str_to_uint(netmaskstr,&netmask)<0)
|
|
||||||
{
|
|
||||||
struct sockaddr_in tsa;
|
|
||||||
|
|
||||||
if (inet_aton(netmaskstr,&tsa.sin_addr))
|
|
||||||
netmask = ntohl(tsa.sin_addr.s_addr);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not convert mask");
|
|
||||||
xfree(netaddr);
|
|
||||||
xfree(temp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (netmask>32)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"network bits must be less than or equal to 32 (%u)",netmask);
|
|
||||||
xfree(netaddr);
|
|
||||||
xfree(temp);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
/* for example, 8 -> 11111111000000000000000000000000 */
|
|
||||||
if (netmask!=0)
|
|
||||||
netmask = ~((1<<(32-netmask))-1);
|
|
||||||
}
|
|
||||||
netaddr->mask = netmask;
|
|
||||||
|
|
||||||
xfree(temp); // [zap-zero] 20020731 - (hopefully) fixed memory leak
|
|
||||||
|
|
||||||
return netaddr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int netaddr_destroy(t_netaddr const * netaddr)
|
|
||||||
{
|
|
||||||
if (!netaddr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL netaddr");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
xfree((void *)netaddr); /* avoid warning */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern char * netaddr_get_addr_str(t_netaddr const * netaddr, char * str, unsigned int len)
|
|
||||||
{
|
|
||||||
if (!netaddr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL netaddr");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (!str)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL str");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (len<2)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"str too short");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
strncpy(str,netaddr_num_to_addr_str(netaddr->ip,netaddr->mask),len-1); /* FIXME: format nicely with x.x.x.x/bitcount */
|
|
||||||
str[len-1] = '\0';
|
|
||||||
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int netaddr_contains_addr_num(t_netaddr const * netaddr, unsigned int ipaddr)
|
|
||||||
{
|
|
||||||
if (!netaddr)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL netaddr");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (ipaddr&netaddr->mask)==netaddr->ip;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int addrlist_append(t_addrlist * addrlist, char const * str, unsigned int defipaddr, unsigned short defport)
|
|
||||||
{
|
|
||||||
t_addr * addr;
|
|
||||||
char * tstr;
|
|
||||||
char * tok;
|
|
||||||
|
|
||||||
assert(addrlist != NULL);
|
|
||||||
|
|
||||||
if (!str)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL str");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
tstr = xstrdup(str);
|
|
||||||
for (tok=strtok(tstr,","); tok; tok=strtok(NULL,",")) /* strtok modifies the string it is passed */
|
|
||||||
{
|
|
||||||
if (!(addr = addr_create_str(tok,defipaddr,defport)))
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not create addr");
|
|
||||||
xfree(tstr);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
list_append_data(addrlist,addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
xfree(tstr);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern t_addrlist * addrlist_create(char const * str, unsigned int defipaddr, unsigned short defport)
|
|
||||||
{
|
|
||||||
t_addrlist * addrlist;
|
|
||||||
|
|
||||||
if (!str)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL str");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
addrlist = list_create();
|
|
||||||
|
|
||||||
if (addrlist_append(addrlist,str,defipaddr,defport)<0) {
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not append to newly created addrlist");
|
|
||||||
list_destroy(addrlist);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return addrlist;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int addrlist_destroy(t_addrlist * addrlist)
|
|
||||||
{
|
|
||||||
t_elem * curr;
|
|
||||||
t_addr * addr;
|
|
||||||
|
|
||||||
if (!addrlist)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL addrlist");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
LIST_TRAVERSE(addrlist,curr)
|
|
||||||
{
|
|
||||||
if (!(addr = elem_get_data(curr)))
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"found NULL addr in list");
|
|
||||||
else
|
|
||||||
addr_destroy(addr);
|
|
||||||
list_remove_elem(addrlist,&curr);
|
|
||||||
}
|
|
||||||
|
|
||||||
return list_destroy(addrlist);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int addrlist_get_length(t_addrlist const * addrlist)
|
|
||||||
{
|
|
||||||
return list_get_length(addrlist);
|
|
||||||
}
|
|
|
@ -1,100 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 1999,2000,2001 Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
#ifndef INCLUDED_ADDR_TYPES
|
|
||||||
#define INCLUDED_ADDR_TYPES
|
|
||||||
|
|
||||||
#ifdef JUST_NEED_TYPES
|
|
||||||
# include "common/list.h"
|
|
||||||
#else
|
|
||||||
# define JUST_NEED_TYPES
|
|
||||||
# include "common/list.h"
|
|
||||||
# undef JUST_NEED_TYPES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef union
|
|
||||||
{
|
|
||||||
unsigned long n;
|
|
||||||
int i;
|
|
||||||
void * p;
|
|
||||||
} t_addr_data;
|
|
||||||
|
|
||||||
typedef struct addr_struct
|
|
||||||
#ifdef ADDR_INTERNAL_ACCESS
|
|
||||||
{
|
|
||||||
char const * str; /* hostname or ip */
|
|
||||||
unsigned int ip;
|
|
||||||
unsigned int port;
|
|
||||||
t_addr_data data; /* data argument */
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
t_addr;
|
|
||||||
|
|
||||||
typedef struct netaddr_struct
|
|
||||||
#ifdef ADDR_INTERNAL_ACCESS
|
|
||||||
{
|
|
||||||
unsigned int ip;
|
|
||||||
unsigned int mask;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
t_netaddr;
|
|
||||||
|
|
||||||
typedef t_list t_addrlist;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*****/
|
|
||||||
#ifndef JUST_NEED_TYPES
|
|
||||||
#ifndef INCLUDED_ADDR_PROTOS
|
|
||||||
#define INCLUDED_ADDR_PROTOS
|
|
||||||
|
|
||||||
/* ipaddr and port are in host byte order */
|
|
||||||
extern char const * addr_num_to_addr_str(unsigned int ipaddr, unsigned short port);
|
|
||||||
/* ipaddr is in host byte order */
|
|
||||||
extern char const * addr_num_to_ip_str(unsigned int ipaddr);
|
|
||||||
|
|
||||||
extern char const * host_lookup(char const * hoststr, unsigned int * ipaddr);
|
|
||||||
|
|
||||||
/* ipaddr and port are in host byte order */
|
|
||||||
extern t_addr * addr_create_num(unsigned int ipaddr, unsigned short port) ;
|
|
||||||
|
|
||||||
/* defipaddr and defport are in host byte order */
|
|
||||||
extern t_addr * addr_create_str(char const * str, unsigned int defipaddr, unsigned short defport) ;
|
|
||||||
|
|
||||||
extern int addr_destroy(t_addr const * addr);
|
|
||||||
extern char * addr_get_host_str(t_addr const * addr, char * str, unsigned int len);
|
|
||||||
extern char * addr_get_addr_str(t_addr const * addr, char * str, unsigned int len);
|
|
||||||
/* returned in host byte order */
|
|
||||||
extern unsigned int addr_get_ip(t_addr const * addr);
|
|
||||||
/* returned in host byte order */
|
|
||||||
extern unsigned short addr_get_port(t_addr const * addr);
|
|
||||||
extern int addr_set_data(t_addr * addr, t_addr_data data);
|
|
||||||
extern t_addr_data addr_get_data(t_addr const * addr);
|
|
||||||
extern t_netaddr * netaddr_create_str(char const * str) ;
|
|
||||||
extern int netaddr_destroy(t_netaddr const * netaddr);
|
|
||||||
extern char * netaddr_get_addr_str(t_netaddr const * netaddr, char * str, unsigned int len);
|
|
||||||
extern int netaddr_contains_addr_num(t_netaddr const * netaddr, unsigned int ipaddr);
|
|
||||||
|
|
||||||
/* defipaddr and defport are in host byte order */
|
|
||||||
extern int addrlist_append(t_addrlist * addrlist, char const * str, unsigned int defipaddr, unsigned short defport);
|
|
||||||
extern t_addrlist * addrlist_create(char const * str, unsigned int defipaddr, unsigned short defport) ;
|
|
||||||
extern int addrlist_destroy(t_addrlist * addrlist);
|
|
||||||
extern int addrlist_get_length(t_addrlist const * addrlist);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
|
@ -1,665 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 1998,1999,2001 Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
#include "common/setup_before.h"
|
|
||||||
#ifdef HAVE_STRING_H
|
|
||||||
# include <string.h>
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_MEMORY_H
|
|
||||||
# include <memory.h>
|
|
||||||
#endif
|
|
||||||
#include "compat/memcpy.h"
|
|
||||||
#include "common/eventlog.h"
|
|
||||||
#include "common/bn_type.h"
|
|
||||||
#include "common/setup_after.h"
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_byte_tag_get(bn_byte const * src, char * dst, unsigned int len)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (len<1)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got zero len");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<len-1 && i<1; i++)
|
|
||||||
dst[i] = (char)(*src)[-i];
|
|
||||||
dst[i] = '\0';
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_short_tag_get(bn_short const * src, char * dst, unsigned int len)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (len<1)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got zero len");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<len-1 && i<2; i++)
|
|
||||||
dst[i] = (char)(*src)[1-i];
|
|
||||||
dst[i] = '\0';
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_int_tag_get(bn_int const * src, char * dst, unsigned int len)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (len<1)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got zero len");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<len-1 && i<4; i++)
|
|
||||||
dst[i] = (char)(*src)[3-i];
|
|
||||||
dst[i] = '\0';
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_long_tag_get(bn_long const * src, char * dst, unsigned int len)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (len<1)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got zero len");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<len-1 && i<8; i++)
|
|
||||||
dst[i] = (char)(*src)[7-i];
|
|
||||||
dst[i] = '\0';
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_byte_tag_set(bn_byte * dst, char const * tag)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)tag[0];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_short_tag_set(bn_short * dst, char const * tag)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)tag[3];
|
|
||||||
(*dst)[1] = (unsigned char)tag[2];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_int_tag_set(bn_int * dst, char const * tag)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)tag[3];
|
|
||||||
(*dst)[1] = (unsigned char)tag[2];
|
|
||||||
(*dst)[2] = (unsigned char)tag[1];
|
|
||||||
(*dst)[3] = (unsigned char)tag[0];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_long_tag_set(bn_long * dst, char const * tag)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)tag[7];
|
|
||||||
(*dst)[1] = (unsigned char)tag[6];
|
|
||||||
(*dst)[2] = (unsigned char)tag[5];
|
|
||||||
(*dst)[3] = (unsigned char)tag[4];
|
|
||||||
(*dst)[4] = (unsigned char)tag[3];
|
|
||||||
(*dst)[5] = (unsigned char)tag[2];
|
|
||||||
(*dst)[6] = (unsigned char)tag[1];
|
|
||||||
(*dst)[7] = (unsigned char)tag[0];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern t_uint8 bn_byte_get(bn_byte const src)
|
|
||||||
{
|
|
||||||
t_uint8 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint8)src[0]) ;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_uint16 bn_short_get(bn_short const src)
|
|
||||||
{
|
|
||||||
t_uint16 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint16)src[0]) ;
|
|
||||||
temp |= ((t_uint16)src[1])<< 8;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_uint16 bn_short_nget(bn_short const src)
|
|
||||||
{
|
|
||||||
t_uint16 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint16)src[1]) ;
|
|
||||||
temp |= ((t_uint16)src[0])<< 8;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_uint32 bn_int_get(bn_int const src)
|
|
||||||
{
|
|
||||||
t_uint32 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint32)src[0]) ;
|
|
||||||
temp |= ((t_uint32)src[1])<< 8;
|
|
||||||
temp |= ((t_uint32)src[2])<<16;
|
|
||||||
temp |= ((t_uint32)src[3])<<24;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_uint32 bn_int_nget(bn_int const src)
|
|
||||||
{
|
|
||||||
t_uint32 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint32)src[3]) ;
|
|
||||||
temp |= ((t_uint32)src[2])<< 8;
|
|
||||||
temp |= ((t_uint32)src[1])<<16;
|
|
||||||
temp |= ((t_uint32)src[0])<<24;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_T_LONG
|
|
||||||
extern t_uint64 bn_long_get(bn_long const src)
|
|
||||||
{
|
|
||||||
t_uint64 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint64)src[0]) ;
|
|
||||||
temp |= ((t_uint64)src[1])<< 8;
|
|
||||||
temp |= ((t_uint64)src[2])<<16;
|
|
||||||
temp |= ((t_uint64)src[3])<<24;
|
|
||||||
temp |= ((t_uint64)src[4])<<32;
|
|
||||||
temp |= ((t_uint64)src[5])<<40;
|
|
||||||
temp |= ((t_uint64)src[6])<<48;
|
|
||||||
temp |= ((t_uint64)src[7])<<56;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
extern t_uint32 bn_long_get_a(bn_long const src)
|
|
||||||
{
|
|
||||||
t_uint32 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint32)src[4]) ;
|
|
||||||
temp |= ((t_uint32)src[5])<< 8;
|
|
||||||
temp |= ((t_uint32)src[6])<<16;
|
|
||||||
temp |= ((t_uint32)src[7])<<24;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern t_uint32 bn_long_get_b(bn_long const src)
|
|
||||||
{
|
|
||||||
t_uint32 temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
temp = ((t_uint32)src[0]) ;
|
|
||||||
temp |= ((t_uint32)src[1])<< 8;
|
|
||||||
temp |= ((t_uint32)src[2])<<16;
|
|
||||||
temp |= ((t_uint32)src[3])<<24;
|
|
||||||
return temp;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_byte_set(bn_byte * dst, t_uint8 src)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((src ) );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_short_set(bn_short * dst, t_uint16 src)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((src )&0xff);
|
|
||||||
(*dst)[1] = (unsigned char)((src>> 8) );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_short_nset(bn_short * dst, t_uint16 src)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((src>> 8) );
|
|
||||||
(*dst)[1] = (unsigned char)((src )&0xff);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_int_set(bn_int * dst, t_uint32 src)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((src )&0xff);
|
|
||||||
(*dst)[1] = (unsigned char)((src>> 8)&0xff);
|
|
||||||
(*dst)[2] = (unsigned char)((src>>16)&0xff);
|
|
||||||
(*dst)[3] = (unsigned char)((src>>24) );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_int_nset(bn_int * dst, t_uint32 src)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((src>>24) );
|
|
||||||
(*dst)[1] = (unsigned char)((src>>16)&0xff);
|
|
||||||
(*dst)[2] = (unsigned char)((src>> 8)&0xff);
|
|
||||||
(*dst)[3] = (unsigned char)((src )&0xff);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_T_LONG
|
|
||||||
extern int bn_long_set(bn_long * dst, t_uint64 src)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((src )&0xff);
|
|
||||||
(*dst)[1] = (unsigned char)((src>> 8)&0xff);
|
|
||||||
(*dst)[2] = (unsigned char)((src>>16)&0xff);
|
|
||||||
(*dst)[3] = (unsigned char)((src>>24)&0xff);
|
|
||||||
(*dst)[4] = (unsigned char)((src>>32)&0xff);
|
|
||||||
(*dst)[5] = (unsigned char)((src>>40)&0xff);
|
|
||||||
(*dst)[6] = (unsigned char)((src>>48)&0xff);
|
|
||||||
(*dst)[7] = (unsigned char)((src>>56) );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_long_nset(bn_long * dst, t_uint64 src)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((src>>56) );
|
|
||||||
(*dst)[1] = (unsigned char)((src>>48)&0xff);
|
|
||||||
(*dst)[2] = (unsigned char)((src>>40)&0xff);
|
|
||||||
(*dst)[3] = (unsigned char)((src>>32)&0xff);
|
|
||||||
(*dst)[4] = (unsigned char)((src>>24)&0xff);
|
|
||||||
(*dst)[5] = (unsigned char)((src>>16)&0xff);
|
|
||||||
(*dst)[6] = (unsigned char)((src>> 8)&0xff);
|
|
||||||
(*dst)[7] = (unsigned char)((src )&0xff);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_long_set_a_b(bn_long * dst, t_uint32 srca, t_uint32 srcb)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((srcb )&0xff);
|
|
||||||
(*dst)[1] = (unsigned char)((srcb>> 8)&0xff);
|
|
||||||
(*dst)[2] = (unsigned char)((srcb>>16)&0xff);
|
|
||||||
(*dst)[3] = (unsigned char)((srcb>>24)&0xff);
|
|
||||||
(*dst)[4] = (unsigned char)((srca )&0xff);
|
|
||||||
(*dst)[5] = (unsigned char)((srca>> 8)&0xff);
|
|
||||||
(*dst)[6] = (unsigned char)((srca>>16)&0xff);
|
|
||||||
(*dst)[7] = (unsigned char)((srca>>24) );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_long_nset_a_b(bn_long * dst, t_uint32 srca, t_uint32 srcb)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(*dst)[0] = (unsigned char)((srca>>24) );
|
|
||||||
(*dst)[1] = (unsigned char)((srca>>16)&0xff);
|
|
||||||
(*dst)[2] = (unsigned char)((srca>> 8)&0xff);
|
|
||||||
(*dst)[3] = (unsigned char)((srca )&0xff);
|
|
||||||
(*dst)[4] = (unsigned char)((srcb>>24)&0xff);
|
|
||||||
(*dst)[5] = (unsigned char)((srcb>>16)&0xff);
|
|
||||||
(*dst)[6] = (unsigned char)((srcb>> 8)&0xff);
|
|
||||||
(*dst)[7] = (unsigned char)((srcb )&0xff);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_raw_set(void * dst, void const * src, unsigned int len)
|
|
||||||
{
|
|
||||||
if (!dst)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL dst");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(dst,src,len);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_byte_tag_eq(bn_byte const src, char const * tag)
|
|
||||||
{
|
|
||||||
bn_byte temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bn_byte_tag_set(&temp,tag)<0)
|
|
||||||
return -1;
|
|
||||||
if (bn_byte_get(src)==bn_byte_get(temp))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_short_tag_eq(bn_short const src, char const * tag)
|
|
||||||
{
|
|
||||||
bn_short temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bn_short_tag_set(&temp,tag)<0)
|
|
||||||
return -1;
|
|
||||||
if (bn_short_get(src)==bn_short_get(temp))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_int_tag_eq(bn_int const src, char const * tag)
|
|
||||||
{
|
|
||||||
bn_int temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bn_int_tag_set(&temp,tag)<0)
|
|
||||||
return -1;
|
|
||||||
if (bn_int_get(src)==bn_int_get(temp))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int bn_long_tag_eq(bn_long const src, char const * tag)
|
|
||||||
{
|
|
||||||
bn_long temp;
|
|
||||||
|
|
||||||
if (!src)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL src");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (!tag)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL tag");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bn_long_tag_set(&temp,tag)<0)
|
|
||||||
return -1;
|
|
||||||
if (bn_long_get_a(src)==bn_long_get_a(temp) &&
|
|
||||||
bn_long_get_b(src)==bn_long_get_b(temp))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
extern int uint32_to_int(t_uint32 num)
|
|
||||||
{
|
|
||||||
if (num<(1UL<<30))
|
|
||||||
return (int)num;
|
|
||||||
return (-(int)((~(num))+1));
|
|
||||||
}
|
|
|
@ -1,90 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 1998,1999 Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
#ifndef INCLUDED_BN_TYPE_TYPES
|
|
||||||
#define INCLUDED_BN_TYPE_TYPES
|
|
||||||
|
|
||||||
#ifdef JUST_NEED_TYPES
|
|
||||||
# include "compat/uint.h"
|
|
||||||
#else
|
|
||||||
# define JUST_NEED_TYPES
|
|
||||||
# include "compat/uint.h"
|
|
||||||
# undef JUST_NEED_TYPES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef t_uint8 bn_basic;
|
|
||||||
typedef bn_basic bn_byte[1];
|
|
||||||
typedef bn_basic bn_short[2];
|
|
||||||
typedef bn_basic bn_int[4];
|
|
||||||
typedef bn_basic bn_long[8];
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*****/
|
|
||||||
#ifndef JUST_NEED_TYPES
|
|
||||||
#ifndef INCLUDED_BN_TYPE_PROTOS
|
|
||||||
#define INCLUDED_BN_TYPE_PROTOS
|
|
||||||
|
|
||||||
#define JUST_NEED_TYPES
|
|
||||||
# include "compat/uint.h"
|
|
||||||
#undef JUST_NEED_TYPES
|
|
||||||
|
|
||||||
extern int bn_byte_tag_get(bn_byte const * src, char * dst, unsigned int len);
|
|
||||||
extern int bn_short_tag_get(bn_short const * src, char * dst, unsigned int len);
|
|
||||||
extern int bn_int_tag_get(bn_int const * src, char * dst, unsigned int len);
|
|
||||||
extern int bn_long_tag_get(bn_long const * src, char * dst, unsigned int len);
|
|
||||||
|
|
||||||
extern int bn_byte_tag_set(bn_byte * dst, char const * tag);
|
|
||||||
extern int bn_short_tag_set(bn_short * dst, char const * tag);
|
|
||||||
extern int bn_int_tag_set(bn_int * dst, char const * tag);
|
|
||||||
extern int bn_long_tag_set(bn_long * dst, char const * tag);
|
|
||||||
|
|
||||||
extern t_uint8 bn_byte_get(bn_byte const src) ;
|
|
||||||
extern t_uint16 bn_short_get(bn_short const src) ;
|
|
||||||
extern t_uint16 bn_short_nget(bn_short const src) ;
|
|
||||||
extern t_uint32 bn_int_get(bn_int const src) ;
|
|
||||||
extern t_uint32 bn_int_nget(bn_int const src) ;
|
|
||||||
#ifdef HAVE_T_UINT64
|
|
||||||
extern t_uint64 bn_long_get(bn_long const src) ;
|
|
||||||
#endif
|
|
||||||
extern t_uint32 bn_long_get_a(bn_long const src) ;
|
|
||||||
extern t_uint32 bn_long_get_b(bn_long const src) ;
|
|
||||||
|
|
||||||
extern int bn_byte_set(bn_byte * dst, t_uint8 src);
|
|
||||||
extern int bn_short_set(bn_short * dst, t_uint16 src);
|
|
||||||
extern int bn_short_nset(bn_short * dst, t_uint16 src);
|
|
||||||
extern int bn_int_set(bn_int * dst, t_uint32 src);
|
|
||||||
extern int bn_int_nset(bn_int * dst, t_uint32 src);
|
|
||||||
#ifdef HAVE_T_UINT64
|
|
||||||
extern int bn_long_set(bn_long * dst, t_uint64 src);
|
|
||||||
extern int bn_long_nset(bn_long * dst, t_uint64 src);
|
|
||||||
#endif
|
|
||||||
extern int bn_long_set_a_b(bn_long * dst, t_uint32 srca, t_uint32 srcb);
|
|
||||||
extern int bn_long_nset_a_b(bn_long * dst, t_uint32 srca, t_uint32 srcb);
|
|
||||||
|
|
||||||
extern int bn_raw_set(void * dst, void const * src, unsigned int len);
|
|
||||||
|
|
||||||
extern int bn_byte_tag_eq(bn_byte const src, char const * tag) ;
|
|
||||||
extern int bn_short_tag_eq(bn_short const src, char const * tag) ;
|
|
||||||
extern int bn_int_tag_eq(bn_int const src, char const * tag) ;
|
|
||||||
extern int bn_long_tag_eq(bn_long const src, char const * tag) ;
|
|
||||||
|
|
||||||
extern int uint32_to_int(t_uint32 num);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
#endif
|
|
|
@ -1,551 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2000 Otto Chan (kenshin_@hotmail.com)
|
|
||||||
* Copyright (C) 2000 Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
* Copyright (C) 2000 Onlyer (onlyer@263.net)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
#ifndef INCLUDED_D2GAME_PROTOCOL_TYPES
|
|
||||||
#define INCLUDED_D2GAME_PROTOCOL_TYPES
|
|
||||||
|
|
||||||
#ifdef JUST_NEED_TYPES
|
|
||||||
# include "bn_type.h"
|
|
||||||
#else
|
|
||||||
# define JUST_NEED_TYPES
|
|
||||||
# include "bn_type.h"
|
|
||||||
# undef JUST_NEED_TYPES
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The protocol for communicating between a Diablo II client
|
|
||||||
* and game server.
|
|
||||||
* FIXME: put the #define's into the PROTO section
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
#ifdef NOTONLYER
|
|
||||||
bn_short magic;
|
|
||||||
bn_short size;
|
|
||||||
bn_byte type;
|
|
||||||
/* FIXME: the two sets of packets don't jive... did the beta have a different
|
|
||||||
game protocol or am I just confused (could easily be the later). */
|
|
||||||
#else
|
|
||||||
bn_byte type;
|
|
||||||
#endif
|
|
||||||
} t_d2game_header;
|
|
||||||
/******************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
} t_d2game_generic;
|
|
||||||
/******************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************/
|
|
||||||
/*
|
|
||||||
D2 00 05 00 00
|
|
||||||
*/
|
|
||||||
#define SERVER_00 0x00 /* beta-only? */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_byte unknown1; /* data request #? */
|
|
||||||
} PACKED_ATTR() t_server_00_req;
|
|
||||||
#define SERVER_00 0x00
|
|
||||||
/******************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************/
|
|
||||||
/*
|
|
||||||
D2 00 20 00 01 E2 5E 13 BE 4C 02 04 CA 00 00 00 .........L......
|
|
||||||
6C 69 6C 6A 6F 65 00 00 64 25 42 00 1C E9 50 00 liljoe..d.B...P.
|
|
||||||
*/
|
|
||||||
#define CLIENT_01 0x01 /* beta-only? */
|
|
||||||
typedef struct /* game select? */
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_byte unknown1; /* data reply #? */
|
|
||||||
bn_int gameid1; /* same as in auth 04 reply */
|
|
||||||
bn_short gameid2; /* same as in auth 04 reply */
|
|
||||||
bn_byte unknown2[5];
|
|
||||||
/* character name */
|
|
||||||
/* 00 64 25 42 00 1C E9 50 00 unknown... string or numeric? */
|
|
||||||
} PACKED_ATTR() t_client_01;
|
|
||||||
/******************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************/
|
|
||||||
/*
|
|
||||||
0030 22 38 32 5D 00 00 97 20 20 20 20 20 "82]........
|
|
||||||
*/
|
|
||||||
#define D2GAME_SERVER_WELCOME 0x97
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
} t_d2game_server_welcome;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 60 00 27 04 18 79 27 04 A8 00 00 00 07 02 00 00 `.'..y'.........
|
|
||||||
0010: B0 01 01 00 00 6F 6E 6C 79 65 72 00 B8 6A F7 BF .....onlyer..j..
|
|
||||||
0020: 00 00 00 00 34 00 00 04 00 00 00 00 00 ....4........
|
|
||||||
|
|
||||||
0000: 60 00 27 04 18 79 27 04 30 0D 00 00 07 02 00 00 `.'..y'.0.......
|
|
||||||
0010: B0 01 04 00 01 41 4C 42 45 52 54 00 B8 6A F7 BF .....ALBERT..j..
|
|
||||||
0020: 00 00 00 00 34 00 00 04 00 00 00 00 00 ....4........
|
|
||||||
|
|
||||||
0000: 60 00 27 04 18 79 27 04 A0 0A 00 00 07 02 00 00 `.'..y'.........
|
|
||||||
0010: B0 01 04 00 02 41 4C 42 45 52 54 00 B8 6A F7 BF .....ALBERT..j..
|
|
||||||
0020: 00 00 00 00 34 00 00 04 00 00 00 00 00 ....4........
|
|
||||||
|
|
||||||
0000: 60 00 AB 04 18 79 AB 04 DE 00 9F 00 0C 02 00 00 `....y..........
|
|
||||||
0010: 60 01 04 00 00 62 62 62 00 71 DF 77 A6 C0 E6 77 `....bbb.q.w...w
|
|
||||||
0020: A6 C0 E6 77 34 05 00 04 00 00 00 00 00 ...w4........
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_CREATEGAMEREQ 0x60
|
|
||||||
|
|
||||||
typedef bn_basic bn_charname[16];
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
char gamename[16];
|
|
||||||
bn_byte servertype; /* servertype=0, data not send to client and have no host */
|
|
||||||
/* creator changed to newbie data saved in server machine*/
|
|
||||||
/* servertype=1, data send to client and have host */
|
|
||||||
/* servertype=2, data send to client and have no host */
|
|
||||||
/* servertype=3, client all newbie,seems to be wrong */
|
|
||||||
/* data is saved in server machine */
|
|
||||||
/* client is loaded from server machine */
|
|
||||||
bn_byte class;
|
|
||||||
bn_byte template; /* character template */
|
|
||||||
/* affect the reply in 0x01 */
|
|
||||||
/* should less than the lines of excel/CharTemplate.txt */
|
|
||||||
bn_byte difficulty;
|
|
||||||
bn_charname charname;
|
|
||||||
bn_short arena;
|
|
||||||
bn_int gameflag;
|
|
||||||
bn_byte unknownb2; /* unused */
|
|
||||||
bn_byte unknownb3; /* unused */
|
|
||||||
} t_d2game_client_creategamereq;
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
bn_byte flag1; /* "test gameflag,06" should not be zero,or will be bad gameflag */
|
|
||||||
/* flag1 should be set with bit 0x04 or will fail or crash */
|
|
||||||
/* bit 0x10,0x20,0x08 is ignored in reply */
|
|
||||||
|
|
||||||
bn_byte flag2; /* hardcore and softcore */
|
|
||||||
/* 0x0 means softcore,0x1 template mode,0x8 means hardcore */
|
|
||||||
/* bit 0x02,0x04,0xF0 is ignored in reply */
|
|
||||||
/* have sth to do with char template */
|
|
||||||
/* opengame */
|
|
||||||
|
|
||||||
bn_byte flag3; /* guild data (not in reply) */
|
|
||||||
/* 0x01 means have guild */
|
|
||||||
/* others bits seems all unused */
|
|
||||||
|
|
||||||
bn_byte flag4; /* seems to be unused */
|
|
||||||
|
|
||||||
} t_d2game_gameflag;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0030 22 37 86 D7 00 00 61 65 00 00 00 00 00 01 03 00 "7....ae........
|
|
||||||
0040 00 00 6F 6E 6C 79 65 72 2D 63 6E 61 61 00 24 E0 ..onlyer-cnaa.$.
|
|
||||||
0050 7B 05 {.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_JOINGAMEREQ 0x61
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_int token;
|
|
||||||
bn_short gameid;
|
|
||||||
bn_byte charclass; /* 00=Amazon 01=Sor 02=Nec 03=Pal 04=Bar */
|
|
||||||
bn_int version;
|
|
||||||
bn_charname charname;
|
|
||||||
/* 16 bytes playe name (including 0x0 ending) */
|
|
||||||
} t_d2game_client_joingamereq;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0030 22 1C C9 65 00 00 20 20 20 20 20 20 "..e........
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_NOOP 0x20
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
/* 5 \x20 noop */
|
|
||||||
} t_d2game_server_noop;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0030 22 37 17 07 00 00 66 91 4B A1 00 00 00 00 00 "7....f.K......
|
|
||||||
*/
|
|
||||||
#define D2GAME_CLIENT_UNKNOWN_66 0x66 /* echo message? */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_int unknown1;
|
|
||||||
bn_int unknown2;
|
|
||||||
} t_d2game_client_unknown_66;
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 8F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
0010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
0020: 00 .
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_UNKNOWN_8F 0x8f /* echo reply? */
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_int unknown1;
|
|
||||||
bn_int unknown2;
|
|
||||||
bn_int unknown3;
|
|
||||||
bn_int unknown4;
|
|
||||||
bn_int unknown5;
|
|
||||||
bn_int unknown6;
|
|
||||||
bn_int unknown7; /* all here for open char is zero */
|
|
||||||
} t_d2game_server_unknown_8f;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0030 22 1C C4 53 00 00 01 00 04 00 00 00 00 02 "..S..........
|
|
||||||
*/
|
|
||||||
#define D2GAME_SERVER_JOINOK 0x01
|
|
||||||
/* this message will appear after
|
|
||||||
* 1. CLIENT_CREATEGAEM valid
|
|
||||||
* 2. CLIENT_JOINGAME valid
|
|
||||||
*/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_byte difficulty;
|
|
||||||
bn_short gameflag;
|
|
||||||
bn_byte template;
|
|
||||||
bn_short unknown1;
|
|
||||||
bn_short unknown2;
|
|
||||||
} t_d2game_server_joinok;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0030 22 2F 65 38 00 00 64 "/e8..d
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_JOINACTREQ 0x64
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
/* none */
|
|
||||||
} t_d2game_client_joinactreq;
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_UNKNOWN_59 0x59
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
} t_d2game_server_unknown_59;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0030 22 0E 0C 01 00 00 65 82 82 00 00 00 55 AA 55 AA ".....e.....U.U.
|
|
||||||
0040 47 00 00 00 6F 6E 6C 79 65 72 2D 63 6E 61 00 00 G...onlyer-cna..
|
|
||||||
0050 00 00 00 00 01 00 00 00 DD 00 10 00 82 00 01 00 ................
|
|
||||||
0060 01 00 01 01 01 01 01 FF FF FF 01 01 FF FF FF FF ................
|
|
||||||
0070 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
|
|
||||||
0080 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
0090 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
00A0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FC ...............
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_PLAYERSAVE 0x65
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_byte size;
|
|
||||||
bn_int total_size;
|
|
||||||
/* player save file */
|
|
||||||
/* an append */
|
|
||||||
} t_d2game_client_playersave;
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_ERROR 0x9c
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_int errorno;
|
|
||||||
} t_d2game_server_error;
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_ERROR_UNKNOWN_FAILURE 0 /* error biger than 22 is also unknown */
|
|
||||||
#define D2GAME_SERVER_ERROR_CHAR_VER 1
|
|
||||||
#define D2GAME_SERVER_ERROR_QUEST_DATA 2
|
|
||||||
#define D2GAME_SERVER_ERROR_WP_DATA 3
|
|
||||||
#define D2GAME_SERVER_ERROR_STAT_DATA 4
|
|
||||||
#define D2GAME_SERVER_ERROR_SKILL_DATA 5
|
|
||||||
#define D2GAME_SERVER_ERROR_UNABLE_ENTER 6
|
|
||||||
#define D2GAME_SERVER_ERROR_INVENTORY_DATA 7
|
|
||||||
#define D2GAME_SERVER_ERROR_DEAD_BODY 8
|
|
||||||
#define D2GAME_SERVER_ERROR_HEADER 9
|
|
||||||
#define D2GAME_SERVER_ERROR_HIREABLES 10
|
|
||||||
#define D2GAME_SERVER_ERROR_INTRO_DATA 11
|
|
||||||
#define D2GAME_SERVER_ERROR_ITEM 12
|
|
||||||
#define D2GAME_SERVER_ERROR_DEAD_BODY_ITEM 13
|
|
||||||
#define D2GAME_SERVER_ERROR_GENERIC_BAD_FILE 14
|
|
||||||
#define D2GAME_SERVER_ERROR_GAME_FULL 15
|
|
||||||
#define D2GAME_SERVER_ERROR_GAME_VER 16
|
|
||||||
#define D2GAME_SERVER_ERROR_NIGHTMARE 17
|
|
||||||
#define D2GAME_SERVER_ERROR_HELL 18
|
|
||||||
#define D2GAME_SERVER_ERROR_NORMAL_HARDCORE 19
|
|
||||||
#define D2GAME_SERVER_ERROR_HARDCORE_NORMAL 20
|
|
||||||
#define D2GAME_SERVER_ERROR_DEAD_HARDCORE 21
|
|
||||||
/*
|
|
||||||
0000: 15 01 00 69 20 77 69 6C 6C 20 67 6F 00 00 00 ...i will go...
|
|
||||||
|
|
||||||
0000: 15 01 00 74 68 61 6E 6B 73 20 66 6F 72 20 79 6F ...thanks for yo
|
|
||||||
0010: 75 72 20 68 65 6C 70 00 00 00 ur help...
|
|
||||||
|
|
||||||
0000: 15 01 00 73 65 65 20 75 00 00 00 ...see u...
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_CHAT_MESSAGE 0x15
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_short unknown1;
|
|
||||||
/* chat message */
|
|
||||||
} t_d2game_client_chat_message;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 26 01 00 02 00 00 00 00 00 01 6F 6E 6C 79 65 72 &.........onlyer
|
|
||||||
0010: 2D 63 6E 61 61 00 69 20 77 69 6C 6C 20 67 6F 00 -cnaa.i will go.
|
|
||||||
|
|
||||||
0000: 26 01 00 02 00 00 00 00 00 01 6F 6E 6C 79 65 72 &.........onlyer
|
|
||||||
0010: 2D 63 6E 61 61 00 74 68 61 6E 6B 73 20 66 6F 72 -cnaa.thanks for
|
|
||||||
0020: 20 79 6F 75 72 20 68 65 6C 70 00 your help.
|
|
||||||
|
|
||||||
0000: 26 01 00 02 00 00 00 00 00 01 6F 6E 6C 79 65 72 &.........onlyer
|
|
||||||
0010: 2D 63 6E 61 61 00 73 65 65 20 75 00 -cnaa.see u.
|
|
||||||
|
|
||||||
0000: 26 01 00 02 00 00 00 00 00 17 63 63 00 62 79 65 &.........cc.bye
|
|
||||||
0010: 00 67 49 00 00 00 01 86 17 32 12 01 00 07 00 05 .gI......2......
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_CHAT_MESSAGE 0x26
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_short unknown1;
|
|
||||||
bn_int unknown2;
|
|
||||||
bn_short unknown3;
|
|
||||||
bn_byte unknown4; /* id or token? a fixed number for each char*/
|
|
||||||
/* player name */
|
|
||||||
/* message */
|
|
||||||
} t_d2game_server_chat_message;
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_CHAT_MESSAGE_UNKNOWN1 0x0001
|
|
||||||
#define D2GAME_SERVER_CHAT_MESSAGE_UNKNOWN2 0x00000002
|
|
||||||
#define D2GAME_SERVER_CHAT_MESSAGE_UNKNOWN3 0x0000
|
|
||||||
#define D2GAME_SERVER_CHAT_MESSAGE_UNKNOWN4 0x01
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 62 b
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_QUITGAME 0x62
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
} t_d2game_client_quitgame;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 9B FF 01 4E 03 00 00 55 AA 55 AA 47 00 00 00 6F ...N...U.U.G...o
|
|
||||||
0010: 6E 6C 79 65 72 2D 63 6E 61 61 00 00 00 00 00 00 nlyer-cnaa......
|
|
||||||
0020: 00 00 00 DD 00 10 00 82 00 01 00 01 00 FF FF FF ................
|
|
||||||
0030: FF FF 53 FF FF FF FF FF FF FF FF FF FF FF FF FF ..S.............
|
|
||||||
0040: FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 FF ................
|
|
||||||
0050: 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 00 24 00 ..............$.
|
|
||||||
0060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
0070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
0080: 00 00 00 00 00 5E 17 41 5F 57 6F 6F 21 06 00 00 .....^.A_Woo!...
|
|
||||||
0090: 00 2A 01 01 00 00 00 00 00 00 00 00 00 00 00 00 .*..............
|
|
||||||
00A0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
00B0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
00C0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
00D0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
00E0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
00F0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
|
|
||||||
0100: 00 00 00 00 00 00 ......
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_PLAYERSAVE 0x9b
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_byte size;
|
|
||||||
bn_byte start;
|
|
||||||
bn_int total_size;
|
|
||||||
/* player save file */
|
|
||||||
} t_d2game_server_playersave;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 98 05 06
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_CLOSEGAME 0x98
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_short unknown1;
|
|
||||||
} t_d2game_server_closegame;
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 5A 02 04 00 00 00 00 03 61 72 63 68 5F 6E 61 67 Z.......arch_nag
|
|
||||||
0010: 61 00 00 00 B0 FD B6 08 00 FF FF FF 78 07 39 04 a...........x.9.
|
|
||||||
0020: D5 16 2D 04 01 FD B6 08 ..-.....
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_JOINGAME_MESSAGE 0x5a
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
bn_byte unknown1;
|
|
||||||
bn_byte unknown2;
|
|
||||||
bn_int unknown3;
|
|
||||||
bn_byte unknown4;
|
|
||||||
/* char name */
|
|
||||||
} t_d2game_joingame_message;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_DIE 0x41
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
t_d2game_header h;
|
|
||||||
} t_d2game_client_die;
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 02 73 00 00 00 4E 00 8B 0F 7B 14 00 00 .s...N...{...
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_UNKNOWN_2 0x2
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 67 06 00 00 00 01 B2 0F 6B 14 01 00 07 00 05 g.......k......
|
|
||||||
|
|
||||||
0000: 67 06 00 00 00 01 B2 0F 71 14 01 00 07 00 05 g.......q......
|
|
||||||
|
|
||||||
0000: 67 0A 00 00 00 01 72 0F 63 14 01 00 07 00 05 g.....r.c......
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_UNKNOWN_67 0x67
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 6D 0A 00 00 00 76 0F 64 14 80 m....v.d..
|
|
||||||
|
|
||||||
0000: 6D 0A 00 00 00 72 0F 63 14 80 m....r.c..
|
|
||||||
|
|
||||||
0000: 6D 06 00 00 00 B2 0F 71 14 80 8A 01 0B 00 00 00 m......q........
|
|
||||||
|
|
||||||
0000: 6D 06 00 00 00 B2 0F 6B 14 80 m......k..
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_UNKNOWN_6D 0x6d
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 8A 01 0B 00 00 00 6D 0B 00 00 00 9B 0F 70 14 80 ......m......p..
|
|
||||||
0010: 2C 01 0B 00 00 00 11 00 ,.......
|
|
||||||
|
|
||||||
0000: 8A 01 0B 00 00 00 ......
|
|
||||||
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_UNKNOWN_8A 0x8a
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 96 59 80 CC 07 36 8A 4C 36 .Y...6.L6
|
|
||||||
|
|
||||||
#define D2GAME_SERVER_UNKNOWN_96 0x96
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
0000: 24 62 00 00 00 $b...
|
|
||||||
|
|
||||||
#define D2GAME_CLIENT_UNKNOWN_24 0x24
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
CLIENT:
|
|
||||||
|
|
||||||
0000: 2F 01 00 00 00 49 00 00 00 /....I...
|
|
||||||
|
|
||||||
0000: 31 49 00 00 00 00 00 00 00 1I.......
|
|
||||||
|
|
||||||
0000: 30 01 00 00 00 49 00 00 00 0....I...
|
|
||||||
|
|
||||||
0000: 03 8C 17 2E 12 .....
|
|
||||||
|
|
||||||
0000: 03 87 17 27 12 ...'. command ?
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SERVER:
|
|
||||||
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,91 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2004 Dizzy (dizzy@roedu.net)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
#ifndef INCLUDED_ELIST_TYPES
|
|
||||||
#define INCLUDED_ELIST_TYPES
|
|
||||||
|
|
||||||
typedef struct elist_struct {
|
|
||||||
struct elist_struct *next, *prev;
|
|
||||||
} t_elist;
|
|
||||||
|
|
||||||
#endif /* INCLUDED_ELIST_TYPES */
|
|
||||||
|
|
||||||
#ifndef INCLUDED_ELIST_PROTOS
|
|
||||||
#define INCLUDED_ELIST_PROTOS
|
|
||||||
|
|
||||||
#ifdef HAVE_STDDEF_H
|
|
||||||
# include <stddef.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* access to it's members */
|
|
||||||
#define elist_next(ptr) ((ptr)->next)
|
|
||||||
#define elist_prev(ptr) ((ptr)->prev)
|
|
||||||
|
|
||||||
#define __elist_init(elist,val) { (elist)->next = (elist)->prev = (val); }
|
|
||||||
#define elist_init(elist) __elist_init(elist,elist)
|
|
||||||
#define DECLARE_ELIST_INIT(var) \
|
|
||||||
t_elist var = { &var, &var };
|
|
||||||
|
|
||||||
/* link an new node just after "where" */
|
|
||||||
static inline void elist_add(t_elist *where, t_elist *what)
|
|
||||||
{
|
|
||||||
what->next = where->next;
|
|
||||||
where->next->prev = what;
|
|
||||||
what->prev = where;
|
|
||||||
where->next = what;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* link a new node just before "where" (usefull in creating queues) */
|
|
||||||
static inline void elist_add_tail(t_elist *where, t_elist *what)
|
|
||||||
{
|
|
||||||
what->prev = where->prev;
|
|
||||||
where->prev->next = what;
|
|
||||||
what->next = where;
|
|
||||||
where->prev = what;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* unlink "what" from it's list */
|
|
||||||
static inline void elist_del(t_elist *what)
|
|
||||||
{
|
|
||||||
what->next->prev = what->prev;
|
|
||||||
what->prev->next = what->next;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* finds out the container address by computing it from the list node
|
|
||||||
* address substracting the offset inside the container of the list node
|
|
||||||
* member */
|
|
||||||
#define elist_entry(ptr,type,member) ((type*)(((char*)ptr)-offsetof(type,member)))
|
|
||||||
|
|
||||||
/* DONT remove while traversing with this ! */
|
|
||||||
#define elist_for_each(pos,head) \
|
|
||||||
for (pos = (head)->next; pos != (head); pos = pos->next)
|
|
||||||
|
|
||||||
#define elist_for_each_rev(pos,head) \
|
|
||||||
for (pos = (head)->prev; pos != (head); pos = pos->prev)
|
|
||||||
|
|
||||||
/* safe for removals while traversing */
|
|
||||||
#define elist_for_each_safe(pos,head,save) \
|
|
||||||
for (pos = (head)->next, save = pos->next; pos != (head); \
|
|
||||||
pos = save, save = pos->next)
|
|
||||||
|
|
||||||
#define elist_for_each_safe_rev(pos,head,save) \
|
|
||||||
for (pos = (head)->prev, save = pos->prev; pos != (head); \
|
|
||||||
pos = save, save = pos->prev)
|
|
||||||
|
|
||||||
#define elist_empty(ptr) ((ptr)->next == (ptr))
|
|
||||||
|
|
||||||
#endif /* INCLUDED_ELIST_PROTOS */
|
|
|
@ -1,379 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 1999 Rob Crittenden (rcrit@greyoak.com)
|
|
||||||
* Copyright (C) 1999,2000 Ross Combs (rocombs@cs.nmsu.edu)
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
#include "common/setup_before.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
#ifdef HAVE_STDDEF_H
|
|
||||||
# include <stddef.h>
|
|
||||||
#else
|
|
||||||
# ifndef NULL
|
|
||||||
# define NULL ((void *)0)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#include <errno.h>
|
|
||||||
#include "compat/strerror.h"
|
|
||||||
#ifdef HAVE_STRING_H
|
|
||||||
# include <string.h>
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_STRINGS_H
|
|
||||||
# include <strings.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#include "compat/strcasecmp.h"
|
|
||||||
#ifdef HAVE_STDARG_H
|
|
||||||
# include <stdarg.h>
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_VARARGS_H
|
|
||||||
# include <varargs.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#ifdef TIME_WITH_SYS_TIME
|
|
||||||
# include <sys/time.h>
|
|
||||||
# include <time.h>
|
|
||||||
#else
|
|
||||||
# ifdef HAVE_SYS_TIME_H
|
|
||||||
# include <sys/time.h>
|
|
||||||
# else
|
|
||||||
# include <time.h>
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#include "compat/strftime.h"
|
|
||||||
#ifdef HAVE_UNISTD_H
|
|
||||||
# include <unistd.h>
|
|
||||||
#endif
|
|
||||||
#include "common/eventlog.h"
|
|
||||||
#include "common/setup_after.h"
|
|
||||||
|
|
||||||
#ifdef WIN32_GUI
|
|
||||||
# include "win32/winmain.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static FILE * eventstrm=NULL;
|
|
||||||
static t_eventlog_level currlevel=eventlog_level_debug|
|
|
||||||
eventlog_level_info|
|
|
||||||
eventlog_level_warn|
|
|
||||||
eventlog_level_error|
|
|
||||||
eventlog_level_fatal;
|
|
||||||
/* FIXME: maybe this should be default for win32 */
|
|
||||||
static int eventlog_debugmode=0;
|
|
||||||
|
|
||||||
extern void eventlog_set_debugmode(int debugmode)
|
|
||||||
{
|
|
||||||
eventlog_debugmode = debugmode;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern void eventlog_set(FILE * fp)
|
|
||||||
{
|
|
||||||
eventstrm = fp;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern FILE * eventlog_get(void)
|
|
||||||
{
|
|
||||||
return eventstrm;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int eventlog_close(void)
|
|
||||||
{
|
|
||||||
fclose(eventstrm);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int eventlog_open(char const * filename)
|
|
||||||
{
|
|
||||||
FILE * temp;
|
|
||||||
|
|
||||||
if (!filename)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL filename");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(temp = fopen(filename,"a")))
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not open file \"%s\" for appending (fopen: %s)",filename,strerror(errno));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eventstrm && eventstrm!=stderr) /* close old one */
|
|
||||||
if (fclose(eventstrm)<0)
|
|
||||||
{
|
|
||||||
eventstrm = temp;
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"could not close previous logfile after writing (fclose: %s)",strerror(errno));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
eventstrm = temp;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern void eventlog_clear_level(void)
|
|
||||||
{
|
|
||||||
currlevel = eventlog_level_none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int eventlog_add_level(char const * levelname)
|
|
||||||
{
|
|
||||||
if (!levelname)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL levelname");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcasecmp(levelname,"trace")==0)
|
|
||||||
{
|
|
||||||
currlevel |= eventlog_level_trace;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"debug")==0)
|
|
||||||
{
|
|
||||||
currlevel |= eventlog_level_debug;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"info")==0)
|
|
||||||
{
|
|
||||||
currlevel |= eventlog_level_info;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"warn")==0)
|
|
||||||
{
|
|
||||||
currlevel |= eventlog_level_warn;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"error")==0)
|
|
||||||
{
|
|
||||||
currlevel |= eventlog_level_error;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"fatal")==0)
|
|
||||||
{
|
|
||||||
currlevel |= eventlog_level_fatal;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got bad levelname \"%s\"",levelname);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern int eventlog_del_level(char const * levelname)
|
|
||||||
{
|
|
||||||
if (!levelname)
|
|
||||||
{
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got NULL levelname");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcasecmp(levelname,"trace")==0)
|
|
||||||
{
|
|
||||||
currlevel &= ~eventlog_level_trace;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"debug")==0)
|
|
||||||
{
|
|
||||||
currlevel &= ~eventlog_level_debug;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"info")==0)
|
|
||||||
{
|
|
||||||
currlevel &= ~eventlog_level_info;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"warn")==0)
|
|
||||||
{
|
|
||||||
currlevel &= ~eventlog_level_warn;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"error")==0)
|
|
||||||
{
|
|
||||||
currlevel &= ~eventlog_level_error;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (strcasecmp(levelname,"fatal")==0)
|
|
||||||
{
|
|
||||||
currlevel &= ~eventlog_level_fatal;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
eventlog(eventlog_level_error,__FUNCTION__,"got bad levelname \"%s\"",levelname);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern char const * eventlog_get_levelname_str(t_eventlog_level level)
|
|
||||||
{
|
|
||||||
switch (level)
|
|
||||||
{
|
|
||||||
case eventlog_level_trace:
|
|
||||||
return "trace";
|
|
||||||
case eventlog_level_debug:
|
|
||||||
return "debug";
|
|
||||||
case eventlog_level_info:
|
|
||||||
return "info ";
|
|
||||||
case eventlog_level_warn:
|
|
||||||
return "warn ";
|
|
||||||
case eventlog_level_error:
|
|
||||||
return "error";
|
|
||||||
case eventlog_level_fatal:
|
|
||||||
return "fatal";
|
|
||||||
default:
|
|
||||||
return "unknown";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUGMODSTRINGS
|
|
||||||
extern void eventlog_real(t_eventlog_level level, char const * module, char const * fmt, ...)
|
|
||||||
#else
|
|
||||||
extern void eventlog(t_eventlog_level level, char const * module, char const * fmt, ...)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
char time_string[EVENT_TIME_MAXLEN];
|
|
||||||
struct tm * tmnow;
|
|
||||||
time_t now;
|
|
||||||
|
|
||||||
if (!(level&currlevel))
|
|
||||||
return;
|
|
||||||
if (!eventstrm)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* get the time before parsing args */
|
|
||||||
time(&now);
|
|
||||||
if (!(tmnow = localtime(&now)))
|
|
||||||
strcpy(time_string,"?");
|
|
||||||
else
|
|
||||||
strftime(time_string,EVENT_TIME_MAXLEN,EVENT_TIME_FORMAT,tmnow);
|
|
||||||
|
|
||||||
if (!module)
|
|
||||||
{
|
|
||||||
fprintf(eventstrm,"%s [error] eventlog: got NULL module\n",time_string);
|
|
||||||
#ifdef WIN32_GUI
|
|
||||||
gui_lprintf(eventlog_level_error,"%s [error] eventlog: got NULL module\n",time_string);
|
|
||||||
#endif
|
|
||||||
fflush(eventstrm);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!fmt)
|
|
||||||
{
|
|
||||||
fprintf(eventstrm,"%s [error] eventlog: got NULL fmt\n",time_string);
|
|
||||||
#ifdef WIN32_GUI
|
|
||||||
gui_lprintf(eventlog_level_error,"%s [error] eventlog: got NULL fmt\n",time_string);
|
|
||||||
#endif
|
|
||||||
fflush(eventstrm);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(eventstrm,"%s [%s] %s: ",time_string,eventlog_get_levelname_str(level),module);
|
|
||||||
#ifdef WIN32_GUI
|
|
||||||
gui_lprintf(level,"%s [%s] %s: ",time_string,eventlog_get_levelname_str(level),module);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
va_start(args,fmt);
|
|
||||||
|
|
||||||
#ifdef HAVE_VPRINTF
|
|
||||||
vfprintf(eventstrm,fmt,args);
|
|
||||||
#ifdef WIN32_GUI
|
|
||||||
gui_lvprintf(level,fmt,args);
|
|
||||||
#endif
|
|
||||||
#else
|
|
||||||
# if HAVE__DOPRNT
|
|
||||||
_doprnt(fmt,args,eventstrm);
|
|
||||||
# else
|
|
||||||
fprintf(eventstrm,"sorry, vfprintf() and _doprnt() are not available on this system");
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
va_end(args);
|
|
||||||
fprintf(eventstrm,"\n");
|
|
||||||
#ifdef WIN32_GUI
|
|
||||||
gui_lprintf(level,"\n");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (eventlog_debugmode) {
|
|
||||||
printf("%s [%s] %s: ",time_string,eventlog_get_levelname_str(level),module);
|
|
||||||
va_start(args,fmt);
|
|
||||||
#ifdef HAVE_VPRINTF
|
|
||||||
vprintf(fmt,args);
|
|
||||||
#else
|
|
||||||
# if HAVE__DOPRNT
|
|
||||||
_doprnt(fmt,args,stdout);
|
|
||||||
# else
|
|
||||||
printf("sorry, vfprintf() and _doprnt() are not available on this system");
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
va_end(args);
|
|
||||||
printf("\n");
|
|
||||||
fflush(stdout);
|
|
||||||
}
|
|
||||||
fflush(eventstrm);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern void eventlog_step(char const * filename, t_eventlog_level level, char const * module, char const * fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
char time_string[EVENT_TIME_MAXLEN];
|
|
||||||
struct tm * tmnow;
|
|
||||||
time_t now;
|
|
||||||
FILE * fp;
|
|
||||||
|
|
||||||
if (!(level&currlevel))
|
|
||||||
return;
|
|
||||||
if (!eventstrm)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!(fp = fopen(filename, "a")))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* get the time before parsing args */
|
|
||||||
time(&now);
|
|
||||||
if (!(tmnow = localtime(&now)))
|
|
||||||
strcpy(time_string,"?");
|
|
||||||
else
|
|
||||||
strftime(time_string,EVENT_TIME_MAXLEN,EVENT_TIME_FORMAT,tmnow);
|
|
||||||
|
|
||||||
if (!module)
|
|
||||||
{
|
|
||||||
fprintf(fp,"%s [error] eventlog_step: got NULL module\n",time_string);
|
|
||||||
fclose(fp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!fmt)
|
|
||||||
{
|
|
||||||
fprintf(fp,"%s [error] eventlog_step: got NULL fmt\n",time_string);
|
|
||||||
fclose(fp);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf(fp,"%s [%s] %s: ",time_string,eventlog_get_levelname_str(level),module);
|
|
||||||
va_start(args,fmt);
|
|
||||||
#ifdef HAVE_VPRINTF
|
|
||||||
vfprintf(fp,fmt,args);
|
|
||||||
#else
|
|
||||||
# if HAVE__DOPRNT
|
|
||||||
_doprnt(fmt,args,fp);
|
|
||||||
# else
|
|
||||||
fprintf(fp,"sorry, vfprintf() and _doprnt() are not available on this system");
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
va_end(args);
|
|
||||||
fprintf(fp,"\n");
|
|
||||||
fclose(fp);
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue