From 048aaf0c4e77402adf584e3318e5aae6f1cdd749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20P=C3=B6sel?= Date: Mon, 5 Nov 2012 21:11:48 +0000 Subject: XFire adoption (crashes on login, no 64bit) git-svn-id: http://svn.miranda-ng.org/main/trunk@2212 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- protocols/Xfire/src/Xfire_proxy.cpp | 96 +++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 protocols/Xfire/src/Xfire_proxy.cpp (limited to 'protocols/Xfire/src/Xfire_proxy.cpp') diff --git a/protocols/Xfire/src/Xfire_proxy.cpp b/protocols/Xfire/src/Xfire_proxy.cpp new file mode 100644 index 0000000000..641c481097 --- /dev/null +++ b/protocols/Xfire/src/Xfire_proxy.cpp @@ -0,0 +1,96 @@ +#include "stdafx.h" + +#include "Xfire_proxy.h" + +extern HANDLE hNetlib; +HANDLE hBindPort=NULL; +HANDLE netlibcon=NULL; + + +void FromServerToClient(LPVOID lParam) { + char buf[1024]={0}; + + HANDLE hConnection=(HANDLE)lParam; + do { + if(!hBindPort) return; + + int cbRead = Netlib_Recv(netlibcon, buf, sizeof(buf), 0); + if( cbRead == SOCKET_ERROR) + break; + + if(cbRead) { + Netlib_Send(hConnection, buf, cbRead, 0); + } + } + while(1); +} + +//xfireclient baut verbindung auf +void XfireclientConnecting(HANDLE hConnection, DWORD, void* extra ) +{ + char buf[1024]={0}; + + //verbindung zum richtigen xfire server aufbauen + NETLIBOPENCONNECTION ncon = { 0 }; + ncon.cbSize = sizeof(ncon); + ncon.szHost = "206.220.42.147"; + ncon.wPort = (WORD)atol("25999"); + ncon.timeout=5; + netlibcon = (HANDLE) CallService(MS_NETLIB_OPENCONNECTION, (WPARAM) hNetlib, (LPARAM) & ncon); + + if(!netlibcon) { + Netlib_CloseHandle(hConnection); + } + + mir_forkthread(FromServerToClient,(LPVOID)hConnection); + + //schleife behandelt empfangende daten + do { + int cbRead = Netlib_Recv(hConnection, buf, sizeof(buf), 0); + if( cbRead == SOCKET_ERROR) + { + Netlib_CloseHandle(hConnection); + Netlib_CloseHandle(netlibcon); + break; + } + + if(cbRead) { + if(!Netlib_Send(netlibcon, buf, cbRead, 0)) + { + Netlib_CloseHandle(hConnection); + Netlib_CloseHandle(netlibcon); + break; + } + } + } + while(1); +} + +//inits nachdem alle module geladen wurden +int AfterSystemModulesLoaded(WPARAM wParam,LPARAM lParam) +{ + //init netlib handle + NETLIBUSER nlu = {0}; + nlu.cbSize = sizeof(nlu); + nlu.flags = NUF_OUTGOING | NUF_HTTPCONNS | NUF_INCOMING; + nlu.szSettingsModule = protocolname; + nlu.szDescriptiveName = "XFire server connection"; + hNetlib = (HANDLE) CallService(MS_NETLIB_REGISTERUSER, 0, (LPARAM) & nlu); + + //init socet server + NETLIBBIND nb = {0}; + nb.cbSize = NETLIBBIND_SIZEOF_V2; + nb.pfnNewConnectionV2 = XfireclientConnecting; + nb.pExtra = NULL; + nb.wPort = 25999; + hBindPort = (HANDLE)CallService( MS_NETLIB_BINDPORT, (WPARAM)hNetlib,(LPARAM) &nb); + + + return 0; +} + +int initXfireProxy() { + //inits nach dem alle module geladen wurden + HookEvent(ME_SYSTEM_MODULESLOADED, AfterSystemModulesLoaded); + return 0; +} -- cgit v1.2.3