fprintf(stderr, "Too many args. Want only xml file and ical file\n");
return -1;
}
- // read(xmlfd, buf, 1);
+ read(xmlfd, buf, 1);
xml_doc = xmlReadFd(xmlfd, "noname.xml", "utf-8", 0);
if (!xml_doc) {
fprintf(stderr, "Failed to parse XML\n");
int process_mailbox(xmlNode *xml_node, const char **r_name, const char **r_email)
{
- const char *type, *name = NULL, *email = NULL;
+ const char *type = NULL, *name = NULL, *email = NULL;
for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
if (xml_node->type != XML_ELEMENT_NODE)
email = (char *)xmlNodeGetContent(xml_node);
if (!strcmp((char *)xml_node->name, "RoutingType")) {
type = (char *)xmlNodeGetContent(xml_node);
- if (strcmp(type, "SMTP")) {
- printf("Unknown RoutingType '%s'\n", type);
- return -1;
- }
}
}
+ if (type && strcmp(type, "SMTP")) {
+ printf("Unknown RoutingType '%s' ('%s' '%s')\n", type, name, email);
+ return -1;
+ }
*r_name = name;
*r_email = email;
return 0;
return 0;
}
+int process_required_attendee(xmlNode *xml_node)
+{
+ for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
+ if (xml_node->type != XML_ELEMENT_NODE)
+ continue;
+ if (!strcmp((char *)xml_node->name, "Mailbox")) {
+ const char *name = NULL, *email = NULL;
+ if (process_mailbox(xml_node, &name, &email))
+ return -1;
+ fprintf(calfile, "ATTENDEE;ROLE=REQ-PARTICIPANT;CN=\"%s\":MAILTO:%s\n",
+ name, email);
+ }
+ }
+ return 0;
+}
+
int process_required_attendees(xmlNode *xml_node)
{
+ for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
+ if (xml_node->type != XML_ELEMENT_NODE)
+ continue;
+ if (!strcmp((char *)xml_node->name, "Attendee")) {
+ if (process_required_attendee(xml_node))
+ { }
+ }
+ }
return 0;
}
+
int process_start(xmlNode *xml_node)
{
return 0;
int process_body(xmlNode *xml_node)
{
+ char *body = (char *)xmlNodeGetContent(xml_node);
+ int col = 12;
+
+ if (!body)
+ return -1;
+
+ fprintf(calfile, "DESCRIPTION:");
+
+ while (*body) {
+ switch (*body) {
+ case '\n':
+ col += fprintf(calfile, "\\n");
+ break;
+ case ',':
+ case '"':
+ col++; fputc('\\', calfile);
+ default:
+ col++; fputc(*body, calfile);
+ break;
+ }
+ body++;
+ if (col >= 76) {
+ fprintf(calfile, "\n ");
+ col = 1;
+ }
+ }
+ fputc('\n', calfile);
return 0;
}
int process_subject(xmlNode *xml_node)
{
+ const char *subject = (char *)xmlNodeGetContent(xml_node);
+ if (!subject)
+ return -1;
+
+ fprintf(calfile, "SUMMARY:\"%s\"\n", subject);
return 0;
}