else {
cprintf("<iq type=\"error\" id=\"%s\">", XMPP->iq_id);
- cprintf("<error></error>");
+ cprintf("<error>Don't know howto do '%s'!</error>", XMPP->iq_type);
cprintf("</iq>");
}
void xmpp_xml_chardata(void *data, const XML_Char *s, int len)
{
- struct citxmpp *X = XMPP;
+ citxmpp *X = XMPP;
if (X->chardata_alloc == 0) {
X->chardata_alloc = SIZ;
*/
void xmpp_greeting(void) {
strcpy(CC->cs_clientname, "XMPP session");
- CC->session_specific_data = malloc(sizeof(struct citxmpp));
- memset(XMPP, 0, sizeof(struct citxmpp));
+ CC->session_specific_data = malloc(sizeof(citxmpp));
+ memset(XMPP, 0, sizeof(citxmpp));
XMPP->last_event_processed = queue_event_seq;
/* XMPP does not use a greeting, but we still have to initialize some things. */
/*
* Main command loop for XMPP sessions.
+ * Right now we're reading one byte at a time and sending it to the XML parser.
+ * There's got to be a better way to do this.
*/
void xmpp_command_loop(void) {
- char cmdbuf[16];
+ char cmdbuf[2];
int retval;
time(&CC->lastcmd);
- memset(cmdbuf, 0, sizeof cmdbuf); /* Clear it, just in case */
+ memset(cmdbuf, 0, sizeof cmdbuf);
retval = client_read(cmdbuf, 1);
if (retval != 1) {
- CtdlLogPrintf(CTDL_ERR, "Client disconnected: ending session.\r\n");
+ CtdlLogPrintf(CTDL_ERR, "Client disconnected: ending session.\n");
CC->kill_me = 1;
return;
}
- /* FIXME ... this is woefully inefficient. */
-
XML_Parse(XMPP->xp, cmdbuf, 1, 0);
}
*/
void xmpp_login_hook(void) {
xmpp_queue_event(XMPP_EVT_LOGIN, CC->cs_inet_email);
+ xmpp_delete_old_buddies_who_no_longer_exist_from_the_client_roster();
}
xmpp_greeting,
xmpp_command_loop,
xmpp_async_loop,
- CitadelServiceXMPP);
+ CitadelServiceXMPP
+ );
CtdlRegisterSessionHook(xmpp_cleanup_function, EVT_STOP);
CtdlRegisterSessionHook(xmpp_login_hook, EVT_LOGIN);
CtdlRegisterSessionHook(xmpp_logout_hook, EVT_LOGOUT);