| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- /*
- * libkms.c
- */
- #ifndef CONFIG
- #define CONFIG "config.h"
- #endif // CONFIG
- #include CONFIG
- #define EXTERNAL dllexport
- #define DLLVERSION 0x30000
- #include "libkms.h"
- #include "shared_globals.h"
- #include "network.h"
- #include "helpers.h"
- #ifndef _WIN32
- #include <signal.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <errno.h>
- #include <netinet/in.h>
- #endif // WIN32
- static int_fast8_t IsServerStarted = FALSE;
- EXTERNC __declspec(EXTERNAL) DWORD __cdecl SendActivationRequest
- (
- const char* const hostname,
- const int port,
- RESPONSE* baseResponse,
- const REQUEST* const baseRequest,
- RESPONSE_RESULT* result, BYTE *hwid
- )
- {
- return !0; // not yet implemented
- }
- EXTERNC __declspec(EXTERNAL) DWORD __cdecl StartKmsServer(const int port, RequestCallback_t requestCallback)
- {
- char listenAddress[64];
- if (IsServerStarted) return !0;
- # ifdef _WIN32
- # ifndef USE_MSRPC
- // Windows Sockets must be initialized
- WSADATA wsadata;
- int error;
- if ((error = WSAStartup(0x0202, &wsadata)))
- {
- return error;
- }
- # endif // USE_MSRPC
- # endif // _WIN32
- CreateResponseBase = requestCallback;
- int maxsockets = 0;
- int_fast8_t haveIPv4 = FALSE;
- int_fast8_t haveIPv6 = FALSE;
- if (checkProtocolStack(AF_INET)) { haveIPv4 = TRUE; maxsockets++; }
- if (checkProtocolStack(AF_INET6)) { haveIPv6 = TRUE; maxsockets++; }
- if(!maxsockets) return !0;
- SocketList = (SOCKET*)vlmcsd_malloc(sizeof(SOCKET) * (size_t)maxsockets);
- numsockets = 0;
- if (haveIPv4)
- {
- snprintf(listenAddress, 64, "0.0.0.0:%u", (unsigned int)port);
- addListeningSocket(listenAddress);
- }
- if (haveIPv6)
- {
- snprintf(listenAddress, 64, "[::]:%u", (unsigned int)port);
- addListeningSocket(listenAddress);
- }
- if (!numsockets)
- {
- free(SocketList);
- return !0;
- }
- IsServerStarted = TRUE;
- runServer();
- IsServerStarted = FALSE;
- return 0;
- }
- EXTERNC __declspec(EXTERNAL) DWORD __cdecl StopKmsServer()
- {
- if (!IsServerStarted) return !0;
- closeAllListeningSockets();
- if (SocketList) free(SocketList);
- return 0;
- }
- EXTERNC __declspec(EXTERNAL) int __cdecl GetLibKmsVersion()
- {
- return DLLVERSION;
- }
|