mirror of https://git.48k.eu/ogserver
#915 Remove useless WoL shim code
Levanta() is not required, iterate over the array of IP address and make direct calls to WakeUp(). This is also implicitly fixing up a memleak in og_cmd_wol().master
parent
dd578a944e
commit
41ac15d100
|
@ -271,40 +271,6 @@ int checkDato(struct og_dbi *dbi, char *dato, const char *tabla,
|
||||||
return (identificador);
|
return (identificador);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ________________________________________________________________________________________________________
|
|
||||||
// Función: Levanta
|
|
||||||
//
|
|
||||||
// Descripción:
|
|
||||||
// Enciende ordenadores a través de la red cuyas macs se pasan como parámetro
|
|
||||||
// Parámetros:
|
|
||||||
// - iph: Cadena de direcciones ip separadas por ";"
|
|
||||||
// - mac: Cadena de direcciones mac separadas por ";"
|
|
||||||
// - mar: Método de arranque (1=Broadcast, 2=Unicast)
|
|
||||||
// Devuelve:
|
|
||||||
// true: Si el proceso es correcto
|
|
||||||
// false: En caso de ocurrir algún error
|
|
||||||
// ________________________________________________________________________________________________________
|
|
||||||
|
|
||||||
bool Levanta(char *ptrIP[], char *ptrMacs[], char *ptrNetmasks[], int lon,
|
|
||||||
char *mar)
|
|
||||||
{
|
|
||||||
int i, s;
|
|
||||||
|
|
||||||
s = wol_socket_open();
|
|
||||||
if (s < 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
for (i = 0; i < lon; i++) {
|
|
||||||
if (!WakeUp(s, ptrIP[i], ptrMacs[i], ptrNetmasks[i], mar)) {
|
|
||||||
syslog(LOG_ERR, "problem sending magic packet\n");
|
|
||||||
close(s);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
close(s);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum wol_delivery_type {
|
enum wol_delivery_type {
|
||||||
OG_WOL_BROADCAST = 1,
|
OG_WOL_BROADCAST = 1,
|
||||||
OG_WOL_UNICAST = 2
|
OG_WOL_UNICAST = 2
|
||||||
|
@ -325,7 +291,7 @@ enum wol_delivery_type {
|
||||||
// false: En caso de ocurrir algún error
|
// false: En caso de ocurrir algún error
|
||||||
//_____________________________________________________________________________________________________________
|
//_____________________________________________________________________________________________________________
|
||||||
//
|
//
|
||||||
bool WakeUp(int s, char* iph, char *mac, char *netmask, char *mar)
|
bool WakeUp(int s, const char *iph, const char *mac, const char *netmask, const char *mar)
|
||||||
{
|
{
|
||||||
struct in_addr addr, netmask_addr, broadcast_addr ={};
|
struct in_addr addr, netmask_addr, broadcast_addr ={};
|
||||||
unsigned int macaddr[OG_WOL_MACADDR_LEN];
|
unsigned int macaddr[OG_WOL_MACADDR_LEN];
|
||||||
|
|
|
@ -23,8 +23,7 @@
|
||||||
struct og_dbi;
|
struct og_dbi;
|
||||||
|
|
||||||
bool actualizaConfiguracion(struct og_dbi *,char* ,int);
|
bool actualizaConfiguracion(struct og_dbi *,char* ,int);
|
||||||
bool Levanta(char**, char**, char**, int, char*);
|
bool WakeUp(int, const char *, const char *, const char *, const char *);
|
||||||
bool WakeUp(int,char*,char*,char*,char*);
|
|
||||||
bool actualizaCreacionImagen(struct og_dbi *,char*,char*,char*,char*,char*,char*);
|
bool actualizaCreacionImagen(struct og_dbi *,char*,char*,char*,char*,char*,char*);
|
||||||
bool actualizaRestauracionImagen(struct og_dbi *,char*,char*,char*,char*,char*);
|
bool actualizaRestauracionImagen(struct og_dbi *,char*,char*,char*,char*,char*);
|
||||||
bool actualizaHardware(struct og_dbi *dbi, char* ,char*,char*,char*);
|
bool actualizaHardware(struct og_dbi *dbi, char* ,char*,char*,char*);
|
||||||
|
|
54
src/rest.c
54
src/rest.c
|
@ -520,6 +520,7 @@ static int og_cmd_wol(json_t *element, struct og_msg_params *params)
|
||||||
dbi_result result;
|
dbi_result result;
|
||||||
const char *key;
|
const char *key;
|
||||||
json_t *value;
|
json_t *value;
|
||||||
|
int sd;
|
||||||
|
|
||||||
if (json_typeof(element) != JSON_OBJECT)
|
if (json_typeof(element) != JSON_OBJECT)
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -580,12 +581,19 @@ static int og_cmd_wol(json_t *element, struct og_msg_params *params)
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
sd = wol_socket_open();
|
||||||
|
if (sd < 0) {
|
||||||
|
syslog(LOG_ERR, "cannot open wol socket (%s:%d)\n",
|
||||||
|
__func__, __LINE__);
|
||||||
|
goto err_free_params;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < params->ips_array_len; i++) {
|
for (i = 0; i < params->ips_array_len; i++) {
|
||||||
if (og_client_find(params->ips_array[i]))
|
if (og_client_find(params->ips_array[i]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (inet_aton(params->ips_array[i], &addr) < 0)
|
if (inet_aton(params->ips_array[i], &addr) < 0)
|
||||||
return -1;
|
goto err_out;
|
||||||
|
|
||||||
cli_wol = og_client_wol_find(&addr);
|
cli_wol = og_client_wol_find(&addr);
|
||||||
if (cli_wol) {
|
if (cli_wol) {
|
||||||
|
@ -595,16 +603,20 @@ static int og_cmd_wol(json_t *element, struct og_msg_params *params)
|
||||||
|
|
||||||
cli_wol = og_client_wol_create(&addr);
|
cli_wol = og_client_wol_create(&addr);
|
||||||
if (!cli_wol)
|
if (!cli_wol)
|
||||||
return -1;
|
goto err_out;
|
||||||
|
|
||||||
list_add_tail(&cli_wol->list, &client_wol_list);
|
list_add_tail(&cli_wol->list, &client_wol_list);
|
||||||
|
|
||||||
|
if (!WakeUp(sd, params->ips_array[i], params->mac_array[i],
|
||||||
|
params->netmask_array[i], params->wol_type)) {
|
||||||
|
syslog(LOG_ERR, "Failed to send wol packet to %s\n",
|
||||||
|
params->ips_array[i]);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (!Levanta((char **)params->ips_array, (char **)params->mac_array,
|
err_out:
|
||||||
(char **)params->netmask_array, i,
|
close(sd);
|
||||||
(char *)params->wol_type))
|
err_free_params:
|
||||||
return -1;
|
|
||||||
|
|
||||||
for (i = 0; i < params->ips_array_len; ++i) {
|
for (i = 0; i < params->ips_array_len; ++i) {
|
||||||
free((void *)params->ips_array[i]);
|
free((void *)params->ips_array[i]);
|
||||||
free((void *)params->mac_array[i]);
|
free((void *)params->mac_array[i]);
|
||||||
|
@ -3156,6 +3168,7 @@ void og_schedule_run(unsigned int task_id, unsigned int schedule_id,
|
||||||
struct og_cmd *cmd, *next;
|
struct og_cmd *cmd, *next;
|
||||||
struct og_dbi *dbi;
|
struct og_dbi *dbi;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
int sd;
|
||||||
|
|
||||||
dbi = og_dbi_open(&ogconfig.db);
|
dbi = og_dbi_open(&ogconfig.db);
|
||||||
if (!dbi) {
|
if (!dbi) {
|
||||||
|
@ -3190,23 +3203,38 @@ void og_schedule_run(unsigned int task_id, unsigned int schedule_id,
|
||||||
duplicated = false;
|
duplicated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sd = wol_socket_open();
|
||||||
|
if (sd < 0) {
|
||||||
|
syslog(LOG_ERR, "cannot open wol socket (%s:%d)\n",
|
||||||
|
__func__, __LINE__);
|
||||||
|
goto err_out;
|
||||||
|
}
|
||||||
|
|
||||||
list_for_each_entry_safe(cmd, next, &cmd_list, list) {
|
list_for_each_entry_safe(cmd, next, &cmd_list, list) {
|
||||||
if (cmd->type != OG_CMD_WOL)
|
if (cmd->type != OG_CMD_WOL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (Levanta((char **)cmd->params.ips_array,
|
for (i = 0; i < cmd->params.ips_array_len; i++) {
|
||||||
(char **)cmd->params.mac_array,
|
if (!WakeUp(sd, cmd->params.ips_array[i],
|
||||||
(char **)cmd->params.netmask_array,
|
cmd->params.mac_array[i],
|
||||||
cmd->params.ips_array_len,
|
cmd->params.netmask_array[i],
|
||||||
(char *)cmd->params.wol_type))
|
cmd->params.wol_type)) {
|
||||||
|
syslog(LOG_ERR, "Failed to send wol packet to %s\n",
|
||||||
|
params.ips_array[i]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
og_dbi_update_action(cmd->id, true);
|
og_dbi_update_action(cmd->id, true);
|
||||||
|
}
|
||||||
|
|
||||||
list_del(&cmd->list);
|
list_del(&cmd->list);
|
||||||
og_cmd_free(cmd);
|
og_cmd_free(cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
close(sd);
|
||||||
|
|
||||||
og_send_request(OG_METHOD_GET, OG_CMD_RUN_SCHEDULE, ¶ms, NULL);
|
og_send_request(OG_METHOD_GET, OG_CMD_RUN_SCHEDULE, ¶ms, NULL);
|
||||||
|
|
||||||
|
err_out:
|
||||||
for (i = 0; i < params.ips_array_len; i++)
|
for (i = 0; i < params.ips_array_len; i++)
|
||||||
free((void *)params.ips_array[i]);
|
free((void *)params.ips_array[i]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue