Mercurial > pidgin.yaz
view libpurple/protocols/zephyr/ZhmStat.c @ 25066:256fbe98f6be
The jabber_register_parse function was looking for the <x> node as a
child of the <iq> node instead of the <query> node. (See Chs 4 & 5 of
XEP-0077)
Somebody (maybe it'll be me?) should probably check that the code for these
two cases does what it's supposed to, since I don't think it would have run
before now. It also looks like the precedence may be wrong (See Ch 6).
author | Elliott Sales de Andrade <qulogic@pidgin.im> |
---|---|
date | Sat, 07 Feb 2009 23:45:18 +0000 |
parents | 5fe8042783c1 |
children | a8cc50c2279f |
line wrap: on
line source
/* This file is part of the Project Athena Zephyr Notification System. * It contains the ZhmStat() function. * * Created by: Marc Horowitz * * Copyright (c) 1996 by the Massachusetts Institute of Technology. * For copying and distribution information, see the file * "mit-copyright.h". */ #include "internal.h" #ifdef WIN32 #include <winsock2.h> #else #include <sys/socket.h> #endif #ifndef INADDR_LOOPBACK #define INADDR_LOOPBACK 0x7f000001 #endif Code_t ZhmStat(hostaddr, notice) struct in_addr *hostaddr; ZNotice_t *notice; { struct servent *sp; struct sockaddr_in sin; ZNotice_t req; Code_t code; struct timeval tv; fd_set readers; (void) memset((char *)&sin, 0, sizeof(struct sockaddr_in)); sp = getservbyname(HM_SVCNAME, "udp"); sin.sin_port = (sp) ? sp->s_port : HM_SVC_FALLBACK; sin.sin_family = AF_INET; if (hostaddr) sin.sin_addr = *hostaddr; else sin.sin_addr.s_addr = htonl(INADDR_LOOPBACK); (void) memset((char *)&req, 0, sizeof(req)); req.z_kind = STAT; req.z_port = 0; req.z_class = HM_STAT_CLASS; req.z_class_inst = HM_STAT_CLIENT; req.z_opcode = HM_GIMMESTATS; req.z_sender = ""; req.z_recipient = ""; req.z_default_format = ""; req.z_message_len = 0; if ((code = ZSetDestAddr(&sin)) != ZERR_NONE) return(code); if ((code = ZSendNotice(&req, ZNOAUTH)) != ZERR_NONE) return(code); /* Wait up to ten seconds for a response. */ FD_ZERO(&readers); FD_SET(ZGetFD(), &readers); tv.tv_sec = 10; tv.tv_usec = 0; code = select(ZGetFD() + 1, &readers, NULL, NULL, &tv); if (code < 0 && errno != EINTR) return(errno); if (code == 0 || (code < 0 && errno == EINTR) || ZPending() == 0) return(ZERR_HMDEAD); return(ZReceiveNotice(notice, (struct sockaddr_in *) 0)); }