mirror of
https://github.com/inspircd/inspircd.git
synced 2025-03-10 02:59:01 -04:00
Helps if I add the w32 specific code, too. :p
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@7044 e03df62e-2008-0410-955e-edbf42e46eb7
This commit is contained in:
parent
9cf56d917d
commit
c778d1258a
183
include/socketengine_iocp.h
Normal file
183
include/socketengine_iocp.h
Normal file
@ -0,0 +1,183 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2007 InspIRCd Development Team
|
||||
* See: http://www.inspircd.org/wiki/index.php/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#ifndef __SOCKETENGINE_IOCP__
|
||||
#define __SOCKETENGINE_IOCP__
|
||||
|
||||
#define READ_BUFFER_SIZE 500
|
||||
#define USING_IOCP 1
|
||||
|
||||
#include "inspircd_config.h"
|
||||
#include "inspircd_win32wrapper.h"
|
||||
#include "globals.h"
|
||||
#include "inspircd.h"
|
||||
#include "socketengine.h"
|
||||
|
||||
enum SocketIOEvent
|
||||
{
|
||||
SOCKET_IO_EVENT_READ_READY = 0,
|
||||
SOCKET_IO_EVENT_WRITE_READY = 1,
|
||||
SOCKET_IO_EVENT_ACCEPT = 2,
|
||||
SOCKET_IO_EVENT_ERROR = 3,
|
||||
NUM_SOCKET_IO_EVENTS = 4,
|
||||
};
|
||||
|
||||
class Overlapped
|
||||
{
|
||||
public:
|
||||
OVERLAPPED m_overlap;
|
||||
SocketIOEvent m_event;
|
||||
int m_params;
|
||||
Overlapped(SocketIOEvent ev, int params) : m_event(ev), m_params(params)
|
||||
{
|
||||
memset(&m_overlap, 0, sizeof(OVERLAPPED));
|
||||
}
|
||||
};
|
||||
|
||||
struct accept_overlap
|
||||
{
|
||||
int socket;
|
||||
char buf[1024];
|
||||
};
|
||||
|
||||
class IOCPEngine : public SocketEngine
|
||||
{
|
||||
/** Creates a "fake" file descriptor for use with an IOCP socket.
|
||||
* @return -1 if there are no free slots, and an integer if it finds one.
|
||||
*/
|
||||
__inline int GenerateFd()
|
||||
{
|
||||
register int i = 0;
|
||||
for(; i < MAX_DESCRIPTORS; ++i)
|
||||
if(ref[i] == 0)
|
||||
return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** Global I/O completion port that sockets attach to.
|
||||
*/
|
||||
HANDLE m_completionPort;
|
||||
|
||||
/** This is kinda shitty... :/ for getting an address from a real fd.
|
||||
*/
|
||||
map<int, EventHandler*> m_binding;
|
||||
|
||||
public:
|
||||
/** Creates an IOCP Socket Engine
|
||||
* @param Instance The creator of this object
|
||||
*/
|
||||
IOCPEngine(InspIRCd * Instance);
|
||||
|
||||
/** Deletes an IOCP socket engine and all the attached sockets
|
||||
*/
|
||||
~IOCPEngine();
|
||||
|
||||
/** Adds an event handler to the completion port, and sets up initial events.
|
||||
* @param eh EventHandler to add
|
||||
* @return True if success, false if no room
|
||||
*/
|
||||
bool AddFd(EventHandler* eh);
|
||||
|
||||
/** Gets the maximum number of file descriptors that this engine can handle.
|
||||
* @return The number of file descriptors
|
||||
*/
|
||||
__inline int GetMaxFds() { return MAX_DESCRIPTORS; }
|
||||
|
||||
/** Gets the number of free/remaining file descriptors under this engine.
|
||||
* @return Remaining count
|
||||
*/
|
||||
__inline int GetRemainingFds()
|
||||
{
|
||||
register int count = 0;
|
||||
register int i = 0;
|
||||
for(; i < MAX_DESCRIPTORS; ++i)
|
||||
if(ref[i] == 0)
|
||||
++count;
|
||||
return count;
|
||||
}
|
||||
|
||||
/** Removes a file descriptor from the set, preventing it from receiving any more events
|
||||
* @return True if remove was successful, false otherwise
|
||||
*/
|
||||
bool DelFd(EventHandler* eh, bool force = false);
|
||||
|
||||
/** Called every loop to handle input/output events for all sockets under this engine
|
||||
* @return The number of "changed" sockets.
|
||||
*/
|
||||
int DispatchEvents();
|
||||
|
||||
/** Gets the name of this socket engine as a string.
|
||||
* @return string of socket engine name
|
||||
*/
|
||||
std::string GetName();
|
||||
|
||||
/** Queues a Write event on the specified event handler.
|
||||
* @param eh EventHandler that needs data sent on
|
||||
*/
|
||||
void WantWrite(EventHandler* eh);
|
||||
|
||||
/** Posts a completion event on the specified socket.
|
||||
* @param eh EventHandler for message
|
||||
* @param type Event Type
|
||||
* @param param Event Parameter
|
||||
* @return True if added, false if not
|
||||
*/
|
||||
bool PostCompletionEvent(EventHandler * eh, SocketIOEvent type, int param);
|
||||
|
||||
/** Posts a read event on the specified socket
|
||||
* @param eh EventHandler (socket)
|
||||
*/
|
||||
void PostReadEvent(EventHandler * eh);
|
||||
|
||||
/** Posts an accept event on the specified socket
|
||||
* @param eh EventHandler (socket)
|
||||
*/
|
||||
void PostAcceptEvent(EventHandler * eh);
|
||||
|
||||
/** Returns the EventHandler attached to a specific fd.
|
||||
* If the fd isnt in the socketengine, returns NULL.
|
||||
* @param fd The event handler to look for
|
||||
* @return A pointer to the event handler, or NULL
|
||||
*/
|
||||
EventHandler* GetRef(int fd);
|
||||
|
||||
/** Returns true if a file descriptor exists in
|
||||
* the socket engine's list.
|
||||
* @param fd The event handler to look for
|
||||
* @return True if this fd has an event handler
|
||||
*/
|
||||
bool HasFd(int fd);
|
||||
|
||||
/** Returns the EventHandler attached to a specific fd.
|
||||
* If the fd isnt in the socketengine, returns NULL.
|
||||
* @param fd The event handler to look for
|
||||
* @return A pointer to the event handler, or NULL
|
||||
*/
|
||||
EventHandler* GetIntRef(int fd);
|
||||
};
|
||||
|
||||
//typedef void(*OpHandler)(EventHandler)
|
||||
/** Event Handler Array
|
||||
*/
|
||||
|
||||
/** Creates a SocketEngine
|
||||
*/
|
||||
class SocketEngineFactory
|
||||
{
|
||||
public:
|
||||
/** Create a new instance of SocketEngine based on IOCPEngine
|
||||
*/
|
||||
SocketEngine* Create(InspIRCd* Instance) { return new IOCPEngine(Instance); }
|
||||
};
|
||||
|
||||
#endif
|
323
src/socketengine_iocp.cpp
Normal file
323
src/socketengine_iocp.cpp
Normal file
@ -0,0 +1,323 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2007 InspIRCd Development Team
|
||||
* See: http://www.inspircd.org/wiki/index.php/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "socketengine_iocp.h"
|
||||
#include <mswsock.h>
|
||||
#include <assert.h>
|
||||
|
||||
IOCPEngine::IOCPEngine(InspIRCd * Instance) : SocketEngine(Instance)
|
||||
{
|
||||
// Create completion port
|
||||
m_completionPort = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, (ULONG_PTR)0, 0);
|
||||
|
||||
// Null variables out.
|
||||
CurrentSetSize = 0;
|
||||
EngineHandle = 0;
|
||||
memset(ref, 0, sizeof(EventHandler*) * MAX_DESCRIPTORS);
|
||||
}
|
||||
|
||||
IOCPEngine::~IOCPEngine()
|
||||
{
|
||||
CloseHandle(m_completionPort);
|
||||
};
|
||||
|
||||
bool IOCPEngine::AddFd(EventHandler* eh)
|
||||
{
|
||||
int fake_fd = GenerateFd();
|
||||
int is_accept = 0;
|
||||
int opt_len = sizeof(int);
|
||||
if(fake_fd < 0)
|
||||
return false;
|
||||
|
||||
// are we a listen socket?
|
||||
getsockopt(eh->GetFd(), SOL_SOCKET, SO_ACCEPTCONN, (char*)&is_accept, &opt_len);
|
||||
|
||||
// set up the read event so the socket can actually receive data :P
|
||||
eh->m_internalFd = fake_fd;
|
||||
eh->m_writeEvent = 0;
|
||||
eh->m_acceptEvent = 0;
|
||||
|
||||
// assign the socket to the completion port
|
||||
if(!CreateIoCompletionPort((HANDLE)eh->GetFd(), m_completionPort, (ULONG_PTR)eh->m_internalFd, 0))
|
||||
return false;
|
||||
|
||||
// set up binding, increase set size
|
||||
ref[fake_fd] = eh;
|
||||
++CurrentSetSize;
|
||||
|
||||
// setup initial events
|
||||
if(is_accept)
|
||||
PostAcceptEvent(eh);
|
||||
else
|
||||
PostReadEvent(eh);
|
||||
|
||||
// log message
|
||||
ServerInstance->Log(DEBUG, "New fake fd: %u, real fd: %u, address 0x%p", fake_fd, eh->GetFd(), eh);
|
||||
|
||||
// post a write event if there is data to be written
|
||||
if(eh->Writeable())
|
||||
WantWrite(eh);
|
||||
|
||||
// we're all good =)
|
||||
m_binding.insert( map<int, EventHandler*>::value_type( eh->GetFd(), eh ) );
|
||||
return true;
|
||||
}
|
||||
|
||||
bool IOCPEngine::DelFd(EventHandler* eh, bool force /* = false */)
|
||||
{
|
||||
int fake_fd = eh->m_internalFd;
|
||||
int fd = eh->GetFd();
|
||||
|
||||
if(ref[fake_fd] == 0)
|
||||
return false;
|
||||
|
||||
ServerInstance->Log(DEBUG, "Removing fake fd %u, real fd %u, address 0x%p", fake_fd, eh->GetFd(), eh);
|
||||
|
||||
// Cancel pending i/o operations.
|
||||
assert(CancelIo((HANDLE)fd) == TRUE);
|
||||
|
||||
// Free the buffer, and delete the event.
|
||||
if(eh->m_readEvent != 0)
|
||||
delete ((Overlapped*)eh->m_readEvent);
|
||||
|
||||
if(eh->m_writeEvent != 0)
|
||||
delete ((Overlapped*)eh->m_writeEvent);
|
||||
|
||||
if(eh->m_acceptEvent != 0)
|
||||
{
|
||||
delete ((accept_overlap*)((Overlapped*)eh->m_acceptEvent)->m_params);
|
||||
delete ((Overlapped*)eh->m_acceptEvent);
|
||||
}
|
||||
|
||||
// Clear binding
|
||||
ref[fake_fd] = 0;
|
||||
m_binding.erase(eh->GetFd());
|
||||
|
||||
// decrement set size
|
||||
--CurrentSetSize;
|
||||
|
||||
// success
|
||||
return true;
|
||||
}
|
||||
|
||||
void IOCPEngine::WantWrite(EventHandler* eh)
|
||||
{
|
||||
// Post event - write begin
|
||||
if(!eh->m_writeEvent)
|
||||
{
|
||||
Overlapped * ov = new Overlapped(SOCKET_IO_EVENT_WRITE_READY, 0);
|
||||
eh->m_writeEvent = (void*)ov;
|
||||
PostQueuedCompletionStatus(m_completionPort, 0, (ULONG_PTR)eh->m_internalFd, &ov->m_overlap);
|
||||
}
|
||||
}
|
||||
|
||||
bool IOCPEngine::PostCompletionEvent(EventHandler * eh, SocketIOEvent type, int param)
|
||||
{
|
||||
Overlapped * ov = new Overlapped(type, param);
|
||||
return PostQueuedCompletionStatus(m_completionPort, 0, (ULONG_PTR)eh->m_internalFd, &ov->m_overlap);
|
||||
}
|
||||
|
||||
void IOCPEngine::PostReadEvent(EventHandler * eh)
|
||||
{
|
||||
Overlapped * ov = new Overlapped(SOCKET_IO_EVENT_READ_READY, 0);
|
||||
DWORD flags = 0;
|
||||
DWORD r_length = 0;
|
||||
WSABUF buf;
|
||||
|
||||
// by passing a null buffer pointer, we can have this working in the same way as epoll..
|
||||
// its slower, but it saves modifying all network code.
|
||||
buf.buf = 0;
|
||||
buf.len = 0;
|
||||
|
||||
// determine socket type.
|
||||
DWORD sock_type;
|
||||
int sock_len = sizeof(DWORD);
|
||||
if(getsockopt(eh->GetFd(), SOL_SOCKET, SO_TYPE, (char*)&sock_type, &sock_len) == -1)
|
||||
{
|
||||
// wtfhax?
|
||||
PostCompletionEvent(eh, SOCKET_IO_EVENT_ERROR, 0);
|
||||
delete ov;
|
||||
return;
|
||||
}
|
||||
switch(sock_type)
|
||||
{
|
||||
case SOCK_DGRAM: // UDP Socket
|
||||
{
|
||||
if(WSARecvFrom(eh->GetFd(), &buf, 1, &r_length, &flags, 0, 0, &ov->m_overlap, 0))
|
||||
{
|
||||
int err = WSAGetLastError();
|
||||
if(WSAGetLastError() != WSA_IO_PENDING)
|
||||
{
|
||||
delete ov;
|
||||
PostCompletionEvent(eh, SOCKET_IO_EVENT_ERROR, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
case SOCK_STREAM: // TCP Socket
|
||||
{
|
||||
if(WSARecv(eh->GetFd(), &buf, 1, &r_length, &flags, &ov->m_overlap, 0) == SOCKET_ERROR)
|
||||
{
|
||||
if(WSAGetLastError() != WSA_IO_PENDING)
|
||||
{
|
||||
delete ov;
|
||||
PostCompletionEvent(eh, SOCKET_IO_EVENT_ERROR, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}break;
|
||||
|
||||
default:
|
||||
{
|
||||
printf("unknwon socket type: %u\n", sock_type);
|
||||
assert(false);
|
||||
}break;
|
||||
}
|
||||
eh->m_readEvent = (void*)ov;
|
||||
}
|
||||
|
||||
int IOCPEngine::DispatchEvents()
|
||||
{
|
||||
DWORD len;
|
||||
LPOVERLAPPED overlap;
|
||||
Overlapped * ov;
|
||||
EventHandler * eh;
|
||||
int intfd;
|
||||
int ret;
|
||||
unsigned long bytes_recv;
|
||||
|
||||
while(GetQueuedCompletionStatus(m_completionPort, &len, (PULONG_PTR)&intfd, &overlap, 100))
|
||||
{
|
||||
// woot, we got an event on a socket :P
|
||||
eh = ref[intfd];
|
||||
ov = CONTAINING_RECORD(overlap, Overlapped, m_overlap);
|
||||
if(eh == 0) continue;
|
||||
switch(ov->m_event)
|
||||
{
|
||||
case SOCKET_IO_EVENT_WRITE_READY:
|
||||
{
|
||||
eh->m_writeEvent = 0;
|
||||
eh->HandleEvent(EVENT_WRITE, 0);
|
||||
}break;
|
||||
|
||||
case SOCKET_IO_EVENT_READ_READY:
|
||||
{
|
||||
ret = ioctlsocket(eh->GetFd(), FIONREAD, &bytes_recv);
|
||||
eh->m_readEvent = 0;
|
||||
if(ret != 0 || bytes_recv == 0)
|
||||
{
|
||||
// end of file
|
||||
PostCompletionEvent(eh, SOCKET_IO_EVENT_ERROR, EIO);
|
||||
}
|
||||
else
|
||||
{
|
||||
eh->HandleEvent(EVENT_READ, 0);
|
||||
PostReadEvent(eh);
|
||||
}
|
||||
}break;
|
||||
|
||||
case SOCKET_IO_EVENT_ACCEPT:
|
||||
{
|
||||
/* this is kinda messy.. :/ */
|
||||
eh->HandleEvent(EVENT_READ, ov->m_params);
|
||||
delete ((accept_overlap*)ov->m_params);
|
||||
eh->m_acceptEvent = 0;
|
||||
PostAcceptEvent(eh);
|
||||
}break;
|
||||
|
||||
case SOCKET_IO_EVENT_ERROR:
|
||||
{
|
||||
eh->HandleEvent(EVENT_ERROR, ov->m_params);
|
||||
}break;
|
||||
}
|
||||
|
||||
delete ov;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void IOCPEngine::PostAcceptEvent(EventHandler * eh)
|
||||
{
|
||||
int fd = WSASocket(AF_INET, SOCK_STREAM, 0, 0, 0, WSA_FLAG_OVERLAPPED);
|
||||
int len = sizeof(sockaddr_in) + 16;
|
||||
DWORD dwBytes;
|
||||
accept_overlap * ao = new accept_overlap;
|
||||
memset(ao->buf, 0, 1024);
|
||||
ao->socket = fd;
|
||||
|
||||
Overlapped * ov = new Overlapped(SOCKET_IO_EVENT_ACCEPT, (int)ao);
|
||||
eh->m_acceptEvent = (void*)ov;
|
||||
|
||||
if(AcceptEx(eh->GetFd(), fd, ao->buf, 0, len, len, &dwBytes, &ov->m_overlap) == FALSE)
|
||||
{
|
||||
int err = WSAGetLastError();
|
||||
if(err != WSA_IO_PENDING)
|
||||
{
|
||||
printf("PostAcceptEvent err: %d\n", err);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::string IOCPEngine::GetName()
|
||||
{
|
||||
return "iocp";
|
||||
}
|
||||
|
||||
int __accept_socket(SOCKET s, sockaddr * addr, int * addrlen, void * acceptevent)
|
||||
{
|
||||
Overlapped * ovl = (Overlapped*)acceptevent;
|
||||
accept_overlap * ov = (accept_overlap*)ovl->m_params;
|
||||
|
||||
sockaddr_in * server_address = (sockaddr_in*)&ov->buf[10];
|
||||
sockaddr_in * client_address = (sockaddr_in*)&ov->buf[38];
|
||||
|
||||
memcpy(addr, client_address, sizeof(sockaddr_in));
|
||||
*addrlen = sizeof(sockaddr_in);
|
||||
|
||||
return ov->socket;
|
||||
}
|
||||
|
||||
int __getsockname(SOCKET s, sockaddr * name, int * namelen, void * acceptevent)
|
||||
{
|
||||
Overlapped * ovl = (Overlapped*)acceptevent;
|
||||
accept_overlap * ov = (accept_overlap*)ovl->m_params;
|
||||
|
||||
sockaddr_in * server_address = (sockaddr_in*)&ov->buf[10];
|
||||
sockaddr_in * client_address = (sockaddr_in*)&ov->buf[38];
|
||||
|
||||
memcpy(name, server_address, sizeof(sockaddr_in));
|
||||
*namelen = sizeof(sockaddr_in);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
EventHandler * IOCPEngine::GetRef(int fd)
|
||||
{
|
||||
map<int, EventHandler*>::iterator itr = m_binding.find(fd);
|
||||
return (itr == m_binding.end()) ? 0 : itr->second;
|
||||
}
|
||||
|
||||
bool IOCPEngine::HasFd(int fd)
|
||||
{
|
||||
return (GetRef(fd) != 0);
|
||||
}
|
||||
|
||||
EventHandler * IOCPEngine::GetIntRef(int fd)
|
||||
{
|
||||
if(fd < 0 || fd > MAX_DESCRIPTORS)
|
||||
return 0;
|
||||
return ref[fd];
|
||||
}
|
81
win/colours.h
Normal file
81
win/colours.h
Normal file
@ -0,0 +1,81 @@
|
||||
#define TRED FOREGROUND_RED | FOREGROUND_INTENSITY
|
||||
#define TGREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
|
||||
#define TYELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY
|
||||
#define TNORMAL FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE
|
||||
#define TWHITE TNORMAL | FOREGROUND_INTENSITY
|
||||
#define TBLUE FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY
|
||||
|
||||
inline void sc(WORD color) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color); }
|
||||
|
||||
/* Handles colors in printf */
|
||||
int printf_c(const char * format, ...)
|
||||
{
|
||||
// Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P
|
||||
static char message[500];
|
||||
static char temp[10];
|
||||
int color1, color2;
|
||||
|
||||
/* parse arguments */
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
vsprintf(message, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
/* search for unix-style escape sequences */
|
||||
int t;
|
||||
int c = 0;
|
||||
const char * p = message;
|
||||
while(*p != 0)
|
||||
{
|
||||
if(*p == '\033')
|
||||
{
|
||||
// Escape sequence -> copy into the temp buffer, and parse the color.
|
||||
p++;
|
||||
t = 0;
|
||||
while(*p != 'm')
|
||||
{
|
||||
temp[t++] = *p;
|
||||
++p;
|
||||
}
|
||||
|
||||
temp[t] = 0;
|
||||
p++;
|
||||
if(!stricmp(temp, "[0"))
|
||||
{
|
||||
// Returning to normal colour.
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
|
||||
}
|
||||
else if(!stricmp(temp, "[1"))
|
||||
{
|
||||
// White
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), TWHITE);
|
||||
}
|
||||
else if(sscanf(temp, "[%u;%u", &color1, &color2) == 2)
|
||||
{
|
||||
switch(color2)
|
||||
{
|
||||
case 32: // Green
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); // Yellow
|
||||
break;
|
||||
|
||||
default: // Unknown
|
||||
// White
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char message[50];
|
||||
sprintf(message, "Unknown color code: %s", temp);
|
||||
MessageBox(0, message, message, MB_OK);
|
||||
}
|
||||
}
|
||||
|
||||
putchar(*p);
|
||||
++c;
|
||||
++p;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
0
win/colours.h.orig
Normal file
0
win/colours.h.orig
Normal file
454
win/configure.cpp
Normal file
454
win/configure.cpp
Normal file
@ -0,0 +1,454 @@
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <string>
|
||||
#include "colours.h"
|
||||
|
||||
using namespace std;
|
||||
void Run();
|
||||
void Banner();
|
||||
void WriteCompileModules();
|
||||
void WriteCompileCommands();
|
||||
|
||||
/* detects if we are running windows xp or higher (5.1) */
|
||||
bool iswinxp()
|
||||
{
|
||||
OSVERSIONINFO vi;
|
||||
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||
GetVersionEx(&vi);
|
||||
if(vi.dwMajorVersion > 5)
|
||||
return true;
|
||||
|
||||
if(vi.dwMajorVersion >= 5 && vi.dwMinorVersion >= 1)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int get_int_option(const char * text, int def)
|
||||
{
|
||||
static char buffer[500];
|
||||
int ret;
|
||||
printf_c("%s\n[\033[1;32m%u\033[0m] -> ", text, def);
|
||||
fgets(buffer, 500, stdin);
|
||||
if(sscanf(buffer, "%u", &ret) != 1)
|
||||
ret = def;
|
||||
|
||||
printf("\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool get_bool_option(const char * text, bool def)
|
||||
{
|
||||
static char buffer[500];
|
||||
char ret[100];
|
||||
printf_c("%s [\033[1;32m%c\033[0m] -> ", text, def ? 'y' : 'n');
|
||||
fgets(buffer, 500, stdin);
|
||||
if(sscanf(buffer, "%s", ret) != 1)
|
||||
strcpy(ret, def ? "y" : "n");
|
||||
|
||||
printf("\n");
|
||||
return !strncmp(ret, "y", 1);
|
||||
}
|
||||
|
||||
void get_string_option(const char * text, char * def, char * buf)
|
||||
{
|
||||
static char buffer[500];
|
||||
printf_c("%s\n[\033[1;32m%s\033[0m] -> ", text, def);
|
||||
fgets(buffer, 500, stdin);
|
||||
if(sscanf(buffer, "%s", buf) != 1)
|
||||
strcpy(buf, def);
|
||||
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
// escapes a string for use in a c++ file
|
||||
bool escape_string(char * str, size_t size)
|
||||
{
|
||||
size_t len = strlen(str);
|
||||
char * d_str = (char*)malloc(len * 2);
|
||||
|
||||
size_t i = 0;
|
||||
size_t j = 0;
|
||||
|
||||
for(; i < len; ++i)
|
||||
{
|
||||
if(str[i] == '\\')
|
||||
{
|
||||
d_str[j++] = '\\';
|
||||
d_str[j++] = '\\';
|
||||
}
|
||||
else
|
||||
{
|
||||
d_str[j++] = str[i];
|
||||
}
|
||||
}
|
||||
|
||||
d_str[j++] = 0;
|
||||
|
||||
if(j > size)
|
||||
{
|
||||
free(d_str);
|
||||
return false;
|
||||
}
|
||||
|
||||
strcpy(str, d_str);
|
||||
free(d_str);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* gets the svn revision */
|
||||
int get_svn_revision(char * buffer, size_t len)
|
||||
{
|
||||
/* again.. I am lazy :p cbf to pipe output of svn info to us, so i'll just read the file */
|
||||
/*
|
||||
8
|
||||
|
||||
dir
|
||||
7033
|
||||
*/
|
||||
char buf[1000];
|
||||
FILE * f = fopen("..\\.svn\\entries", "r");
|
||||
if(!f) goto bad_rev;
|
||||
|
||||
if(!fgets(buf, 1000, f)) goto bad_rev;
|
||||
if(!fgets(buf, 1000, f)) goto bad_rev;
|
||||
if(!fgets(buf, 1000, f)) goto bad_rev;
|
||||
if(!fgets(buf, 1000, f)) goto bad_rev;
|
||||
int rev = atoi(buf);
|
||||
if(rev == 0) goto bad_rev;
|
||||
sprintf(buffer, "%u", rev);
|
||||
fclose(f);
|
||||
return rev;
|
||||
|
||||
bad_rev:
|
||||
strcpy(buffer, "non-svn");
|
||||
if(f) fclose(f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int __stdcall WinMain(IN HINSTANCE hInstance, IN HINSTANCE hPrevInstance, IN LPSTR lpCmdLine, IN int nShowCmd )
|
||||
{
|
||||
// Skip if configure is already-existant.
|
||||
FILE * f = fopen("inspircd_config.h", "r");
|
||||
if(f)
|
||||
{
|
||||
fclose(f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
AllocConsole();
|
||||
|
||||
// pipe standard handles to this console
|
||||
freopen("CONIN$", "r", stdin);
|
||||
freopen("CONOUT$", "w", stdout);
|
||||
freopen("CONOUT$", "w", stderr);
|
||||
|
||||
Banner();
|
||||
Run();
|
||||
WriteCompileCommands();
|
||||
WriteCompileModules();
|
||||
FreeConsole();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Banner()
|
||||
{
|
||||
printf_c("\nWelcome to the \033[1mInspIRCd\033[0m Configuration program! (\033[1minteractive mode\033[0m)\n"
|
||||
"\033[1mPackage maintainers: Type ./configure --help for non-interactive help\033[0m\n\n");
|
||||
printf_c("*** If you are unsure of any of these values, leave it blank for ***\n"
|
||||
"*** standard settings that will work, and your server will run ***\n"
|
||||
"*** using them. Please consult your IRC network admin if in doubt. ***\n\n"
|
||||
"Press \033[1m<RETURN>\033[0m to accept the default for any option, or enter\n"
|
||||
"a new value. Please note: You will \033[1mHAVE\033[0m to read the docs\n"
|
||||
"dir, otherwise you won't have a config file!\n\n");
|
||||
|
||||
}
|
||||
|
||||
void Run()
|
||||
{
|
||||
int max_fd = 1024;
|
||||
bool use_iocp = false;
|
||||
bool support_ip6links = false;
|
||||
char mod_path[MAX_PATH];
|
||||
char config_file[MAX_PATH];
|
||||
char library_dir[MAX_PATH];
|
||||
char base_path[MAX_PATH];
|
||||
char bin_dir[MAX_PATH];
|
||||
char revision_text[MAX_PATH];
|
||||
|
||||
int max_clients = 1024;
|
||||
int nicklen = 31;
|
||||
int chanlen = 64;
|
||||
int modechanges = 20;
|
||||
int identlen = 12;
|
||||
int quitlen = 255;
|
||||
int topiclen = 500;
|
||||
int kicklen = 255;
|
||||
int rllen = 128;
|
||||
int awaylen = 200;
|
||||
int revision = get_svn_revision(revision_text, MAX_PATH);
|
||||
char version[514];
|
||||
|
||||
// grab version
|
||||
FILE * fI = fopen("..\\src\\version.sh", "r");
|
||||
if(fI)
|
||||
{
|
||||
fgets(version, 514, fI);
|
||||
fgets(version, 514, fI);
|
||||
char * p2 = version;
|
||||
while(*p2 != '\"')
|
||||
++p2;
|
||||
++p2;
|
||||
strcpy(version, p2);
|
||||
p2 = version;
|
||||
while(*p2 != '\"')
|
||||
++p2;
|
||||
*p2 = 0;
|
||||
fclose(fI);
|
||||
}
|
||||
else
|
||||
strcpy(version, "InspIRCD-Unknown");
|
||||
printf_c("Your operating system is: \033[1;32mwindows \033[0m\n");
|
||||
printf_c("InspIRCd revision ID: \033[1;32m%s \033[0m\n\n", revision ? revision_text : "(Non-SVN build)");
|
||||
|
||||
max_fd = get_int_option("What is the maximum file descriptor count you would like to allow?", 1024);
|
||||
|
||||
// detect windows
|
||||
if(iswinxp())
|
||||
{
|
||||
printf_c("You are running Windows XP or above, and IOCP support is most likely available.\n"
|
||||
"This removes the socket number limitation of select and is much more efficent.\n"
|
||||
"If you are unsure, answer yes.\n\n");
|
||||
|
||||
use_iocp = get_bool_option("Do you want to use the IOCP implementation?", true);
|
||||
}
|
||||
|
||||
support_ip6links = get_bool_option("\nYou have chosen to build an \033[1;32mIPV4-only\033[0m server.\nWould you like to enable support for linking to IPV6-enabled InspIRCd servers?\nIf you are using a recent operating system and are unsure, answer yes.\nIf you answer 'no' here, your InspIRCd server will be unable\nto parse IPV6 addresses (e.g. for CIDR bans)",
|
||||
true);
|
||||
|
||||
printf_c("\033[1mAll paths are relative to the binary directory.\033[0m\n");
|
||||
get_string_option("In what directory do you wish to install the InspIRCd base?", "..", base_path);
|
||||
get_string_option("In what directory are the configuration files?", "../conf", config_file);
|
||||
get_string_option("In what directory are the modules to be compiled to?", "../modules", mod_path);
|
||||
get_string_option("In what directory is the IRCd binary to be placed?", ".", bin_dir);
|
||||
get_string_option("In what directory are the IRCd libraries to be placed?", "../lib", library_dir);
|
||||
|
||||
printf_c("The following questions will ask you for various figures relating\n"
|
||||
"To your IRCd install. Please note that these should usually be left\n"
|
||||
"as defaults unless you have a real reason to change them. If they\n"
|
||||
"changed, then the values must be identical on all servers on your\n"
|
||||
"network, or malfunctions and/or crashes may occur, with the exception\n"
|
||||
"of the 'maximum number of clients' setting which may be different on\n"
|
||||
"different servers on the network.\n\n");
|
||||
|
||||
|
||||
max_clients = get_int_option("Please enter the maximum number of clients at any one time?", 1024);
|
||||
nicklen = get_int_option("Please enter the maximum length of nicknames?", 31);
|
||||
chanlen = get_int_option("Please enter the maximum length of channel names?", 64);
|
||||
modechanges = get_int_option("Please enter the maximum number of mode changes in one line?", 20);
|
||||
identlen = get_int_option("Please enter the maximum length of an ident (username)?", 12);
|
||||
quitlen = get_int_option("Please enter the maximum length of a quit message?", 255);
|
||||
topiclen = get_int_option("Please enter the maximum length of a channel topic?", 307);
|
||||
kicklen = get_int_option("Please enter the maximum length of a kick message?", 255);
|
||||
rllen = get_int_option("Please enter the maximum length of a GECOS (real name)?", 128);
|
||||
awaylen = get_int_option("Please enter the maximum length of an away message?", 200);
|
||||
|
||||
printf_c("\n\033[1;32mPre-build configuration is complete!\n\n"); sc(TNORMAL);
|
||||
|
||||
// dump all the options back out
|
||||
printf_c("\033[0mBase install path:\033[1;32m %s\n", base_path);
|
||||
printf_c("\033[0mConfig path:\033[1;32m %s\n", config_file);
|
||||
printf_c("\033[0mModule path:\033[1;32m %s\n", mod_path);
|
||||
printf_c("\033[0mLibrary path:\033[1;32m %s\n", library_dir);
|
||||
printf_c("\033[0mSocket Engine:\033[1;32m %s\n", use_iocp ? "iocp" : "select");
|
||||
printf_c("\033[0mMax file descriptors:\033[1;32m %u\n", max_fd);
|
||||
printf_c("\033[0mMax connections:\033[1;32m %u\n", max_clients);
|
||||
printf_c("\033[0mMax nickname length:\033[1;32m %u\n", nicklen);
|
||||
printf_c("\033[0mMax channel length:\033[1;32m %u\n", chanlen);
|
||||
printf_c("\033[0mMax mode length:\033[1;32m %u\n", modechanges);
|
||||
printf_c("\033[0mMax ident length:\033[1;32m %u\n", identlen);
|
||||
printf_c("\033[0mMax quit length:\033[1;32m %u\n", quitlen);
|
||||
printf_c("\033[0mMax topic length:\033[1;32m %u\n", topiclen);
|
||||
printf_c("\033[0mMax kick length:\033[1;32m %u\n", kicklen);
|
||||
printf_c("\033[0mMax name length:\033[1;32m %u\n", rllen);
|
||||
printf_c("\033[0mMax away length:\033[1;32m %u\n", awaylen);
|
||||
printf("\n"); sc(TNORMAL);
|
||||
if(get_bool_option("Are these settings correct?", true) == false)
|
||||
{
|
||||
Run();
|
||||
return;
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
// escape the pathes
|
||||
escape_string(config_file, MAX_PATH);
|
||||
escape_string(mod_path, MAX_PATH);
|
||||
escape_string(library_dir, MAX_PATH);
|
||||
|
||||
printf("\nWriting inspircd_config.h...");
|
||||
FILE * f = fopen("inspircd_config.h", "w");
|
||||
fprintf(f, "/* Auto generated by configure, do not modify! */\n");
|
||||
fprintf(f, "#ifndef __CONFIGURATION_AUTO__\n");
|
||||
fprintf(f, "#define __CONFIGURATION_AUTO__\n\n");
|
||||
if(use_iocp)
|
||||
fprintf(f, "#define CONFIG_USE_IOCP 1\n\n");
|
||||
|
||||
fprintf(f, "#define CONFIG_FILE \"%s/inspircd.conf\"\n", config_file);
|
||||
fprintf(f, "#define MOD_PATH \"%s\"\n", mod_path);
|
||||
fprintf(f, "#define MAX_DESCRIPTORS %u\n", max_fd);
|
||||
fprintf(f, "#define MAXCLIENTS %u\n", max_clients);
|
||||
fprintf(f, "#define MAXCLIENTS_S \"%u\"\n", max_clients);
|
||||
fprintf(f, "#define SOMAXCONN_S \"128\"\n");
|
||||
fprintf(f, "#define NICKMAX %u\n", nicklen+1);
|
||||
fprintf(f, "#define CHANMAX %u\n", chanlen+1);
|
||||
fprintf(f, "#define MAXMODES %u\n", modechanges);
|
||||
fprintf(f, "#define IDENTMAX %u\n", identlen);
|
||||
fprintf(f, "#define MAXQUIT %u\n", quitlen);
|
||||
fprintf(f, "#define MAXTOPIC %u\n", topiclen);
|
||||
fprintf(f, "#define MAXKICK %u\n", kicklen);
|
||||
fprintf(f, "#define MAXGECOS %u\n", rllen);
|
||||
fprintf(f, "#define MAXAWAY %u\n", awaylen);
|
||||
fprintf(f, "#define LIBRARYDIR \"%s\"\n", library_dir);
|
||||
fprintf(f, "#define VERSION \"%s\"\n", version);
|
||||
fprintf(f, "#define REVISION \"%s\"\n", revision_text);
|
||||
if(support_ip6links)
|
||||
fprintf(f, "#define SUPPORT_IP6LINKS 1\n");
|
||||
|
||||
OSVERSIONINFO vi;
|
||||
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
||||
GetVersionEx(&vi);
|
||||
fprintf(f, "#define SYSTEM \"Windows %u.%u.%u %s\"\n", vi.dwMajorVersion, vi.dwMinorVersion, vi.dwBuildNumber, vi.szCSDVersion);
|
||||
fprintf(f, "#define MAXBUF 514\n");
|
||||
|
||||
fprintf(f, "\n#include \"inspircd_win32wrapper.h\"\n\n");
|
||||
fprintf(f, "#endif\n\n");
|
||||
fclose(f);
|
||||
|
||||
sc(TGREEN); printf(" done\n"); sc(TNORMAL);
|
||||
printf("Writing inspircd_se_config.h...");
|
||||
|
||||
f = fopen("inspircd_se_config.h", "w");
|
||||
fprintf(f, "/* Auto generated by configure, do not modify or commit to svn! */\n");
|
||||
fprintf(f, "#ifndef __CONFIGURATION_SOCKETENGINE__\n");
|
||||
fprintf(f, "#define __CONFIGURATION_SOCKETENGINE__\n\n");
|
||||
fprintf(f, "#include \"socketengine_%s.h\"\n\n", use_iocp ? "iocp" : "select");
|
||||
fprintf(f, "#endif\n\n");
|
||||
fclose(f);
|
||||
|
||||
sc(TGREEN); printf(" done\n"); sc(TNORMAL);
|
||||
printf("Writing command and module compilation scripts...");
|
||||
WriteCompileCommands();
|
||||
WriteCompileModules();
|
||||
sc(TGREEN); printf(" done\n"); sc(TNORMAL);
|
||||
|
||||
printf("\nconfigure is done.. exiting!\n");
|
||||
}
|
||||
|
||||
void WriteCompileCommands()
|
||||
{
|
||||
char commands[300][100];
|
||||
int command_count = 0;
|
||||
printf("\n Finding Command Sources...\n");
|
||||
WIN32_FIND_DATA fd;
|
||||
HANDLE fh = FindFirstFile("..\\src\\cmd_*.cpp", &fd);
|
||||
if(fh == INVALID_HANDLE_VALUE)
|
||||
printf_c("\033[1;32m No command sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
|
||||
else
|
||||
{
|
||||
sc(TGREEN);
|
||||
do
|
||||
{
|
||||
strcpy(commands[command_count], fd.cFileName);
|
||||
commands[command_count][strlen(fd.cFileName) - 4] = 0;
|
||||
printf(" %s\n", commands[command_count]);
|
||||
++command_count;
|
||||
} while(FindNextFile(fh, &fd));
|
||||
sc(TNORMAL);
|
||||
}
|
||||
|
||||
// Write our spiffy new makefile :D
|
||||
// I am such a lazy fucker :P
|
||||
#ifdef _DEBUG
|
||||
FILE * f = fopen("..\\src\\commands.mak", "w");
|
||||
#else
|
||||
FILE * f = fopen("..\\src\\commands-release.mak", "w");
|
||||
#endif
|
||||
|
||||
fprintf(f, "# Generated at SOMETIME\n");
|
||||
fprintf(f, "!include <win32.mak>\n\n");
|
||||
fprintf(f, "all: ");
|
||||
|
||||
// dump modules.. first time :)
|
||||
for(int i = 0; i < command_count; ++i)
|
||||
fprintf(f, "%s.so ", commands[i]);
|
||||
|
||||
fprintf(f, "\n.cpp.obj:\n");
|
||||
#ifdef _DEBUG
|
||||
fprintf(f, " $(cc) /nologo /LD /Od /I \".\" /I \"../include\" /I \"../include/modes\" /I \"../include/commands\" /I \"../win\" /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /Gm /EHsc /GS /RTC1 /MTd /Fo\"Debug/\" /Fd\"Debug/vc70.pdb\" /W3 /Wp64 /Zi /TP $*.cpp ..\\win\\inspircd_memory_functions.cpp /link ..\\bin\\debug\\bin\\inspircd.lib /OUT:\"$*.so\"\n\n");
|
||||
#else
|
||||
fprintf(f, " $(cc) /nologo /LD /Od /I \".\" /I \"../include\" /I \"../include/modes\" /I \"../include/commands\" /I \"../win\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /EHsc /GS /MT /Fo\"Release/\" /Fd\"Release/vc70.pdb\" /W3 /Wp64 /Zi /TP $*.cpp ..\\win\\inspircd_memory_functions.cpp /link ..\\bin\\release\\bin\\inspircd.lib /OUT:\"$*.so\"\n\n");
|
||||
#endif
|
||||
|
||||
|
||||
// dump modules.. again the second and last time :)
|
||||
for(int i = 0; i < command_count; ++i)
|
||||
fprintf(f, "%s.so : %s.obj\n", commands[i], commands[i]);
|
||||
|
||||
fprintf(f, "\n");
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
void WriteCompileModules()
|
||||
{
|
||||
char modules[300][100];
|
||||
int module_count = 0;
|
||||
|
||||
printf("Finding Modules...\n");
|
||||
WIN32_FIND_DATA fd;
|
||||
HANDLE fh = FindFirstFile("..\\src\\modules\\m_*.cpp", &fd);
|
||||
if(fh == INVALID_HANDLE_VALUE)
|
||||
printf_c("\033[1;32m No module sources could be found! This \033[1m*could*\033[1;32m be a bad thing.. :P\033[0m");
|
||||
else
|
||||
{
|
||||
sc(TGREEN);
|
||||
do
|
||||
{
|
||||
strcpy(modules[module_count], fd.cFileName);
|
||||
modules[module_count][strlen(fd.cFileName) - 4] = 0;
|
||||
printf(" %s\n", modules[module_count]);
|
||||
++module_count;
|
||||
} while(FindNextFile(fh, &fd));
|
||||
sc(TNORMAL);
|
||||
}
|
||||
|
||||
// Write our spiffy new makefile :D
|
||||
// I am such a lazy fucker :P
|
||||
#ifdef _DEBUG
|
||||
FILE * f = fopen("..\\src\\modules\\modules.mak", "w");
|
||||
#else
|
||||
FILE * f = fopen("..\\src\\modules\\modules-release.mak", "w");
|
||||
#endif
|
||||
|
||||
fprintf(f, "# Generated at SOMETIME\n");
|
||||
fprintf(f, "!include <win32.mak>\n\n");
|
||||
fprintf(f, "all: ");
|
||||
|
||||
// dump modules.. first time :)
|
||||
for(int i = 0; i < module_count; ++i)
|
||||
fprintf(f, "%s.so ", modules[i]);
|
||||
|
||||
fprintf(f, "\n.cpp.obj:\n");
|
||||
#ifdef _DEBUG
|
||||
fprintf(f, " $(cc) /nologo /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/modules\" /I \"../../win\" /D \"WIN32\" /D \"_DEBUG\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /Gm /EHsc /GS /RTC1 /MTd /Fo\"Debug/\" /Fd\"Debug/vc70.pdb\" /W3 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\debug\\bin\\inspircd.lib ws2_32.lib /OUT:\"$*.so\"\n\n");
|
||||
#else
|
||||
fprintf(f, " $(cc) /nologo /LD /Od /I \".\" /I \"../../include\" /I \"../../include/modes\" /I \"../../include/modules\" /I \"../../win\" /D \"WIN32\" /D \"_CONSOLE\" /D \"_MBCS\" /D \"DLL_BUILD\" /EHsc /GS /MT /Fo\"Release/\" /Fd\"Release/vc70.pdb\" /W3 /Wp64 /Zi /TP $*.cpp ..\\..\\win\\inspircd_memory_functions.cpp /link ..\\..\\bin\\release\\bin\\inspircd.lib ws2_32.lib /OUT:\"$*.so\"\n\n");
|
||||
#endif
|
||||
|
||||
|
||||
// dump modules.. again the second and last time :)
|
||||
for(int i = 0; i < module_count; ++i)
|
||||
fprintf(f, "%s.so : %s.obj\n", modules[i], modules[i]);
|
||||
|
||||
fprintf(f, "\n");
|
||||
fclose(f);
|
||||
}
|
0
win/configure.cpp.orig
Normal file
0
win/configure.cpp.orig
Normal file
229
win/configureVC71.vcproj
Normal file
229
win/configureVC71.vcproj
Normal file
@ -0,0 +1,229 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="configure"
|
||||
ProjectGUID="{B922B569-727E-4EB0-827A-04E133A91DE7}"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="."
|
||||
IntermediateDirectory="Debug_configure"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="5"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/configure.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/configure.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="."
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/configure.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug-Auto|Win32"
|
||||
OutputDirectory="."
|
||||
IntermediateDirectory="Debug-Auto_configure"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="5"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="4"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/configure.exe"
|
||||
LinkIncremental="2"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/configure.pdb"
|
||||
SubSystem="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release-Auto|Win32"
|
||||
OutputDirectory="."
|
||||
IntermediateDirectory="Release-Auto"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
RuntimeLibrary="4"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="$(OutDir)/configure.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||
<File
|
||||
RelativePath=".\colours.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\configure.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
0
win/configureVC71.vcproj.orig
Normal file
0
win/configureVC71.vcproj.orig
Normal file
53
win/inspircdVC71.sln
Normal file
53
win/inspircdVC71.sln
Normal file
@ -0,0 +1,53 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 8.00
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inspircd", "inspircdVC71.vcproj", "{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7} = {B922B569-727E-4EB0-827A-04E133A91DE7}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "configure", "configureVC71.vcproj", "{B922B569-727E-4EB0-827A-04E133A91DE7}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "m_spanningtree", "m_spanningtreeVC71.vcproj", "{1EC86B60-AB2A-4984-8A7E-0422C15601E0}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8} = {FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfiguration) = preSolution
|
||||
Debug = Debug
|
||||
Debug-Auto = Debug-Auto
|
||||
Release = Release
|
||||
Release-Auto = Release-Auto
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfiguration) = postSolution
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Debug.ActiveCfg = Debug|Win32
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Debug.Build.0 = Debug|Win32
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Debug-Auto.ActiveCfg = Debug-Auto|Win32
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Debug-Auto.Build.0 = Debug-Auto|Win32
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Release.ActiveCfg = Release|Win32
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Release.Build.0 = Release|Win32
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Release-Auto.ActiveCfg = Release-Auto|Win32
|
||||
{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}.Release-Auto.Build.0 = Release-Auto|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Debug.ActiveCfg = Debug|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Debug.Build.0 = Debug|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Debug-Auto.ActiveCfg = Debug-Auto|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Debug-Auto.Build.0 = Debug-Auto|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Release.ActiveCfg = Release|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Release.Build.0 = Release|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Release-Auto.ActiveCfg = Release-Auto|Win32
|
||||
{B922B569-727E-4EB0-827A-04E133A91DE7}.Release-Auto.Build.0 = Release-Auto|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Debug.ActiveCfg = Debug|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Debug.Build.0 = Debug|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Debug-Auto.ActiveCfg = Debug-Auto|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Debug-Auto.Build.0 = Debug-Auto|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Release.ActiveCfg = Release|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Release.Build.0 = Release|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Release-Auto.ActiveCfg = Release-Auto|Win32
|
||||
{1EC86B60-AB2A-4984-8A7E-0422C15601E0}.Release-Auto.Build.0 = Release-Auto|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityAddIns) = postSolution
|
||||
EndGlobalSection
|
||||
EndGlobal
|
0
win/inspircdVC71.sln.orig
Normal file
0
win/inspircdVC71.sln.orig
Normal file
515
win/inspircdVC71.vcproj
Normal file
515
win/inspircdVC71.vcproj
Normal file
@ -0,0 +1,515 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="inspircd"
|
||||
ProjectGUID="{FE82A6FC-41C7-4CB1-AA46-6DBCB6C682C8}"
|
||||
RootNamespace="inspircd"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="..\bin\debug\bin"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".;../include;../../include;../include/modes;../include/commands;../../include/modes;../../include/commands;../win"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib mswsock.lib"
|
||||
ShowProgress="0"
|
||||
OutputFile="$(OutDir)/inspircd.exe"
|
||||
LinkIncremental="1"
|
||||
IgnoreDefaultLibraryNames=""
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/inspircd.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
FixedBaseAddress="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="..\bin\release\bin"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=".;../include;../../include;../include/modes;../include/commands;../../include/modes;../../include/commands;../win"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib mswsock.lib"
|
||||
OutputFile="$(OutDir)/inspircd.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug-Auto|Win32"
|
||||
OutputDirectory="..\bin\debug\bin"
|
||||
IntermediateDirectory="Debug-Auto"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=".;../include;../../include;../include/modes;../include/commands;../../include/modes;../../include/commands;../win"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="5"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib mswsock.lib"
|
||||
ShowProgress="0"
|
||||
OutputFile="$(OutDir)/inspircd.exe"
|
||||
LinkIncremental="1"
|
||||
IgnoreDefaultLibraryNames=""
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/inspircd.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
FixedBaseAddress="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="@echo off
|
||||
echo Compiling Command Modules...
|
||||
cd $(InputDir)
|
||||
cd ..\src
|
||||
mkdir Debug
|
||||
IF NOT EXIST "..\bin\debug\lib\cmd_admin.so" nmake -f commands.mak
|
||||
move *.so ..\bin\debug\lib
|
||||
move *.pdb ..\bin\debug\lib
|
||||
move *.lib ..\bin\debug\lib
|
||||
del *.exp
|
||||
del *.ilk
|
||||
echo Compiling Modules...
|
||||
cd modules
|
||||
mkdir Debug
|
||||
IF NOT EXIST "..\..\bin\debug\modules\m_alias.so" nmake -f modules.mak
|
||||
move *.so ..\..\bin\debug\modules
|
||||
move *.pdb ..\..\bin\debug\modules
|
||||
move *.lib ..\..\bin\debug\modules
|
||||
del *.exp
|
||||
del *.ilk
|
||||
"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
Description="Running Configure...."
|
||||
CommandLine="$(InputDir)\configure.exe"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release-Auto|Win32"
|
||||
OutputDirectory="..\bin\release\bin"
|
||||
IntermediateDirectory="Release-Auto"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=".;../include;../../include;../include/modes;../include/commands;../../include/modes;../../include/commands;../win"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
|
||||
RuntimeLibrary="4"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib mswsock.lib"
|
||||
OutputFile="$(OutDir)/inspircd.exe"
|
||||
LinkIncremental="1"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
CommandLine="@echo off
|
||||
echo Compiling Command Modules...
|
||||
cd $(InputDir)
|
||||
cd ..\src
|
||||
mkdir release
|
||||
IF NOT EXIST "..\bin\release\lib\cmd_admin.so" nmake -f commands.mak
|
||||
move *.so ..\bin\release\lib
|
||||
move *.pdb ..\bin\release\lib
|
||||
move *.lib ..\bin\release\lib
|
||||
del *.exp
|
||||
del *.ilk
|
||||
echo Compiling Modules...
|
||||
cd modules
|
||||
mkdir release
|
||||
IF NOT EXIST "..\..\bin\release\modules\m_alias.so" nmake -f modules.mak
|
||||
move *.so ..\..\bin\release\modules
|
||||
move *.pdb ..\..\bin\release\modules
|
||||
move *.lib ..\..\bin\release\modules
|
||||
del *.exp
|
||||
del *.ilk
|
||||
"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
Description="Running Configure...."
|
||||
CommandLine="$(InputDir)\configure.exe"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||
<File
|
||||
RelativePath="..\src\base.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\channels.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\command_parse.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\commands.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\configreader.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\cull_list.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\dns.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\dynamic.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\hashcomp.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\helperfuncs.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\inspircd.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\inspsocket.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\inspstring.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\mode.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\snomasks.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\socket.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\socketengine.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\socketengine_iocp.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\timer.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\userprocess.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\users.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\version.sh">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\wildcard.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\xline.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Config Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||
<File
|
||||
RelativePath=".\inspircd_config.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\inspircd_memory_functions.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\inspircd_se_config.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\inspircd_win32wrapper.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath=".\inspircd_win32wrapper.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath="..\include\base.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\channels.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\command_parse.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\configreader.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\connection.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\ctables.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\cull_list.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\dns.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\dynamic.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\exitcodes.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\globals.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\hash_map.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\hashcomp.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\inspircd.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\inspircd_config.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\inspsocket.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\inspstring.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\mode.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\modules.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\snomasks.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\socket.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\socketengine.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\socketengine_iocp.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\timer.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\typedefs.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\u_listmode.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\users.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\wildcard.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\include\xline.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="modes"
|
||||
Filter="">
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_b.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_h.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_i.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_k.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_l.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_m.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_n.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_o.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_p.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_s.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_t.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\cmode_v.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\umode_i.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\umode_n.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\umode_o.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\umode_s.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modes\umode_w.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
0
win/inspircdVC71.vcproj.orig
Normal file
0
win/inspircdVC71.vcproj.orig
Normal file
32
win/inspircd_config.h
Normal file
32
win/inspircd_config.h
Normal file
@ -0,0 +1,32 @@
|
||||
/* Auto generated by configure, do not modify! */
|
||||
#ifndef __CONFIGURATION_AUTO__
|
||||
#define __CONFIGURATION_AUTO__
|
||||
|
||||
#define CONFIG_USE_IOCP 1
|
||||
|
||||
#define CONFIG_FILE "../conf/inspircd.conf"
|
||||
#define MOD_PATH "../modules"
|
||||
#define MAX_DESCRIPTORS 1024
|
||||
#define MAXCLIENTS 1024
|
||||
#define MAXCLIENTS_S "1024"
|
||||
#define SOMAXCONN_S "128"
|
||||
#define NICKMAX 32
|
||||
#define CHANMAX 65
|
||||
#define MAXMODES 20
|
||||
#define IDENTMAX 12
|
||||
#define MAXQUIT 255
|
||||
#define MAXTOPIC 307
|
||||
#define MAXKICK 255
|
||||
#define MAXGECOS 128
|
||||
#define MAXAWAY 200
|
||||
#define LIBRARYDIR "../lib"
|
||||
#define VERSION "InspIRCd-1.1.7+Mozarella"
|
||||
#define REVISION "7042"
|
||||
#define SUPPORT_IP6LINKS 1
|
||||
#define SYSTEM "Windows 5.2.3790 Service Pack 1"
|
||||
#define MAXBUF 514
|
||||
|
||||
#include "inspircd_win32wrapper.h"
|
||||
|
||||
#endif
|
||||
|
0
win/inspircd_config.h.orig
Normal file
0
win/inspircd_config.h.orig
Normal file
12
win/inspircd_memory_functions.cpp
Normal file
12
win/inspircd_memory_functions.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
// Use the global heap for this process for all allocate/free operations.
|
||||
#include "inspircd_win32wrapper.h"
|
||||
|
||||
void * ::operator new(size_t iSize)
|
||||
{
|
||||
return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, iSize); // zero memory for unix compatibility
|
||||
}
|
||||
|
||||
void ::operator delete(void * ptr)
|
||||
{
|
||||
HeapFree(GetProcessHeap(), 0, ptr);
|
||||
}
|
0
win/inspircd_memory_functions.cpp.orig
Normal file
0
win/inspircd_memory_functions.cpp.orig
Normal file
8
win/inspircd_se_config.h
Normal file
8
win/inspircd_se_config.h
Normal file
@ -0,0 +1,8 @@
|
||||
/* Auto generated by configure, do not modify or commit to svn! */
|
||||
#ifndef __CONFIGURATION_SOCKETENGINE__
|
||||
#define __CONFIGURATION_SOCKETENGINE__
|
||||
|
||||
#include "socketengine_iocp.h"
|
||||
|
||||
#endif
|
||||
|
0
win/inspircd_se_config.h.orig
Normal file
0
win/inspircd_se_config.h.orig
Normal file
375
win/inspircd_win32wrapper.cpp
Normal file
375
win/inspircd_win32wrapper.cpp
Normal file
@ -0,0 +1,375 @@
|
||||
#include "inspircd_win32wrapper.h"
|
||||
#include "inspircd.h"
|
||||
#include <string>
|
||||
#include <errno.h>
|
||||
#include <assert.h>
|
||||
using namespace std;
|
||||
|
||||
#ifndef INADDR_NONE
|
||||
#define INADDR_NONE 0xffffffff
|
||||
#endif
|
||||
|
||||
HANDLE hIPCPipe;
|
||||
|
||||
int inet_aton(const char *cp, struct in_addr *addr)
|
||||
{
|
||||
unsigned long ip = inet_addr(cp);
|
||||
addr->s_addr = ip;
|
||||
return (addr->s_addr == INADDR_NONE) ? 0 : 1;
|
||||
}
|
||||
|
||||
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
|
||||
{
|
||||
|
||||
if (af == AF_INET)
|
||||
{
|
||||
struct sockaddr_in in;
|
||||
memset(&in, 0, sizeof(in));
|
||||
in.sin_family = AF_INET;
|
||||
memcpy(&in.sin_addr, src, sizeof(struct in_addr));
|
||||
getnameinfo((struct sockaddr *)&in, sizeof(struct
|
||||
sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST);
|
||||
return dst;
|
||||
}
|
||||
else if (af == AF_INET6)
|
||||
{
|
||||
struct sockaddr_in6 in;
|
||||
memset(&in, 0, sizeof(in));
|
||||
in.sin6_family = AF_INET6;
|
||||
memcpy(&in.sin6_addr, src, sizeof(struct in_addr6));
|
||||
getnameinfo((struct sockaddr *)&in, sizeof(struct
|
||||
sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST);
|
||||
return dst;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int geteuid()
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
int inet_pton(int af, const char *src, void *dst)
|
||||
{
|
||||
sockaddr_in sa;
|
||||
int len = sizeof(SOCKADDR);
|
||||
int rv = WSAStringToAddress((LPSTR)src, af, NULL, (LPSOCKADDR)&sa, &len);
|
||||
memcpy(dst, &sa.sin_addr, sizeof(struct in_addr));
|
||||
return rv;
|
||||
}
|
||||
|
||||
char * strtok_r(char *_String, const char *_Control, char **_Context)
|
||||
{
|
||||
unsigned char *str;
|
||||
const unsigned char *ctl = (const unsigned char*)_Control;
|
||||
unsigned char map[32];
|
||||
|
||||
if(_Context == 0 || !_Control)
|
||||
return 0;
|
||||
|
||||
if(!(_String != NULL || *_Context != NULL))
|
||||
return 0;
|
||||
|
||||
memset(map, 0, 32);
|
||||
|
||||
do {
|
||||
map[*ctl >> 3] |= (1 << (*ctl & 7));
|
||||
} while (*ctl++);
|
||||
|
||||
/* If string is NULL, set str to the saved
|
||||
* pointer (i.e., continue breaking tokens out of the string
|
||||
* from the last strtok call) */
|
||||
if (_String != NULL)
|
||||
{
|
||||
str = (unsigned char*)_String;
|
||||
}
|
||||
else
|
||||
{
|
||||
str = (unsigned char*)*_Context;
|
||||
}
|
||||
|
||||
/* Find beginning of token (skip over leading delimiters). Note that
|
||||
* there is no token iff this loop sets str to point to the terminal
|
||||
* null (*str == 0) */
|
||||
while ((map[*str >> 3] & (1 << (*str & 7))) && *str != 0)
|
||||
{
|
||||
str++;
|
||||
}
|
||||
|
||||
_String = (char*)str;
|
||||
|
||||
/* Find the end of the token. If it is not the end of the string,
|
||||
* put a null there. */
|
||||
for ( ; *str != 0 ; str++ )
|
||||
{
|
||||
if (map[*str >> 3] & (1 << (*str & 7)))
|
||||
{
|
||||
*str++ = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Update context */
|
||||
*_Context = (char*)str;
|
||||
|
||||
/* Determine if a token has been found. */
|
||||
if (_String == (char*)str)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
return _String;
|
||||
}
|
||||
}
|
||||
|
||||
void setcolor(int color_code)
|
||||
{
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color_code);
|
||||
}
|
||||
|
||||
DIR * opendir(const char * path)
|
||||
{
|
||||
std::string search_path = string(path) + "\\*.*";
|
||||
WIN32_FIND_DATA fd;
|
||||
HANDLE f = FindFirstFile(search_path.c_str(), &fd);
|
||||
if(f != INVALID_HANDLE_VALUE)
|
||||
{
|
||||
DIR * d = new DIR;
|
||||
memcpy(&d->find_data, &fd, sizeof(WIN32_FIND_DATA));
|
||||
d->find_handle = f;
|
||||
d->first = true;
|
||||
return d;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
dirent * readdir(DIR * handle)
|
||||
{
|
||||
if(handle->first)
|
||||
handle->first = false;
|
||||
else
|
||||
{
|
||||
if(!FindNextFile(handle->find_handle, &handle->find_data))
|
||||
return 0;
|
||||
}
|
||||
|
||||
strncpy(handle->dirent_pointer.d_name, handle->find_data.cFileName, MAX_PATH);
|
||||
return &handle->dirent_pointer;
|
||||
}
|
||||
|
||||
void closedir(DIR * handle)
|
||||
{
|
||||
FindClose(handle->find_handle);
|
||||
delete handle;
|
||||
}
|
||||
|
||||
const char * dlerror()
|
||||
{
|
||||
static char errormessage[500];
|
||||
DWORD error = GetLastError();
|
||||
SetLastError(0);
|
||||
if(error == 0)
|
||||
return 0;
|
||||
|
||||
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0, error, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)errormessage, 500, 0);
|
||||
return errormessage;
|
||||
}
|
||||
|
||||
int printf_c(const char * format, ...)
|
||||
{
|
||||
// Better hope we're not multithreaded, otherwise we'll have chickens crossing the road other side to get the to :P
|
||||
static char message[500];
|
||||
static char temp[10];
|
||||
int color1, color2;
|
||||
|
||||
/* parse arguments */
|
||||
va_list ap;
|
||||
va_start(ap, format);
|
||||
vsnprintf(message, 500, format, ap);
|
||||
va_end(ap);
|
||||
|
||||
/* search for unix-style escape sequences */
|
||||
int t;
|
||||
int c = 0;
|
||||
const char * p = message;
|
||||
while(*p != 0)
|
||||
{
|
||||
if(*p == '\033')
|
||||
{
|
||||
// Escape sequence -> copy into the temp buffer, and parse the color.
|
||||
p++;
|
||||
t = 0;
|
||||
while(*p != 'm')
|
||||
{
|
||||
temp[t++] = *p;
|
||||
++p;
|
||||
}
|
||||
|
||||
temp[t] = 0;
|
||||
p++;
|
||||
if(!stricmp(temp, "[0"))
|
||||
{
|
||||
// Returning to normal colour.
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
|
||||
}
|
||||
else if(sscanf(temp, "[%u;%u", &color1, &color2) == 2)
|
||||
{
|
||||
switch(color2)
|
||||
{
|
||||
case 32: // Green
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY); // Yellow
|
||||
break;
|
||||
|
||||
default: // Unknown
|
||||
// White
|
||||
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char message[50];
|
||||
sprintf("Unknown color code: %s", temp);
|
||||
MessageBox(0, message, message, MB_OK);
|
||||
}
|
||||
}
|
||||
|
||||
putchar(*p);
|
||||
++c;
|
||||
++p;
|
||||
}
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
int arg_counter = 1;
|
||||
char optarg[514];
|
||||
int getopt_long_only(int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind)
|
||||
{
|
||||
// burlex todo: handle the shortops, at the moment it only works with longopts.
|
||||
|
||||
if(___argc == 1 || arg_counter == ___argc) // No arguments (apart from filename)
|
||||
return -1;
|
||||
|
||||
const char * opt = ___argv[arg_counter];
|
||||
int return_val = 0;
|
||||
|
||||
// if we're not an option, return an error.
|
||||
if(strnicmp(opt, "--", 2) != 0)
|
||||
return 1;
|
||||
else
|
||||
opt += 2;
|
||||
|
||||
|
||||
// parse argument list
|
||||
int i = 0;
|
||||
for(; __longopts[i].name != 0; ++i)
|
||||
{
|
||||
if(!strnicmp(__longopts[i].name, opt, strlen(__longopts[i].name)))
|
||||
{
|
||||
// woot, found a valid argument =)
|
||||
char * par = 0;
|
||||
if((arg_counter + 1) != ___argc)
|
||||
{
|
||||
// grab the parameter from the next argument (if its not another argument)
|
||||
if(strnicmp(___argv[arg_counter+1], "--", 2) != 0)
|
||||
{
|
||||
arg_counter++; // Trash this next argument, we won't be needing it.
|
||||
par = ___argv[arg_counter];
|
||||
}
|
||||
}
|
||||
|
||||
// increment the argument for next time
|
||||
arg_counter++;
|
||||
|
||||
// determine action based on type
|
||||
if(__longopts[i].has_arg == required_argument && !par)
|
||||
{
|
||||
// parameter missing and its a required parameter option
|
||||
return 1;
|
||||
}
|
||||
|
||||
// store argument in optarg
|
||||
if(par)
|
||||
strncpy(optarg, par, 514);
|
||||
|
||||
if(__longopts[i].flag != 0)
|
||||
{
|
||||
// this is a variable, we have to set it if this argument is found.
|
||||
*__longopts[i].flag = 1;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(__longopts[i].val == -1 || par == 0)
|
||||
return 1;
|
||||
|
||||
return __longopts[i].val;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// return 1 (invalid argument)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* IPC Messages */
|
||||
#define IPC_MESSAGE_REHASH 1
|
||||
#define IPC_MESSAGE_DIE 2
|
||||
#define IPC_MESSAGE_RESTART 3
|
||||
|
||||
void InitIPC()
|
||||
{
|
||||
static DWORD buflen = 1024;
|
||||
static const char * pipename = "\\\\.\\mailslot\\Inspircd";
|
||||
hIPCPipe = CreateMailslot(pipename, buflen, 0, 0);
|
||||
if(hIPCPipe == INVALID_HANDLE_VALUE)
|
||||
printf("IPC Pipe could not be created. Are you sure you didn't start InspIRCd twice?\n");
|
||||
}
|
||||
|
||||
void CheckIPC(InspIRCd * Instance)
|
||||
{
|
||||
if(hIPCPipe == INVALID_HANDLE_VALUE)
|
||||
return;
|
||||
|
||||
DWORD bytes;
|
||||
DWORD action;
|
||||
|
||||
BOOL res = ReadFile(hIPCPipe, &action, sizeof(DWORD), &bytes, 0);
|
||||
if(!res)
|
||||
{
|
||||
if(GetLastError() != ERROR_SEM_TIMEOUT)
|
||||
printf("IPC Pipe Error %u: %s", GetLastError(), dlerror());
|
||||
return;
|
||||
}
|
||||
|
||||
printf("Got IPC Message: %u\n", action);
|
||||
switch(action)
|
||||
{
|
||||
case IPC_MESSAGE_REHASH:
|
||||
printf("Rehashing...\n");
|
||||
InspIRCd::Rehash(0);
|
||||
break;
|
||||
|
||||
case IPC_MESSAGE_DIE:
|
||||
printf("Shutting down...\n");
|
||||
InspIRCd::Exit(0);
|
||||
break;
|
||||
|
||||
case IPC_MESSAGE_RESTART:
|
||||
printf("Restarting...\n");
|
||||
Instance->Restart("IPC_MESSAGE_RESTART received by mailslot.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CloseIPC()
|
||||
{
|
||||
CloseHandle(hIPCPipe);
|
||||
}
|
||||
|
0
win/inspircd_win32wrapper.cpp.orig
Normal file
0
win/inspircd_win32wrapper.cpp.orig
Normal file
162
win/inspircd_win32wrapper.h
Normal file
162
win/inspircd_win32wrapper.h
Normal file
@ -0,0 +1,162 @@
|
||||
/* +------------------------------------+
|
||||
* | Inspire Internet Relay Chat Daemon |
|
||||
* +------------------------------------+
|
||||
*
|
||||
* InspIRCd: (C) 2002-2007 InspIRCd Development Team
|
||||
* See: http://www.inspircd.org/wiki/index.php/Credits
|
||||
*
|
||||
* This program is free but copyrighted software; see
|
||||
* the file COPYING for details.
|
||||
*
|
||||
* ---------------------------------------------------
|
||||
*/
|
||||
|
||||
/* Windows Port
|
||||
Wrapper Functions/Definitions
|
||||
By Burlex */
|
||||
|
||||
#ifndef INSPIRCD_WIN32WRAPPER_H
|
||||
#define INSPIRCD_WIN32WRAPPER_H
|
||||
|
||||
/* Define the WINDOWS macro. This means we're building on windows to the rest of the server.
|
||||
I think this is more reasonable than using WIN32, especially if we're gonna be doing 64-bit compiles */
|
||||
#define WINDOWS 1
|
||||
|
||||
/* Macros for exporting symbols - dependant on what is being compiled */
|
||||
|
||||
#ifdef DLL_BUILD
|
||||
#define CoreExport __declspec(dllimport)
|
||||
#define DllExport __declspec(dllexport)
|
||||
#else
|
||||
#define CoreExport __declspec(dllexport)
|
||||
#define DllExport __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
/* Say we're building on windows 2000. Anyone running something older than this
|
||||
* reeeeeeeally needs to upgrade! */
|
||||
|
||||
#define _WIN32_WINNT 0x500
|
||||
|
||||
/* Normal windows (platform-specific) includes */
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <direct.h>
|
||||
#include <process.h>
|
||||
#include <stdio.h>
|
||||
#include <algorithm>
|
||||
|
||||
/* strcasecmp is not defined on windows by default */
|
||||
#define strcasecmp stricmp
|
||||
|
||||
/* Error macros need to be redirected to winsock error codes */
|
||||
#define ETIMEDOUT WSAETIMEDOUT
|
||||
#define ECONNREFUSED WSAECONNREFUSED
|
||||
#define EADDRINUSE WSAEADDRINUSE
|
||||
#define EINPROGRESS WSAEWOULDBLOCK
|
||||
|
||||
/* Remember file descriptors are treated differently on windows ;) */
|
||||
__inline int close(int socket) { return closesocket(socket); }
|
||||
|
||||
/* Convert formatted (xxx.xxx.xxx.xxx) string to in_addr struct */
|
||||
CoreExport int inet_pton(int af, const char * src, void * dst);
|
||||
|
||||
/* Convert struct to formatted (xxx.xxx.xxx.xxx) string */
|
||||
CoreExport const char * inet_ntop(int af, const void * src, char * dst, socklen_t cnt);
|
||||
|
||||
/* Safe printf functions aren't defined in VC2003 */
|
||||
#define snprintf _snprintf
|
||||
#define vsnprintf _vsnprintf
|
||||
|
||||
/* Recursive token function doesn't exist in VC++ */
|
||||
CoreExport char * strtok_r(char *_String, const char *_Control, char **_Context);
|
||||
|
||||
/* Unix-style sleep (argument is in seconds) */
|
||||
__inline void sleep(int seconds) { Sleep(seconds * 1000); }
|
||||
|
||||
/* IPV4 only convert string to address struct */
|
||||
CoreExport int inet_aton(const char *, struct in_addr *);
|
||||
|
||||
/* Unix-style get running user id */
|
||||
CoreExport int geteuid();
|
||||
|
||||
/* Handles colors in printf */
|
||||
CoreExport int printf_c(const char * format, ...);
|
||||
|
||||
/* getopt() wrapper */
|
||||
# define no_argument 0
|
||||
# define required_argument 1
|
||||
# define optional_argument 2
|
||||
struct option
|
||||
{
|
||||
char *name;
|
||||
int has_arg;
|
||||
int *flag;
|
||||
int val;
|
||||
};
|
||||
extern char optarg[514];
|
||||
int getopt_long_only (int ___argc, char *const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind);
|
||||
|
||||
/* Accept Handlers */
|
||||
int CoreExport __accept_socket(SOCKET s, sockaddr * addr, int * addrlen, void * acceptevent);
|
||||
int CoreExport __getsockname(SOCKET s, sockaddr * name, int * namelen, void * acceptevent);
|
||||
|
||||
/* Module Loading */
|
||||
#define dlopen(path, state) (void*)LoadLibrary(path)
|
||||
#define dlsym(handle, export) (void*)GetProcAddress((HMODULE)handle, export)
|
||||
#define dlclose(handle) FreeLibrary((HMODULE)handle)
|
||||
const char * dlerror();
|
||||
|
||||
/* Unix-style directory searching functions */
|
||||
#define chmod(filename, mode)
|
||||
struct dirent
|
||||
{
|
||||
char d_name[MAX_PATH];
|
||||
};
|
||||
|
||||
struct DIR
|
||||
{
|
||||
dirent dirent_pointer;
|
||||
HANDLE find_handle;
|
||||
WIN32_FIND_DATA find_data;
|
||||
bool first;
|
||||
};
|
||||
|
||||
CoreExport DIR * opendir(const char * path);
|
||||
CoreExport dirent * readdir(DIR * handle);
|
||||
CoreExport void closedir(DIR * handle);
|
||||
|
||||
/* Disable these stupid warnings.. */
|
||||
#pragma warning(disable:4800)
|
||||
#pragma warning(disable:4251)
|
||||
#pragma warning(disable:4275)
|
||||
#pragma warning(disable:4996)
|
||||
#pragma warning(disable:4244) // warning C4244: '=' : conversion from 'long' to 'short', possible loss of data
|
||||
#pragma warning(disable:4267) // warning C4267: 'argument' : conversion from 'size_t' to 'int', possible loss of data
|
||||
#pragma warning(disable:4805) // warning C4805: '!=' : unsafe mix of type 'char' and type 'bool' in operation
|
||||
#pragma warning(disable:4311) // warning C4311: 'type cast' : pointer truncation from 'accept_overlap *' to 'int'
|
||||
#pragma warning(disable:4312) // warning C4312: 'type cast' : conversion from 'int' to 'HANDLE' of greater size
|
||||
#pragma warning(disable:4355) // warning C4355: 'this' : used in base member initializer list
|
||||
|
||||
/* Mehhhh... typedefs. */
|
||||
|
||||
typedef unsigned char uint8_t;
|
||||
typedef unsigned long long uint64_t;
|
||||
typedef signed char int8_t;
|
||||
typedef signed long int32_t;
|
||||
typedef signed long long int64_t;
|
||||
|
||||
void * ::operator new(size_t iSize);
|
||||
void ::operator delete(void * ptr);
|
||||
|
||||
/* IPC Handlers */
|
||||
class InspIRCd;
|
||||
|
||||
void InitIPC();
|
||||
void CheckIPC(InspIRCd * Instance);
|
||||
void CloseIPC();
|
||||
|
||||
#endif
|
||||
|
0
win/inspircd_win32wrapper.h.orig
Normal file
0
win/inspircd_win32wrapper.h.orig
Normal file
293
win/m_spanningtreeVC71.vcproj
Normal file
293
win/m_spanningtreeVC71.vcproj
Normal file
@ -0,0 +1,293 @@
|
||||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="7.10"
|
||||
Name="m_spanningtree"
|
||||
ProjectGUID="{1EC86B60-AB2A-4984-8A7E-0422C15601E0}"
|
||||
Keyword="Win32Proj">
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"/>
|
||||
</Platforms>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="..\bin\debug\modules"
|
||||
IntermediateDirectory="Debug_spanningtree"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\include;..\win;..\src\modules\m_spanningtree;.;..\src\modules"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DLL_BUILD"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib inspircd.lib cmd_whois.lib cmd_stats.lib"
|
||||
OutputFile="$(OutDir)/m_spanningtree.so"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\bin\debug\bin;..\bin\debug\lib"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/m_spanningtree.pdb"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(OutDir)/m_spanningtree.lib"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="..\bin\release\modules"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="..\include;..\win;..\src\modules\m_spanningtree;.;..\src\modules"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;M_SPANNINGTREE_EXPORTS;DLL_BUILD"
|
||||
RuntimeLibrary="0"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib inspircd.lib cmd_whois.lib cmd_stats.lib"
|
||||
OutputFile="$(OutDir)/m_spanningtree.so"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\bin\release\bin;..\bin\release\lib"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(OutDir)/m_spanningtree.lib"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Debug-Auto|Win32"
|
||||
OutputDirectory="..\bin\debug\modules"
|
||||
IntermediateDirectory="Debug-Auto_spanningtree"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\include;..\win;..\src\modules\m_spanningtree;.;..\src\modules"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;DLL_BUILD"
|
||||
MinimalRebuild="TRUE"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="5"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib inspircd.lib cmd_whois.lib cmd_stats.lib"
|
||||
OutputFile="$(OutDir)/m_spanningtree.so"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\bin\debug\bin;..\bin\debug\lib"
|
||||
GenerateDebugInformation="TRUE"
|
||||
ProgramDatabaseFile="$(OutDir)/m_spanningtree.pdb"
|
||||
SubSystem="2"
|
||||
ImportLibrary="$(OutDir)/m_spanningtree.lib"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release-Auto|Win32"
|
||||
OutputDirectory="..\bin\release\modules"
|
||||
IntermediateDirectory="Release-Auto"
|
||||
ConfigurationType="2"
|
||||
CharacterSet="2">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories="..\include;..\win;..\src\modules\m_spanningtree;.;..\src\modules"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;M_SPANNINGTREE_EXPORTS;DLL_BUILD"
|
||||
RuntimeLibrary="4"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="TRUE"
|
||||
DebugInformationFormat="3"/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
AdditionalDependencies="ws2_32.lib inspircd.lib cmd_whois.lib cmd_stats.lib"
|
||||
OutputFile="$(OutDir)/m_spanningtree.dll"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\bin\release\bin;..\bin\release\lib"
|
||||
GenerateDebugInformation="TRUE"
|
||||
SubSystem="2"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
ImportLibrary="$(OutDir)/m_spanningtree.lib"
|
||||
TargetMachine="1"/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"/>
|
||||
<Tool
|
||||
Name="VCManagedWrapperGeneratorTool"/>
|
||||
<Tool
|
||||
Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="Source Files"
|
||||
Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\handshaketimer.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\main.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\rconnect.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\resolvers.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\timesynctimer.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\treeserver.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\treesocket1.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\treesocket2.cpp">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\utils.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Header Files"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\handshaketimer.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\link.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\main.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\rconnect.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\resolvers.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\timesynctimer.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\treeserver.h">
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\src\modules\m_spanningtree\treesocket.h">
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="Resource Files"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}">
|
||||
<File
|
||||
RelativePath=".\inspircd_memory_functions.cpp">
|
||||
</File>
|
||||
</Filter>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
0
win/m_spanningtreeVC71.vcproj.orig
Normal file
0
win/m_spanningtreeVC71.vcproj.orig
Normal file
Loading…
x
Reference in New Issue
Block a user