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

📄 jaimlib.java

📁 100%Java编写及时报信工具
💻 JAVA
字号:
package jaimlib;

import java.util.*;
import java.net.*;
import java.io.*;
/* Copyright, 2001 Jason Dominiczak.
 *
 * This file is part of JIM - The Java Instant Messenger.
 * eMailer 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, or (at your option)
 * any later version.

 * JIM 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 eMailer; see the file COPYING. If not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
 * MA 02111-1307, USA.
 */
public class Jaimlib {
	private java.net.Socket aimSocket;
	public java.io.PrintWriter outStream;
	public int localSequenceNumber = 13402;
	public int remoteSequenceNumber;
	public java.io.DataInputStream inStream;
	public aimplugin.AimPlugin callback;
/**
 * Jaimlib constructor comment.
 */
public Jaimlib() {
	super();
}
/**
 * Insert the method's description here.
 * Creation date: (10/29/2001 9:21:56 PM)
 * @param server java.lang.String
 * @param port int
 */
public void connectServer(String server, int port, String Password, String Username) {
    PrintWriter out = null;
    //BufferedReader in = null;
    BufferedReader in = null;
    try {
        aimSocket = new Socket(server, port);
        outStream = new PrintWriter(new BufferedWriter(new OutputStreamWriter(aimSocket.getOutputStream())), true);
		aimSocket.setTcpNoDelay(true);
        //inStream = new BufferedReader(new InputStreamReader(aimSocket.getInputStream()));
        inStream = new DataInputStream(aimSocket.getInputStream());
        startInputThread();
        //in = new DataInputStream(aimSocket.getInputStream());
        //char line = new char();
        //out.println("FLAPON\r\n\r\n");
        //while ((line = in.readChar()) != null)
        //    System.out.println("> " + line.toString());
        outStream.write("FLAPON\r\n\r\n");
        outStream.flush();
        try {
            Thread.sleep(500);
        } catch (java.lang.InterruptedException e) {
        	System.err.println(e.toString());
	        }
        
        char[] header = new char[6];
        header[0] = '*'; // byte 0, length 1, magic 42 
        header[1] = 01;   // byte 1, length 1, frame type (defined above SFLAP_FRAME_*
        header[2] = 13401 / 256;        // byte 2, length 2, sequence number, network byte order 
        header[3] = (char) 13401 % 256;
        header[4] = (char) ((8 + Username.length()) / 256); // byte 4, length 2, length, network byte order 
        header[5] = (char) ((8 + Username.length()) % 256);
        outStream.print(header);
        
        char[] signon = new char[8];
        signon[0] = '\0'; // byte 0, length 4, flap version (1) 
        signon[1] = '\0';
        signon[2] = '\0';
        signon[3] = '\001';
        signon[4] = '\0'; // byte 4, length 2, tlv tag (1) 
        signon[5] = '\001';
        signon[6] = (char) (Username.length() / 256);
        // byte 6, length 2, username length, network byte order 
        signon[7] = (char) (Username.length() % 256);
        outStream.print(signon);
        outStream.print(Username);
        outStream.flush();
        try {
            Thread.sleep(500);
        } catch (java.lang.InterruptedException e) {
        	System.err.println(e.toString());
	        }
        //doStuff();
        //sendPacket("toc_signon login.oscar.aol.com 5190 superhuman06 0x3f0f15432e01 english \"libfiretalk v 1.0\"");
        sendPacket("toc_signon login.oscar.aol.com 5190 " + normalize(Username) + " " + hashPassword(Password) + " english \"libfiretalk v 1.0\"");
        try {
            Thread.sleep(2000);
        } catch (java.lang.InterruptedException e) {
        	System.err.println(e.toString());
	    }
        //sendPacket("toc_add_buddy superhuman06");
        //sendPacket("toc_add_buddy dmbman06");
        sendPacket("toc_init_done");
    } catch (UnknownHostException e) {
        System.err.println("Don't know about host: taranis.");
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't get I/O for" + "the connection to: taranis.");
        System.exit(1);
    }
    /*
    out.println("FLAPON\r\n\r\n");
    
    String line;
    while ((line = in.readLine()) != null)
      System.out.println("> " + line);
      
    */
}
/**
 * Insert the method's description here.
 * Creation date: (11/1/2001 3:31:59 PM)
 * @return char[]
 */
public char[] createHeader(int len) {
	char[] header2 = new char[6];
	int len1a = len/256;
	int len1b = len%256;
	int sequence1a = localSequenceNumber/256;
	int sequence1b = localSequenceNumber%256;
    header2[0] = '*'; // byte 0, length 1, magic 42 
    header2[1] = 02; // byte 1, length 1, frame type (defined above SFLAP_FRAME_*
    //header2[2] = i / 256;
    // byte 2, length 2, sequence number, network byte order 
    //header2[3] = (char) 13402 % 256;
    //header2[4] = len / 256; // byte 4, length 2, length, network byte order
    header2[2] = (char) sequence1a;
    header2[3] = (char) sequence1b;
    header2[4] = (char) len1a;
    header2[5] = (char) len1b;
    //header2[5] = (char) len % 256;
    localSequenceNumber++;
	return header2;
}
/**
 * Insert the method's description here.
 * Creation date: (11/1/2001 6:31:10 PM)
 * @param data java.lang.String
 */
public void handlePacket(byte[] buffer) {
    if(buffer.equals(null))
    {
    }
	String inString = new String(buffer);
    StringTokenizer inToken = new StringTokenizer(inString, ":");
    String command = inToken.nextToken();
    if (command.equals("IM_IN")) {
        String from = normalize(inToken.nextToken());
        String auto = inToken.nextToken();
        String mesg = inToken.nextToken();
        while (inToken.hasMoreTokens()) {
            mesg = mesg + ":" + inToken.nextToken();
        }
        //mesg = ebnet.snLookup(from,2)+"\0"+mesg;
        callback.callbackRecievedMessage(from, mesg, 0);
        //ebnet.send("MESG",mesg.getBytes());
        return;
    }
    if (command.equals("UPDATE_BUDDY")) {
        String name = normalize(inToken.nextToken());
        boolean stat = false;
        if (inToken.nextToken().equals("T")) {
            callback.callbackBuddyOn(name);
        } else {
            callback.callbackBuddyOff(name);
        }

        //callback.localJim.addBuddyToTree(name, callback);
        //ebnet.updateStat(name,"IM",stat);
        return;
    }
    if (command.equals("CONFIG")) {
        String PreSend = "toc_add_buddy ";
        while (inToken.hasMoreTokens()) {
            String tempStr = inToken.nextToken();
            StringTokenizer configToken = new StringTokenizer(tempStr, "\n");
            while (configToken.hasMoreTokens()) {
                String TempStr2 = configToken.nextToken();
                StringTokenizer buddyToken = new StringTokenizer(TempStr2, " ",true);
                String TempStr3 = buddyToken.nextToken();
                if (TempStr3.equals("b")) {
                 	String snString = new String();   
	                while (buddyToken.hasMoreTokens()) {
	                    snString += new String(buddyToken.nextToken());
                    }
                    PreSend += new String(normalize(snString) + " ");
                }
            }
        }
        //System.out.println(PreSend);
        sendPacket(PreSend);

    }
    if (command.equals("NICK")) {
    }
    if (command.equals("ERROR")) {
        String error = inToken.nextToken();
        if (error.equals("901")) {
            callback.callbackError(901);
            //ebnet.send("ERRR",(" not currently available").getBytes());
            return;
        }
        if (error.equals("903")) {
            callback.callbackError(903);
            //ebnet.send("ERRR",("Message dropped, sending too fast").getBytes());
            return;
        }
        if (error.equals("960")) {
            //ebnet.send("ERRR",("Sending messages too fast to "+inToken.nextToken()).getBytes());
            callback.callbackError(960);
            return;
        }
        if (error.equals("961")) {
            //ebnet.send("ERRR",(inToken.nextToken() +" sent you too big a message").getBytes());
            callback.callbackError(961);
            return;
        }
        if (error.equals("962")) {
            //ebnet.send("ERRR",(inToken.nextToken() +" sent you a message too fast").getBytes());
            callback.callbackError(962);
            return;
        }
        if (error.equals("983")) {
            //ebnet.send("ERRR",(inToken.nextToken() +" sent you a message too fast").getBytes());
           	logoff();
            callback.callbackError(983);
            return;
        }
        if (error.equals("980")) {
            //ebnet.send("ERRR",(inToken.nextToken() +" sent you a message too fast").getBytes());
           	logoff();
            callback.callbackError(980);
            return;
        }
        if (error.equals("Signon err")) {
            //ebnet.send("ERRR",("AIM Signon failure: "+inToken.nextToken()).getBytes());
            //signoff("5");
            callback.callbackError(1);
        } else {
            callback.callbackError((new Integer(error)).intValue());
        }
        return;
    }
}
/**
 * Insert the method's description here.
 * Creation date: (10/31/2001 8:14:53 PM)
 * @return char[]
 * @param Password java.lang.String
 */
public String hashPassword(String Password) {
	String roast = "Tic/Toc";
	String out = "";
	String in = Password;
	String out2 = "0x";
	for (int i = 0; i < in.length(); i++) {
	    out = java.lang.Long.toHexString(in.charAt(i) ^ roast.charAt(i % 7));
	    if (out.length() < 2) {out2 = out2 + "0";}
	    out2 = out2 + out;
	}
	return out2;
}
/**
 * Insert the method's description here.
 * Creation date: (11/2/2001 3:32:07 PM)
 * @param data char[]
 */
public boolean isStartOfPacket(char[] data) {
    if (data[0] == '*') {
        if (data[1] == 01) {
            return true;
        } else
            if (data[1] == 02) {
                return true;
            } else
                if (data[1] == 03) {
                    return true;
                } else
                    if (data[1] == 04) {
                        return true;
                    } else
                        if (data[1] == 05) {
                            return true;
                        } else {
                            return false;
                        }
	
    }
    return false;
}
/**
 * Insert the method's description here.
 * Creation date: (11/2/2001 3:32:07 PM)
 * @param data char[]
 */
public boolean isStartOfPacket(char char1, char char2) {
    if (char1 == '*') {
        if (char2 == 01) {
            return true;
        } else
            if (char2 == 02) {
                return true;
            } else
                if (char2 == 03) {
                    return true;
                } else
                    if (char2 == 04) {
                        return true;
                    } else
                        if (char2 == 05) {
                            return true;
                        } else {
                            return false;
                        }
	
    }
    return false;
}
/**
 * Insert the method's description here.
 * Creation date: (11/24/2001 10:17:05 PM)
 */
public void logoff() {
	try {
	    outStream.close();
	    inStream.close();
	    aimSocket.close();
	}
	catch (IOException e) {System.out.println(e);}
	}
/**
 * Insert the method's description here.
 * Creation date: (11/2/2001 5:44:36 PM)
 * @param username java.lang.String
 */
public String normalize(String in) {
	String out = "";
	in = in.toLowerCase();
	/*
	char[] arr = in.toCharArray();
	for (int i=0;i<arr.length;i++) {
	    if (arr[i] != ' ') 
	    	out = out + "" + arr[i];
	}
	*/
	StringTokenizer sTok = new StringTokenizer(in, " ", false);
	while(sTok.hasMoreTokens())
	{
		out += sTok.nextToken();
	}
	return out;
}
/**
 * Insert the method's description here.
 * Creation date: (11/1/2001 3:31:23 PM)
 * @param data java.lang.String
 */
public void sendPacket(String data) {
    int len = data.length() + 1;//1 extra needed for null char ending
    //char[] dataarray = char[len];
    if(len>2042)
    {
	    callback.callbackError(666);
	    return;
    }
    CharArrayWriter caw = new CharArrayWriter();
    try {
        caw.write(createHeader(len));
        caw.write(data);
        caw.write((char) 00);
        outStream.print(caw.toCharArray());
        outStream.flush();
    } catch (IOException e) {
    }
}
/**
 * Insert the method's description here.
 * Creation date: (11/1/2001 6:04:12 PM)
 * @param in java.io.BufferedReader
 */
public void startInputThread() {
    Runnable r = new Runnable() {
        public void run() {
            byte[] data;
            while (true) {
                try {
                 	int length;   
	                inStream.skip(4);
                    length = inStream.readShort();
                    data = new byte[length];
                    inStream.readFully(data);
                    handlePacket(data);                    
                    
                } catch (IOException e) {
                    return;
                }
            }
        }
    };
    Thread newThread = new Thread(r, "Timer");
    newThread.start();
}
}

⌨️ 快捷键说明

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