/* $Id: MsgHandlerDialogInitAnon.java,v 1.5 2005/06/10 18:03:03 kleiner Exp $
This file is part of HBCI4Java
Copyright (C) 2001-2005 Stefan Palme
HBCI4Java 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.
HBCI4Java 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 this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package org.kapott.hbci.server.msg;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import org.kapott.hbci.manager.HBCIUtils;
import org.kapott.hbci.manager.HBCIUtilsInternal;
import org.kapott.hbci.protocol.MSG;
import org.kapott.hbci.server.Dialog;
public class MsgHandlerDialogInitAnon
extends AbstractMsgHandler
{
public MsgHandlerDialogInitAnon(MSG cryptedMsg,MSG decryptedMsg,String decryptedMsgData,Dialog conn)
{
super(cryptedMsg,decryptedMsg,decryptedMsgData,conn);
}
protected void initMessageHandler()
{
dialog.setFlag("signResponse",false);
dialog.setFlag("encryptResponse",false);
}
protected boolean isMessageAllowed()
{
return !dialog.isInitialized() && getServerData().isAnonAllowed();
}
protected void handleMessageContent()
{
// check idn
// kik ok
if (!getData("Idn.KIK.country").equals(getServerData().getCountry()) ||
!getData("Idn.KIK.blz").equals(getServerData().getBLZ())) {
addGlobRet("9050","Teilweise fehlerhaft",null);
addSegRet("Idn","2","9210","ungltige Bankkennung",null);
return;
}
// procprep
// *** language ok (choose if default)
// now start creating response message
addGlobRet("0020","Dialoginitialisierung erfolgreich",null);
// check for bpd
if (Integer.parseInt(getData("ProcPrep.BPD")) <
Integer.parseInt(dialog.getBPD().getProperty("BPA.version"))) {
HBCIUtils.log("adding newer BPD to response message",HBCIUtils.LOG_DEBUG);
// add segref headers to all segments
String segref=getData("ProcPrep.SegHead.seq");
setData("BPD.BPA.SegHead.ref",segref);
setData("BPD.CommListRes.SegHead.ref",segref);
setData("BPD.SecMethod.SegHead.ref",segref);
setData("BPD.CompMethod.SegHead.ref",segref);
// create segrefs for all gv param segments
Properties bpd=dialog.getBPD();
for (Enumeration e=bpd.keys();e.hasMoreElements();) {
String key=(String)e.nextElement();
if (key.startsWith("Params") && key.endsWith(".maxnum")) {
int firstDot=key.indexOf('.');
int secondDot=key.indexOf('.',firstDot+1);
String segname=key.substring(0,secondDot);
setData("BPD."+segname+".SegHead.ref",segref);
}
}
// fill bpd response
for (Iterator i=bpd.entrySet().iterator();i.hasNext();) {
Map.Entry entry=(Map.Entry)i.next();
setData("BPD."+entry.getKey(),(String)entry.getValue());
}
addGlobRet("3060","Teilweise liegen Warnungen oder Hinweise vor",null);
addSegRet("ProcPrep",null,"3050","BPD nicht mehr aktuell - neue Version folgt",null);
}
// add UPD for current userid
Properties upd=getServerData().getUPD(dialog.getUserId());
if (Integer.parseInt(getData("ProcPrep.UPD")) <
Integer.parseInt(upd.getProperty("UPA.version"))) {
HBCIUtils.log("adding newer UPD to response message",HBCIUtils.LOG_DEBUG);
// add segref headers to all segments
String segref=getData("ProcPrep.SegHead.seq");
setData("UPD.UPA.SegHead.ref",segref);
for (int i=0;;i++) {
String header=HBCIUtilsInternal.withCounter("KInfo",i);
if (upd.getProperty(header+".KTV.number")==null)
break;
setData("UPD."+header+".SegHead.ref",segref);
}
// fill UPD response
for (Iterator i=upd.entrySet().iterator();i.hasNext();) {
Map.Entry entry=(Map.Entry)i.next();
setData("UPD."+entry.getKey(),(String)entry.getValue());
}
addGlobRet("3060","Teilweise liegen Warnungen oder Hinweise vor",null);
addSegRet("ProcPrep",null,"3050","UPD nicht mehr aktuell - neue Version folgt",null);
}
// *** add messages for current userid
}
protected void postProcess()
{
if (globRetIsOk()) {
dialog.setInitialized(true);
dialog.setAnonymous(true);
dialog.setFlag("forceEnd",false);
}
}
}