home *** CD-ROM | disk | FTP | other *** search
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import java.io.PrintStream;
- import java.net.InetAddress;
- import java.net.Socket;
- import java.net.UnknownHostException;
- import java.util.StringTokenizer;
-
- public abstract class IRCSession {
- Socket theSocket;
- DataInputStream sockIn;
- PrintStream sockOut;
- DataOutputStream sockDos;
- PrintStream userOut;
- PrintStream debugOut;
- StreamConnector mon;
- String ServerName;
- int ServerPort;
- boolean connected = false;
- String myNick;
- String currChannel;
- String motd = "";
- StringBuffer names = new StringBuffer(1024);
- public static final int RPL_WELCOME = 1;
- public static final int RPL_YOURHOST = 2;
- public static final int RPL_MYINFO = 4;
- public static final int ERR_LOW = 400;
- public static final int ERR_HIGH = 599;
- public static final int RPL_TOPIC = 332;
- public static final int RPL_NAMREPLY = 353;
- public static final int RPL_ENDOFNAMES = 366;
- public static final int RPL_MOTD = 372;
- public static final int RPL_MOTDSTART = 375;
- public static final int RPL_ENDOFMOTD = 376;
- public static final int RPL_YOUREOPER = 381;
- public static final int CMD_JOIN = 1001;
- public static final int CMD_PART = 1002;
- public static final int CMD_PRIVMSG = 1003;
- public static final int CMD_QUIT = 1004;
- public static final int SVR_PING = 2001;
- public static final int PCH_DISPLAY = 2009;
- public static final int PCH_YOURESUPER = 2017;
- public static final int PCH_REDIRECT = 551;
-
- private int getCmdID(String var1) {
- int var2;
- try {
- var2 = Integer.valueOf(var1);
- } catch (NumberFormatException var3) {
- if (var1.equalsIgnoreCase("join")) {
- var2 = 1001;
- } else if (var1.equalsIgnoreCase("part")) {
- var2 = 1002;
- } else if (var1.equalsIgnoreCase("privmsg")) {
- var2 = 1003;
- } else if (var1.equalsIgnoreCase("quit")) {
- var2 = 1004;
- } else if (var1.equalsIgnoreCase("ping")) {
- var2 = 2001;
- } else if (var1.equalsIgnoreCase("pch_display")) {
- var2 = 2009;
- } else {
- var2 = -1;
- }
- }
-
- return var2;
- }
-
- protected void toUser(String var1) {
- this.userOut.println(var1);
- }
-
- protected void toServer(String var1) {
- try {
- if (this.sockDos != null) {
- this.sockDos.writeUTF(var1);
- this.sockDos.writeUTF("\n");
- this.sockDos.flush();
- return;
- }
-
- if (this.sockOut != null) {
- this.sockOut.println(var1);
- return;
- }
-
- if (this.mon != null) {
- this.mon.send(var1);
- return;
- }
- } catch (Exception var3) {
- System.out.println("Socket error: " + var3);
- }
-
- }
-
- private String getCurrChannel() {
- return this.currChannel;
- }
-
- private void doJoin(StringTokenizer var1) {
- this.joinChannel(var1.nextToken());
- }
-
- public void doQuit(StringTokenizer var1) {
- this.disconnect();
- }
-
- private void doCommand(String var1) {
- StringTokenizer var2 = new StringTokenizer(var1.substring(1));
- String var3 = var2.nextToken();
- if (var3.equalsIgnoreCase("join")) {
- this.joinChannel(var2.nextToken());
- } else if (var3.equalsIgnoreCase("quit")) {
- this.doQuit(var2);
- } else {
- this.toServer(var1.substring(1));
- }
- }
-
- private void motdStart() {
- this.motd = "";
- }
-
- private void motdAdd(String var1) {
- this.motd = this.motd + "\n" + var1.substring(var1.indexOf(58) + 1);
- }
-
- private void motdEnd() {
- this.msgUserMotd(this.motd);
- }
-
- private void nameListAdd(StringTokenizer var1) {
- var1.nextToken(":");
-
- while(var1.hasMoreTokens()) {
- this.names.append(" ").append(var1.nextToken(" \t\n"));
- }
-
- }
-
- private void nameListEnd() {
- this.msgUserNames(this.names.toString());
- }
-
- public void userSaid(String var1) {
- if (var1 != null && var1.length() != 0) {
- if (var1.charAt(0) == '/') {
- this.doCommand(var1);
- } else {
- String var2 = this.currChannel;
- if (var2 != null) {
- this.userSaid(var2, var1);
- }
-
- }
- }
- }
-
- public void userSaid(String var1, String var2) {
- if (var2 != null && var2.length() != 0) {
- this.toServer("PRIVMSG " + var1 + " :" + var2);
- }
- }
-
- public void whois(String var1) {
- this.toServer("PCH_WHOIS " + var1);
- }
-
- public void setCreatorURL(String var1) {
- this.toServer("PCH_CREATORURL " + var1);
- }
-
- public void joinChannel(String var1) {
- this.leaveChannel();
- this.names.setLength(0);
- this.currChannel = "*waiting*";
- this.toServer("JOIN " + var1);
- }
-
- public void leaveChannel() {
- if (this.currChannel != null) {
- if (this.currChannel.length() != 0) {
- if (this.currChannel.charAt(0) != '*') {
- this.toServer("PART " + this.currChannel);
- this.currChannel = null;
- }
- }
- }
- }
-
- protected abstract void msgUserSockAccept();
-
- protected abstract void msgUserJoin(String var1, String var2);
-
- protected abstract void msgUserPart(String var1, String var2);
-
- protected abstract void msgPrivMsg(String var1, String var2, String var3);
-
- protected abstract void msgYouAreAdmin();
-
- protected abstract void msgYouAreSuperUser();
-
- protected abstract void msgPing();
-
- protected abstract void miscCmd(int var1, String var2);
-
- protected abstract void msgUserMotd(String var1);
-
- protected abstract void msgUserWelcome(String var1);
-
- protected abstract void msgUserTopic(String var1);
-
- protected abstract void msgUserNames(String var1);
-
- protected abstract void msgUserError(int var1, String var2);
-
- protected abstract void msgSwitchChannel(String var1);
-
- protected abstract void msgUserDisplay(String var1);
-
- protected void processCommand(String var1, String var2, String var3, StringTokenizer var4) {
- int var5 = this.getCmdID(var3);
- if (var5 >= 400 && var5 <= 599) {
- String var13 = var4.nextToken("\n");
- this.msgUserError(var5, var13.substring(var13.indexOf(58) + 1));
- } else {
- switch (var5) {
- case 1:
- String var9 = var4.nextToken("\n");
- this.msgUserWelcome(var9.substring(var9.indexOf(58) + 1));
- return;
- case 332:
- String var10 = var4.nextToken("\n");
- this.msgUserTopic(var10.substring(var10.indexOf(58) + 1));
- return;
- case 353:
- var4.nextToken(":");
-
- while(var4.hasMoreTokens()) {
- this.names.append(" ").append(var4.nextToken(" \t\n"));
- }
-
- return;
- case 366:
- this.msgUserNames(this.names.toString());
- return;
- case 372:
- this.motdAdd(var4.nextToken("\n"));
- return;
- case 375:
- this.motd = "";
- return;
- case 376:
- this.msgUserMotd(this.motd);
- return;
- case 381:
- this.msgYouAreAdmin();
- return;
- case 1001:
- String var6 = var4.nextToken();
- var6 = var6.substring(var6.indexOf(58) + 1);
- if (var1.equals(this.myNick)) {
- this.currChannel = var6;
- this.msgSwitchChannel(var6);
- }
-
- this.msgUserJoin(var1, var6);
- return;
- case 1002:
- this.msgUserPart(var1, var4.nextToken());
- return;
- case 1003:
- String var7 = var4.nextToken();
- String var8 = var4.nextToken("\n");
- this.msgPrivMsg(var1, var7, var8.substring(var8.indexOf(58) + 1));
- return;
- case 1004:
- this.msgUserPart(var1, "(has quit)");
- return;
- case 2001:
- this.msgPing();
- this.toServer("PONG " + this.ServerName);
- return;
- case 2009:
- String var11 = var4.nextToken("\n");
- var11 = var11.substring(var11.indexOf(58) + 1);
- this.msgUserDisplay(var11);
- return;
- case 2017:
- this.msgYouAreSuperUser();
- return;
- default:
- this.miscCmd(var5, var4.nextToken("\n"));
- }
- }
- }
-
- public void HandleServerMessage(String var1) {
- StringTokenizer var2 = new StringTokenizer(var1);
- if (var1.length() > 0) {
- String var5;
- String var6;
- if (var1.charAt(0) == ':') {
- String var3 = var2.nextToken();
- int var7 = var3.indexOf("!");
- if (var7 > 0) {
- var5 = var3.substring(1, var7);
- var6 = var3.substring(var7 + 1);
- } else {
- var5 = var3.substring(1);
- var6 = "";
- }
- } else {
- var5 = "";
- var6 = "";
- }
-
- String var4 = var2.nextToken();
- this.processCommand(var5, var6, var4, var2);
- }
- }
-
- private boolean connectSocket(String var1, int var2) throws IOException, UnknownHostException {
- this.disconnectSocket();
- this.theSocket = new Socket(var1, var2);
- this.sockIn = new DataInputStream(new BufferedInputStream(this.theSocket.getInputStream()));
- this.sockOut = new PrintStream(new BufferedOutputStream(this.theSocket.getOutputStream()), true);
- this.msgUserSockAccept();
- return true;
- }
-
- private boolean disconnectSocket() {
- try {
- this.sockIn.close();
- this.sockOut.close();
- if (this.sockDos != null) {
- this.sockDos.close();
- }
-
- this.theSocket.close();
- this.sockIn = null;
- this.sockOut = null;
- this.theSocket = null;
- if (this.mon != null) {
- this.mon.disconnect();
- }
-
- this.mon = null;
- return true;
- } catch (Exception var1) {
- return false;
- }
- }
-
- public boolean connect(String var1, String var2, String var3, String var4, int var5, int var6, String var7, boolean var8) {
- if (this.mon != null) {
- this.mon.disconnect();
- }
-
- this.mon = null;
- boolean var9 = false;
- int var10 = 0;
-
- for(int var11 = 0; var11 < var7.length(); ++var11) {
- switch (var7.charAt(var11)) {
- case 'h':
- var9 = this.httpConnect(var4, var6);
- var10 = var6;
- break;
- case 't':
- var9 = this.tcpConnect(var4, var5);
- var10 = var5;
- }
-
- if (var9) {
- break;
- }
- }
-
- if (!var9) {
- return false;
- } else {
- this.ServerName = var4;
- this.ServerPort = var10;
-
- String var12;
- try {
- var12 = InetAddress.getLocalHost().getHostName();
- } catch (Exception var15) {
- var12 = "unknown";
- }
-
- this.debugOut.println("connecting to " + var4 + ":" + var10 + " from " + var12);
- if (var8) {
- this.toServer("MODE para u+");
-
- try {
- this.sockDos = new DataOutputStream(new BufferedOutputStream(this.theSocket.getOutputStream()));
- } catch (Exception var14) {
- System.out.println("Oh No: " + var14);
- }
- }
-
- this.toServer("MODE paraver 206");
- if (var2 != null && var2.length() > 0) {
- this.toServer("PASS " + var2);
- }
-
- this.toServer("USER " + var1 + " " + var12 + " " + var4 + " :" + var3);
- this.toServer("NICK " + var1);
- this.myNick = var1;
- this.connected = true;
- return true;
- }
- }
-
- private boolean tcpConnect(String var1, int var2) {
- this.toUser("Trying TCP connection to " + var1 + ":" + var2 + " ...");
- boolean var3 = false;
-
- try {
- var3 = this.connectSocket(var1, var2);
- } catch (Exception var5) {
- System.out.println("TCP connect: " + var5);
- }
-
- if (!var3) {
- this.toUser("TCP Connection failed");
- return false;
- } else {
- this.mon = new StreamConnector(this.sockIn, this, (String)null, -1);
- return true;
- }
- }
-
- private boolean httpConnect(String var1, int var2) {
- this.toUser("Trying HTTP connection to " + var1 + ":" + var2 + " ...");
- this.mon = new StreamConnector((DataInputStream)null, this, var1, var2);
- String var3 = this.mon.connect();
- if (var3 == null) {
- this.toUser("HTTP connection failed.");
- this.mon.disconnect();
- this.mon = null;
- return false;
- } else {
- return true;
- }
- }
-
- public boolean disconnect() {
- this.toServer("QUIT");
- this.connected = false;
- if (this.sockIn != null) {
- this.disconnectSocket();
- }
-
- if (this.mon != null) {
- this.mon.disconnect();
- }
-
- return true;
- }
-
- public IRCSession(PrintStream var1, PrintStream var2) {
- this.userOut = var1;
- this.debugOut = var2;
- }
- }
-