If have been trying it for a while now, but I cant get it working. What I did.
Code:
{"sendCommand" , gsc_utils_sendCommand , 0},
to gsc.cpp
Cant do this
Code:
void gsc_utils_sendCommand();
to gsc_utils.h because there is no utils.h
Code:
#include "gsc_utils.hpp"
#if COMPILE_UTILS == 1
#include <dirent.h> // dir stuff
#include <assert.h>
#include <ctype.h> // toupper
#include <sys/types.h>// new
#include <sys/socket.h> //new
to the top of gsc_utils.cpp
Code:
BOOL isValidNumber(const char *charnum, int **number)
{
int i, num = 0;
if(charnum == NULL)
{
return 0;
}
for(i = 0; i < strlen(charnum); i++)
{
if(charnum[i] >= '0' && charnum[i] <= '9')
{
num += pow(10.0, (int)(strlen(charnum) - i - 1)) * (charnum[i] - '0');
}
else
{
return 0;
}
}
*number = (int *)num;
return 1;
}
BOOL isValidRange(const char *range)
{
int *num;
if(!isValidNumber(range, &num))
{
return 0;
}
if((int)num >= 0 && (int)num <= 255)
{
return 1;
}
return 0;
}
int isValidAddress(const char *ip)
{
int i, dots = 0;
char *token;
for(i = 0; i < strlen(ip); i++)
{
if(ip[i] == '.')
dots++;
}
if(dots != 3)
{
return 0;
}
for(i = 0; i < dots + 1; i++)
{
if(i == 0)
{
token = strtok(strdup(ip), ".");
}
else
{
token = strtok(NULL, ".");
}
if(!isValidRange(token))
{
return 0;
}
}
return 1;
}
char* sendCommand(char *ip, int port, char *message)
{
SOCKET Socket;
WSADATA WSAData = {0};
SOCKADDR_IN server;
struct timeval timeout;
int i;
char *data;
char *fixed;
char response[16384];
data = strcat(strdup("00000"), message);
for(i = 0; i < 4; i++)
{
data[i] = 0xFF;
}
data[i] = 0x02;
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr.s_addr = inet_addr(ip);
timeout.tv_sec = 2;
timeout.tv_usec = 2;
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, sizeof(response), 0, 0, 0);
if(i == SOCKET_ERROR)
{
closesocket(Socket);
WSACleanup();
return "0";
}
response[i] = '\0';
closesocket(Socket);
WSACleanup();
fixed = strtok(response, "\\");
fixed = strtok(NULL, "\0");
for(i = 0; i < strlen(fixed); i++)
{
if(fixed[i] == '\n')
{
fixed[i] = '\t';
}
if(fixed[i] == '"')
{
fixed[i] = '\t';
}
if(fixed[i] == '\\')
{
fixed[i] = '\t';
}
}
return fixed;
}
void gsc_utils_sendCommand()
{
char *ip;
char *data;
int port = 0;
if(!stackGetParams((char *)"sis", &ip, &port, &data) || strlen(ip) == 0 || port == 0 || strlen(data) == 0)
{
stackPushUndefined();
return;
}
if(isValidAddress(ip))
{
stackPushString(sendCommand(ip, port, data));
}
else
{
stackPushInt(0);
}
}
to the end of gsc_utils.cpp, but before the last #endif
It compiles with a lot of errors and I cant start a server
Code:
gsc_utils.cpp:1163: error: ‘BOOL’ does not name a type
gsc_utils.cpp: In function ‘int isValidAddress(const char*)’:
gsc_utils.cpp:1206: error: ‘isValidRange’ was not declared in this scope
gsc_utils.cpp: In function ‘char* sendCommand(char*, int, char*)’:
gsc_utils.cpp:1217: error: ‘SOCKET’ was not declared in this scope
gsc_utils.cpp:1217: error: expected ‘;’ before ‘Socket’
gsc_utils.cpp:1218: error: ‘WSADATA’ was not declared in this scope
gsc_utils.cpp:1218: error: expected ‘;’ before ‘WSAData’
gsc_utils.cpp:1219: error: ‘SOCKADDR_IN’ was not declared in this scope
gsc_utils.cpp:1219: error: expected ‘;’ before ‘server’
gsc_utils.cpp:1235: error: ‘server’ was not declared in this scope
with a lot more "not declared" errors