package com.rayo.server.util;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.voxeo.servlet.xmpp.IQRequest;
import com.voxeo.servlet.xmpp.IQResponse;
public class DomUtils {
public static String findCallId(IQRequest request) {
org.w3c.dom.Element payload = (org.w3c.dom.Element) request.getElement();
if (!isSupportedNamespace(payload)) {
Object child = payload.getChildNodes().item(0);
if (child instanceof org.w3c.dom.Element && isSupportedNamespace((org.w3c.dom.Element)child)) {
payload = (org.w3c.dom.Element)child;
} else {
return null;
}
}
return request.getTo().getNode();
}
public static org.w3c.dom.Element findErrorPayload(IQResponse response) {
org.w3c.dom.Element responsePayload = (org.w3c.dom.Element) response.getElement("error");
if (responsePayload == null) {
responsePayload = response.getElement();
}
if (!isSupportedNamespace(responsePayload)) {
NodeList children = responsePayload.getChildNodes();
Node child = null;
for (int i=0; i< children.getLength(); i++) {
if (children.item(i).getNodeName().equals("error")) {
child = children.item(i);
break;
}
}
if (child == null) {
child = children.item(0);
}
if (child instanceof org.w3c.dom.Element && isSupportedNamespace((org.w3c.dom.Element)child)) {
responsePayload = (org.w3c.dom.Element)child;
}
}
return responsePayload;
}
public static boolean isSupportedNamespace(org.w3c.dom.Element element) {
if (element == null) {
return false;
}
return element.getNodeName().equals("error") ||
element.getNamespaceURI().startsWith("urn:xmpp:rayo") ||
element.getNamespaceURI().startsWith("urn:xmpp:tropo");
}
}