/**
*
* Copyright (c) 2009-2016 Freedomotic team http://freedomotic.com
*
* This file is part of Freedomotic
*
* This Program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 2, or (at your option) any later version.
*
* This Program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* Freedomotic; see the file COPYING. If not, see
* <http://www.gnu.org/licenses/>.
*/
package clientjava.openwebnet;
/***************************************************************************
* OpenWebNet.java *
* -------------------------- *
* date : Feb 22, 2005 *
* copyright : (C) 2005 by Bticino S.p.A. Erba (CO) - Italy *
* Embedded Software Development Laboratory *
* license : GPL *
* email : *
* web site : www.bticino.it; www.myhome-bticino.it *
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
/**
* Description:
* Classe per gestire l'OPEN
*
*/
public class OWN implements InterfaceOpenWebNet{
// rappresenta la frame open creata
private String frameOpen = new String();
// tipo di frame open
private int tipoFrame;
// lunghezza frame
private int lengthFrameOpen;
// indica le frame estese
private boolean estesa;
// numero valori
int numValori;
// numero indirizzo
private int numIndirizzo;
// contenuti della frame normale
private String chi = "";
private String indirizzo[] = new String[MAX_INDIRIZZO];
private String cosa = "";
private String dove = "";
private String livello = "";
private String interfaccia = "";
private String quando = "";
private String grandezza = "";
private String valori[] = new String[MAX_NUM_VALORI];
/**
* Costruttore
* Crea una NULL_FRAME
*
*/
public OWN(){
//richiamo la procedura createNullMsgOpen
createNullMsgOpen();
}
/**
* Costruttore
*
* @param message Frame open
*/
public OWN(String message){
//richiamo la procedura CreateMsgOpen(String message)
createMsgOpen(message);
}
/**
* Crea il messaggio OPEN *chi*cosa*dove*quando##
*
* @param who Campo chi
* @param what Campo cosa
* @param where Campo dove
* @param when Campo quando
*/
public OWN(String who, String what, String where, String when){
//richiamo la procedura CreateMsgOpen()
createMsgOpen(who, what, where, when);
}
/**
* Crea il messaggio OPEN tramite la stringa passata come parametro
*
* @param message Frame open
*/
public void createMsgOpen(String message)
{
//System.out.println("creo msg open da stringa");
//richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
// salva il tipo di frame e la sua lunghezza
frameOpen = message;
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen-1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen-2) == '\n') || ((frameOpen.charAt(lengthFrameOpen-2) == '\r')))
lengthFrameOpen--;
// per scrupolo ...
//frameOpen[lengthFrameOpen] = '\0';
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *chi*cosa*dove*quando##
*
* @param who Campo chi
* @param what Campo cosa
* @param where Campo dove
* @param when Campo quando
*/
public void createMsgOpen(String who, String what, String where, String when){
//richiamo la procedura CreateNullMsgOpen()
//System.out.println("creo msg open tramite chi cosa dove quando");
createNullMsgOpen();
// creo il messaggio open
frameOpen = "*";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(what);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
//per togliere l'asterisco finale
if (!when.equals("")){
frameOpen = frameOpen.concat("*");
}
frameOpen = frameOpen.concat(when);
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen-1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen-1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// per scrupolo ...
//frameOpen[lengthFrameOpen] = '\0';
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *chi*cosa*dove#livello#interfaccia*quando##
*
* @param who Campo chi
* @param what Campo cosa
* @param where Campo dove
* @param lev Campo livello
* @param interfac Campo interfaccia
* @param when Campo quando
*/
public void createMsgOpen(String who, String what, String where, String lev, String interfac, String when)
{
//richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
frameOpen = "*";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(what);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
frameOpen = frameOpen.concat("#");
if (lev.equals("")){
frameOpen = frameOpen.concat("4");
//strcat(frameOpen, "4");
}else{
frameOpen = frameOpen.concat(lev);
//strcat(frameOpen, lev);
}
frameOpen = frameOpen.concat("#");
frameOpen = frameOpen.concat(interfac);
//per togliere l'asterisco finale
if (when.equals("")){
frameOpen = frameOpen.concat("*");
}
frameOpen = frameOpen.concat("when");
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen-1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen-1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// per scrupolo ...
//frameOpen[lengthFrameOpen] = '\0';
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *#chi*dove##
*
* @param who Campo chi
* @param where Campo dove
*/
public void CreateStateMsgOpen(String who, String where) {
// richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
// creo il messaggio open
frameOpen = "*#";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *#chi*dove#livello#interfaccia##
*
* @param who Campo chi
* @param where Campo dove
* @param lev Campo livello
* @param interfac Campo interfaccia
*/
public void CreateStateMsgOpen(String who, String where, String lev, String interfac) {
// richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
frameOpen = "*#";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
frameOpen = frameOpen.concat("#");
if (lev.equals("")){
frameOpen = frameOpen.concat("4");
}else{
frameOpen = frameOpen.concat(lev);
}
frameOpen = frameOpen.concat("#");
frameOpen = frameOpen.concat(interfac);
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *#chi*dove*grandezza##
*
* @param who Campo chi
* @param where Campo dove
* @param dimension Campo grandezza
*/
public void CreateDimensionMsgOpen(String who, String where, String dimension) {
//richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
// creo il messaggio open
frameOpen = "*#";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
//per togliere l'asterisco finale
if (!dimension.equals("")){
frameOpen = frameOpen.concat("*");
}
frameOpen = frameOpen.concat(dimension);
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *#chi*dove#livello#interfaccia*grandezza##
*
* @param who Campo chi
* @param where Campo dove
* @param lev Campo livello
* @param interfac Campo interfaccia
* @param dimension Campo grandezza
*/
public void CreateDimensionMsgOpen(String who, String where, String lev, String interfac, String dimension) {
//richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
frameOpen = "*#";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
frameOpen = frameOpen.concat("#");
if (lev.equals("")){
frameOpen = frameOpen.concat("4");
}else{
frameOpen = frameOpen.concat(lev);
}
frameOpen = frameOpen.concat("#");
frameOpen = frameOpen.concat(interfac);
// per togliere l'asterisco finale
if (!dimension.equals("")){
frameOpen = frameOpen.concat("*");
}
frameOpen = frameOpen.concat(dimension);
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *#chi*dove*#grandezza*val_1*val_2*....*val_n##
*
* @param who Campo chi
* @param where Campo dove
* @param dimension Campo grandezza
* @param value Campo contenente i valori
* @param numValori Numero di valori
*/
public void CreateWrDimensionMsgOpen(String who, String where, String dimension, String value[], int numValue){
//richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
// creo il messaggio open
frameOpen = "*#";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
frameOpen = frameOpen.concat("*#");
frameOpen = frameOpen.concat(dimension);
for(int i = 0; i < numValue; i++){
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(value[i]);
}
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN *#chi*dove#livello#interfaccia*#grandezza*val_1*val_2*....*val_n##
*
* @param who Campo chi
* @param where Campo dove
* @param lev Campo livello
* @param interfac Campo interfaccia
* @param dimension Campo grandezza
* @param value Campo contenente i valori
* @param numValori Numero di valori
*/
public void CreateWrDimensionMsgOpen(String who, String where, String lev, String interfac, String dimension, String value[], int numValue){
//richiamo la procedura CreateNullMsgOpen()
createNullMsgOpen();
// creo il messaggio open
frameOpen = "*#";
frameOpen = frameOpen.concat(who);
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(where);
frameOpen = frameOpen.concat("#");
if (lev.equals("")){
frameOpen = frameOpen.concat("4");
}else{
frameOpen = frameOpen.concat(lev);
}
frameOpen = frameOpen.concat("#");
frameOpen = frameOpen.concat(interfac);
frameOpen = frameOpen.concat("*#");
frameOpen = frameOpen.concat(dimension);
for(int i = 0; i < numValue; i++){
frameOpen = frameOpen.concat("*");
frameOpen = frameOpen.concat(value[i]);
}
frameOpen = frameOpen.concat("##");
lengthFrameOpen = frameOpen.length();
// elimino i caratteri di controllo ....
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
if ((frameOpen.charAt(lengthFrameOpen -1) == '\n') || ((frameOpen.charAt(lengthFrameOpen-1) == '\r')))
lengthFrameOpen--;
// controlla se sintassi corretta ...
isCorrect();
}
/**
* Crea il messaggio OPEN ****##
*
*/
public void createNullMsgOpen(){
// contatore per azzerare i valori
//System.out.println("creo msg open null");
int i = 0;
// azzera tutto
frameOpen = null;
tipoFrame = NULL_FRAME;
lengthFrameOpen = 0;
estesa = false;
// azzera tutto
// numIndirizzo = 0;
// for (i = 0; i < MAX_INDIRIZZO; i++)
// memset(indirizzo[i], '\0', indirizzo[i].length);
// numValori = 0;
// for (i = 0; i < MAX_NUM_VALORI; i++)
// memset(valori[i], '\0', valori[i].length);
chi = "";
cosa = "";
dove = "";
livello = "";
interfaccia = "";
quando = "";
grandezza = "";
}
// public boolean isEqual(OpenWebNet msgToCompare){
// // controlla se sintassi corretta ...
// isCorrect();
//
// //conttrollo che sia la stessa tipologia
// if(msgToCompare.tipoFrame != tipoFrame)
// return false;
//
// //controllo che siano entrambe due frame estese o meno
// if(msgToCompare.estesa != estesa)
// return false;
//
// if(!estesa)
// {
// if ((msgToCompare.getChi() == chi) &&
// (msgToCompare.getCosa() == cosa) &&
// (msgToCompare.getDove() == dove) &&
// (msgToCompare.getQuando() == quando) &&
// (msgToCompare.getGrandezza() == grandezza))
//
//
// return true;
// else
// return false;
// }
// else
// {
// System.out.println("%%%%%%%%%%%%");
// System.out.println(msgToCompare.getChi()+" "+chi);
// System.out.println(msgToCompare.getCosa()+" "+cosa);
// System.out.println(msgToCompare.getDove()+" "+dove);
// System.out.println(msgToCompare.getLivello()+" "+livello);
// System.out.println(msgToCompare.getInterfaccia()+" "+interfaccia);
// System.out.println(msgToCompare.getQuando()+" "+quando);
// System.out.println(msgToCompare.getGrandezza()+" "+grandezza);
// if ((msgToCompare.getChi().equals(chi)) &&
// ((String)msgToCompare.getCosa() == (String)cosa) &&
// ((String)msgToCompare.getDove() == dove) &&
// ((String)msgToCompare.getLivello() == livello) &&
// ((String)msgToCompare.getInterfaccia() == interfaccia) &&
// ((String)msgToCompare.getQuando() == quando) &&
// ((String)msgToCompare.getGrandezza() == grandezza))
// return true;
// else
// return false;
// }
// }
/**
* Esegue il controllo sintattico
*/
private void isCorrect(){
int j = 0;
int i = 0;
//char sup[] = new char[MAX_LENGTH_OPEN];
//char campo[] = new char[MAX_LENGTH];
String sup = null;
String campo = null;
// se frame ACK -->
if (frameOpen.equals(MSG_OPEN_OK))
{
//System.out.println("frame di tipo ack");
tipoFrame = OK_FRAME;
return;
}
// se frame NACK -->
if (frameOpen.equals(MSG_OPEN_KO))
{
//System.out.println("frame di tipo nack");
tipoFrame = KO_FRAME;
return;
}
//se il primo carattere non è *
//oppure la frame è troppo lunga
//oppure se non termina con due '#'
if ((frameOpen.charAt(0) != '*') ||
(lengthFrameOpen > MAX_LENGTH_OPEN) ||
(frameOpen.charAt(lengthFrameOpen-1) != '#') ||
(frameOpen.charAt(lengthFrameOpen-2) != '#'))
{
System.out.println("*** FRAME ERRORE ***");
tipoFrame = ERROR_FRAME;
return;
}
//Controllo se sono stati digitati dei caratteri
for (j=0;j<lengthFrameOpen;j++)
{
if(!Character.isDigit(frameOpen.charAt(j)))
{
if((frameOpen.charAt(j) != '*') && (frameOpen.charAt(j) != '#'))
{
System.out.println("°°° FRAME ERROR °°°");
tipoFrame = ERROR_FRAME;
return;
}
}
}
// frame normale ...
//*chi#indirizzo*cosa*dove#livello#indirizzo*quando##
if (frameOpen.charAt(1) != '#')
{
//System.out.println("frame normale");
tipoFrame = NORMAL_FRAME;
//estraggo i vari campi della frame open nella prima modalità (chi+indirizzo e dove+livello+interfaccia)
assegnaChiCosaDoveQuando();
//estraggo gli eventuali valori di indirizzo
assegnaIndirizzo();
//estraggo gli eventuali valori di livello ed interfaccia
assegnaLivelloInterfaccia();
return;
}
// frame password ...
//*#pwd##
if(contains(frameOpen.substring(2), '*') == false)
{
//System.out.println("frame password");
tipoFrame = PWD_FRAME;
// estraggo il chi
assegnaChi();
return;
}
//per le altre tipologie di frame
sup = null;
sup = frameOpen.substring(2, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2);
campo = null;
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
campo = sup.substring(0, i);
//sprintf(campo, "%s", strtok(sup, "*"));
sup = null;
sup = frameOpen.substring(2+campo.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(campo)+1);
if(sup.charAt(0) != '*')
{
i = 0;
boolean trovato = false;
while(i < sup.length()){
if(sup.charAt(i) == '*'){
trovato = true;
break;
}
i++;
}
if(trovato) campo = campo.concat(sup.substring(0, i));
//sprintf(campo, "%s%s", campo, strtok(sup, "*"));
sup = null;
sup = frameOpen.substring(2+campo.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(campo)+1);
}
//frame richiesta stato ...
//*#chi*dove##
if(sup.charAt(0) != '*')
{
//System.out.println("frame stato");
tipoFrame = STATE_FRAME;
//estraggo i vari campi della frame open nella prima modalit� (chi+indirizzo e dove+livello+interfaccia)
assegnaChiDove();
//estraggo gli eventuali valori di indirizzo
assegnaIndirizzo();
//estraggo gli eventuali valori di livello ed interfaccia
assegnaLivelloInterfaccia();
return;
}
else
{
//frame di richiesta misura ...
//*#chi*dove*grandezza## o *#chi*dove*#grandezza*valore_N�##
if(sup.charAt(1) != '#')
{
//System.out.println("Measure state");
tipoFrame = MEASURE_FRAME;
//estraggo i vari campi della frame open nella prima modalit� (chi+indirizzo e dove+livello+interfaccia)
assegnaChiDoveGrandezza();
//estraggo gli eventuali valori di indirizzo
assegnaIndirizzo();
//estraggo gli eventuali valori di livello ed interfaccia
assegnaLivelloInterfaccia();
return;
}
//frame di scrittura grandezza ...
//*#chi*dove*#grandezza*valore_N�##
else
{
//System.out.println("frame write");
tipoFrame = WRITE_FRAME;
//estraggo i vari campi della frame open nella prima modalit� (chi+indirizzo e dove+livello+interfaccia)
assegnaChiDoveGrandezzaValori();
//estraggo gli eventuali valori di indirizzo
assegnaIndirizzo();
//estraggo gli eventuali valori di livello ed interfaccia
assegnaLivelloInterfaccia();
return;
}
}
}
/**
* Assegna chi dove e la grandezza richiesta per le frame di richiesta grandezze
*
*/
private void assegnaChiDoveGrandezza()
{
//System.out.println("assegno chi dove grandezza");
//char sup[MAX_LENGTH_OPEN];
String sup = null;
int len = 0;
int j = 0;
int i = 0;
// CHI
sup = null;
sup = frameOpen.substring(2, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2);
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
chi = sup.substring(0, i);
//sprintf(chi, "%s", strtok(sup, "*"));
}
// DOVE
sup = null;
sup = frameOpen.substring(2+chi.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi)+1);
if(contains(sup, '*') == false){
dove = sup.substring(0, sup.length()-2);
//strncpy(dove, sup, strlen(sup)-2);
}
else
{
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
dove = sup.substring(0, i);
//sprintf(dove, "%s", strtok(sup, "*"));
}
// GRANDEZZA
sup = null;
sup = frameOpen.substring(2+chi.length()+1+dove.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi)+1+strlen(dove)+1);
if(contains(sup, '*') == false){
grandezza = sup.substring(0, sup.length()-2);
//strncpy(grandezza, sup, strlen(sup)-2);
}
else
{
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
grandezza = sup.substring(0, i);
//sprintf(grandezza, "%s", strtok(sup, "*"));
}
// VALORI
sup = null;
sup = frameOpen.substring(2+chi.length()+1+dove.length()+1+grandezza.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi)+1+strlen(dove)+1+strlen(grandezza)+1);
j = 0;
len = 2+chi.length()+1+dove.length()+1+grandezza.length()+1;
//len = 2+strlen(chi)+1+strlen(dove)+1+strlen(grandezza)+1;
while (contains(sup, '*') != false)
{
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
valori[j] = sup.substring(0, i);
//sprintf(valori[j], "%s", strtok(sup, "*"));
sup = null;
len = len+valori[j].length()+1;
sup = frameOpen.substring(len, frameOpen.length());
//sprintf(sup, "%s", frameOpen+len);
j++;
}
valori[j] = sup.substring(sup.length()-2, sup.length());
//strncpy(valori[j], sup, strlen(sup)-2);
}
}
//assegno numero valori
numValori = j+1;
return;
}
/**
* Assegna chi e dove per le frame di richiesta stato
*
*/
private void assegnaChiDove()
{
//System.out.println("assegno chi dove");
//char sup[MAX_LENGTH_OPEN];
String sup = null;
int i = 0;
// CHI
sup = null;
sup = frameOpen.substring(2, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2);
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
chi = sup.substring(0, i);
//sprintf(chi, "%s", strtok(sup, "*"));
}
// DOVE
sup = null;
sup = frameOpen.substring(2+chi.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi)+1);
if(contains(sup, '*') == false){
dove = sup.substring(0, sup.length()-2);
//strncpy(dove, sup, strlen(sup)-2);
}
else
{
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
dove = sup.substring(0, i);
//sprintf(dove, "%s", strtok(sup, "*"));
}
}
return;
}
/**
* Assegna chi cosa dove e quando per le frame "normali"
*
*/
private void assegnaChiCosaDoveQuando()
{
//System.out.println("assegno chi cosa dove quando");
int i = 0;
String sup = null;
//System.out.println("chi prima "+chi);
// CHI
// copio in temp la frame open togliendo il primo carattere, dovrebbe essere *
try{
sup = frameOpen.substring(1, frameOpen.length());
if(sup.charAt(0) != '#'){
i = 0;
while(Character.getType(sup.charAt(i)) == Character.DECIMAL_DIGIT_NUMBER){
i++;
}
chi = sup.substring(0, i);
}
//System.out.println("Chi: "+ chi);
// COSA
sup = null;
sup = frameOpen.substring(1+chi.length()+1, frameOpen.length());
if(contains(sup, '*') == false)
cosa = sup.substring(0, sup.length()-2);
else
{
if(sup.charAt(0) != '*'){
i = 0;
while(Character.getType(sup.charAt(i)) == Character.DECIMAL_DIGIT_NUMBER){
i++;
}
cosa = sup.substring(0, i);
}else{
cosa = "";
}
//System.out.println("Cosa: "+ cosa);
// DOVE
sup = null;
sup = frameOpen.substring(1+chi.length()+1+cosa.length()+1, frameOpen.length());
if(contains(sup, '*') == false){
dove = sup.substring(0, sup.length()-2);
}else{
if(sup.charAt(0) != '*'){
i = 0;
while(Character.getType(sup.charAt(i)) == Character.DECIMAL_DIGIT_NUMBER){
i++;
}
dove = sup.substring(0, i);
}
// System.out.println("Dove: "+ dove);
// System.out.println("chi "+chi);
// System.out.println("cosa "+cosa);
// QUANDO
sup = null;
sup = frameOpen.substring(1+chi.length()+1+cosa.length()+1+dove.length()+1, frameOpen.length());
if(contains(sup, '*') == false){
quando = sup.substring(0, sup.length()-2);
}
else{
if(sup.charAt(0) != '*'){
i = 0;
while(Character.getType(sup.charAt(i)) == Character.DECIMAL_DIGIT_NUMBER){
i++;
}
quando = sup.substring(0, i);
}
//System.out.println("Quando: "+ quando);
}
}
}
}catch(StringIndexOutOfBoundsException e){
System.out.println("Eccezione1");
tipoFrame = ERROR_FRAME;
}
return;
}
/**
* Assegna chi dove grandezza e i valori per le frame di scrittura grandezze
*
*/
private void assegnaChiDoveGrandezzaValori()
{
//System.out.println("assegno chi dove grandezza valori");
//char sup[MAX_LENGTH_OPEN];
String sup = null;
int len = 0;
int j = 0;
int i = 0;
// CHI
sup = null;
sup = frameOpen.substring(2, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2);
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
chi = sup.substring(0, i);
//sprintf(chi, "%s", strtok(sup, "*"));
}
// DOVE
sup = null;
sup = frameOpen.substring(2+chi.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi)+1);
if(contains(sup, '*') == false){
dove = sup.substring(0, sup.length()-2);
//strncpy(dove, sup, strlen(sup)-2);
}
else
{
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
dove = sup.substring(0, i);
//sprintf(dove, "%s", strtok(sup, "*"));
}
// GRANDEZZA
sup = null;
sup = frameOpen.substring(2+chi.length()+1+dove.length()+2, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi)+1+strlen(dove)+2);
if(contains(sup, '*') == false){
tipoFrame = ERROR_FRAME;
}
else
{
if(sup.charAt(0) != '*'){
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
grandezza = sup.substring(0, i);
//sprintf(grandezza, "%s", strtok(sup, "*"));
}
// VALORI
sup = null;
sup = frameOpen.substring(2+chi.length()+1+dove.length()+2+grandezza.length()+1, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi)+1+strlen(dove)+2+strlen(grandezza)+1);
j = 0;
len = 2+chi.length()+1+dove.length()+2+grandezza.length()+1;
while (contains(sup, '*') != false)
{
i = 0;
while(sup.charAt(i) != '*'){
i++;
}
valori[j] = sup.substring(0, i);
//sprintf(valori[j], "%s", strtok(sup, "*"));
sup = null;
len = len+valori[j].length()+1;
sup = frameOpen.substring(len, frameOpen.length());
//sprintf(sup, "%s", frameOpen+len);
j++;
}
valori[j] = sup.substring(0, sup.length()-2);
//strncpy(valori[j], sup, strlen(sup)-2);
}
}
//assegno numero valori
numValori = j+1;
return;
}
/**
* Assegna chi per le frame di risultato elaborazione password
*
*/
private void assegnaChi()
{
//System.out.println("assegno chi");
int i = 0;
String sup = null;
// CHI
sup = frameOpen.substring(2, frameOpen.length());
//sprintf(sup, "%s", frameOpen+2);
if(sup.charAt(0) != '#'){
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
chi = sup.substring(0, i);
//sprintf(chi, "%s", strtok(sup, "#"));
}
else{
tipoFrame = ERROR_FRAME;
}
sup = null;
sup = frameOpen.substring(2+chi.length(), frameOpen.length());
//sprintf(sup, "%s", frameOpen+2+strlen(chi));
if(sup.charAt(1) != '#'){
tipoFrame = ERROR_FRAME;
}
return;
}
/**
* Assegna livello, interfaccia per le frame estese
*
*/
private void assegnaLivelloInterfaccia()
{
//System.out.println("assegno livello interfaccia");
String sup = null;
String orig = null;
int i = 0;
// DOVE
if(!dove.equals("")){
if(dove.charAt(0) == '#'){
sup = dove.substring(1, dove.length());
//sprintf(sup, "%s", dove+1);
}
else{
sup = dove;
//sprintf(sup, "%s", dove);
}
orig = null;
orig = dove;
//sprintf(orig, "%s", dove);
if(contains(sup, '#') != false)
{
estesa = true;
dove = null;
if(orig.charAt(0) == '#'){
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
//mao da vedere se è giusta____cos'è "#%s" ?
dove = sup.substring(0, i);
//System.out.println("Dove$$$$$$$:"+dove);
//sprintf(dove, "#%s", strtok(sup, "#"));
}
else{
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
dove = sup.substring(0, i);
//sprintf(dove, "%s", strtok(sup, "#"));
}
// LIVELLO + INTERFACCIA
sup = null;
sup = orig.substring(dove.length()+1, orig.length());
//sprintf(sup, "%s", orig+strlen(dove)+1);
if(contains(sup, '#') != false)
{
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
livello = sup.substring(0, i);
//sprintf(livello, "%s", strtok(sup, "#"));
interfaccia = orig.substring(dove.length()+1+livello.length()+1);
//sprintf(interfaccia, "%s", orig+strlen(dove)+1+strlen(livello)+1);
if(interfaccia.length() == 0)
tipoFrame = ERROR_FRAME;
}
else
tipoFrame = ERROR_FRAME;
}
}else{ //il campo dove è vuoto
}
return;
}
/**
* Assegna indirizzo
*
*/
private void assegnaIndirizzo()
{
//System.out.println("assegno indirizzo");
int i = 0;
String sup = null;
String orig = null;
// CHI
sup = chi;
orig = chi;
if(contains(sup, '#') != false)
{
chi = null;
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
chi = sup.substring(0, i);
//sprintf(chi, "%s", strtok(sup, "#"));
// INDIRIZZO
numIndirizzo++;
sup = null;
sup = orig.substring(chi.length()+1, orig.length());
//sprintf(sup, "%s", orig+strlen(chi)+1);
if(contains(sup, '#') == false)
{
// solo indirizzo seriale
if(sup.length() != 0){
indirizzo[0] = sup;
//sprintf(indirizzo[0], "%s", sup);
}
else{
tipoFrame = ERROR_FRAME;
}
}
else
{
// indirizzo IP
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
indirizzo[0] = sup.substring(0, i);
//sprintf(indirizzo[0], "%s", strtok(sup, "#"));
sup = null;
sup = orig.substring(chi.length()+1+indirizzo[0].length()+1, orig.length());
//sprintf(sup, "%s", orig+strlen(chi)+1+strlen(indirizzo[0])+1);
if(contains(sup, '#') != false)
{
// indirizzo IP
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
indirizzo[1] = sup.substring(0, i);
//sprintf(indirizzo[1], "%s", strtok(sup, "#"));
sup = null;
sup = orig.substring(chi.length()+1+indirizzo[0].length()+1+indirizzo[1].length()+1, orig.length());
//sprintf(sup, "%s", orig+strlen(chi)+1+strlen(indirizzo[0])+1+strlen(indirizzo[1])+1);
if(contains(sup, '#') != false)
{
// indirizzo IP
i = 0;
while(sup.charAt(i) != '#'){
i++;
}
indirizzo[2] = sup.substring(0, i);
//sprintf(indirizzo[2], "%s", strtok(sup, "#"));
sup = null;
sup = orig.substring(chi.length()+1+indirizzo[0].length()+1+indirizzo[1].length()+1+indirizzo[2].length()+1, orig.length());
//sprintf(sup, "%s", orig+strlen(chi)+1+strlen(indirizzo[0])+1+strlen(indirizzo[1])+1+strlen(indirizzo[2])+1);
if(contains(sup, '#') == false)
{
// indirizzo IP
if(sup.length() != 0){
indirizzo[3] = sup;
//sprintf(indirizzo[3], "%s", sup);
}
else{
tipoFrame = ERROR_FRAME;
}
}
else
tipoFrame = ERROR_FRAME;
}
else
tipoFrame = ERROR_FRAME;
}
else
tipoFrame = ERROR_FRAME;
}
}
return;
}
/**
* Verifica se in una stringa c'è un determinato carattere
*
* @param testo Stringa da controllare
* @param c Carattere da cercare in testo
* @return True se testo contiene c; False altrimenti
*/
private boolean contains(String testo, char c){
int i = 0;
while(i != testo.length()){
if(testo.charAt(i) == c) return true;
i++;
}
return false;
}
/**
* @return Returns the chi.
*/
public String getChi() {
return chi;
}
/**
* @return Returns the cosa.
*/
public String getCosa() {
return cosa;
}
/**
* @return Returns the dove.
*/
public String getDove() {
return dove;
}
/**
* @return Returns the estesa.
*/
public boolean isEstesa() {
return estesa;
}
/**
* @return Returns the frameOpen.
*/
public String getFrameOpen() {
return frameOpen;
}
/**
* @return Returns the grandezza.
*/
public String getGrandezza() {
return grandezza;
}
/**
* @return Returns the interfaccia.
*/
public String getInterfaccia() {
return interfaccia;
}
/**
* @return Returns the lengthFrameOpen.
*/
public int getLengthFrameOpen() {
return lengthFrameOpen;
}
/**
* @return Returns the quando.
*/
public String getQuando() {
return quando;
}
/**
* @return Returns the tipoFrame.
*/
public int getTipoFrame() {
return tipoFrame;
}
/**
* @return Returns the indirizzo.
*/
public String getIndirizzo(int i) {
return indirizzo[i];
}
/**
* @return Returns the valori.
*/
public String getValori(int i) {
return valori[i];
}
/**
* @return Returns the livello.
*/
public String getLivello() {
return livello;
}
/**
* @param dove The dove to set.
*/
public void setDove(String dove) {
this.dove = dove;
}
// tipo di frame ?
/**
*
* @return True se la frame è di tipo ERROR_FRAME; False altrimenti
*/
public boolean isErrorFrame(){
return (tipoFrame == ERROR_FRAME);
}
/**
*
* @return True se la frame è di tipo NULL_FRAME; False altrimenti
*/
public boolean isNullFrame(){
return (tipoFrame == NULL_FRAME);
}
/**
*
* @return True se la frame è di tipo NORMAL_FRAME; False altrimenti
*/
public boolean isNormalFrame(){
return (tipoFrame == NORMAL_FRAME);
}
/**
*
* @return True se la frame è di tipo MEASURE_FRAME; False altrimenti
*/
public boolean isMeasureFrame(){
return (tipoFrame == MEASURE_FRAME);
}
/**
*
* @return True se la frame è di tipo STATE_FRAME; False altrimenti
*/
public boolean isStateFrame(){
return (tipoFrame == STATE_FRAME);
}
/**
*
* @return True se la frame è di tipo WRITE_FRAME; False altrimenti
*/
public boolean isWriteFrame(){
return (tipoFrame == WRITE_FRAME);
}
/**
*
* @return True se la frame è di tipo PWD_FRAME; False altrimenti
*/
public boolean isPwdFrame(){
return (tipoFrame == PWD_FRAME);
}
/**
*
* @return True se la frame è di tipo OK_FRAME; False altrimenti
*/
public boolean isOKFrame(){
return (tipoFrame == OK_FRAME);
}
/**
*
* @return True se la frame è di tipo KO_FRAME; False altrimenti
*/
public boolean isKOFrame(){
return (tipoFrame == KO_FRAME);
}
}