⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 loginconnection.java

📁 基于Jabber协议的即时消息服务器
💻 JAVA
字号:
/** * $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 org.jivesoftware.util.Log;import org.xmpp.packet.Message;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.auth.*;/** * Handles the login process with the OSCAR login server. * * @author Daniel Henninger * Heavily inspired by joscardemo from the joscar project. */public class LoginConnection extends BaseFlapConnection {    protected boolean loggedin = false;    public LoginConnection(ConnDescriptor cd, OSCARSession mainSession) {        super(cd, mainSession); // Hand off to BaseFlapConnection    }    protected void handleStateChange(ClientConnEvent e) {        Log.debug("OSCAR login service state change from "+e.getOldState()+" to "+e.getNewState());        if (e.getNewState() == ClientFlapConn.STATE_CONNECTED) {            getFlapProcessor().sendFlap(new LoginFlapCmd());            request(new KeyRequest(oscarSession.getRegistration().getUsername()));        }        else if (e.getNewState() == ClientFlapConn.STATE_FAILED) {            //TODO: Do we need to catch these?//            Message m = new Message();//            m.setType(Message.Type.error);//            m.setFrom(this.getMainSession().getTransport().getJID());//            m.setTo(this.getMainSession().getJIDWithHighestPriority());//            m.setBody("Connection failed: " + e.getReason());//            this.getMainSession().getTransport().sendPacket(m);//            this.getMainSession().logOut();        }        else if (e.getNewState() == ClientFlapConn.STATE_NOT_CONNECTED) {            //TODO: Do we need to catch these?//            if (!loggedin) {//                Message m = new Message();//                m.setType(Message.Type.error);//                m.setFrom(this.getMainSession().getTransport().getJID());//                m.setTo(this.getMainSession().getJIDWithHighestPriority());//                m.setBody("Connection lost: " + e.getReason());//                this.getMainSession().getTransport().sendPacket(m);//                this.getMainSession().logOut();//            }        }    }    protected void handleFlapPacket(FlapPacketEvent e) { }    protected void handleSnacPacket(SnacPacketEvent e) { }    protected void handleSnacResponse(SnacResponseEvent e) {        SnacCommand cmd = e.getSnacCommand();        if (cmd instanceof KeyResponse) {            KeyResponse kr = (KeyResponse) cmd;            ByteBlock authkey = kr.getKey();            ClientVersionInfo version = new ClientVersionInfo(                    "AOL Instant Messenger, version 5.5.3415/WIN32",                    -1, 5, 5, 0, 3415, 239);            request(new AuthRequest(oscarSession.getRegistration().getUsername(), oscarSession.getRegistration().getPassword(), version, authkey));        }        else if (cmd instanceof AuthResponse) {            AuthResponse ar = (AuthResponse) cmd;            int error = ar.getErrorCode();            if (error != -1) {                String errormsg;                switch (error) {                    case (AuthResponse.ERROR_ACCOUNT_DELETED): {                        errormsg = "This account has been deleted.";                        break;                    }                    case (AuthResponse.ERROR_BAD_INPUT): {                        errormsg = "Illegal screen name/uin specified.";                        break;                    }                    case (AuthResponse.ERROR_BAD_PASSWORD): {                        errormsg = "Incorrect password specified.";                        break;                    }                    case (AuthResponse.ERROR_CLIENT_TOO_OLD): {                        errormsg = "Plugin is identifying itself as too old of a client.  Please contact the develop.";                        break;                    }                    case (AuthResponse.ERROR_CONNECTING_TOO_MUCH_A):                    case (AuthResponse.ERROR_CONNECTING_TOO_MUCH_B): {                        errormsg = "You have connected too many times in too short of a time frame.  Please wait around 15 minutes before trying again.";                        break;                    }                    case (AuthResponse.ERROR_INVALID_SN_OR_PASS_A):                    case (AuthResponse.ERROR_INVALID_SN_OR_PASS_B): {                        errormsg = "Invalid screen name or password specified.  Please re-register with a valid screen name and password.";                        break;                    }                    case (AuthResponse.ERROR_SIGNON_BLOCKED): {                        errormsg = "Your account has been temporarily suspended.";                        break;                    }                    default: {                        errormsg = "Unknown error code returned from AIM: "+error+"\nURL: "+ar.getErrorUrl();                    }                }                Message m = new Message();                m.setType(Message.Type.error);                m.setTo(getMainSession().getJID());                m.setFrom(getMainSession().getTransport().getJID());                m.setBody(errormsg);                getMainSession().getTransport().sendPacket(m);            }            else {                loggedin = true;                oscarSession.startBosConn(ar.getServer(), ar.getPort(), ar.getCookie());                Log.info("OSCAR connection to " + ar.getServer() + ":"                        + ar.getPort());            }            disconnect();        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -