Beispiel #1
0
static void parse_online( struct qqclient* qq, qqpacket* p, qqqun* q )
{
	bytebuffer *buf = p->buf;
	get_byte( buf );
	//set all off
	qun_set_members_off( qq, q );
	while( buf->pos < buf->len ){
		uint number = get_int( buf );
		qunmember* m = qun_member_get( qq, q, number, 1 );
		if( m )
			m->status = QQ_ONLINE;
	}
	qun_put_single_event( qq, q );
}
Beispiel #2
0
EXPORT void libqq_getqunmembername( qqclient* qq, uint ext_id, uint uid, char* buf )
{
	qqqun* q = qun_get_by_ext( qq, ext_id );
	if( q ){
		qunmember* m = qun_member_get( qq, q, uid, 0 );
		if( m ){
			strncpy( buf, m->nickname, 15 );
			return;
		}
	}
	if( uid != 0 ){
		sprintf( buf, "%u" , uid );
	}
}
Beispiel #3
0
static void parse_membername( struct qqclient* qq, qqpacket* p, qqqun* q )
{
	bytebuffer *buf = p->buf;
	uint pos;
	pos = get_int( buf );
	get_int( buf );	//00000000
	while( buf->pos < buf->len ){
		uint number = get_int( buf );
		qunmember* m = qun_member_get( qq, q, number, 0 );
		if( !m ){
			DBG("m==NULL");
			break;
		}
		uchar name_len = get_byte( buf );
		name_len = MIN_( NICKNAME_LEN-1, name_len );
		get_data( buf,  (uchar*)m->nickname, name_len );
		m->nickname[name_len] = 0;
	}
}
Beispiel #4
0
static void parse_memberinfo( struct qqclient* qq, qqpacket* p, qqqun* q )
{
	bytebuffer *buf = p->buf;
	while( buf->pos < buf->len ){
		uint number = get_int( buf );
		qunmember* m = qun_member_get( qq, q, number, 0 );
		if( !m ){
			DBG("m==NULL  number: %d", number);
			break;
		}
		m->face = get_word( buf );
		m->age = get_byte( buf );
		m->sex = get_byte( buf );
		uchar name_len = get_byte( buf );
		name_len = MIN_( NICKNAME_LEN-1, name_len );
		get_data( buf,  (uchar*)m->nickname, name_len );
		m->nickname[name_len] = 0;
		//TX技术改革不彻底,还保留使用GB码 2009-1-25 11:02
		gb_to_utf8( m->nickname, m->nickname, NICKNAME_LEN-1 );
		get_word( buf );	//00 00
		m->qqshow = get_byte( buf );
		m->flag = get_byte( buf );
	}
}
Beispiel #5
0
static void parse_quninfo( struct qqclient* qq, qqpacket* p, qqqun* q )
{
	uint last_number;
	uchar more, status;
	bytebuffer *buf = p->buf;
	q->ext_number = get_int( buf );
	get_word( buf );	//00 00
	get_byte( buf );	//00
	status = get_byte( buf );	//03 or 02
	if( status == 3 ){
		q->type = get_byte( buf );
		get_int( buf );	//unknown
	//	get_int( buf );	//(???)unknown in 1205
		q->owner = get_int( buf );
		q->auth_type = get_byte( buf );
		buf->pos += 6;
		q->category = get_int( buf );
		q->max_member = get_word( buf );
		buf->pos += 9;
		//name
		uchar len = get_byte( buf );
		len = MIN_( NICKNAME_LEN-1, len );
		get_data( buf,  (uchar*)q->name, len );
		q->name[len] = 0;
	//	DBG("qun: %s", q->name );
		get_byte( buf );
		get_byte( buf );	//separator
		//ann
		len = get_byte( buf );
		
		get_data( buf,  (uchar*)q->ann, len );
		q->ann[len] = 0;
		//intro
		len = get_byte( buf );
		get_data( buf,  (uchar*)q->intro, len );
		q->intro[len] = 0;
		//token data
		get_token( buf, &q->token_cmd );
	}
	last_number = get_int( buf );	//member last came in
	more = get_byte( buf );	//more member data
	while( buf->pos < buf->len ){
		uint n = get_int( buf );
		uchar org = get_byte( buf );
		uchar role = get_byte( buf );
		qunmember* m = qun_member_get( qq, q, n, 1 );
		if( m==NULL ){
			DBG("m==NULL");
			break;
		}
		m->org = org;
		m->role = role;
	}
	if( more ){
		prot_qun_get_info( qq, q->number, last_number );
	}else{
		qun_update_memberinfo( qq, q );
		qun_set_members_off( qq, q );
		qun_update_online( qq, q );
	}
}