001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020 package org.apache.directory.shared.asn1.codec; 021 022 023 import org.apache.directory.shared.asn1.codec.stateful.DecoderCallback; 024 import org.apache.directory.shared.asn1.codec.stateful.StatefulDecoder; 025 import org.apache.mina.core.buffer.IoBuffer; 026 import org.apache.mina.core.session.IoSession; 027 import org.apache.mina.filter.codec.ProtocolDecoderAdapter; 028 import org.apache.mina.filter.codec.ProtocolDecoderOutput; 029 030 031 /** 032 * Adapts {@link StatefulDecoder} to MINA <tt>ProtocolDecoder</tt> 033 * 034 * @author The Apache Directory Project (mina-dev@directory.apache.org) 035 * @version $Rev: 725712 $, $Date: 2008-12-11 16:32:04 +0100 (Thu, 11 Dec 2008) $, 036 */ 037 public class Asn1CodecDecoder extends ProtocolDecoderAdapter 038 { 039 private final StatefulDecoder decoder; 040 private final DecoderCallbackImpl callback = new DecoderCallbackImpl(); 041 042 043 public Asn1CodecDecoder( StatefulDecoder decoder ) 044 { 045 decoder.setCallback( callback ); 046 this.decoder = decoder; 047 } 048 049 050 public void decode( IoSession session, IoBuffer in, ProtocolDecoderOutput out ) throws DecoderException 051 { 052 callback.decOut = out; 053 decoder.decode( in.buf() ); 054 } 055 056 057 private class DecoderCallbackImpl implements DecoderCallback 058 { 059 private ProtocolDecoderOutput decOut; 060 061 public void decodeOccurred( StatefulDecoder decoder, Object decoded ) 062 { 063 decOut.write( decoded ); 064 } 065 } 066 }