bosconnection.java
来自「基于Jabber协议的即时消息服务器」· Java 代码 · 共 137 行
JAVA
137 行
/** * $Revision$ * $Date$ * * Copyright (C) 2006 Jive Software. 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. * * Heavily inspired by joscardemo of the Joust Project: http://joust.kano.net/ */package org.jivesoftware.wildfire.gateway.protocols.oscar;import net.kano.joscar.*;import net.kano.joscar.flap.*;import net.kano.joscar.flapcmd.*;import net.kano.joscar.net.*;import net.kano.joscar.snac.*;import net.kano.joscar.snaccmd.*;import net.kano.joscar.snaccmd.conn.*;import net.kano.joscar.snaccmd.icbm.*;import net.kano.joscar.snaccmd.loc.*;import net.kano.joscar.snaccmd.ssi.*;import net.kano.joscar.ssiitem.*;import java.util.Arrays;import java.util.List;import org.jivesoftware.util.Log;import org.jivesoftware.wildfire.gateway.TransportLoginStatus;import org.xmpp.packet.Presence;/** * Handles BOS related packets. * * @author Daniel Henninger * Heavily inspired by joscardemo from the joscar project. */public class BOSConnection extends BasicFlapConnection { protected SsiItemObjectFactory itemFactory = new DefaultSsiItemObjFactory(); private static final List<CapabilityBlock> MY_CAPS = Arrays.asList( CapabilityBlock.BLOCK_ICQCOMPATIBLE ); public BOSConnection(ConnDescriptor cd, OSCARSession mainSession, ByteBlock cookie) { super(cd, mainSession, cookie); // Hand off to BasicFlapConnection } protected void handleStateChange(ClientConnEvent e) { Log.debug("OSCAR bos service state change from "+e.getOldState()+" to "+e.getNewState()); if (e.getNewState() == ClientFlapConn.STATE_NOT_CONNECTED && e.getOldState() == ClientFlapConn.STATE_CONNECTED && getMainSession().isLoggedIn()) { getMainSession().bosDisconnected(); } } protected void handleFlapPacket(FlapPacketEvent e) { Log.debug("OSCAR bps flap packet received: "+e); super.handleFlapPacket(e); } protected void handleSnacPacket(SnacPacketEvent e) { Log.debug("OSCAR bos snac packet received: "+e); super.handleSnacPacket(e); SnacCommand cmd = e.getSnacCommand(); if (cmd instanceof ServerReadyCmd) { request(new ParamInfoRequest()); request(new LocRightsRequest()); request(new SsiRightsRequest()); request(new SsiDataRequest()); } } protected void handleSnacResponse(SnacResponseEvent e) { super.handleSnacResponse(e); Log.debug("OSCAR bos snac response received: "+e); SnacCommand cmd = e.getSnacCommand(); if (cmd instanceof LocRightsCmd) { request(new SetInfoCmd(new InfoData("oscargateway", null, MY_CAPS, null))); request(new MyInfoRequest()); } else if (cmd instanceof ParamInfoCmd) { ParamInfoCmd pic = (ParamInfoCmd) cmd; ParamInfo info = pic.getParamInfo(); request(new SetParamInfoCmd(new ParamInfo(0, info.getFlags() | ParamInfo.FLAG_TYPING_NOTIFICATION, 8000, info.getMaxSenderWarning(), info.getMaxReceiverWarning(), 0))); } else if (cmd instanceof ServiceRedirect) { ServiceRedirect sr = (ServiceRedirect) cmd; oscarSession.connectToService(sr.getSnacFamily(), sr.getRedirectHost(), sr.getCookie()); } else if (cmd instanceof SsiDataCmd) { SsiDataCmd sdc = (SsiDataCmd) cmd; List<SsiItem> items = sdc.getItems(); for (SsiItem item : items) { SsiItemObj obj = itemFactory.getItemObj(item); if (obj instanceof BuddyItem) { Log.debug("AIM got buddy item " + obj); oscarSession.gotBuddy((BuddyItem) obj); } else if (obj instanceof GroupItem) { Log.debug("AIM got group item " + obj); oscarSession.gotGroup((GroupItem) obj); } } if (sdc.getLastModDate() != 0) { request(new ActivateSsiCmd()); clientReady(); Presence p = new Presence(); p.setTo(oscarSession.getJID()); p.setFrom(oscarSession.getTransport().getJID()); oscarSession.getTransport().sendPacket(p); oscarSession.setLoginStatus(TransportLoginStatus.LOGGED_IN); oscarSession.gotCompleteSSI(); } } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?