summaryrefslogtreecommitdiff
path: root/dedicated_main
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /dedicated_main
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'dedicated_main')
-rw-r--r--dedicated_main/dedicated_main.rc73
-rw-r--r--dedicated_main/dedicated_main.vpc43
-rw-r--r--dedicated_main/main.cpp231
-rw-r--r--dedicated_main/resource.h23
4 files changed, 370 insertions, 0 deletions
diff --git a/dedicated_main/dedicated_main.rc b/dedicated_main/dedicated_main.rc
new file mode 100644
index 0000000..1d9e839
--- /dev/null
+++ b/dedicated_main/dedicated_main.rc
@@ -0,0 +1,73 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_LAUNCHER ICON DISCARDABLE "..\\launcher\\res\\launcher.ico"
+IDI_LAUNCHER2 ICON DISCARDABLE "..\\launcher\\res\\launcher.ico"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/dedicated_main/dedicated_main.vpc b/dedicated_main/dedicated_main.vpc
new file mode 100644
index 0000000..e0ede2c
--- /dev/null
+++ b/dedicated_main/dedicated_main.vpc
@@ -0,0 +1,43 @@
+//-----------------------------------------------------------------------------
+// DEDICATED_MAIN.VPC
+//
+// Project Script
+//-----------------------------------------------------------------------------
+
+$Macro SRCDIR ".."
+$Macro OUTBINDIR "$SRCDIR\..\game"
+$Macro OUTBINNAME "srcds" [$WINDOWS||$X360]
+$Macro OUTBINNAME "srcds_osx" [$OSXALL]
+$Macro OUTBINNAME "srcds_linux" [$LINUXALL]
+
+$Include "$SRCDIR\vpc_scripts\source_exe_base.vpc"
+$Include "$SRCDIR\tier0\tier0_exclude.vpc"
+$Include "$SRCDIR\tier1\tier1_exclude.vpc" [$WINDOWS]
+$Include "$SRCDIR\vstdlib\vstdlib_exclude.vpc" [$WINDOWS]
+
+$Configuration
+{
+ $Linker [$WINDOWS]
+ {
+ $AdditionalDependencies "$BASE Advapi32.lib"
+ $EnableLargeAddresses "Support Addresses Larger Than 2 Gigabytes (/LARGEADDRESSAWARE)"
+ $FixedBaseAddress "Generate a relocation section (/FIXED:NO)"
+ }
+}
+
+$Project "Dedicated_main"
+{
+ $Folder "Source Files"
+ {
+ $File "main.cpp"
+ $File "$SRCDIR\common\SteamAppStartup.cpp"
+ $File "$SRCDIR\common\SteamAppStartup.h"
+ }
+
+ $Folder "Resources"
+ {
+ $File "$SRCDIR\launcher\res\launcher.ico"
+ $File "dedicated_main.rc"
+ }
+
+}
diff --git a/dedicated_main/main.cpp b/dedicated_main/main.cpp
new file mode 100644
index 0000000..9c64d7a
--- /dev/null
+++ b/dedicated_main/main.cpp
@@ -0,0 +1,231 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+//-----------------------------------------------------------------------------
+// This is just a little redirection tool so I can get all the dlls in bin
+//-----------------------------------------------------------------------------
+
+#ifdef _WIN32
+#include <windows.h>
+#include <stdio.h>
+#include <assert.h>
+#include <direct.h>
+#elif POSIX
+#include <stdio.h>
+#include <stdlib.h>
+#include <dlfcn.h>
+#include <string.h>
+#include <limits.h>
+#include <errno.h>
+#include <unistd.h>
+#define MAX_PATH PATH_MAX
+#endif
+#include "basetypes.h"
+
+#ifdef _WIN32
+typedef int (*DedicatedMain_t)( HINSTANCE hInstance, HINSTANCE hPrevInstance,
+ LPSTR lpCmdLine, int nCmdShow );
+#elif POSIX
+typedef int (*DedicatedMain_t)( int argc, char *argv[] );
+
+#endif
+
+//-----------------------------------------------------------------------------
+// Purpose: Return the directory where this .exe is running from
+// Output : char
+//-----------------------------------------------------------------------------
+
+static char *GetBaseDir( const char *pszBuffer )
+{
+ static char basedir[ MAX_PATH ];
+ char szBuffer[ MAX_PATH ];
+ size_t j;
+ char *pBuffer = NULL;
+
+ strcpy( szBuffer, pszBuffer );
+
+ pBuffer = strrchr( szBuffer,'\\' );
+ if ( pBuffer )
+ {
+ *(pBuffer+1) = '\0';
+ }
+
+ strcpy( basedir, szBuffer );
+
+ j = strlen( basedir );
+ if (j > 0)
+ {
+ if ( ( basedir[ j-1 ] == '\\' ) ||
+ ( basedir[ j-1 ] == '/' ) )
+ {
+ basedir[ j-1 ] = 0;
+ }
+ }
+
+ return basedir;
+}
+
+#ifdef _WIN32
+int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
+{
+ // Must add 'bin' to the path....
+ char* pPath = getenv("PATH");
+
+ // Use the .EXE name to determine the root directory
+ char moduleName[ MAX_PATH ];
+ char szBuffer[ 4096 ];
+ if ( !GetModuleFileName( hInstance, moduleName, MAX_PATH ) )
+ {
+ MessageBox( 0, "Failed calling GetModuleFileName", "Launcher Error", MB_OK );
+ return 0;
+ }
+
+ // Get the root directory the .exe is in
+ char* pRootDir = GetBaseDir( moduleName );
+
+#ifdef _DEBUG
+ int len =
+#endif
+ _snprintf( szBuffer, sizeof( szBuffer ) - 1, "PATH=%s\\bin\\;%s", pRootDir, pPath );
+ szBuffer[ ARRAYSIZE(szBuffer) - 1 ] = 0;
+ assert( len < 4096 );
+ _putenv( szBuffer );
+
+ HINSTANCE launcher = LoadLibrary("bin\\dedicated.dll"); // STEAM OK ... filesystem not mounted yet
+ if (!launcher)
+ {
+ char *pszError;
+ FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&pszError, 0, NULL);
+
+ char szBuf[1024];
+ _snprintf(szBuf, sizeof( szBuf ) - 1, "Failed to load the launcher DLL:\n\n%s", pszError);
+ szBuf[ ARRAYSIZE(szBuf) - 1 ] = 0;
+ MessageBox( 0, szBuf, "Launcher Error", MB_OK );
+
+ LocalFree(pszError);
+ return 0;
+ }
+
+ DedicatedMain_t main = (DedicatedMain_t)GetProcAddress( launcher, "DedicatedMain" );
+ return main( hInstance, hPrevInstance, lpCmdLine, nCmdShow );
+}
+
+#elif POSIX
+
+#if defined( LINUX )
+
+#include <fcntl.h>
+
+static bool IsDebuggerPresent( int time )
+{
+ // Need to get around the __wrap_open() stuff. Just find the open symbol
+ // directly and use it...
+ typedef int (open_func_t)( const char *pathname, int flags, mode_t mode );
+ open_func_t *open_func = (open_func_t *)dlsym( RTLD_NEXT, "open" );
+
+ if ( open_func )
+ {
+ for ( int i = 0; i < time; i++ )
+ {
+ int tracerpid = -1;
+
+ int fd = (*open_func)( "/proc/self/status", O_RDONLY, S_IRUSR );
+ if (fd >= 0)
+ {
+ char buf[ 4096 ];
+ static const char tracerpid_str[] = "TracerPid:";
+
+ const int len = read( fd, buf, sizeof(buf) - 1 );
+ if ( len > 0 )
+ {
+ buf[ len ] = 0;
+
+ const char *str = strstr( buf, tracerpid_str );
+ tracerpid = str ? atoi( str + sizeof( tracerpid_str ) ) : -1;
+ }
+
+ close( fd );
+ }
+
+ if ( tracerpid > 0 )
+ return true;
+
+ sleep( 1 );
+ }
+ }
+
+ return false;
+}
+
+static void WaitForDebuggerConnect( int argc, char *argv[], int time )
+{
+ for ( int i = 1; i < argc; i++ )
+ {
+ if ( strstr( argv[i], "-wait_for_debugger" ) )
+ {
+ printf( "\nArg -wait_for_debugger found.\nWaiting %dsec for debugger...\n", time );
+ printf( " pid = %d\n", getpid() );
+
+ if ( IsDebuggerPresent( time ) )
+ printf("Debugger connected...\n\n");
+
+ break;
+ }
+ }
+}
+
+#else
+
+static void WaitForDebuggerConnect( int argc, char *argv[], int time )
+{
+}
+
+#endif // !LINUX
+
+int main( int argc, char *argv[] )
+{
+ // Must add 'bin' to the path....
+ char* pPath = getenv("LD_LIBRARY_PATH");
+ char szBuffer[4096];
+ char cwd[ MAX_PATH ];
+ if ( !getcwd( cwd, sizeof(cwd)) )
+ {
+ printf( "getcwd failed (%s)", strerror(errno));
+ }
+
+ snprintf( szBuffer, sizeof( szBuffer ) - 1, "LD_LIBRARY_PATH=%s/bin:%s", cwd, pPath );
+ int ret = putenv( szBuffer );
+ if ( ret )
+ {
+ printf( "%s\n", strerror(errno) );
+ }
+ void *tier0 = dlopen( "libtier0" DLL_EXT_STRING, RTLD_NOW );
+ void *vstdlib = dlopen( "libvstdlib" DLL_EXT_STRING, RTLD_NOW );
+
+ const char *pBinaryName = "dedicated" DLL_EXT_STRING;
+
+ void *dedicated = dlopen( pBinaryName, RTLD_NOW );
+ if ( !dedicated )
+ {
+ printf( "Failed to open %s (%s)\n", pBinaryName, dlerror());
+ return -1;
+ }
+ DedicatedMain_t dedicated_main = (DedicatedMain_t)dlsym( dedicated, "DedicatedMain" );
+ if ( !dedicated_main )
+ {
+ printf( "Failed to find dedicated server entry point (%s)\n", dlerror() );
+ return -1;
+ }
+
+ WaitForDebuggerConnect( argc, argv, 30 );
+
+ ret = dedicated_main( argc,argv );
+ dlclose( dedicated );
+ dlclose( vstdlib );
+ dlclose( tier0 );
+}
+#endif
diff --git a/dedicated_main/resource.h b/dedicated_main/resource.h
new file mode 100644
index 0000000..5bd4d93
--- /dev/null
+++ b/dedicated_main/resource.h
@@ -0,0 +1,23 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by launcher_main.rc
+//
+#define IDI_LAUNCHER 128
+#define IDI_LAUNCHER2 101
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1000
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif