parser works but some stuff still needs some refactoring
This commit is contained in:
parent
6c5c3ac2de
commit
c3e4f0eaac
|
@ -50,6 +50,7 @@ public class XmlReader {
|
||||||
//Log.d(LOGTAG,"there was a wake lock. releasing it till next event");
|
//Log.d(LOGTAG,"there was a wake lock. releasing it till next event");
|
||||||
wakeLock.release(); //release wake look while waiting on next parser event
|
wakeLock.release(); //release wake look while waiting on next parser event
|
||||||
}
|
}
|
||||||
|
//Log.d(LOGTAG,"waiting for new event...");
|
||||||
while(parser.next() != XmlPullParser.END_DOCUMENT) {
|
while(parser.next() != XmlPullParser.END_DOCUMENT) {
|
||||||
//Log.d(LOGTAG,"found new event. acquiring wake lock");
|
//Log.d(LOGTAG,"found new event. acquiring wake lock");
|
||||||
wakeLock.acquire();
|
wakeLock.acquire();
|
||||||
|
@ -75,17 +76,21 @@ public class XmlReader {
|
||||||
|
|
||||||
public Element readElement(Tag currentTag) throws XmlPullParserException, IOException {
|
public Element readElement(Tag currentTag) throws XmlPullParserException, IOException {
|
||||||
Element element = new Element(currentTag.getName());
|
Element element = new Element(currentTag.getName());
|
||||||
|
//Log.d(LOGTAG,"trying to read element "+element.getName());
|
||||||
element.setAttributes(currentTag.getAttributes());
|
element.setAttributes(currentTag.getAttributes());
|
||||||
Tag nextTag = this.readTag();
|
Tag nextTag = this.readTag();
|
||||||
|
//Log.d(LOGTAG,"next Tag is: "+nextTag.toString());
|
||||||
if(nextTag.isNo()) {
|
if(nextTag.isNo()) {
|
||||||
element.setContent(nextTag.getName());
|
element.setContent(nextTag.getName());
|
||||||
nextTag = this.readTag();
|
nextTag = this.readTag();
|
||||||
}
|
}
|
||||||
|
//Log.d(LOGTAG,"reading till the end of "+element.getName());
|
||||||
while(!nextTag.isEnd(element.getName())) {
|
while(!nextTag.isEnd(element.getName())) {
|
||||||
Element child = this.readElement(nextTag);
|
Element child = this.readElement(nextTag);
|
||||||
element.addChild(child);
|
element.addChild(child);
|
||||||
nextTag = this.readTag();
|
nextTag = this.readTag();
|
||||||
}
|
}
|
||||||
|
//Log.d(LOGTAG,"return with element"+element);
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ public class IqPacket extends Element {
|
||||||
|
|
||||||
public static final int TYPE_SET = 0;
|
public static final int TYPE_SET = 0;
|
||||||
public static final int TYPE_RESULT = 1;
|
public static final int TYPE_RESULT = 1;
|
||||||
|
public static final int TYPE_GET = 2;
|
||||||
|
|
||||||
private IqPacket(String name) {
|
private IqPacket(String name) {
|
||||||
super(name);
|
super(name);
|
||||||
|
@ -18,9 +19,19 @@ public class IqPacket extends Element {
|
||||||
case TYPE_SET:
|
case TYPE_SET:
|
||||||
this.setAttribute("type", "set");
|
this.setAttribute("type", "set");
|
||||||
break;
|
break;
|
||||||
|
case TYPE_GET:
|
||||||
|
this.setAttribute("type", "get");
|
||||||
|
break;
|
||||||
|
case TYPE_RESULT:
|
||||||
|
this.setAttribute("type", "result");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IqPacket() {
|
||||||
|
super("iq");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
13
src/de/gultsch/chat/xmpp/MessagePacket.java
Normal file
13
src/de/gultsch/chat/xmpp/MessagePacket.java
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package de.gultsch.chat.xmpp;
|
||||||
|
|
||||||
|
import de.gultsch.chat.xml.Element;
|
||||||
|
|
||||||
|
public class MessagePacket extends Element {
|
||||||
|
private MessagePacket(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessagePacket() {
|
||||||
|
super("message");
|
||||||
|
}
|
||||||
|
}
|
13
src/de/gultsch/chat/xmpp/PresencePacket.java
Normal file
13
src/de/gultsch/chat/xmpp/PresencePacket.java
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package de.gultsch.chat.xmpp;
|
||||||
|
|
||||||
|
import de.gultsch.chat.xml.Element;
|
||||||
|
|
||||||
|
public class PresencePacket extends Element {
|
||||||
|
private PresencePacket(String name) {
|
||||||
|
super("presence");
|
||||||
|
}
|
||||||
|
|
||||||
|
public PresencePacket() {
|
||||||
|
super("presence");
|
||||||
|
}
|
||||||
|
}
|
|
@ -35,8 +35,12 @@ public class XmppConnection implements Runnable {
|
||||||
private XmlReader tagReader;
|
private XmlReader tagReader;
|
||||||
private TagWriter tagWriter;
|
private TagWriter tagWriter;
|
||||||
|
|
||||||
private boolean isTlsEncrypted = false;
|
private boolean isTlsEncrypted = true;
|
||||||
private boolean isAuthenticated = false;
|
private boolean isAuthenticated = false;
|
||||||
|
|
||||||
|
private static final int PACKET_IQ = 0;
|
||||||
|
private static final int PACKET_MESSAGE = 1;
|
||||||
|
private static final int PACKET_PRESENCE = 2;
|
||||||
|
|
||||||
public XmppConnection(Account account, PowerManager pm) {
|
public XmppConnection(Account account, PowerManager pm) {
|
||||||
this.account = account;
|
this.account = account;
|
||||||
|
@ -112,7 +116,11 @@ public class XmppConnection implements Runnable {
|
||||||
sendStartStream();
|
sendStartStream();
|
||||||
processStream(tagReader.readTag());
|
processStream(tagReader.readTag());
|
||||||
} else if (nextTag.isStart("iq")) {
|
} else if (nextTag.isStart("iq")) {
|
||||||
processIq(nextTag);
|
Log.d(LOGTAG,processIq(nextTag).toString());
|
||||||
|
} else if (nextTag.isStart("message")) {
|
||||||
|
Log.d(LOGTAG,processMessage(nextTag).toString());
|
||||||
|
} else if (nextTag.isStart("presence")) {
|
||||||
|
Log.d(LOGTAG,processPresence(nextTag).toString());
|
||||||
} else if (nextTag.isEnd("stream")) {
|
} else if (nextTag.isEnd("stream")) {
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
@ -121,20 +129,45 @@ public class XmppConnection implements Runnable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processIq(Tag currentTag) throws XmlPullParserException, IOException {
|
private Element processPacket(Tag currentTag, int packetType) throws XmlPullParserException, IOException {
|
||||||
int typ = -1;
|
Element element;
|
||||||
if (currentTag.getAttribute("type").equals("result")) {
|
switch (packetType) {
|
||||||
typ = IqPacket.TYPE_RESULT;
|
case PACKET_IQ:
|
||||||
|
element = new IqPacket();
|
||||||
|
break;
|
||||||
|
case PACKET_MESSAGE:
|
||||||
|
element = new MessagePacket();
|
||||||
|
break;
|
||||||
|
case PACKET_PRESENCE:
|
||||||
|
element = new PresencePacket();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
IqPacket iq = new IqPacket(currentTag.getAttribute("id"),typ);
|
element.setAttributes(currentTag.getAttributes());
|
||||||
Tag nextTag = tagReader.readTag();
|
Tag nextTag = tagReader.readTag();
|
||||||
while(!nextTag.isEnd("iq")) {
|
while(!nextTag.isEnd(element.getName())) {
|
||||||
Element element = tagReader.readElement(nextTag);
|
if (!nextTag.isNo()) {
|
||||||
iq.addChild(element);
|
Element child = tagReader.readElement(nextTag);
|
||||||
|
element.addChild(child);
|
||||||
|
}
|
||||||
nextTag = tagReader.readTag();
|
nextTag = tagReader.readTag();
|
||||||
}
|
}
|
||||||
Log.d(LOGTAG,"this is what i understood: "+iq.toString());
|
return element;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private IqPacket processIq(Tag currentTag) throws XmlPullParserException, IOException {
|
||||||
|
return (IqPacket) processPacket(currentTag,PACKET_IQ);
|
||||||
|
}
|
||||||
|
|
||||||
|
private MessagePacket processMessage(Tag currentTag) throws XmlPullParserException, IOException {
|
||||||
|
return (MessagePacket) processPacket(currentTag, PACKET_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
private PresencePacket processPresence(Tag currentTag) throws XmlPullParserException, IOException {
|
||||||
|
return (PresencePacket) processPacket(currentTag, PACKET_PRESENCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendStartTLS() throws XmlPullParserException, IOException {
|
private void sendStartTLS() throws XmlPullParserException, IOException {
|
||||||
|
@ -188,7 +221,8 @@ public class XmppConnection implements Runnable {
|
||||||
Element element = tagReader.readElement(nextTag);
|
Element element = tagReader.readElement(nextTag);
|
||||||
streamFeatures.addChild(element);
|
streamFeatures.addChild(element);
|
||||||
nextTag = tagReader.readTag();
|
nextTag = tagReader.readTag();
|
||||||
}
|
}
|
||||||
|
Log.d(LOGTAG,streamFeatures.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void sendBindRequest() throws IOException {
|
private void sendBindRequest() throws IOException {
|
||||||
|
@ -196,9 +230,29 @@ public class XmppConnection implements Runnable {
|
||||||
Element bind = new Element("bind");
|
Element bind = new Element("bind");
|
||||||
bind.setAttribute("xmlns","urn:ietf:params:xml:ns:xmpp-bind");
|
bind.setAttribute("xmlns","urn:ietf:params:xml:ns:xmpp-bind");
|
||||||
iq.addChild(bind);
|
iq.addChild(bind);
|
||||||
|
//Element resource = new Element("resource");
|
||||||
|
//resource.setContent("mobile");
|
||||||
|
//bind.addChild(resource);
|
||||||
Log.d(LOGTAG,"sending bind request: "+iq.toString());
|
Log.d(LOGTAG,"sending bind request: "+iq.toString());
|
||||||
tagWriter.writeElement(iq);
|
tagWriter.writeElement(iq);
|
||||||
tagWriter.flush();
|
tagWriter.flush();
|
||||||
|
|
||||||
|
|
||||||
|
//technically not bind stuff
|
||||||
|
IqPacket startSession = new IqPacket(this.nextRandomId(), IqPacket.TYPE_SET);
|
||||||
|
Element session = new Element("session");
|
||||||
|
session.setAttribute("xmlns","urn:ietf:params:xml:ns:xmpp-session");
|
||||||
|
session.setContent("");
|
||||||
|
startSession.addChild(session);
|
||||||
|
|
||||||
|
tagWriter.writeElement(startSession);
|
||||||
|
tagWriter.flush();
|
||||||
|
|
||||||
|
Element presence = new Element("presence");
|
||||||
|
|
||||||
|
tagWriter.writeElement(presence);
|
||||||
|
tagWriter.flush();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processStreamError(Tag currentTag) {
|
private void processStreamError(Tag currentTag) {
|
||||||
|
|
Loading…
Reference in a new issue