blob: e2a6dbd41ae27bd597973a0cea30b3794592aa09 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.kerby.kerberos.kerb.client.impl.event;
import org.apache.kerby.event.AbstractEventHandler;
import org.apache.kerby.event.Event;
import org.apache.kerby.event.EventType;
import org.apache.kerby.kerberos.kerb.client.KrbContext;
import org.apache.kerby.kerberos.kerb.client.KrbHandler;
import org.apache.kerby.kerberos.kerb.client.request.AsRequest;
import org.apache.kerby.kerberos.kerb.client.request.KdcRequest;
import org.apache.kerby.kerberos.kerb.client.request.TgsRequest;
import org.apache.kerby.transport.Transport;
import org.apache.kerby.transport.event.MessageEvent;
import org.apache.kerby.transport.event.TransportEventType;
import java.io.IOException;
import java.nio.ByteBuffer;
public class EventKrbHandler extends AbstractEventHandler {
private KrbHandler innerHandler;
public void init(KrbContext context) {
this.innerHandler = new KrbHandler() {
@Override
protected void sendMessage(KdcRequest kdcRequest,
ByteBuffer requestMessage) throws IOException {
Transport transport = (Transport) kdcRequest.getSessionData();
transport.sendMessage(requestMessage);
}
};
innerHandler.init(context);
}
@Override
public EventType[] getInterestedEvents() {
return new EventType[] {
TransportEventType.INBOUND_MESSAGE,
KrbClientEventType.TGT_INTENT,
KrbClientEventType.TKT_INTENT
};
}
@Override
protected void doHandle(Event event) throws Exception {
EventType eventType = event.getEventType();
if (eventType == KrbClientEventType.TGT_INTENT ||
eventType == KrbClientEventType.TKT_INTENT) {
KdcRequest kdcRequest = (KdcRequest) event.getEventData();
innerHandler.handleRequest(kdcRequest);
} else if (event.getEventType() == TransportEventType.INBOUND_MESSAGE) {
handleMessage((MessageEvent) event);
}
}
protected void handleMessage(MessageEvent event) throws Exception {
ByteBuffer receivedMessage = event.getMessage();
KdcRequest kdcRequest = (KdcRequest) event.getTransport().getAttachment();
innerHandler.onResponseMessage(kdcRequest, receivedMessage);
if (AsRequest.class.isAssignableFrom(kdcRequest.getClass())) {
dispatch(KrbClientEvent.createTgtResultEvent((AsRequest) kdcRequest));
} else if (TgsRequest.class.isAssignableFrom(kdcRequest.getClass())) {
dispatch(KrbClientEvent.createTktResultEvent((TgsRequest) kdcRequest));
}
}
}