summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--projects/openttd.vcproj6
-rw-r--r--projects/openttd_vs80.vcproj6
-rw-r--r--source.list2
-rw-r--r--src/network/core/core.c86
-rw-r--r--src/network/core/core.h13
-rw-r--r--src/network/network.c68
6 files changed, 117 insertions, 64 deletions
diff --git a/projects/openttd.vcproj b/projects/openttd.vcproj
index ce32fc9fe..f4ffeff7f 100644
--- a/projects/openttd.vcproj
+++ b/projects/openttd.vcproj
@@ -260,6 +260,9 @@
RelativePath=".\..\src\namegen.c">
</File>
<File
+ RelativePath=".\..\src\network\core\core.c">
+ </File>
+ <File
RelativePath=".\..\src\network\core\packet.c">
</File>
<File
@@ -477,6 +480,9 @@
RelativePath=".\..\src\network\core\config.h">
</File>
<File
+ RelativePath=".\..\src\network\core\core.h">
+ </File>
+ <File
RelativePath=".\..\src\network\core\game.h">
</File>
<File
diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj
index c4e9d03d1..2294b088f 100644
--- a/projects/openttd_vs80.vcproj
+++ b/projects/openttd_vs80.vcproj
@@ -543,6 +543,9 @@
RelativePath=".\..\src\namegen.c">
</File>
<File
+ RelativePath=".\..\src\network\core\core.c">
+ </File>
+ <File
RelativePath=".\..\src\network\core\packet.c">
</File>
<File
@@ -760,6 +763,9 @@
RelativePath=".\..\src\network\core\config.h">
</File>
<File
+ RelativePath=".\..\src\network\core\core.h">
+ </File>
+ <File
RelativePath=".\..\src\network\core\game.h">
</File>
<File
diff --git a/source.list b/source.list
index b88dba0b1..1c98dbcba 100644
--- a/source.list
+++ b/source.list
@@ -32,6 +32,7 @@ misc.c
mixer.c
music.c
namegen.c
+network/core/core.c
network/core/packet.c
network/core/tcp.c
network/core/udp.c
@@ -115,6 +116,7 @@ md5.h
mixer.h
music.h
network/core/config.h
+network/core/core.h
network/core/game.h
network/core/os_abstraction.h
network/core/packet.h
diff --git a/src/network/core/core.c b/src/network/core/core.c
new file mode 100644
index 000000000..310fc3326
--- /dev/null
+++ b/src/network/core/core.c
@@ -0,0 +1,86 @@
+/* $Id$ */
+
+#ifdef ENABLE_NETWORK
+
+#include "../../stdafx.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
+ */
+void 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");
+ _network_available = false;
+ return;
+ }
+
+#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");
+ _network_available = false;
+ return;
+ }
+ }
+ }
+ }
+#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");
+ _network_available = false;
+ return;
+ }
+ }
+#endif /* WIN32 */
+}
+
+/**
+ * Shuts down the network core (as that is needed for some platforms
+ */
+void NetworkCoreShutdown(void)
+{
+#if defined(__MORPHOS__) || defined(__AMIGA__)
+ /* free allocated ressources */
+#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 */
diff --git a/src/network/core/core.h b/src/network/core/core.h
new file mode 100644
index 000000000..80a08eece
--- /dev/null
+++ b/src/network/core/core.h
@@ -0,0 +1,13 @@
+/* $Id$ */
+
+#ifndef NETWORK_CORE_H
+#define NETWORK_CORE_H
+
+#ifdef ENABLE_NETWORK
+
+void NetworkCoreInitialize(void);
+void NetworkCoreShutdown(void);
+
+#endif /* ENABLE_NETWORK */
+
+#endif /* NETWORK_CORE_H */
diff --git a/src/network/network.c b/src/network/network.c
index fd7c14c88..1612c2be2 100644
--- a/src/network/network.c
+++ b/src/network/network.c
@@ -32,16 +32,12 @@
#include "network_gamelist.h"
#include "core/udp.h"
#include "core/tcp.h"
+#include "core/core.h"
#include "network_gui.h"
#include "../console.h" /* IConsoleCmdExec */
#include <stdarg.h> /* va_list */
#include "../md5.h"
-#ifdef __MORPHOS__
-// the library base is required here
-struct Library *SocketBase = NULL;
-#endif
-
// The listen socket for the server
static SOCKET _listensocket;
@@ -1345,39 +1341,6 @@ void NetworkStartUp(void)
{
DEBUG(net, 3, "[core] starting network...");
-#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");
- _network_available = false;
- return;
- }
-
-#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");
- _network_available = false;
- return;
- }
- }
- }
- }
-#endif // __AMIGA__
-#endif // __MORPHOS__ / __AMIGA__
-
// Network is available
_network_available = true;
_network_dedicated = false;
@@ -1385,6 +1348,8 @@ void NetworkStartUp(void)
_network_need_advertise = true;
_network_advertise_retries = 0;
+ NetworkCoreInitialize();
+
/* Load the ip from the openttd.cfg */
_network_server_bind_ip = inet_addr(_network_server_bind_ip_host);
/* And put the data back in it in case it was an invalid ip */
@@ -1404,18 +1369,6 @@ void NetworkStartUp(void)
_network_game_info.spectators_max = sp_max;
}
- // Let's load the network in windows
- #if defined(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");
- _network_available = false;
- return;
- }
- }
- #endif // WIN32
NetworkInitialize();
DEBUG(net, 3, "[core] network online, multiplayer available");
@@ -1432,20 +1385,7 @@ void NetworkShutDown(void)
_network_available = false;
-#if defined(__MORPHOS__) || defined(__AMIGA__)
- // free allocated ressources
-#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
+ NetworkCoreShutdown();
}
#endif /* ENABLE_NETWORK */