+
+struct xrds {
+ int nesting_level;
+ int in_xrd;
+ int current_service_priority;
+ int selected_service_priority; /* more here later */
+};
+
+
+void xrds_xml_start(void *data, const char *supplied_el, const char **attr) {
+ struct xrds *xrds = (struct xrds *) data;
+ int i;
+
+ ++xrds->nesting_level;
+
+ if (!strcasecmp(supplied_el, "XRD")) {
+ ++xrds->in_xrd;
+ syslog(LOG_DEBUG, "*** XRD CONTAINER BEGIN ***");
+ }
+
+ else if (!strcasecmp(supplied_el, "service")) {
+ xrds->current_service_priority = 0;
+ for (i=0; attr[i] != NULL; i+=2) {
+ if (!strcasecmp(attr[i], "priority")) {
+ xrds->current_service_priority = atoi(attr[i+1]);
+ }
+ }
+ }
+}
+
+
+void xrds_xml_end(void *data, const char *supplied_el) {
+ struct xrds *xrds = (struct xrds *) data;
+
+ --xrds->nesting_level;
+
+ if (!strcasecmp(supplied_el, "XRD")) {
+ --xrds->in_xrd;
+ syslog(LOG_DEBUG, "*** XRD CONTAINER END ***");
+ }
+
+ else if (!strcasecmp(supplied_el, "service")) {
+ /* this is where we should evaluate the service and do stuff */
+ xrds->current_service_priority = 0;
+ }
+}
+
+
+void xrds_xml_chardata(void *data, const XML_Char *s, int len) {
+ struct xrds *xrds = (struct xrds *) data;
+
+ /* StrBufAppendBufPlain (xrds->CData, s, len, 0); */
+}
+
+