summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2012-11-28 11:38:50 +0000
committerramon <ramongomez@us.es>2012-11-28 11:38:50 +0000
commit0cee7a68a42af8e9bb70bd99b35e2b52304b000c (patch)
tree71aa79bffbf0c0b6967c813f2b8fcfa62eb8c92d
parenteb99080b51dfe8f79cf13ecd402bd3e284b75121 (diff)
Versión 1.0.5, #565: Integrar código del ticket:565 en rama de desarrollo.
git-svn-id: https://opengnsys.es/svn/branches/version1.0@3446 a21b9725-9963-47de-94b9-378ad31fedc9
-rw-r--r--sources/ogAdmServer.cpp47
-rw-r--r--sources/ogAdmServer.h4
2 files changed, 36 insertions, 15 deletions
diff --git a/sources/ogAdmServer.cpp b/sources/ogAdmServer.cpp
index 59f4214..cf40ed1 100644
--- a/sources/ogAdmServer.cpp
+++ b/sources/ogAdmServer.cpp
@@ -148,7 +148,7 @@ BOOLEAN gestionaTrama(SOCKET *socket_c)
if (res == 0) { // Encontrada la función que procesa el mensaje
liberaMemoria(nfn);
res=tbfuncionesServer[i].fptr(socket_c, ptrTrama); // Invoca la función
- liberaMemoria(ptrTrama);
+ liberaMemoria((char*)ptrTrama);
return(res);
}
}
@@ -1364,20 +1364,27 @@ BOOLEAN respuestaConsola(SOCKET *socket_c, TRAMA *ptrTrama, int res) {
// FALSE: En caso de ocurrir algún error
// ________________________________________________________________________________________________________
BOOLEAN Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) {
- char *mac, msglog[LONSTD];
+ char *iph,*mac,*mar, msglog[LONSTD];
+ BOOLEAN res;
char modulo[] = "Arrancar()";
+ iph = copiaParametro("iph",ptrTrama); // Toma dirección/es IP
mac = copiaParametro("mac",ptrTrama); // Toma dirección/es MAC
- if (!Levanta(mac)) {
- liberaMemoria(mac);
+ mar = copiaParametro("mar",ptrTrama); // Método de arranque (Broadcast o Unicast)
+
+ res=Levanta(iph,mac,mar);
+
+ liberaMemoria(iph);
+ liberaMemoria(mac);
+ liberaMemoria(mar);
+
+ if(!res){
sprintf(msglog, "%s:%s", tbErrores[32], modulo);
errorInfo(modulo, msglog);
respuestaConsola(socket_c, ptrTrama, FALSE);
return (FALSE);
}
- liberaMemoria(mac);
-
if (!enviaComando(ptrTrama, CLIENTE_OCUPADO)) {
sprintf(msglog, "%s:%s", tbErrores[32], modulo);
errorInfo(modulo, msglog);
@@ -1393,13 +1400,16 @@ BOOLEAN Arrancar(SOCKET *socket_c, TRAMA* ptrTrama) {
// 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
// ________________________________________________________________________________________________________
-BOOLEAN Levanta(char *mac) {
- char *ptrMacs[MAXIMOS_CLIENTES];
+BOOLEAN Levanta(char* iph,char *mac, char* mar)
+{
+ char *ptrIP[MAXIMOS_CLIENTES],*ptrMacs[MAXIMOS_CLIENTES];
int i, lon, res;
SOCKET s;
BOOLEAN bOpt;
@@ -1426,9 +1436,10 @@ BOOLEAN Levanta(char *mac) {
exit(EXIT_FAILURE);
}
/* fin creación de socket */
+ lon = splitCadena(ptrIP, iph, ';');
lon = splitCadena(ptrMacs, mac, ';');
for (i = 0; i < lon; i++) {
- if (!WakeUp(&s, ptrMacs[i])) {
+ if (!WakeUp(&s,ptrIP[i],ptrMacs[i],mar)) {
errorLog(modulo, 49, TRUE);
close(s);
return (FALSE);
@@ -1444,12 +1455,16 @@ BOOLEAN Levanta(char *mac) {
// Enciende el ordenador cuya MAC se pasa como parámetro
// Parámetros:
// - s : Socket para enviar trama magic packet
+// - iph : Cadena con la dirección ip
// - mac : Cadena con la dirección mac en formato XXXXXXXXXXXX
+// - mar: Método de arranque (1=Broadcast, 2=Unicast)
// Devuelve:
// TRUE: Si el proceso es correcto
// FALSE: En caso de ocurrir algún error
//_____________________________________________________________________________________________________________
-BOOLEAN WakeUp(SOCKET *s, char *mac) {
+//
+BOOLEAN WakeUp(SOCKET *s, char* iph,char *mac,char* mar)
+{
int i, res;
char HDaddress_bin[6];
struct {
@@ -1470,7 +1485,10 @@ BOOLEAN WakeUp(SOCKET *s, char *mac) {
/* Creación de socket del cliente que recibe la trama magic packet */
WakeUpCliente.sin_family = AF_INET;
WakeUpCliente.sin_port = htons((short) PUERTO_WAKEUP);
- WakeUpCliente.sin_addr.s_addr = htonl(INADDR_BROADCAST); // Para hacerlo con broadcast
+ if(atoi(mar)==2)
+ WakeUpCliente.sin_addr.s_addr = inet_addr(iph); // Para hacerlo con IP
+ else
+ WakeUpCliente.sin_addr.s_addr = htonl(INADDR_BROADCAST); // Para hacerlo con broadcast
res = sendto(*s, (char *) &Trama_WakeUp, sizeof(Trama_WakeUp), 0,
(sockaddr *) &WakeUpCliente, sizeof(WakeUpCliente));
@@ -3345,7 +3363,7 @@ BOOLEAN recibeArchivo(SOCKET *socket_c, TRAMA *ptrTrama) {
BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
{
char sqlstr[LONSQL], msglog[LONSTD];
- char *idp,iph[LONIP],mac[LONMAC];
+ char *idp,*mar,iph[LONIP],mac[LONMAC];
Database db;
Table tbl;
int idx,idcomando;
@@ -3398,11 +3416,14 @@ BOOLEAN envioProgramacion(SOCKET *socket_c, TRAMA *ptrTrama)
errorInfo(modulo, msglog);
return (FALSE);
}
- if (!Levanta(mac)) {
+ mar = copiaParametro("mar",ptrTrama); // Toma modo de arranque si el comando es Arrancar
+ if (!Levanta(iph,mac,mar)) {
sprintf(msglog, "%s:%s", tbErrores[32], modulo);
errorInfo(modulo, msglog);
+ liberaMemoria(mar);
return (FALSE);
}
+ liberaMemoria(mar);
}
if (clienteDisponible(iph, &idx)) { // Si el cliente puede recibir comandos
strcpy(tbsockets[idx].estado, CLIENTE_OCUPADO); // Actualiza el estado del cliente
diff --git a/sources/ogAdmServer.h b/sources/ogAdmServer.h
index 4569ad7..bc887d0 100644
--- a/sources/ogAdmServer.h
+++ b/sources/ogAdmServer.h
@@ -84,8 +84,8 @@ BOOLEAN Comando(SOCKET *,TRAMA *);
BOOLEAN RESPUESTA_Comando(SOCKET *,TRAMA *);
BOOLEAN Arrancar(SOCKET *,TRAMA *);
-BOOLEAN Levanta(char*);
-BOOLEAN WakeUp(SOCKET *,char *);
+BOOLEAN Levanta(char*,char*,char*);
+BOOLEAN WakeUp(SOCKET *,char*,char*,char*);
void PasaHexBin(char *,char *);
BOOLEAN RESPUESTA_Arrancar(SOCKET *,TRAMA*);
BOOLEAN Apagar(SOCKET *,TRAMA *);