fixed bug at22532
This commit is contained in:
parent
2ebf822dea
commit
402236e51e
73
dlls/sockets/CDataBuffer.h
Normal file
73
dlls/sockets/CDataBuffer.h
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
template <class T> 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;
|
||||||
|
}
|
||||||
|
};
|
|
@ -11,6 +11,8 @@
|
||||||
*
|
*
|
||||||
* v0.1
|
* v0.1
|
||||||
* - code structure renewed
|
* - code structure renewed
|
||||||
|
* v0.2
|
||||||
|
* - added socket_send2 to send data containing null bytes (FALUCO)(AMXX v1.65)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
@ -36,6 +38,7 @@
|
||||||
|
|
||||||
// AMX Headers
|
// AMX Headers
|
||||||
#include "amxxmodule.h"
|
#include "amxxmodule.h"
|
||||||
|
#include "CDataBuffer.h"
|
||||||
|
|
||||||
#define SOCKET_TCP 1
|
#define SOCKET_TCP 1
|
||||||
#define SOCKET_UDP 2
|
#define SOCKET_UDP 2
|
||||||
|
@ -175,21 +178,41 @@ static cell AMX_NATIVE_CALL socket_recv(AMX *amx, cell *params) /* 2 param */
|
||||||
// native socket_send(_socket, _data[], _length);
|
// native socket_send(_socket, _data[], _length);
|
||||||
static cell AMX_NATIVE_CALL socket_send(AMX *amx, cell *params) /* 3 param */
|
static cell AMX_NATIVE_CALL socket_send(AMX *amx, cell *params) /* 3 param */
|
||||||
{
|
{
|
||||||
// We get the string from amx
|
// We get the string from amx
|
||||||
int len;
|
int len;
|
||||||
int socket = params[1];
|
int socket = params[1];
|
||||||
char* data = MF_GetAmxString(amx,params[2],0,&len);
|
char* data = MF_GetAmxString(amx,params[2],0,&len);
|
||||||
// And send it to the socket
|
// And send it to the socket
|
||||||
return send(socket, data, len, 0);
|
return send(socket, data, len, 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<char> buffer;
|
||||||
|
|
||||||
|
buffer.resize(params[3]);
|
||||||
|
cell *pData = MF_GetAmxAddr(amx, params[2]);
|
||||||
|
char *pBuffer = buffer;
|
||||||
|
|
||||||
|
while (len--)
|
||||||
|
*pBuffer++ = *pData++;
|
||||||
|
|
||||||
|
// And send it to the socket
|
||||||
|
return send(socket, buffer, params[3], 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
AMX_NATIVE_INFO sockets_natives[] = {
|
AMX_NATIVE_INFO sockets_natives[] = {
|
||||||
{"socket_open", socket_open},
|
{"socket_open", socket_open},
|
||||||
{"socket_close", socket_close},
|
{"socket_close", socket_close},
|
||||||
{"socket_change", socket_change},
|
{"socket_change", socket_change},
|
||||||
{"socket_recv", socket_recv},
|
{"socket_recv", socket_recv},
|
||||||
{"socket_send", socket_send},
|
{"socket_send", socket_send},
|
||||||
{NULL, NULL}
|
{"socket_send2", socket_send2},
|
||||||
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
void OnAmxxAttach()
|
void OnAmxxAttach()
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
Version="7.10"
|
Version="7.10"
|
||||||
Name="sockets"
|
Name="sockets"
|
||||||
ProjectGUID="{F15BBA96-2F66-44BB-9DDF-D91AE6D33AE7}"
|
ProjectGUID="{F15BBA96-2F66-44BB-9DDF-D91AE6D33AE7}"
|
||||||
|
RootNamespace="sockets"
|
||||||
Keyword="Win32Proj">
|
Keyword="Win32Proj">
|
||||||
<Platforms>
|
<Platforms>
|
||||||
<Platform
|
<Platform
|
||||||
|
@ -124,6 +125,9 @@
|
||||||
Name="Header Files"
|
Name="Header Files"
|
||||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
|
||||||
|
<File
|
||||||
|
RelativePath=".\CDataBuffer.h">
|
||||||
|
</File>
|
||||||
<Filter
|
<Filter
|
||||||
Name="SDK"
|
Name="SDK"
|
||||||
Filter="">
|
Filter="">
|
||||||
|
|
Loading…
Reference in New Issue
Block a user