/*
* Copyright 2006-2010 Daniel Henninger. All rights reserved.
*
* This software is published under the terms of the GNU Public License (GPL),
* a copy of which is included in this distribution.
*/
package net.sf.kraken.protocols.oscar;
import net.kano.joscar.ByteBlock;
import net.kano.joscar.flap.ClientFlapConn;
import net.kano.joscar.flap.FlapPacketEvent;
import net.kano.joscar.flapcmd.SnacCommand;
import net.kano.joscar.net.ClientConnEvent;
import net.kano.joscar.net.ConnDescriptor;
import net.kano.joscar.snac.SnacPacketEvent;
import net.kano.joscar.snac.SnacResponseEvent;
import net.kano.joscar.snaccmd.conn.RateInfoCmd;
import org.apache.log4j.Logger;
/**
* Represents a connection to a particular OSCAR service.
*
* @author Daniel Henninger
* Heavily inspired by joscardemo from the joscar project.
*/
public class ServiceConnection extends BasicFlapConnection {
static Logger Log = Logger.getLogger(ServiceConnection.class);
protected int serviceFamily;
public ServiceConnection(ConnDescriptor cd, OSCARSession mainSession, ByteBlock cookie, int serviceFamily) {
super(cd, mainSession, cookie);
this.serviceFamily = serviceFamily;
}
@Override
protected void clientReady() {
getMainSession().serviceReady(this);
super.clientReady();
}
@Override
protected void handleStateChange(ClientConnEvent e) {
Log.debug("OSCAR service state change from "+e.getOldState()+" to "+e.getNewState());
if (e.getNewState() == ClientFlapConn.STATE_FAILED) {
getMainSession().serviceFailed(this);
} else if (e.getNewState() == ClientFlapConn.STATE_CONNECTED) {
getMainSession().serviceConnected(this);
} else if (e.getNewState() == ClientFlapConn.STATE_NOT_CONNECTED) {
getMainSession().serviceDied(this);
}
}
@Override
protected void handleFlapPacket(FlapPacketEvent e) {
super.handleFlapPacket(e);
}
@Override
protected void handleSnacPacket(SnacPacketEvent e) {
super.handleSnacPacket(e);
}
@Override
protected void handleSnacResponse(SnacResponseEvent e) {
super.handleSnacResponse(e);
SnacCommand cmd = e.getSnacCommand();
if (cmd instanceof RateInfoCmd) {
// this is all we need.
clientReady();
}
}
}