Sure i can, so i append
PHP Code:
{"foo" , gsc_utils_foo , 0},
to the Scr_Function scriptFunctions[] array in gsc.cpp, I added also the prototype to the header file.
and this to gsc_utils.cpp
PHP Code:
void gsc_utils_foo() {
char *str;
char *ip;
int *port;
char data[9] = {"123456789"}; //test data or whatever
if ( ! stackGetParams((char *)"s", &str) || strlen(str) == 0) {
stackPushUndefined();
return;
}
ip = strtok(strdup(str), ",");
if(!isValidNumber(strtok(NULL, ","), &port))
{
stackPushInt(0);
}
if(isValidAddress(ip) && port != NULL)
{
stackPushString(foo(ip, (int)port), data);
}
else
{
stackPushInt(0);
}
}
char* foo(char *ip, int port, char *data)
{
SOCKET Socket;
WSADATA WSAData = {0};
SOCKADDR_IN server;
struct timeval timeout;
int i;
char response[1024];
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = inet_addr(ip);
timeout.tv_sec = 5;
timeout.tv_usec = 0;
if(WSAStartup (MAKEWORD(2, 2), &WSAData))
{
return "0";
}
Socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(Socket == INVALID_SOCKET)
{
WSACleanup();
return "0";
}
if(setsockopt(Socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
{
closesocket(Socket);
WSACleanup();
return "0";
}
if(setsockopt(Socket, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout, sizeof(timeout)) < 0)
{
closesocket(Socket);
WSACleanup();
return "0";
}
if(connect(Socket, (SOCKADDR *)&server, sizeof(server)) == SOCKET_ERROR)
{
closesocket(Socket);
WSACleanup();
return "0";
}
sendto(Socket, data, strlen(data), 0, (SOCKADDR *)&server, sizeof(server));
i = recvfrom(Socket, response, strlen(response), 0, 0, 0);
if(i < 0)
{
closesocket(Socket);
WSACleanup();
return "0";
}
response[i] = '\0';
closesocket(Socket);
WSACleanup();
return response;
}
and inside foo func the sendto func works fine and the recvfrom not working.