#include "client.h" #include "../drivers/net/util.h" #define SOCKET_ERROR -1 int cli_sendBuffer(Client* cli,void* pBuffer, unsigned int bufferlen) { int iResult; ClientEventArgs e; //abfragen ob client existiert!! wichtig if (cli->sSocket != SOCKET_ERROR) { iResult= send(cli->sSocket,(char*)pBuffer,bufferlen,0); if (cli->_OnWrite != 0) { e.dwLen = iResult; e.pBuffer = pBuffer; cli->_OnWrite(&e); } return iResult; } else return -1; } int cli_ConnectTo(Client* cli,char * pAdresse,unsigned short Port,int webAdresse) { ClientEventArgs e; cli->sSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // Einen Socket erstellen cli->wPort=Port; cli->adAddr.sin_port = htons(cli->wPort); if (webAdresse) //Fall es sich um eine Internet Adresse Handelt return -1; else //Fall es sich um eine LAN Adresse im 127.0.0.1 Stil handelt cli->adAddr.sin_addr.s_addr = inet_addr(pAdresse); if (connect(cli->sSocket,(const struct sockaddr*)&cli->adAddr, sizeof(cli->adAddr))==0) { create_kernel_task(&cli->bThread,cli_WaitForPacket,cli); if (cli->_OnConnect != 0) { e.dwLen = 0; e.pBuffer = 0; cli->_OnConnect(&e); } return 0; } else return -1; }; int cli_DisconnectFrom(Client* cli) { shutdown(cli->sSocket,2); closesocket(cli->sSocket); cli->sSocket = SOCKET_ERROR; return 0; } void cli_WaitForPacket(Client* cli) { int iResult=1; char pTmpBuffer[DEF_BUFFERSIZE+1]; ClientEventArgs e; while (iResult > 0) { iResult = recv(cli->sSocket ,pTmpBuffer, DEF_BUFFERSIZE, 0); if (iResult > 0) { pTmpBuffer[iResult]='\0'; if (cli->_OnRead != 0) { e.dwLen = iResult; e.pBuffer = pTmpBuffer; cli->_OnRead( &e); } } else //Verbindung geschlossen { cli->sSocket=SOCKET_ERROR; if (cli->_OnDisconnect != 0) { e.dwLen = 0; e.pBuffer = 0; cli->_OnDisconnect( &e); } } } }; int cli_init(Client* cli) { cli->_OnConnect = 0; cli->_OnWrite = 0; cli->_OnRead = 0; cli->_OnDisconnect = 0; cli->adAddr.sin_addr.s_addr = INADDR_ANY; // IP'S die der Client annehmen soll cli->adAddr.sin_family = AF_INET; // AdressFamilie (TCP/IP) // adAddr.sin_port = htons(iPort); // Port auf dem der Client erreichbar seien soll return NULL; } int cli_destroy(Client* cli) { closesocket(cli->sSocket);; return NULL; }