Package org.kapott.hbci.comm

Source Code of org.kapott.hbci.comm.Comm

/*  $Id: Comm.java,v 1.1 2011/05/04 22:37:51 willuhn Exp $

    This file is part of HBCI4Java
    Copyright (C) 2001-2008  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.comm;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.StringTokenizer;

import org.kapott.hbci.callback.HBCICallback;
import org.kapott.hbci.exceptions.CanNotParseMessageException;
import org.kapott.hbci.exceptions.HBCI_Exception;
import org.kapott.hbci.exceptions.ParseErrorException;
import org.kapott.hbci.manager.HBCIUtils;
import org.kapott.hbci.manager.HBCIUtilsInternal;
import org.kapott.hbci.manager.IHandlerData;
import org.kapott.hbci.manager.MsgGen;
import org.kapott.hbci.passport.HBCIPassportInternal;
import org.kapott.hbci.protocol.MSG;
import org.kapott.hbci.protocol.factory.MSGFactory;
import org.kapott.hbci.rewrite.Rewrite;

public abstract class Comm
{
    /**
     * Der zu verwendende Zeichensatz.
     */
    public final static String ENCODING = "ISO-8859-1";
   
    protected Filter               filter;
    private   HBCIPassportInternal parentPassport;
   
    protected abstract void ping(MSG msg);
    protected abstract StringBuffer pong(MsgGen gen);
    protected abstract void closeConnection();
       
    protected Comm(HBCIPassportInternal parentPassport)
    {
        this.parentPassport=parentPassport;
        this.filter=parentPassport.getCommFilter();
       
        HBCIUtilsInternal.getCallback().callback(parentPassport,HBCICallback.NEED_CONNECTION,
                HBCIUtilsInternal.getLocMsg("CALLB_NEED_CONN"),HBCICallback.TYPE_NONE,new StringBuffer());
    }

    public MSG pingpong(String msgName, MSG msg)
    {
        IHandlerData handler=getParentPassport().getParentHandlerData();
        MsgGen       gen=handler.getMsgGen();
       
        // ausgehende nachricht versenden
        HBCIUtilsInternal.getCallback().status(getParentPassport(),HBCICallback.STATUS_MSG_SEND,null);
        HBCIUtilsInternal.getCallback().status(getParentPassport(),HBCICallback.STATUS_MSG_RAW_SEND,msg.toString(0));
        ping(msg);

        // nachricht empfangen
        HBCIUtilsInternal.getCallback().status(getParentPassport(),HBCICallback.STATUS_MSG_RECV,null);
        String st = pong(gen).toString();
        HBCIUtilsInternal.getCallback().status(getParentPassport(),HBCICallback.STATUS_MSG_RAW_RECV,st);

        HBCIUtils.log("received message: "+st,HBCIUtils.LOG_DEBUG2);
        MSG retmsg=null;

        try {
            // erzeugen der liste aller rewriter
            String rewriters_st=HBCIUtils.getParam("kernel.rewriter");
            ArrayList<Rewrite> al=new ArrayList<Rewrite>();
            StringTokenizer tok=new StringTokenizer(rewriters_st,",");
            while (tok.hasMoreTokens()) {
                String rewriterName=tok.nextToken().trim();
                if (rewriterName.length()!=0) {
                    Class cl=this.getClass().getClassLoader().loadClass("org.kapott.hbci.rewrite.R"+
                                                                        rewriterName);
                    Constructor con=cl.getConstructor((Class[])null);
                    Rewrite rewriter=(Rewrite)(con.newInstance((Object[])null));
                    al.add(rewriter);
                }
            }
            Rewrite[] rewriters= al.toArray(new Rewrite[al.size()]);
   
            // alle rewriter f�r verschl�sselte nachricht durchlaufen
            for (int i=0;i<rewriters.length;i++) {
                st=rewriters[i].incomingCrypted(st,gen);
            }
           
            // versuche, nachricht als verschl�sselte nachricht zu parsen
            HBCIUtilsInternal.getCallback().status(getParentPassport(),HBCICallback.STATUS_MSG_PARSE,"CryptedRes");
            try {
                HBCIUtils.log("trying to parse message as crypted message",HBCIUtils.LOG_DEBUG);
                retmsg = MSGFactory.getInstance().createMSG("CryptedRes",st,st.length(),gen,MSG.DONT_CHECK_SEQ);
            } catch (ParseErrorException e) {
                // wenn das schiefgeht...
                HBCIUtils.log("message seems not to be encrypted; tring to parse it as "+msgName+"Res message",HBCIUtils.LOG_DEBUG);

                // alle rewriter durchlaufen, um nachricht evtl. als unverschl�sselte msg zu parsen
                gen.set("_origSignedMsg",st);
                for (int i=0;i<rewriters.length;i++) {
                    st=rewriters[i].incomingClearText(st,gen);
                }
               
                // versuch, nachricht als unverschl�sselte msg zu parsen
                HBCIUtilsInternal.getCallback().status(getParentPassport(),HBCICallback.STATUS_MSG_PARSE,msgName+"Res");
                retmsg = MSGFactory.getInstance().createMSG(msgName+"Res",st,st.length(),gen);
            }
        } catch (Exception ex) {
            throw new CanNotParseMessageException(HBCIUtilsInternal.getLocMsg("EXCMSG_CANTPARSE"),st,ex);
        }

        return retmsg;
    }
   
    public static Comm getInstance(String name,HBCIPassportInternal passport)
    {
        try {
            Class cl=Class.forName("org.kapott.hbci.comm.Comm"+name);
            Constructor cons=cl.getConstructor(new Class[] {HBCIPassportInternal.class});
            return (Comm)cons.newInstance(new Object[] {passport});
        } catch (Exception e) {
            throw new HBCI_Exception(HBCIUtilsInternal.getLocMsg("EXCMSG_CANTCREATECOMM",name),e);
        }
    }
   
    protected HBCIPassportInternal getParentPassport()
    {
        return parentPassport;
    }
   
    public void close()
    {
        closeConnection();
        HBCIUtilsInternal.getCallback().callback(getParentPassport(),HBCICallback.CLOSE_CONNECTION,
                HBCIUtilsInternal.getLocMsg("CALLB_CLOSE_CONN"),HBCICallback.TYPE_NONE,new StringBuffer());
    }
}
TOP

Related Classes of org.kapott.hbci.comm.Comm

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.