亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? requestbuddyiconaction.java.svn-base

?? 類似QQ的功能
?? SVN-BASE
字號:
/*******************************************************************************
 Jimm - Mobile Messaging - J2ME ICQ clone
 Copyright (C) 2003-08  Jimm Project

 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
 as published by the Free Software Foundation; either version 2
 of the License, or (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 ********************************************************************************
 File: src/jimm/comm/RequestBuddyIconAction.java
 Version: ###VERSION###  Date: ###DATE###
 Author(s): Ivan Mikitevich
 *******************************************************************************/
//#sijapp cond.if target!="DEFAULT" & modules_AVATARS="true"#
package jimm.comm;

import java.util.*;
import javax.microedition.lcdui.Image;

import jimm.JimmException;
import jimm.DebugLog;
import jimm.JimmUI;
import jimm.MainThread;
import jimm.comm.connections.SOCKETConnection;

public class RequestBuddyIconAction extends Action
{
    // Action states
    public static final int STATE_ERROR = -1;
    public static final int STATE_INIT_DONE = 0;
    public static final int STATE_CONNECTION_ESTB = 1;
    public static final int STATE_CLI_COOKIE_SENT = 2;
    public static final int STATE_CLI_READY_SENT = 3;
    public static final int STATE_CLI_REQBUDDYICON_SENT = 4;
    public static final int STATE_ACTION_DONE = 5;

    public static final int STATE_MAX = 5;

    // Timeout
    public int TIMEOUT = 30 * 1000; // milliseconds

    /** *********************************************************************** */

    // Server host
    private String srvHost;
    // Server port
    private String srvPort;

    private String uin;

    private byte[] biHash;

    // Client cookie
    private byte[] clicookie;

    // Action state
    private int state;

    // Last activity
    private Date lastActivity = new Date();
    private boolean active;

    // Constructor
    public RequestBuddyIconAction (String uin, byte[] biHash)
    {
    	super(false, true);
		this.uin = uin;
		this.biHash = biHash;
    }

    // Init action
    protected void init() throws JimmException
    {

		if (Icq.bartC != null)
		{
			if (Icq.bartC.getState())
			{
				this.sendBuddyIconRequest();
		        // Update activity timestamp
		        this.lastActivity = new Date();
				return;
			}
		}

		try
		{
			// Request BART server addr
			byte[] rbuf = new byte[2];
			Util.putWord(rbuf, 0, 0x0010);
			Packet reqp = new SnacPacket(SnacPacket.CLI_SERVICEREQUEST_FAMILY, SnacPacket.CLI_SERVICEREQUEST_COMMAND, 0x00010004, new byte[0], rbuf);
			Icq.c.sendPacket(reqp);
			reqp = null;
			this.state = RequestBuddyIconAction.STATE_INIT_DONE;
		}
		catch (JimmException je)
		{
			this.state = RequestBuddyIconAction.STATE_ERROR;
			throw (new JimmException (100, 50, true));
		}

        // Update activity timestamp
        this.lastActivity = new Date();

    }

    private void sendBuddyIconRequest() throws JimmException
    {
		byte[] uinRaw = Util.stringToByteArray(this.uin);
		int uinLength = uinRaw.length;
		byte[] buf = new byte[1 + uinLength +1+2+1+1+16];
	
		Util.putByte(buf, 0, uinLength);
	
		System.arraycopy(uinRaw, 0, buf, 1, uinLength);
	
		Util.putByte(buf, 1+uinLength, 0x01);
		Util.putWord(buf, 2+uinLength, 0x0001);
		Util.putByte(buf, 4+uinLength, 0x01);
		Util.putByte(buf, 5+uinLength, 0x10);
	
		System.arraycopy(biHash, 0, buf, 6+uinLength, 16);
		SnacPacket request = new SnacPacket(0x0010, 0x0006, 0x0006, new byte[0], buf);
		try
		{
			Icq.bartC.sendPacket(request);
		}
		catch (JimmException je)
		{
			this.state = RequestBuddyIconAction.STATE_ERROR;
			throw (new JimmException (100, 53, true));
		}
		// Set STATE_CLI_REQBUDDYICON_SENT
		this.state = RequestBuddyIconAction.STATE_CLI_REQBUDDYICON_SENT;
    }

    // Forwards received packet, returns true if packet has been consumed
    protected boolean forward(Packet packet) throws JimmException
    {
        // Set activity flag
        this.active = true;

        // Catch JimmExceptions
        try
        {

            // Flag indicates whether packet has been consumed or not
            boolean consumed = false;

		    switch (this.state)
		    {
			// Watch out for STATE_INIT_DONE
			case RequestBuddyIconAction.STATE_INIT_DONE:
			    // Watch out for SNAC packet
			    if (packet instanceof SnacPacket)
			    {
					SnacPacket snacPacket = (SnacPacket) packet;
					if ((snacPacket.getFamily() == SnacPacket.SRV_REDIRECT_FAMILY)
						&& (snacPacket.getCommand() == SnacPacket.SRV_REDIRECT_COMMAND))
					{
						// Get data
						byte[] buf = snacPacket.getData();
						int marker = 0;
						for (int i = 0; i < 3; i++)
						{
							int tlvType = Util.getWord(buf, marker);
							byte[] tlvData = Util.getTlv(buf, marker);
							switch (tlvType)
							{
								case 0x0005 : // BART server
									this.srvHost = Util.byteArrayToString(tlvData);
									this.srvPort = "5190";
									break;
								case 0x0006 : // client cookie
									this.clicookie = tlvData;
									break;
							}
							marker += 2 + 2 + tlvData.length;
						}
					}
					// Check parameters
					if (this.clicookie.length == 0)
					{
						this.state = RequestBuddyIconAction.STATE_ERROR;
						throw (new JimmException(117, 0, false));
					}
	
					// Open connection
					try
					{
						Icq.bartC = new SOCKETConnection(JimmException.ICQ_BART);
						Icq.bartC.connect(this.srvHost + ":" + this.srvPort);
		            }
					catch (JimmException e)
					{
						DebugLog.addText (e.getMessage());
						this.state = RequestBuddyIconAction.STATE_ERROR;
						throw (new JimmException (100, 51, true));
					}
					catch (Exception e)
					{
						DebugLog.addText (e.toString());
						this.state = RequestBuddyIconAction.STATE_ERROR;
						throw (new JimmException (100, 52, true));
					}
					// Set STATE_CONNECTION_ESTB
					this.state = RequestBuddyIconAction.STATE_CONNECTION_ESTB;
					// Packet has been consumed
					consumed = true;
			    }	
				break;
	
			// Watch out for STATE_CONNECTION_ESTB
			case RequestBuddyIconAction.STATE_CONNECTION_ESTB:
			    // Watch out for SRV_CLI_HELLO packet
			    if (packet instanceof ConnectPacket)
			    {
					ConnectPacket connectPacket = (ConnectPacket) packet;
					if (connectPacket.getType() == ConnectPacket.SRV_CLI_HELLO)
					{
					    // Send a CLI_IDENT packet as reply
				    	ConnectPacket reply = new ConnectPacket(this.clicookie);
				    	Icq.bartC.sendPacket(reply);
					}
					// Move to next state
					this.state = RequestBuddyIconAction.STATE_CLI_COOKIE_SENT;
					// Packet has been consumed
					consumed = true;
			    }
			    break;
	
			// Watch out for STATE_CLI_COOKIE_SENT
			case RequestBuddyIconAction.STATE_CLI_COOKIE_SENT:
			    // Watch out for SNAC packet
			    if (packet instanceof SnacPacket)
			    {
					// Send a CLI_READY packet
					SnacPacket reply = new SnacPacket(SnacPacket.CLI_READY_FAMILY, SnacPacket.CLI_READY_COMMAND, 0x00000000, new byte[0], ConnectAction.CLI_READY_DATA);
					Icq.bartC.sendPacket(reply);
	
					this.sendBuddyIconRequest();
					// Move to next state
					this.state = RequestBuddyIconAction.STATE_CLI_REQBUDDYICON_SENT;
					// Packet has been consumed
					consumed = true;
			    }
			    break;
	
			// Watch out for STATE_CLI_REQBUDDYICON_SENT
			case RequestBuddyIconAction.STATE_CLI_REQBUDDYICON_SENT:
			    // Watch out for SNAC packet
			    if (packet instanceof SnacPacket)
			    {
				    SnacPacket snacPacket = (SnacPacket) packet;
				    if ((snacPacket.getFamily() == SnacPacket.SRV_REPLYAVATAR_FAMILY)
						    && (snacPacket.getCommand() == SnacPacket.SRV_REPLYAVATAR_COMMAND))
				    {
					    // Get data
					    byte[] buf = snacPacket.getData();
	
					    int marker = 0;
					    int uinLength = Util.getByte(buf, marker);
					    marker += 1;
	
					    String uin = Util.byteArrayToString(buf, marker, uinLength);
	
					    marker += uinLength;
					    marker += 2 + 1 + 1 + 16 + 1 + 2 + 1 + 1 + 16;
	
					    int imgLength = Util.getWord(buf, marker);
					    marker += 2;
					    byte[] iconRaw = new byte[imgLength];
					    System.arraycopy(buf, marker, iconRaw, 0, imgLength);
					    Image av = null;
					    try {
							av = Image.createImage (iconRaw, 0, iconRaw.length);
					    } catch (Exception ignore) {/* Do nothing */}
					    if (av != null) {
							MainThread.updateBuddyIcon (uin, av, biHash);
							av = null;
					    }
					    iconRaw = null;
					    buf = null;
	
					    // Move to next state
					    this.state = RequestBuddyIconAction.STATE_ACTION_DONE;
					    // Packet has been consumed
					    consumed = true;
				    }
			    }
			    break;
		    }
	
			// Update activity timestamp and reset activity flag
			if (consumed) this.lastActivity = new Date();
			this.active = false;
	
			// Return consumption flag
			return (consumed);
	
		}
        // Catch JimmExceptions
        catch (JimmException e)
        {

            // Update activity timestamp and reset activity flag
            this.lastActivity = new Date();
            this.active = false;

            this.state = RequestBuddyIconAction.STATE_ERROR;

            // Forward exception
            throw (e);
        }

    }

    // Returns true if the action is completed
    public boolean isCompleted()
    {
        return (this.state == RequestBuddyIconAction.STATE_ACTION_DONE);
    }

    // Returns true if an error has occured
    public boolean isError()
    {
    	if ((this.state != RequestBuddyIconAction.STATE_ERROR) && !this.active && (this.lastActivity.getTime() + this.TIMEOUT < System.currentTimeMillis()))
        {
            this.state = RequestBuddyIconAction.STATE_ERROR;
        }
        return (this.state == RequestBuddyIconAction.STATE_ERROR);
    }

    // Returns a number between 0 and 100 (inclusive) which indicates the current progress
    public int getProgress()
    {
   		return (state > 0) ? 100*state/STATE_MAX : 0;
    }

    public void onEvent(int eventType)
    {
    	switch (eventType)
    	{
	    	case ON_COMPLETE:
				DebugLog.addText ("RequestBuddyIconAction ON_COMPLETE");
				JimmUI.updateActiveUserInfo(this.uin);
	    		break;
	    	case ON_CANCEL:
	    	case ON_ERROR:
				DebugLog.addText ("RequestBuddyIconAction ON_ERROR");
				Icq.disconnectBart(true);
	    		break;
		}
    }
}
//#sijapp cond.end#

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产欧美日韩精品在线| 欧美视频日韩视频在线观看| 99久久精品国产毛片| av中文字幕不卡| 国产精品视频观看| 欧美在线看片a免费观看| 久久综合久久99| 欧美在线你懂的| 成人avav在线| 亚洲人妖av一区二区| 91国内精品野花午夜精品| 国产午夜精品一区二区三区嫩草| 欧洲视频一区二区| 国产乱人伦偷精品视频免下载| 亚洲国产中文字幕| 国产精品国产三级国产普通话蜜臀| 日韩欧美一二区| 欧美视频一区二区| 色呦呦国产精品| 成人午夜短视频| 狠狠色丁香婷婷综合| 人禽交欧美网站| 亚洲国产wwwccc36天堂| 亚洲乱码中文字幕| 亚洲男人的天堂在线aⅴ视频| 久久综合色鬼综合色| 91同城在线观看| 国产99一区视频免费| 国产一区二区0| 国产在线精品一区二区不卡了 | 精品国产乱码久久久久久图片 | 欧美在线free| 粉嫩嫩av羞羞动漫久久久 | 99视频国产精品| 韩国av一区二区三区在线观看| 亚洲综合免费观看高清在线观看| 国产精品欧美精品| 欧美成人一区二区三区在线观看 | 久久久久久久网| 欧美不卡一区二区三区四区| 欧美精品一二三四| 91麻豆精品国产| 欧美电影精品一区二区| 精品国产免费久久| 精品国产乱码久久久久久老虎| 欧美成人a视频| 2024国产精品| 精品少妇一区二区| 精品国一区二区三区| 久久影院午夜片一区| 国产亚洲1区2区3区| 国产精品丝袜一区| 五月婷婷欧美视频| 午夜视频一区在线观看| 99精品国产视频| 豆国产96在线|亚洲| av不卡免费电影| 在线一区二区三区四区| 欧美日韩国产成人在线91| 91精品麻豆日日躁夜夜躁| 日韩一二三区视频| 久久在线免费观看| 日韩一区日韩二区| 视频一区欧美精品| 久久99精品久久久久久| 国产馆精品极品| 97精品国产露脸对白| 欧美人与禽zozo性伦| 精品剧情在线观看| 国产精品久久久99| 五月天视频一区| 国产精品综合久久| 欧美亚洲综合色| 久久尤物电影视频在线观看| 亚洲色图欧洲色图婷婷| 日韩精品一二三区| 春色校园综合激情亚洲| 欧美在线啊v一区| 久久一日本道色综合| 亚洲精品国产第一综合99久久| 免费高清成人在线| 不卡一区在线观看| 日韩一级精品视频在线观看| 国产精品妹子av| 午夜精品视频一区| 成人成人成人在线视频| 欧美老女人在线| 中日韩免费视频中文字幕| 五月婷婷激情综合网| 成人动漫一区二区在线| 日韩女优制服丝袜电影| 一区二区在线观看免费| 国产精品一区在线观看你懂的| 在线看不卡av| 亚洲国产精品精华液ab| 免费在线观看视频一区| 91国模大尺度私拍在线视频| 久久精品人人做| 免费欧美高清视频| 欧洲在线/亚洲| 国产肉丝袜一区二区| 日本美女一区二区| 一本到不卡免费一区二区| 久久久精品国产免费观看同学| 天天av天天翘天天综合网| 99视频精品全部免费在线| 国产亚洲精品bt天堂精选| 日本欧洲一区二区| 精品1区2区3区| 日韩毛片精品高清免费| 国产精品18久久久久久久久| 91精品视频网| 亚洲第四色夜色| 91美女福利视频| 成人欧美一区二区三区视频网页 | 日本伊人精品一区二区三区观看方式| 丁香婷婷深情五月亚洲| 欧美va日韩va| 理论片日本一区| 3atv一区二区三区| 亚洲高清三级视频| 欧美又粗又大又爽| 一区二区三区在线视频观看58| 波多野结衣精品在线| 久久久久国产精品厨房| 国产一区二区三区四| 欧美成人一区二区三区片免费 | 亚洲欧美一区二区三区久本道91| 春色校园综合激情亚洲| 中文字幕免费观看一区| 高潮精品一区videoshd| 国产日韩精品一区二区浪潮av| 国产一区高清在线| 久久精品无码一区二区三区| 国产毛片精品视频| 国产日本亚洲高清| 成人免费视频播放| 国产精品久久久久久户外露出| 成人黄色av网站在线| 中文字幕一区二区三区不卡在线| 成人app在线| 亚洲精品国产成人久久av盗摄 | 亚洲柠檬福利资源导航| 色综合网站在线| 亚洲小说欧美激情另类| 欧美精品粉嫩高潮一区二区| 视频精品一区二区| 欧美电影免费观看高清完整版在线观看| 欧美a一区二区| 久久久久久久免费视频了| 成人午夜激情片| 一区二区三区四区乱视频| 欧美日本视频在线| 美脚の诱脚舐め脚责91| 国产欧美一区二区精品忘忧草| gogo大胆日本视频一区| 亚洲另类在线制服丝袜| 欧美精品欧美精品系列| 美国十次了思思久久精品导航| 久久这里只有精品视频网| 不卡的av在线| 亚洲电影一区二区| 欧美成人a∨高清免费观看| 成人夜色视频网站在线观看| 亚洲人成小说网站色在线| 欧美亚洲国产一卡| 美女视频免费一区| 日本一区二区成人| 欧美日韩激情一区| 韩国三级在线一区| 亚洲乱码国产乱码精品精98午夜| 8x8x8国产精品| 粉嫩av一区二区三区在线播放| 一区二区三区不卡视频| 制服丝袜中文字幕一区| 国产99久久久国产精品免费看 | 中文字幕免费观看一区| 欧美综合色免费| 国产福利精品导航| 亚洲风情在线资源站| 国产香蕉久久精品综合网| 欧美性色综合网| 国产九九视频一区二区三区| 亚洲国产美女搞黄色| 久久久精品免费网站| 欧美另类一区二区三区| 成人免费黄色在线| 免费观看在线综合色| 亚洲精品国产第一综合99久久| 精品精品国产高清一毛片一天堂| 色婷婷综合久久久久中文一区二区 | 日本一区二区三区在线不卡| 欧美日本一区二区| kk眼镜猥琐国模调教系列一区二区| 日日嗨av一区二区三区四区| 国产精品网站在线播放| 欧美成人一区二区三区在线观看| 欧美综合色免费| 成人av小说网| 国产成人在线视频播放|