diff --git a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java index f58c9b16c105e7e2652e33808a05eb108315fb08..55c9b293954346813347f3f50df30064ae31099e 100644 --- a/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java +++ b/src/main/java/tmltranslator/patternhandling/SecurityGenerationForTMAP.java @@ -140,9 +140,6 @@ public class SecurityGenerationForTMAP implements Runnable { nonAuthChans.add(pragma.getAttrB().getAttribute().getBlock().getName() + "__" + pragma.getAttrB().getAttribute().getName().replaceAll("_chData", "")); } } - // TraceManager.addDev("nonConfChans " + nonConfChans); - // TraceManager.addDev("nonauthchans " + nonAuthChans); - // TraceManager.addDev("all results displayed"); } catch (Exception e) { System.out.println("SECGEN EXCEPTION " + e); @@ -206,9 +203,7 @@ public class SecurityGenerationForTMAP implements Runnable { for (String cpuName : selectedCPUTasks.keySet()) { - TraceManager.addDev("cpuName=" + cpuName); for (String task : selectedCPUTasks.get(cpuName)) { - TraceManager.addDev("task=" + task); hsmTasks.add(task); taskHSMMap.put(task, cpuName); } @@ -353,7 +348,6 @@ public class SecurityGenerationForTMAP implements Runnable { for (String chanName : portNames) { //Classify channels based on the type of security requirements and unsatisfied properties - TraceManager.addDev("chanName="+chanName); if (chan.isBasicChannel()) { if (chan.isEnsureConf() && nonConf) { toSecure.get(chan.getOriginTask()).add(chan.getDestinationTask()); @@ -362,13 +356,10 @@ public class SecurityGenerationForTMAP implements Runnable { toSecureRev.get(chan.getDestinationTask()).add(chan.getOriginTask()); } } - TraceManager.addDev("362: " + chan.getOriginTask().getName().split("__")[1]); if (hsmTasks.contains(chan.getOriginTask().getName().split("__")[1])) { SecurityPattern secPattern = new SecurityPattern("hsmSec_" + secName, SecurityPattern.SYMMETRIC_ENC_PATTERN, overhead, "", encComp, decComp, "", "", ""); secPattern.originTask = "HSM_" + taskHSMMap.get(chan.getOriginTask().getName().replaceAll(title + "__", "")); channelSecMap.put(chanName, secPattern); - TraceManager.addDev("portInTask=" + portInTask(chan.getOriginTask(), chanName)); - TraceManager.addDev("hsmSecOutChannels=" + hsmSecOutChannels.get(chan.getOriginTask()).contains(chanName)); if (!hsmSecOutChannels.get(chan.getOriginTask()).contains(chanName) && portInTask(chan.getOriginTask(), chanName)) { HSMChannel hsmchan = new HSMChannel(chanName, chan.getOriginTask().getName().split("__")[1], HSMChannel.SENC); hsmChannelMap.get(taskHSMMap.get(chan.getOriginTask().getName().split("__")[1])).add(hsmchan); @@ -391,7 +382,6 @@ public class SecurityGenerationForTMAP implements Runnable { } } - TraceManager.addDev("389: " + chan.getDestinationTask().getName().split("__")[1]); if (hsmTasks.contains(chan.getDestinationTask().getName().split("__")[1])) { if (!hsmSecInChannels.get(chan.getDestinationTask()).contains(chanName) && portInTask(chan.getDestinationTask(), chanName)) { HSMChannel hsmchan = new HSMChannel(chanName, chan.getDestinationTask().getName().split("__")[1], HSMChannel.DEC); @@ -405,7 +395,6 @@ public class SecurityGenerationForTMAP implements Runnable { } else { if (!secInChannels.get(chan.getDestinationTask()).contains(chanName)) { secInChannels.get(chan.getDestinationTask()).add(chanName); - TraceManager.addDev("add in 399 :" + chan.getName()); if (chan.isEnsureStrongAuth()) { nonceInChannels.get(chan.getDestinationTask()).add(chanName); } @@ -464,7 +453,6 @@ public class SecurityGenerationForTMAP implements Runnable { } else { if (!secInChannels.get(chan.getDestinationTask()).contains(chanName)) { secInChannels.get(chan.getDestinationTask()).add(chanName); - TraceManager.addDev("add in 457"); if (chan.isEnsureStrongAuth()) { nonceInChannels.get(chan.getDestinationTask()).add(chanName); } @@ -522,7 +510,6 @@ public class SecurityGenerationForTMAP implements Runnable { } else { if (!secInChannels.get(dest).contains(chanName)) { secInChannels.get(dest).add(chanName); - TraceManager.addDev("add in 514"); /*if (chan.checkAuth && autoStrongAuth) { nonceInChannels.get(dest).add(chanName); }*/ @@ -583,7 +570,6 @@ public class SecurityGenerationForTMAP implements Runnable { } else { if (!secInChannels.get(dest).contains(chanName)) { secInChannels.get(dest).add(chanName); - TraceManager.addDev("add in 574"); /*if (chan.checkAuth && autoStrongAuth) { nonceInChannels.get(dest).add(chanName); }*/ @@ -664,9 +650,7 @@ public class SecurityGenerationForTMAP implements Runnable { List<ChannelData> hsmChans = new ArrayList<ChannelData>(); ChannelData chd = new ChannelData("startHSM_" + cpuName, false, false); hsmChans.add(chd); - TraceManager.addDev("comp.getName()=" + comp.getName()); for (HSMChannel hsmChan : hsmChannelMap.get(cpuName)) { - TraceManager.addDev("hsmChan name=" + hsmChan.name + " task="+ hsmChan.task); if (!hsmChan.task.equals(comp.getName().replaceAll(title + "__", ""))) { continue; } @@ -682,9 +666,6 @@ public class SecurityGenerationForTMAP implements Runnable { for (ChannelData hsmChan : hsmChans) { if (!hsmChan.isChan) { TMLRequest request = new TMLRequest(hsmChan.name, hsm.getReferenceObject()); - TraceManager.addDev("request= " + hsmChan.name); - TraceManager.addDev("originTask = " + hsm.getName()); - TraceManager.addDev("desTask = " + comp.getName()); if (hsmChan.isOrigin) { request.addOriginTask(hsm); request.setDestinationTask(comp); @@ -699,9 +680,6 @@ public class SecurityGenerationForTMAP implements Runnable { } else { TMLChannel channel = new TMLChannel(hsmChan.name, hsm.getReferenceObject()); channel.setPorts(new TMLPort(channel.getName(), channel.getReferenceObject()), new TMLPort(channel.getName(), channel.getReferenceObject())); - TraceManager.addDev("channel= " + hsmChan.name); - TraceManager.addDev("originTask = " + hsm.getName()); - TraceManager.addDev("desTask = " + comp.getName()); if (hsmChan.isOrigin) { channel.setOriginTask(hsm); channel.setDestinationTask(comp); @@ -853,9 +831,7 @@ public class SecurityGenerationForTMAP implements Runnable { int count_chans = 0; HwMemory memToPutChannel = null; for (TMLChannel chan : chans2) { - TraceManager.addDev("chan= " + chan.getName()); if (chan.isCheckAuthChannel()) { - TraceManager.addDev("chan check= " + chan.getName()); HwMemory memoryOfChannel = tmap.getMemoryOfChannel(chan); if (memoryOfChannel != null) { count_chans += 1; @@ -1141,11 +1117,9 @@ public class SecurityGenerationForTMAP implements Runnable { } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } - TraceManager.addDev("write channel: " + wr.getName() + " in task: " + task.getName()); - TraceManager.addDev("channel: " + wr.getChannel(0).getName() + " in task: " + task.getName()); wr.setNbOfSamples("1"); wr.setEncForm(false); - wr.securityPattern = channelSecMap.get(chanName); + //wr.securityPattern = channelSecMap.get(chanName); taskAD.addElement(wr); reqSend.addNext(wr); wr.addNext(chan); @@ -1175,7 +1149,9 @@ public class SecurityGenerationForTMAP implements Runnable { rd.securityPattern = secPatternNonce; rd.setNbOfSamples("1"); taskAD.addElement(rd); - wr.setNewNext(chan, rd);; + fromStart.setNewNext(reqSend, rd); + rd.addNext(reqSend); + //wr.setNewNext(chan, rd); TMLWriteChannel wr2 = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject()); if (tmlmodel.getChannelByName(wr2.getName()) != null) { @@ -1184,10 +1160,10 @@ public class SecurityGenerationForTMAP implements Runnable { wr2.addChannel(tmlmodel.getChannelByShortName(wr2.getName())); } wr2.setNbOfSamples("1"); - wr2.securityPattern = channelSecMap.get(chanName); + wr2.securityPattern = secPatternNonce; taskAD.addElement(wr2); - rd.addNext(wr2); - wr2.addNext(chan); + reqSend.setNewNext(wr, wr2); + wr2.addNext(wr); } //Read channel operator to receive hsm data @@ -1240,9 +1216,9 @@ public class SecurityGenerationForTMAP implements Runnable { readChannel.setEncForm(true); fromStart = taskAD.getPrevious(chan); + TMLActivityElement nextReadCh = chan.getNextElement(0); TMLSendRequest reqSend = new TMLSendRequest("startHSM_" + taskHSMMap.get(task.getName().split("__")[1]), taskAD.getReferenceObject()); - TraceManager.addDev("reqSend0="+reqSend.getName()); TMLRequest req = tmlmodel.getRequestByName(reqSend.getName()); if (req != null) { reqSend.setRequest(req); @@ -1253,7 +1229,7 @@ public class SecurityGenerationForTMAP implements Runnable { reqSend.addParam(Integer.toString(channelIndexMap.get(chanName))); } taskAD.addElement(reqSend); - fromStart.setNewNext(chan, reqSend); + chan.setNewNext(nextReadCh, reqSend); //Add write channel operator TMLWriteChannel wr = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject()); @@ -1262,15 +1238,13 @@ public class SecurityGenerationForTMAP implements Runnable { } else if (tmlmodel.getChannelByShortName(wr.getName()) != null) { wr.addChannel(tmlmodel.getChannelByShortName(wr.getName())); } - TraceManager.addDev("write channel: " + wr.getName() + " in task: " + task.getName()); - TraceManager.addDev("channel: " + wr.getChannel(0).getName() + " in task: " + task.getName()); wr.securityPattern = channelSecMap.get(chanName); wr.setNbOfSamples("1"); taskAD.addElement(wr); //Add connector between request and write reqSend.addNext(wr); - wr.addNext(chan); + if (nonceInChannels.get(task).contains(channel)) { //Create a nonce operator and a write channel operator @@ -1293,7 +1267,7 @@ public class SecurityGenerationForTMAP implements Runnable { } taskAD.addElement(nonce); - wr.setNewNext(chan, nonce); + fromStart.setNewNext(chan, nonce); TMLWriteChannel wr3 = new TMLWriteChannel("", taskAD.getReferenceObject()); //Send nonce along channel, the newly created nonce channel or an existing channel with the matching sender and receiver @@ -1322,6 +1296,7 @@ public class SecurityGenerationForTMAP implements Runnable { wr3.setNbOfSamples("1"); taskAD.addElement(wr3); nonce.addNext(wr3); + wr3.addNext(chan); //Also send nonce to hsm TMLWriteChannel wr2 = new TMLWriteChannel("data_" + chanName + "_" + task.getName().split("__")[1], taskAD.getReferenceObject()); @@ -1333,8 +1308,9 @@ public class SecurityGenerationForTMAP implements Runnable { wr2.securityPattern = secNonce; wr2.setNbOfSamples("1"); taskAD.addElement(wr2); - wr3.addNext(wr2); - wr2.addNext(chan); + + reqSend.setNewNext(wr, wr2); + wr2.addNext(wr); } @@ -1346,13 +1322,13 @@ public class SecurityGenerationForTMAP implements Runnable { } else if (tmlmodel.getChannelByShortName(rd.getName()) != null) { rd.addChannel(tmlmodel.getChannelByShortName(rd.getName())); } - rd.securityPattern = channelSecMap.get(chanName); + //rd.securityPattern = channelSecMap.get(chanName); rd.setNbOfSamples("1"); rd.setEncForm(false); taskAD.addElement(rd); - taskAD.getPrevious(chan).setNewNext(chan, rd); - rd.addNext(chan); + wr.addNext(rd); + rd.addNext(nextReadCh); } } @@ -1498,10 +1474,8 @@ public class SecurityGenerationForTMAP implements Runnable { for (TMLActivityElement elem : channelInstances) { TMLReadChannel readChannel = (TMLReadChannel) elem; fromStart = taskAD.getPrevious(elem); - TraceManager.addDev("0 readChannel= " + readChannel.getChannel(0).getName()); if (nonceInChannels.get(task).contains(channel)) { //Create a nonce operator and a write channel operator - TraceManager.addDev("0 has Nonce "); TMLExecC nonce = new TMLExecC("nonce_" + tmlc.getDestinationTask().getName().split("__")[1] + "_" + tmlc.getOriginTask().getName().split("__")[1], taskAD.getReferenceObject()); SecurityPattern secNonce = new SecurityPattern(nonce.getName(), SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); nonce.securityPattern = secNonce; @@ -1581,8 +1555,6 @@ public class SecurityGenerationForTMAP implements Runnable { for (int i=0; i < rdOfSameCh.getNbOfChannels(); i++) { String readSameChShortName = rdOfSameCh.getChannel(i).getName().replaceAll(title + "__", ""); if (channel.equals(readSameChShortName) && rdOfSameCh.securityPattern == null) { - TraceManager.addDev("readSameChShortName= "+ readSameChShortName); - TraceManager.addDev("channel= "+ channel); rdOfSameCh.securityPattern = channelSecMap.get(readSameChShortName); rdOfSameCh.setEncForm(true); } @@ -1612,8 +1584,6 @@ public class SecurityGenerationForTMAP implements Runnable { //fromStart = new TGConnectorTMLAD(xpos, ypos, tad.getMinX(), tad.getMaxX(), tad.getMinY(), tad.getMaxY(), false, null, tad, null, null, new Vector<Point>()); - TraceManager.addDev("build AD: cpuName=" + cpuName); - TraceManager.addDev("build AD: size=" + hsmChannelMap.get(cpuName).size()); if (hsmChannelMap.get(cpuName).size() == 0) { TMLStopState stop = new TMLStopState("stop", taskAD.getReferenceObject()); taskAD.addElement(stop); @@ -1669,38 +1639,39 @@ public class SecurityGenerationForTMAP implements Runnable { choice.setGuardAt(choice.getNbGuard()-1, choice.getGuard(choice.getNbGuard()-1).substring(0, choice.getGuard(choice.getNbGuard()-1).length()-1) + " or (" + choice2.getGuard(choice2.getNbGuard()-1).substring(1, choice2.getGuard(choice2.getNbGuard()-1).length()-1) + ")]"); } + TMLActivityElement prevRd = choice2; + //If needed, receive nonce from task + if (!ch.nonceName.equals("")) { + //Connect choice and readchannel + TMLReadChannel rdNonce = new TMLReadChannel(("data_" + ch.name + "_" + ch.task), taskAD.getReferenceObject()); + rdNonce.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); + rdNonce.securityPattern = new SecurityPattern(ch.nonceName, SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); + rdNonce.securityPattern.originTask = rdNonce.getChannel(0).getOriginTask().getName().replaceAll(appName + "__", ""); + rdNonce.setNbOfSamples("1"); + taskAD.addElement(rdNonce); + + //choice2.getNextElement(choice2.getNbNext()-1).addNext(rd); + choice2.addNext(rdNonce); + prevRd = rdNonce; + } + TMLReadChannel rd = new TMLReadChannel("data_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); - rd.securityPattern = channelSecMap.get(ch.name); + // rd.setNbOfSamples("1"); taskAD.addElement(rd); - //Connect choice and readchannel - choice2.addNext(rd); - + prevRd.addNext(rd); //Recieve plaintext data if encrypting if (ch.secType != HSMChannel.DEC) { rd.setEncForm(false); } - //If needed, receive nonce from task - if (!ch.nonceName.equals("")) { - rd = new TMLReadChannel(("data_" + ch.name + "_" + ch.task), taskAD.getReferenceObject()); - rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); - rd.securityPattern = channelSecMap.get(ch.nonceName); - rd.setNbOfSamples("1"); - taskAD.addElement(rd); - - choice2.getNextElement(choice2.getNbNext()-1).addNext(rd); - } - - TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); wr.addChannel(tmlmodel.getChannelByName("retData_" + ch.name + "_" + ch.task)); taskAD.addElement(wr); - wr.securityPattern = channelSecMap.get(ch.name); wr.setNbOfSamples("1"); - TraceManager.addDev("HSMChannel: ch =" + ch.name + " secType=" + ch.secType); if (ch.secType == HSMChannel.DEC) { + rd.securityPattern = channelSecMap.get(ch.name); TMLExecC dec = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); dec.securityPattern = new SecurityPattern(channelSecMap.get(ch.name)); dec.securityPattern.setProcess(SecurityPattern.DECRYPTION_PROCESS); @@ -1729,6 +1700,7 @@ public class SecurityGenerationForTMAP implements Runnable { //Connext stop and write channel wr.addNext(stop); } else { + wr.securityPattern = channelSecMap.get(ch.name); TMLExecC enc = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); enc.securityPattern = new SecurityPattern(channelSecMap.get(ch.name)); enc.securityPattern.setProcess(SecurityPattern.ENCRYPTION_PROCESS); @@ -1780,9 +1752,24 @@ public class SecurityGenerationForTMAP implements Runnable { for (HSMChannel ch : hsmChannelMap.get(cpuName)) { //Add guard as channelindex choice.addGuard("[channelIndex==" + channelIndexMap.get(ch.name) + "]"); + + TMLActivityElement prevRd = choice; + //If needed, receive nonce from task + if (!ch.nonceName.equals("")) { + TMLReadChannel rdNonce = new TMLReadChannel(("data_" + ch.name + "_" + ch.task), taskAD.getReferenceObject()); + rdNonce.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); + rdNonce.securityPattern = new SecurityPattern(ch.nonceName, SecurityPattern.NONCE_PATTERN, overhead, "", encComp, decComp, "", "", ""); + rdNonce.securityPattern.originTask = rdNonce.getChannel(0).getOriginTask().getName().replaceAll(appName + "__", ""); + rdNonce.setNbOfSamples("1"); + taskAD.addElement(rdNonce); + + choice.addNext(rdNonce); + prevRd = rdNonce; + } + TMLReadChannel rd = new TMLReadChannel("data_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); - rd.securityPattern = channelSecMap.get(ch.name); + rd.setNbOfSamples("1"); taskAD.addElement(rd); @@ -1792,19 +1779,7 @@ public class SecurityGenerationForTMAP implements Runnable { } //Connect choice and readchannel - choice.addNext(rd); - - //If needed, receive nonce from task - if (!ch.nonceName.equals("")) { - rd = new TMLReadChannel(("data_" + ch.name + "_" + ch.task), taskAD.getReferenceObject()); - rd.addChannel(tmlmodel.getChannelByName("data_" + ch.name + "_" + ch.task)); - rd.securityPattern = channelSecMap.get(ch.nonceName); - rd.setNbOfSamples("1"); - taskAD.addElement(rd); - - choice.getNextElement(choice.getNbNext()-1).addNext(rd); - - } + prevRd.addNext(rd); //Send data back to task TMLWriteChannel wr = new TMLWriteChannel("retData_" + ch.name + "_" + ch.task, taskAD.getReferenceObject()); @@ -1815,10 +1790,10 @@ public class SecurityGenerationForTMAP implements Runnable { wr.setEncForm(false); } wr.setNbOfSamples("1"); - wr.securityPattern = channelSecMap.get(ch.name); + taskAD.addElement(wr); - TraceManager.addDev("0 HSMChannel: ch =" + ch.name + " secType=" + ch.secType); if (ch.secType == HSMChannel.DEC) { + rd.securityPattern = channelSecMap.get(ch.name); TraceManager.addDev("Add Decrypt operator"); //Add Decrypt operator TMLExecC dec = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); @@ -1851,11 +1826,9 @@ public class SecurityGenerationForTMAP implements Runnable { //Connect stop and write channel wr.addNext(stop); - TraceManager.addDev("rd.getEncForm()=" + rd.getEncForm()); - TraceManager.addDev("wr.getEncForm()=" + wr.getEncForm()); - TraceManager.addDev("dec.securityPattern.getProcess=" + dec.securityPattern.process); } else { + wr.securityPattern = channelSecMap.get(ch.name); TraceManager.addDev("Add Encrypt operator"); TMLExecC enc = new TMLExecC(channelSecMap.get(ch.name).name, taskAD.getReferenceObject()); enc.securityPattern = new SecurityPattern(channelSecMap.get(ch.name)); @@ -1886,6 +1859,7 @@ public class SecurityGenerationForTMAP implements Runnable { enc.securityPattern.overhead = Integer.parseInt(overhead); enc.securityPattern.encTime = Integer.parseInt(encComp); enc.securityPattern.decTime = Integer.parseInt(decComp); + enc.securityPattern.nonce = ch.nonceName; taskAD.addElement(enc); //Connect encrypt and readchannel @@ -1897,9 +1871,6 @@ public class SecurityGenerationForTMAP implements Runnable { //Add Stop TMLStopState stop = new TMLStopState("stop", taskAD.getReferenceObject()); taskAD.addElement(stop); - TraceManager.addDev("rd.getEncForm()=" + rd.getEncForm()); - TraceManager.addDev("wr.getEncForm()=" + wr.getEncForm()); - TraceManager.addDev("enc.securityPattern.getProcess=" + enc.securityPattern.process); //Connect stop and write channel wr.addNext(stop); } diff --git a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java index 50d57f9b95df9b97def3306c07ff0a46f157273e..3bfcaf92428a5f5572cfeb096706a29ad1dc135a 100644 --- a/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java +++ b/src/main/java/tmltranslator/toavatarsec/TML2Avatar.java @@ -1897,6 +1897,27 @@ public class TML2Avatar { //Create iteration attribute AvatarAttribute req_loop_index = new AvatarAttribute("req_loop_index", AvatarType.INTEGER, block, null); block.addAttribute(req_loop_index); + for (Object obj : tmlmodel.getRequestsToMe(task)) { + TMLRequest req = (TMLRequest) obj; + for (int i = 0; i < req.getNbOfParams(); i++) { + if (block.getAvatarAttributeWithName(req.getParam(i)) == null) { + AvatarType type; + if (req.getParam(i).matches("-?\\d+")) { + type = AvatarType.INTEGER; + } else if (req.getParam(i).matches("(?i)^(true|false)")) { + type = AvatarType.BOOLEAN; + } else { + type = AvatarType.UNDEFINED; + } + String nameNewAtt = "arg"+ (i+1) +"_req"; + if (block.getAvatarAttributeWithName(nameNewAtt) == null) { + AvatarAttribute avattr = new AvatarAttribute(nameNewAtt, type, block, null); + avattr.setInitialValue(req.getParam(i)); + block.addAttribute(avattr); + } + } + } + } //TMLRequest request= tmlmodel.getRequestToMe(task); //Oh this is fun...let's restructure the state machine @@ -1978,25 +1999,8 @@ public class TML2Avatar { block.addAttribute(requestData);*/ for (int i = 0; i < req.getNbOfParams(); i++) { if (block.getAvatarAttributeWithName(req.getParam(i)) == null) { - //Throw Error - AvatarType type; - if (req.getParam(i).matches("-?\\d+")) { - type = AvatarType.INTEGER; - } else if (req.getParam(i).matches("(?i)^(true|false)")) { - type = AvatarType.BOOLEAN; - } else { - type = AvatarType.UNDEFINED; - } String nameNewAtt = "arg"+ (i+1) +"_req"; - if (block.getAvatarAttributeWithName(nameNewAtt) == null) { - AvatarAttribute avattr = new AvatarAttribute(nameNewAtt, type, block, null); - avattr.setInitialValue(req.getParam(i)); - block.addAttribute(avattr); - as.addValue(avattr.getName()); - TraceManager.addDev("Missing Attribute " + req.getParam(i)); - } else { - as.addValue(block.getAvatarAttributeWithName(nameNewAtt).getName()); - } + as.addValue(block.getAvatarAttributeWithName(nameNewAtt).getName()); } else { // Add parameter to signal and actiononsignal as.addValue(req.getParam(i));