From e373ea7096c741a8189f7a480863fd21dd6f6be1 Mon Sep 17 00:00:00 2001 From: KUDr Date: Wed, 10 Jan 2007 18:12:09 +0000 Subject: (svn r8033) [cpp] - Prepare for merge from branches/cpp (all .c files renamed to .cpp) --- src/network/core/core.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/network/core/core.cpp (limited to 'src/network/core/core.cpp') diff --git a/src/network/core/core.cpp b/src/network/core/core.cpp new file mode 100644 index 000000000..ca953e5f0 --- /dev/null +++ b/src/network/core/core.cpp @@ -0,0 +1,86 @@ +/* $Id$ */ + +#ifdef ENABLE_NETWORK + +#include "../../stdafx.h" +#include "../../debug.h" +#include "os_abstraction.h" + +#ifdef __MORPHOS__ +/* the library base is required here */ +struct Library *SocketBase = NULL; +#endif + +/** + * Initializes the network core (as that is needed for some platforms + */ +bool NetworkCoreInitialize(void) +{ +#if defined(__MORPHOS__) || defined(__AMIGA__) + /* + * IMPORTANT NOTE: SocketBase needs to be initialized before we use _any_ + * network related function, else: crash. + */ + DEBUG(net, 3, "[core] loading bsd socket library"); + SocketBase = OpenLibrary("bsdsocket.library", 4); + if (SocketBase == NULL) { + DEBUG(net, 0, "[core] can't open bsdsocket.library version 4, network unavailable"); + return false; + } + +#if defined(__AMIGA__) + /* for usleep() implementation (only required for legacy AmigaOS builds) */ + TimerPort = CreateMsgPort(); + if (TimerPort != NULL) { + TimerRequest = (struct timerequest*)CreateIORequest(TimerPort, sizeof(struct timerequest); + if (TimerRequest != NULL) { + if (OpenDevice("timer.device", UNIT_MICROHZ, (struct IORequest*)TimerRequest, 0) == 0) { + TimerBase = TimerRequest->tr_node.io_Device; + if (TimerBase == NULL) { + /* free ressources... */ + DEBUG(net, 0, "[core] can't initialize timer, network unavailable"); + return false; + } + } + } + } +#endif // __AMIGA__ +#endif // __MORPHOS__ / __AMIGA__ + +/* Let's load the network in windows */ +#ifdef WIN32 + { + WSADATA wsa; + DEBUG(net, 3, "[core] loading windows socket library"); + if (WSAStartup(MAKEWORD(2, 0), &wsa) != 0) { + DEBUG(net, 0, "[core] WSAStartup failed, network unavailable"); + return false; + } + } +#endif /* WIN32 */ + + return true; +} + +/** + * Shuts down the network core (as that is needed for some platforms + */ +void NetworkCoreShutdown(void) +{ +#if defined(__MORPHOS__) || defined(__AMIGA__) + /* free allocated resources */ +#if defined(__AMIGA__) + if (TimerBase != NULL) CloseDevice((struct IORequest*)TimerRequest); // XXX This smells wrong + if (TimerRequest != NULL) DeleteIORequest(TimerRequest); + if (TimerPort != NULL) DeleteMsgPort(TimerPort); +#endif + + if (SocketBase != NULL) CloseLibrary(SocketBase); +#endif + +#if defined(WIN32) + WSACleanup(); +#endif +} + +#endif /* ENABLE_NETWORK */ -- cgit v1.2.3-54-g00ecf