aboutsummaryrefslogtreecommitdiff
path: root/src/com/wilko/jaim/ConfigTocResponse.java
diff options
context:
space:
mode:
authorFrankie B <git@diskfloppy.me>2024-05-09 23:19:29 +0100
committerFrankie B <git@diskfloppy.me>2024-05-09 23:19:29 +0100
commita1dff2cb8d33b17bc5981f1638cd50266713e98f (patch)
tree6162d8b8ef5a60ed988320c608b7da6396d08ff2 /src/com/wilko/jaim/ConfigTocResponse.java
Add existing source + chat invite handling
Diffstat (limited to 'src/com/wilko/jaim/ConfigTocResponse.java')
-rw-r--r--src/com/wilko/jaim/ConfigTocResponse.java194
1 files changed, 194 insertions, 0 deletions
diff --git a/src/com/wilko/jaim/ConfigTocResponse.java b/src/com/wilko/jaim/ConfigTocResponse.java
new file mode 100644
index 0000000..49bed69
--- /dev/null
+++ b/src/com/wilko/jaim/ConfigTocResponse.java
@@ -0,0 +1,194 @@
+/*
+ * (C) 2002 Paul Wilkinson wilko@users.sourceforge.net
+ *
+ * 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
+ *
+ */
+
+/*
+ * ConfigTocResponse.java
+ * Created on 1, October 2002
+ */
+ package com.wilko.jaim;
+
+ import java.util.*;
+
+ /** A ConfigTocResponse contains the config message received from
+ * the toc server.
+ *This response is handled by the JaimConnection class, but may also be used by client programs.
+ *Once this event has been received, information returned from {@link JaimConnection#getGroups} is valid
+ * @author Brett Humphreys, Paul Wilkinson
+ */
+ public class ConfigTocResponse extends TocResponse implements TocResponseHandler {
+
+ public static String RESPONSE_TYPE="CONFIG";
+
+ /** The Vector of Group objects */
+ private Vector buddyList = new Vector();
+
+ /** The HashMap of known buddies */
+ private HashMap buddies;
+
+ /** The mode for this configuration */
+ private int mode;
+
+ /** Value for mode that indicates PERMIT ALL mode */
+ public static final int PERMIT_ALL=1;
+
+ /** Value for mode that indicates DENY ALL mode */
+ public static final int DENY_ALL=2;
+
+ /** Value for mode that indicates PERMIT SOME mode */
+ public static final int PERMIT_SOME=3;
+
+ /** Value for mode that indicates DENY SOME mode */
+ public static final int DENY_SOME=4;
+
+ /** Returns an Enumeration of groups. Each Entry is a {@link Group}
+ * Each group then has an Enumeration of buddies within that group See {@link Group#enumerateBuddies}.
+ * @return list of Group elements or an empty list if none are found.
+ */
+ public Enumeration enumerateGroups()
+ {
+ return buddyList.elements();
+ }
+
+ /** Returns a Collection of groups. Each element is a {@link Group)
+ * @return the groups
+ */
+ public Collection getGroups() {
+ java.util.Collection result = new Vector(buddyList);
+ return result;
+ }
+
+
+ /** Get the response type of this response. This method is used by the response dispatcher within JaimConnection
+ * @return The response type
+ */
+ public String getResponseType() {
+ return RESPONSE_TYPE;
+ }
+ /** Parses the config string.
+ */
+ public TocResponse parseString(String message)
+ {
+ ConfigTocResponse tr = new ConfigTocResponse();
+ tr.doParse(message);
+ return(tr);
+ }
+
+ private void doParse(String message)
+ {
+ cmd=message;
+ int colonIndex = message.indexOf(':');
+ //throw away the first word.
+ message = message.substring(colonIndex+1, message.length());
+ buddies = new HashMap();
+ StringTokenizer tok = new StringTokenizer(message,"\n");
+ String itemType;
+ String itemValue;
+ Group currentGroup=null;
+ Buddy tmpBuddy;
+ while( tok.hasMoreTokens() )
+ {
+ // Can't tokenize on both \n and space since there could be spaces
+ // in the name, so parsing by hand.
+ itemType = tok.nextToken();
+ int firstSpace = itemType.indexOf(' ');
+ itemValue = itemType.substring(firstSpace+1, itemType.length());
+ itemType = itemType.substring(0, firstSpace);
+
+ char type = itemType.charAt(0);
+ switch (type)
+ {
+ case 'g':
+ currentGroup = new Group(itemValue);
+ buddyList.add(currentGroup);
+ break;
+
+ case 'b':
+
+ tmpBuddy = getBuddy(itemValue);
+ //this shouldn't happen, but:
+ if(currentGroup==null)
+ {
+ currentGroup = new Group("<unknown>");
+ buddyList.add(currentGroup);
+ }
+ currentGroup.addBuddy(tmpBuddy);
+
+
+ break;
+
+ case 'p':
+ tmpBuddy = getBuddy(itemValue);
+ tmpBuddy.setPermit(true);
+ break;
+
+ case 'm':
+ setMode(Integer.valueOf(itemValue).intValue());
+ break;
+
+ case 'd':
+
+ tmpBuddy = getBuddy(itemValue);
+ tmpBuddy.setDeny(true);
+ break;
+ }
+ }
+ }
+
+ /** Return an existing Buddy with the specified name or return a new buddy if the name is not known
+ * The buddy is added to the buddies hash if it is a new buddy
+ * @param The name of the buddy we are looking for
+ * @return The buddy object
+ */
+
+ private Buddy getBuddy(String buddyName)
+ {
+ Buddy retBuddy = (Buddy)buddies.get(buddyName);
+ if (retBuddy== null)
+ {
+ retBuddy=new Buddy(buddyName);
+ buddies.put(buddyName,retBuddy);
+ }
+ return(retBuddy);
+ }
+
+ /** Sets the mode for this configuration
+ * @param modeVal the string value of the mode (1-4)
+ */
+ public void setMode( int modeVal )
+ {
+ mode = modeVal;
+ }
+
+ /** Gets the mode for this configuration
+ * @return mode for the configuration
+ */
+ public int getMode( )
+ {
+ return mode;
+ }
+
+ /** Returns true if this response handler can handle the specified response.
+ * @param Response - the response string from TOC. This is the part of the response before the first ':'
+ * @return true if the response can be handled
+ */
+ public boolean canHandle(String Response) {
+ return(Response.equalsIgnoreCase(RESPONSE_TYPE));
+ }
+
+ }