⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 buddies.c

📁 AnyQ服务端源代码(2004/10/28)源码
💻 C
📖 第 1 页 / 共 2 页
字号:
        else        {            status = xmlnode_insert_tag(x, "show");            show = pmalloco(xmlnode_pool(x), 30);            if(buddy->is_away&AIM_ICQ_STATE_CHAT)                sprintf(show, "chat");            else if(buddy->is_away&AIM_ICQ_STATE_OCCUPIED)                sprintf(show, "dnd");            else if(buddy->is_away&AIM_ICQ_STATE_NA)                sprintf(show, "xa");            else if(buddy->is_away&AIM_ICQ_STATE_DND)                sprintf(show, "dnd");            else if(buddy->is_away&AIM_ICQ_STATE_AWAY)                sprintf(show, "away");            else                sprintf(show, "xa");            xmlnode_insert_cdata(status, show, -1);            status = xmlnode_insert_tag(x, "status");            status_msg = pmalloco(xmlnode_pool(x), 30);            if(buddy->is_away&AIM_ICQ_STATE_NA)                sprintf(status_msg, "not available");            else if(buddy->is_away&AIM_ICQ_STATE_OCCUPIED &&                    !(buddy->is_away&AIM_ICQ_STATE_DND))                sprintf(status_msg, "occupied");            else                sprintf(status_msg, "%s", show);        }        xmlnode_insert_cdata(status, status_msg, -1);        at_deliver(ti,jp->x);    }     else if(buddy->is_away == 1 && (buddy->is_away != was_away))    {        log_debug(ZONE, "[AT] Requesting Away message for %s", userinfo->sn);        aim_getinfo(ass, command->conn, userinfo->sn, AIM_GETINFO_AWAYMESSAGE);    }	return 1;}int at_parse_offgoing(aim_session_t *ass,                       aim_frame_t *command, ...){	xmlnode x;	jpacket jp;    at_buddy buddy;	at_session s;    ati ti;    char *sn;    aim_userinfo_t *userinfo;        va_list ap;    va_start(ap, command);    userinfo = va_arg(ap, aim_userinfo_t *);    va_end(ap);            	s = (at_session)ass->aux_data;    ti = s->ti;    sn = userinfo->sn;    buddy = (at_buddy)xhash_get(s->buddies, sn);    if(buddy == NULL)    {        jid jtmp;        buddy = pmalloco(s->p, (sizeof(_at_buddy)));        buddy->full = jid_new(s->p, ti->i->id);        jid_set(buddy->full, sn, JID_USER);        buddy->last = xmlnode_new_tag_pool(s->p,"query");        xmlnode_put_attrib(buddy->last,"xmlns",NS_LAST);        xmlnode_put_attrib(buddy->last,"stamp",jutil_timestamp());        xhash_put(s->buddies, buddy->full->user, buddy);    }    buddy->is_away = -1;    xmlnode_put_attrib(buddy->last,"stamp",jutil_timestamp());    	x = xmlnode_new_tag("presence");	xmlnode_put_attrib(x, "to", jid_full(s->cur));	xmlnode_put_attrib(x, "from", ti->i->id);	xmlnode_put_attrib(x, "type","unavailable");	jp = jpacket_new(x);	jid_set(jp->from, at_normalize(sn), JID_USER);	xmlnode_put_attrib(jp->x, "from", jid_full(jp->from));    at_deliver(ti,jp->x);	return 1;}int at_parse_evilnotify(aim_session_t *sess,                               aim_frame_t *command, ...){    va_list ap;    xmlnode x;    xmlnode body;    jpacket jp;    at_session s;    ati ti;    char msg[100];    int newevil;    aim_userinfo_t *userinfo;    va_start(ap, command);    newevil = va_arg(ap, int);    userinfo = va_arg(ap, aim_userinfo_t *);    va_end(ap);    memset(msg, '\0', 100);    snprintf(msg, 100, "Warning from: %s (new level: %2.1f%%",              (userinfo && strlen(userinfo->sn))?userinfo->sn:"anonymous",             ((float)newevil)/10);    s = (at_session)sess->aux_data;    ti = s->ti;	x = xmlnode_new_tag("message");	xmlnode_put_attrib(x, "to", jid_full(s->cur));	xmlnode_put_attrib(x, "from", jid_full(s->from));	xmlnode_put_attrib(x, "type","error");	body = xmlnode_insert_tag(x, "error");    xmlnode_insert_cdata(body, (char *)&msg, strlen((char *)&msg));    jp = jpacket_new(x);    at_deliver(ti,jp->x);    return 1;}int at_parse_userinfo(aim_session_t *sess,                             aim_frame_t *command, ...){    aim_userinfo_t *userinfo;    char *prof_encoding = NULL;    char *prof = NULL;    unsigned short inforeq = 0;    xmlnode x;    xmlnode show;    xmlnode status;    jpacket jp;    at_session s;    ati ti;    va_list ap;    va_start(ap, command);    userinfo = va_arg(ap, aim_userinfo_t *);    prof_encoding = va_arg(ap, char *);    prof = va_arg(ap, char *);    inforeq = va_arg(ap, int);    va_end(ap);    s = (at_session)sess->aux_data;    ti = s->ti;    if (inforeq == AIM_GETINFO_GENERALINFO) {        /*         printf("faimtest: userinfo: profile_encoding: %s\n", prof_encoding ? prof_encoding : "[none]");        printf("faimtest: userinfo: prof: %s\n", prof ? prof : "[none]");        */    } else if (inforeq == AIM_GETINFO_AWAYMESSAGE) {        x = xmlnode_new_tag("presence");	    xmlnode_put_attrib(x, "to", jid_full(s->cur));    	xmlnode_put_attrib(x, "from", ti->i->id);	    jp = jpacket_new(x);    	jid_set(jp->from, at_normalize(userinfo->sn), JID_USER);	    xmlnode_put_attrib(jp->x, "from", jid_full(jp->from));        show = xmlnode_insert_tag(x, "show");        xmlnode_insert_cdata(show, "away", -1);        status = xmlnode_insert_tag(x, "status");        if(prof != NULL)        {		char *p1, *p2;		char charset[32];		int len;		char *utf8_str;		utf8_str = malloc(8192);		// obtain charset		charset[0] = 0;		p1 = strstr(prof_encoding, "charset=");		if(p1) {			p1 += 8;			if(*p1 == '\"') {				++p1;				p2 = strchr(p1, '\"');				if(p2) {					len = p2 - p1;					if(len < 32) {						strncpy(charset, p1, len);						charset[len] = 0;					}				}			}		}		// not utf8?		if(strcmp(charset, "utf-8"))			prof = str_to_UTF8(jp->p, prof);		if(!s->icq) {			msgconv_aim2plain(prof, utf8_str, 8192);			prof = utf8_str;		}            xmlnode_insert_cdata(status, prof, -1);		free(utf8_str);        } else {            xmlnode_insert_cdata(status, "Away", -1);        }        at_deliver(ti,jp->x);    } else         log_debug(ZONE, "[AT] userinfo: unknown info request");    return 1;}#define VCARD_ADD(q, parent, name, value) \    xmlnode_insert_cdata(xmlnode_insert_tag(xmlnode_insert_tag(q,parent),name), \    it_convert_windows2utf8(p,value),-1)int at_parse_icq_simpleinfo(aim_session_t *sess,                            aim_frame_t *command, ...){	va_list ap;	struct aim_icq_simpleinfo *info;	jpacket jp;	at_session s;	xmlnode t, q;	pool p;	s = (at_session)sess->aux_data;	va_start(ap, command);	info = va_arg(ap, struct aim_icq_simpleinfo *);	va_end(ap);	jp = s->icq_vcard_response;	if(!jp)	    log_debug(ZONE, "[AT] got icq_simpleinfo without request, dropped");	q = jp->iq;	p = jp->p;	t = xmlnode_insert_tag(q,"FN");	if (info->first)	{	    /* we have a first name - if we have a last name, we have to concatenate it */	    if (info->last)	        xmlnode_insert_cdata(t,it_convert_windows2utf8(p,spools(p,info->first," ",info->last,p)),-1);	    else	        xmlnode_insert_cdata(t,it_convert_windows2utf8(p,info->first),-1);	}	else if (info->last)	    xmlnode_insert_cdata(t,it_convert_windows2utf8(p,info->last),-1);	t = xmlnode_insert_tag(q,"N");	if (info->first)	    xmlnode_insert_cdata(xmlnode_insert_tag(t,"GIVEN"),it_convert_windows2utf8(p,info->first),-1);	if (info->last)	    xmlnode_insert_cdata(xmlnode_insert_tag(t,"FAMILY"),it_convert_windows2utf8(p,info->last),-1);	if (info->nick)	    xmlnode_insert_cdata(xmlnode_insert_tag(q,"NICKNAME"),it_convert_windows2utf8(p,info->nick),-1);	if (info->email)	{	    t = VCARD_ADD(q,"EMAIL","USERID",info->email);	    xmlnode_insert_tag(t,"INTERNET");	    xmlnode_insert_tag(t,"PREF");	}	at_deliver(s->ti,jp->x);	s->icq_vcard_response = NULL;	return 1;}int at_parse_locerr(aim_session_t *sess,                           aim_frame_t *command, ...){/* XXX Do we want this?    va_list ap;    char *destsn;    unsigned short reason;    char *sn;    xmlnode x;    xmlnode body;    jpacket jp;    session s;    char msg[1024];    va_start(ap, command);    reason = va_arg(ap, unsigned short);    destsn = va_arg(ap, char *);    va_end(ap);    memset(&msg, '\0', 1024);    snprintf("User information for %s unavailable (reason 0x%04x: %s)\n", destsn, reason, (reason<msgerrreasonslen)?msgerrreasons[reason]:"unknown");    s = (session)ass->aux_data;	x = xmlnode_new_tag("message");	xmlnode_put_attrib(x, "to", jid_full(s->j));	xmlnode_put_attrib(x, "from", aimtrans__instance->id);	xmlnode_put_attrib(x, "type","error");	body = xmlnode_insert_tag(x, "error");    xmlnode_insert_cdata(body, &msg, strlen(&msg));    jp = jpacket_new(x);	ehandler_send(ehandler_at, jp->x, s->j->server);*/      return 1;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -