public CommandWithReplyImpl(XmppConnection con, Packet packet) { connection = con; packetID = packet.getPacketID(); // Setup a collector to receive the servers response collector = connection.createPacketCollector(new PacketIDFilter(packetID)); // Get the subscription id if applicable subscriptionID = null; subidPattern = Pattern.compile("subid=[\"']([\\w-]+?)[\"']"); // Set the results from the command to null result = null; if (connection.isConnected()) { try { connection.sendPacket(packet); } catch (IllegalStateException e) { // set result to an error result = new ArbitraryIQ(); result.setType(IQ.Type.ERROR); } } }
public boolean execCommand(Protocol protocol, String msg) { final String cmd; final String param; int endCmd = msg.indexOf(' '); if (-1 != endCmd) { cmd = msg.substring(1, endCmd); param = msg.substring(endCmd + 1); } else { cmd = msg.substring(1); param = ""; } String resource = param; String newMessage = ""; int endNick = param.indexOf('\n'); if (-1 != endNick) { resource = param.substring(0, endNick); newMessage = param.substring(endNick + 1); } String xml = null; final String on = "o" + "n"; final String off = "o" + "f" + "f"; if (on.equals(param) || off.equals(param)) { xml = Config.getConfigValue(cmd + ' ' + param, "/jabber-commands.txt"); } if (null == xml) { xml = Config.getConfigValue(cmd, "/jabber-commands.txt"); } if (null == xml) { return false; } XmppConnection xmppXml = ((Xmpp) protocol).getConnection(); String jid = Jid.jimmJidToRealJid(getUserId()); String fullJid = jid; if (isConference()) { String nick = ((XmppServiceContact) this).getMyName(); fullJid = Jid.jimmJidToRealJid(getUserId() + '/' + nick); } xml = Util.replace(xml, "${jimm.caps}", xmppXml.getCaps()); xml = Util.replace(xml, "${c.jid}", Util.xmlEscape(jid)); xml = Util.replace(xml, "${c.fulljid}", Util.xmlEscape(fullJid)); xml = Util.replace(xml, "${param.full}", Util.xmlEscape(param)); xml = Util.replace(xml, "${param.res}", Util.xmlEscape(resource)); xml = Util.replace(xml, "${param.msg}", Util.xmlEscape(newMessage)); xml = Util.replace(xml, "${param.res.realjid}", Util.xmlEscape(getSubContactRealJid(resource))); xml = Util.replace(xml, "${param.full.realjid}", Util.xmlEscape(getSubContactRealJid(param))); xmppXml.requestRawXml(xml); return true; }
/* * (non-Javadoc) * * @see com.saic.uicds.xmpp.communications.CommandWithReply#waitForSuccessOrFailure() */ public boolean waitForSuccessOrFailure() { boolean success = true; if (connection.isConnected() && result == null) { int seconds = connection.getWaitTimeInSeconds() * 1000; // System.out.println("+++++ wait " + connection.getWaitTimeInSeconds() + // " seconds +++++"); // System.out.println("Waiting for "+packetID); result = (IQ) collector.nextResult(seconds); // Stop queuing results collector.cancel(); if (result == null) { errorMessage = "No response from the server."; success = false; } else if (result.getType() == IQ.Type.ERROR) { xmppError = result.getError(); if (result.getError() != null) { errorMessage = result.getError().getMessage(); errorCondition = result.getError().getCondition(); errorType = result.getError().getType(); errorCode = result.getError().getCode(); } else { errorMessage = null; errorCondition = ""; errorCode = 0; errorType = XMPPError.Type.CANCEL; } if (errorMessage == null) { errorMessage = "NULL error message"; } if (result.getError() != null) { PacketExtension pe = null; pe = result .getError() .getExtension("unsupported", "http://jabber.org/protocol/pubsub#errors"); if (pe != null) { unsupported = true; errorMessage += " - (action is unsupported by the server)"; } pe = result .getError() .getExtension("payload-too-big", "http://jabber.org/protocol/pubsub#errors"); if (pe != null) { payloadTooBig = true; errorMessage += " - (payload is too big)"; } pe = result .getError() .getExtension("invalid-payload", "http://jabber.org/protocol/pubsub#errors"); if (pe != null) { invalidPayload = true; errorMessage += " - (invalid payload)"; } pe = result .getError() .getExtension("item-required", "http://jabber.org/protocol/pubsub#errors"); if (pe != null) { itemRequired = true; errorMessage += " - (item element is required for this node)"; } pe = result .getError() .getExtension("payload-required", "http://jabber.org/protocol/pubsub#errors"); if (pe != null) { payloadRequired = true; errorMessage += " - (payload is required for this node)"; } pe = result .getError() .getExtension("item-forbidden", "http://jabber.org/protocol/pubsub#errors"); if (pe != null) { itemForbidden = true; errorMessage += " - (cannot publish item to transient node)"; } pe = result .getError() .getExtension("invalid-jid", "http://jabber.org/protocol/pubsub#errors"); if (pe != null) { invalidJID = true; errorMessage += " - (the bare JID portions of the JIDs do not match)"; } } success = false; } else { // Pull out the subscription id if applicable Matcher m = subidPattern.matcher(result.toXML()); if (m.find()) { subscriptionID = m.group(1); // System.out.println("GOT subid " + subscriptionID); } else { // System.err.println("No subid in " + result.toXML()); } // Collection<String> exts = result.getPropertyNames(); // System.out.println(exts.size()+" EXTENSIONS in "+result.getType()); // for (Object o : exts) { // String ex = (String)o; // if (ex != null) { // System.out.println("FOUND "+ex); // } // } } } else { success = false; // Stop queuing results collector.cancel(); } return success; }