1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-02 06:45:59 +01:00
git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/branches/smack_3_3_1@13759 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
rcollier 2013-10-05 23:14:24 +00:00
parent 6a4827c846
commit 25012a6744
8 changed files with 27 additions and 203 deletions

View file

@ -23,9 +23,7 @@ package org.jivesoftware.smack;
import org.jivesoftware.smack.Connection.ListenerWrapper; import org.jivesoftware.smack.Connection.ListenerWrapper;
import org.jivesoftware.smack.packet.*; import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.parsing.ParsingExceptionCallback; import org.jivesoftware.smack.parsing.ParsingExceptionCallback;
import org.jivesoftware.smack.parsing.UnparsedIQ; import org.jivesoftware.smack.parsing.UnparsablePacket;
import org.jivesoftware.smack.parsing.UnparsedMessage;
import org.jivesoftware.smack.parsing.UnparsedPresence;
import org.jivesoftware.smack.sasl.SASLMechanism.Challenge; import org.jivesoftware.smack.sasl.SASLMechanism.Challenge;
import org.jivesoftware.smack.sasl.SASLMechanism.Failure; import org.jivesoftware.smack.sasl.SASLMechanism.Failure;
import org.jivesoftware.smack.sasl.SASLMechanism.Success; import org.jivesoftware.smack.sasl.SASLMechanism.Success;
@ -188,9 +186,9 @@ class PacketReader {
packet = PacketParserUtils.parseMessage(parser); packet = PacketParserUtils.parseMessage(parser);
} catch (Exception e) { } catch (Exception e) {
String content = PacketParserUtils.parseContentDepth(parser, parserDepth); String content = PacketParserUtils.parseContentDepth(parser, parserDepth);
UnparsedMessage message = new UnparsedMessage(content, e); UnparsablePacket message = new UnparsablePacket(content, e);
if (callback != null) { if (callback != null) {
callback.messageParsingException(e, message); callback.handleUnparsablePacket(message);
} }
continue; continue;
} }
@ -202,9 +200,9 @@ class PacketReader {
iq = PacketParserUtils.parseIQ(parser, connection); iq = PacketParserUtils.parseIQ(parser, connection);
} catch (Exception e) { } catch (Exception e) {
String content = PacketParserUtils.parseContentDepth(parser, parserDepth); String content = PacketParserUtils.parseContentDepth(parser, parserDepth);
UnparsedIQ uniq = new UnparsedIQ(content, e); UnparsablePacket message = new UnparsablePacket(content, e);
if (callback != null) { if (callback != null) {
callback.iqParsingException(e, uniq); callback.handleUnparsablePacket(message);
} }
continue; continue;
} }
@ -216,9 +214,9 @@ class PacketReader {
presence = PacketParserUtils.parsePresence(parser); presence = PacketParserUtils.parsePresence(parser);
} catch (Exception e) { } catch (Exception e) {
String content = PacketParserUtils.parseContentDepth(parser, parserDepth); String content = PacketParserUtils.parseContentDepth(parser, parserDepth);
UnparsedPresence unpresence = new UnparsedPresence(content, e); UnparsablePacket message = new UnparsablePacket(content, e);
if (callback != null) { if (callback != null) {
callback.presenceParsingException(e, unpresence); callback.handleUnparsablePacket(message);
} }
continue; continue;
} }

View file

@ -29,7 +29,7 @@ import java.util.List;
import java.util.Vector; import java.util.Vector;
import org.jivesoftware.smack.parsing.ParsingExceptionCallback; import org.jivesoftware.smack.parsing.ParsingExceptionCallback;
import org.jivesoftware.smack.parsing.ThrowException; import org.jivesoftware.smack.parsing.ExceptionThrowingCallback;
import org.xmlpull.mxp1.MXParser; import org.xmlpull.mxp1.MXParser;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
@ -61,10 +61,10 @@ public final class SmackConfiguration {
private static int packetCollectorSize = 5000; private static int packetCollectorSize = 5000;
/** /**
* The default parsing exception callback is {@link ThrowException} which will * The default parsing exception callback is {@link ExceptionThrowingCallback} which will
* throw an exception and therefore disconnect the active connection. * throw an exception and therefore disconnect the active connection.
*/ */
private static ParsingExceptionCallback defaultCallback = new ThrowException(); private static ParsingExceptionCallback defaultCallback = new ExceptionThrowingCallback();
/** /**
* This automatically enables EntityCaps for new connections if it is set to true * This automatically enables EntityCaps for new connections if it is set to true

View file

@ -20,43 +20,18 @@
package org.jivesoftware.smack.parsing; package org.jivesoftware.smack.parsing;
import org.jivesoftware.smack.packet.IQ;
/** /**
* Representation of an unparsed IQ stanza. * Simple parsing exception callback that only logs the encountered parsing exception to stderr.
* *
* @author Florian Schmaus * @author Florian Schmaus
* *
*/ */
public class UnparsedIQ extends IQ { public class ExceptionLoggingCallback extends ParsingExceptionCallback {
private final String content;
private final Exception e;
public UnparsedIQ(final String content, final Exception e) {
this.content = content;
this.e = e;
}
/**
*
* @return the exception that caused the parser to fail
*/
public Exception getException() {
return e;
}
/**
* Retrieve the raw stanza data
*
* @return the raw stanza data
*/
public String getContent() {
return content;
}
@Override @Override
public String getChildElementXML() { public void handleUnparsablePacket(UnparsablePacket unparsed) throws Exception {
return null; System.err.print("Smack message parsing exception: " + unparsed.getParsingException().getMessage());
unparsed.getParsingException().printStackTrace();
System.err.println("Unparsed content: " + unparsed.getContent());
} }
} }

View file

@ -29,20 +29,10 @@ import org.jivesoftware.smack.ConnectionListener;
* @author Florian Schmaus * @author Florian Schmaus
* *
*/ */
public class ThrowException extends ParsingExceptionCallback { public class ExceptionThrowingCallback extends ParsingExceptionCallback {
@Override @Override
public void messageParsingException(Exception e, UnparsedMessage message) throws Exception { public void handleUnparsablePacket(UnparsablePacket packetData) throws Exception {
throw e; throw packetData.getParsingException();
}
@Override
public void iqParsingException(Exception e, UnparsedIQ iq) throws Exception {
throw e;
}
@Override
public void presenceParsingException(Exception e, UnparsedPresence presence) throws Exception {
throw e;
} }
} }

View file

@ -1,51 +0,0 @@
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright 2013 Florian Schmaus.
*
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.smack.parsing;
/**
* Simple parsing exception callback that only logs the encountered parsing exception to stderr.
*
* @author Florian Schmaus
*
*/
public class LogException extends ParsingExceptionCallback {
@Override
public void messageParsingException(Exception e, UnparsedMessage message) throws Exception {
System.err.print("Smack message parsing exception: " + e.getMessage());
e.printStackTrace();
System.err.println("Unparsed content: " + message.getContent());
}
@Override
public void iqParsingException(Exception e, UnparsedIQ iq) throws Exception {
System.err.print("Smack iq parsing exception: " + e.getMessage());
e.printStackTrace();
System.err.println("Unparsed content: " + iq.getContent());
}
@Override
public void presenceParsingException(Exception e, UnparsedPresence presence) throws Exception {
System.err.print("Smack presence parsing exception: " + e.getMessage());
e.printStackTrace();
System.err.println("Unparsed content: " + presence.getContent());
}
}

View file

@ -31,7 +31,7 @@ package org.jivesoftware.smack.parsing;
* stanza that caused the parsing error by using the getContent() (for example {@link UnparsedIQ#getContent()}) * stanza that caused the parsing error by using the getContent() (for example {@link UnparsedIQ#getContent()})
* method. * method.
* *
* Smack provides 2 predefined ParsingExceptionCallback's: {@link LogException} and {@link ThrowException}. * Smack provides 2 predefined ParsingExceptionCallback's: {@link ExceptionLoggingCallback} and {@link ExceptionThrowingCallback}.
* *
* @author Florian Schmaus * @author Florian Schmaus
* *
@ -41,36 +41,10 @@ public abstract class ParsingExceptionCallback {
/** /**
* Called when parsing an message stanza caused an exception. * Called when parsing an message stanza caused an exception.
* *
* @param e * @param stanzaData
* the exception thrown while parsing the message stanza
* @param message
* the raw message stanza data that caused the exception * the raw message stanza data that caused the exception
* @throws Exception * @throws Exception
*/ */
public void messageParsingException(Exception e, UnparsedMessage message) throws Exception { public void handleUnparsablePacket(UnparsablePacket stanzaData) throws Exception {
}
/**
* Called when parsing an IQ stanza caused an exception.
*
* @param e
* the exception thrown while parsing the iq stanza
* @param iq
* the raw iq stanza data that caused the exception
* @throws Exception
*/
public void iqParsingException(Exception e, UnparsedIQ iq) throws Exception {
}
/**
* Called when parsing a presence stanza caused an exception.
*
* @param e
* the exception thrown while parsing the presence stanza
* @param presence
* the raw presence stanza data that caused the exception
* @throws Exception
*/
public void presenceParsingException(Exception e, UnparsedPresence presence) throws Exception {
} }
} }

View file

@ -20,19 +20,18 @@
package org.jivesoftware.smack.parsing; package org.jivesoftware.smack.parsing;
import org.jivesoftware.smack.packet.Message;
/** /**
* Representation of an unparsed IQ stanza. * Representation of an unparsable packet.
* *
* @author Florian Schmaus * @author Florian Schmaus
* *
*/ */
public class UnparsedMessage extends Message { public class UnparsablePacket {
private final String content; private final String content;
private final Exception e; private final Exception e;
public UnparsedMessage(final String content, final Exception e) { public UnparsablePacket(final String content, final Exception e) {
this.content = content; this.content = content;
this.e = e; this.e = e;
} }
@ -41,7 +40,7 @@ public class UnparsedMessage extends Message {
* *
* @return the exception that caused the parser to fail * @return the exception that caused the parser to fail
*/ */
public Exception getException() { public Exception getParsingException() {
return e; return e;
} }

View file

@ -1,61 +0,0 @@
/**
* $RCSfile$
* $Revision$
* $Date$
*
* Copyright 2013 Florian Schmaus.
*
* All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jivesoftware.smack.parsing;
import org.jivesoftware.smack.packet.Presence;
/**
* Representation of an unparsed IQ stanza.
*
* @author Florian Schmaus
*
*/
public class UnparsedPresence extends Presence {
private String content;
private Exception e;
public UnparsedPresence(Type type) {
super(type);
}
public UnparsedPresence(final String content, final Exception e) {
super(Presence.Type.error);
this.content = content;
this.e = e;
}
/**
*
* @return the exception that caused the parser to fail
*/
public Exception getException() {
return e;
}
/**
* Retrieve the raw stanza data
*
* @return the raw stanza data
*/
public String getContent() {
return content;
}
}