#990 add wol_socket_open()

Add wol_socket_open() to initialize the WoL socket
master
OpenGnSys Support Team 2020-08-06 13:36:47 +02:00
parent 1855b68af3
commit 060e31cb53
3 changed files with 24 additions and 19 deletions

View File

@ -455,27 +455,11 @@ int checkDato(struct og_dbi *dbi, char *dato, const char *tabla,
bool Levanta(char *ptrIP[], char *ptrMacs[], char *ptrNetmasks[], int lon,
char *mar)
{
unsigned int on = 1;
struct sockaddr_in local;
int i, res;
int s;
int i, s;
/* Creación de socket para envío de magig packet */
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s < 0) {
syslog(LOG_ERR, "cannot create socket for magic packet\n");
s = wol_socket_open();
if (s < 0)
return false;
}
res = setsockopt(s, SOL_SOCKET, SO_BROADCAST, (unsigned int *) &on,
sizeof(on));
if (res < 0) {
syslog(LOG_ERR, "cannot set broadcast socket\n");
return false;
}
memset(&local, 0, sizeof(local));
local.sin_family = AF_INET;
local.sin_port = htons(PUERTO_WAKEUP);
local.sin_addr.s_addr = htonl(INADDR_ANY);
for (i = 0; i < lon; i++) {
if (!WakeUp(s, ptrIP[i], ptrMacs[i], ptrNetmasks[i], mar)) {

View File

@ -20,6 +20,26 @@
#include "wol.h"
#include "ogAdmServer.h"
int wol_socket_open(void)
{
unsigned int on = 1;
int ret, s;
s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (s < 0) {
syslog(LOG_ERR, "cannot create socket for magic packet\n");
return -1;
}
ret = setsockopt(s, SOL_SOCKET, SO_BROADCAST, (unsigned int *) &on,
sizeof(on));
if (ret < 0) {
syslog(LOG_ERR, "cannot set broadcast socket\n");
return -1;
}
return s;
}
bool wake_up_send(int sd, struct sockaddr_in *client,
const struct wol_msg *msg, const struct in_addr *addr)
{

View File

@ -12,6 +12,7 @@ struct wol_msg {
char macbin[OG_WOL_REPEAT][OG_WOL_MACADDR_LEN];
};
int wol_socket_open(void);
bool wake_up_send(int sd, struct sockaddr_in *client,
const struct wol_msg *msg, const struct in_addr *addr);
bool wake_up_broadcast(int sd, struct sockaddr_in *client,