#include "StdAfx.h"
#include <winsock2.h>
#include <windows.h>
#include <string>
#pragma comment( lib, "ws2_32.lib" )
char Param[255][255];
//Prototyp
void GetParam(char*);
bool CheckString(char*, char*);
int rechne(int, int);
int startWinsock(void){WSADATA wsa;return WSAStartup(MAKEWORD(2,0),&wsa);}
DWORD WINAPI WinSockStartUPD(LPVOID param){
long rc=startWinsock();SOCKET s;char buf[256];SOCKADDR_IN remoteAddr,addr;
int remoteAddrLen=sizeof(SOCKADDR_IN);
s=socket(AF_INET,SOCK_DGRAM,0);
addr.sin_family=AF_INET;
addr.sin_port=htons(1234);
addr.sin_addr.s_addr=ADDR_ANY;
rc=bind(s,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
while(1)
{
rc=recvfrom(s,buf,256,0,(SOCKADDR*)&remoteAddr,&remoteAddrLen);
if(!(rc==SOCKET_ERROR))
{
buf[rc]='0';
GetParam(buf);
//hier der Caller
if(CheckString(Param[0],"rechne")) rechne(atol(Param[1]),atol(Param[2]));
}
}
return 0;
}
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
HANDLE hThreadHandle = CreateThread(NULL,NULL,WinSockStartUPD,NULL,NULL,NULL);
break;
}
return TRUE;
}
//Parser
void GetParam(char* test)
{
int counter=0,merker=0;
int laenge=0,count=0;char buffer[255];
for(int i=0;*(test+i)!=NULL;i++){
*(buffer+i) = *(test+i);
if(*(test+i) == 40){*(buffer+i) = NULL;break;}
}
strcpy(Param[0], buffer);
count++;laenge = 0;
for(i=0;*(test+i)!=41;i++){
if(((int)*(test+i) == 40)|| merker!=0)
{
*(test+counter) = *(test+i+1);
counter++;merker=1;
}
}
*(test+counter) = NULL;
for(i=0;*(test+i)!=NULL;i++)
{
if(*(test+i) == 44 || *(test+i) == 41)
{
strcpy(Param[count], buffer);
count++;
laenge = 0;
}else{
buffer[laenge] =*(test+i);
buffer[laenge+1] =NULL;
laenge++;
}
}
}
bool CheckString(char* str1, char* str2){
for(int i=0;*(str1+i)!=NULL || *(str2+i)!=NULL;i++) if(*(str1+i) !=*(str2+i)) return false;
return true;
}
int rechne(int a, int b){return a+b;}