diff --git a/dlls/sockets/CDataBuffer.h b/dlls/sockets/CDataBuffer.h deleted file mode 100644 index 08a4afdf..00000000 --- a/dlls/sockets/CDataBuffer.h +++ /dev/null @@ -1,78 +0,0 @@ -/* AMX Mod X -* -* by the AMX Mod X Development Team -* originally developed by OLO -* -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 2 of the License, or (at -* your option) any later version. -* -* This program is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -* General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software Foundation, -* Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* -* In addition, as a special exception, the author gives permission to -* link the code of this program with the Half-Life Game Engine ("HL -* Engine") and Modified Game Libraries ("MODs") developed by Valve, -* L.L.C ("Valve"). You must obey the GNU General Public License in all -* respects for all of the code used other than the HL Engine and MODs -* from Valve. If you modify this file, you may extend this exception -* to your version of the file, but you are not obligated to do so. If -* you do not wish to do so, delete this exception statement from your -* version. -*/ - -// Class by Pavol "PMOnoTo" Marko - -#ifndef __CDATABUFFER_H__ -#define __CDATABUFFER_H__ - -template class DataBuffer -{ - T *m_pBuf; - size_t m_Size; -public: - DataBuffer() - { - m_pBuf = NULL; - m_Size = 0; - } - - ~DataBuffer() - { - if (m_pBuf) - delete [] m_pBuf; - } - - operator T* () - { - return m_pBuf; - } - - bool resize(size_t newSize) - { - if (newSize > m_Size) - { - char *pNew = new T[newSize]; - - if (!pNew) - return false; - if (m_pBuf) - delete [] m_pBuf; - - m_pBuf = pNew; - m_Size = newSize; - } - - return true; - } -}; - -#endif // #ifndef __CDATABUFFER_H__ diff --git a/dlls/sockets/Makefile b/dlls/sockets/Makefile index f6104ad0..905854ea 100755 --- a/dlls/sockets/Makefile +++ b/dlls/sockets/Makefile @@ -6,7 +6,7 @@ MM_ROOT = ../../metamod/metamod ### EDIT BELOW FOR OTHER PROJECTS ### -OPT_FLAGS = -O3 -funroll-loops -s -pipe +OPT_FLAGS = -O2 -funroll-loops -s -pipe DEBUG_FLAGS = -g -ggdb3 CPP = gcc NAME = sockets_amxx @@ -45,12 +45,12 @@ $(BIN_DIR)/%.o: %.cpp all: mkdir -p $(BIN_DIR) mkdir -p $(BIN_DIR)/sdk - $(MAKE) sockets + $(MAKE) geoip amd64: $(MAKE) all AMD64=true -sockets: $(OBJ_LINUX) +geoip: $(OBJ_LINUX) $(CPP) $(INCLUDE) $(CFLAGS) $(OBJ_LINUX) $(LINK) -shared -ldl -lm -o$(BIN_DIR)/$(BINARY) debug: diff --git a/dlls/sockets/amxxmodule.h b/dlls/sockets/amxxmodule.h index 85f7985d..3d20f50e 100755 --- a/dlls/sockets/amxxmodule.h +++ b/dlls/sockets/amxxmodule.h @@ -2026,7 +2026,7 @@ typedef void (*PFN_MERGEDEFINITION_FILE) (const char * /*filename*/); typedef const char * (*PFN_FORMAT) (const char * /*fmt*/, ... /*params*/); typedef void (*PFN_REGISTERFUNCTION) (void * /*pfn*/, const char * /*desc*/); typedef int (*PFN_AMX_PUSH) (AMX * /*amx*/, cell /*value*/); -typedef int (*PFN_SET_TEAM_INFO) (int /*player */, int /*teamid */, const char */*name */); +typedef int (*PFN_SET_TEAM_INFO) (int /*player */, int /*teamid */, const char * /*name */); extern PFN_ADD_NATIVES g_fn_AddNatives; extern PFN_BUILD_PATHNAME g_fn_BuildPathname; diff --git a/dlls/sockets/sockets.cpp b/dlls/sockets/sockets.cpp index bbca892d..80d7cbe7 100755 --- a/dlls/sockets/sockets.cpp +++ b/dlls/sockets/sockets.cpp @@ -38,7 +38,6 @@ // AMX Headers #include "amxxmodule.h" -#include "CDataBuffer.h" #define SOCKET_TCP 1 #define SOCKET_UDP 2 @@ -186,23 +185,30 @@ static cell AMX_NATIVE_CALL socket_send(AMX *amx, cell *params) /* 3 param */ return send(socket, data, len, 0); } +static char *g_buffer = NULL; +static size_t g_buflen = 0; + // native socket_send2(_socket, _data[], _length); static cell AMX_NATIVE_CALL socket_send2(AMX *amx, cell *params) /* 3 param */ { // We get the string from amx int len = params[3]; int socket = params[1]; - static DataBuffer buffer; + if (len > g_buflen) + { + delete [] g_buffer; + g_buffer = new char[len+1]; + g_buflen = len; + } - buffer.resize(params[3]); cell *pData = MF_GetAmxAddr(amx, params[2]); - char *pBuffer = buffer; + char *pBuffer = g_buffer; while (len--) *pBuffer++ = *pData++; // And send it to the socket - return send(socket, buffer, params[3], 0); + return send(socket, g_buffer, params[3], 0); } AMX_NATIVE_INFO sockets_natives[] = { @@ -235,5 +241,6 @@ void OnAmxxDetach() #ifdef _WIN32 WSACleanup(); #endif + delete [] g_buffer; return; }