Code:
public void OnPluginStart() {
view_as<Socket>(null).SetOption(DebugMode, 1);
// create a new tcp socket
Socket socket = new Socket(SOCKET_TCP, OnSocketError);
// bind the socket to all interfaces, port 50000
socket.Bind("192.168.88.241", 2020);
// let the socket listen for incoming connections
socket.Listen(OnSocketIncoming);
}
public void OnSocketIncoming(Socket socket, Socket newSocket, const char[] remoteIP, int remotePort, any arg) {
//PrintToServer("%s:%d connected", remoteIP, remotePort);
// setup callbacks required to 'enable' newSocket
// newSocket won't process data until these callbacks are set
newSocket.SetReceiveCallback(OnChildSocketReceive);
newSocket.SetDisconnectCallback(OnChildSocketDisconnected);
newSocket.SetErrorCallback(OnChildSocketError);
// newSocket.Send("send quit to quit\n");
}
public void OnChildSocketReceive(Socket socket, const char[] receiveData, const int dataSize, any hFile) {
int ch = StrContains(receiveData, "cmd", false);
PrintToServer("");
PrintToServer("============ START SOCKET QUERRY =====================================================");
PrintToServer("Found command \"%s\" in: %d position", receiveData[ch+4], ch);
PrintToServer("================================================== SOCKET QUERRY ENDS ===============");
PrintToServer("");
char buffer[4096]; ServerCommandEx(buffer, sizeof(buffer), receiveData[ch+4]);
// PrintToServer("%c%c", '\n', '\n');
// send (echo) the received data back
/* char requestStr[4096];
Format(requestStr, sizeof(requestStr),
"POST /%s HTTP/1.0\r\nHost: %s\r\nCache-Control: no-cache\r\nConnection: close\r\nContent-length: %d\r\n\r\n%s",
"", HOST, strlen(buffer), buffer); */
socket.Send(buffer, strlen(buffer));
// socket.Disconnect();
CloseHandle(socket);
// close the connection/socket/handle if it matches quit
// if (strncmp(receiveData, "quit", 4) == 0) CloseHandle(socket);
}