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 ); }
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 ); } }
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; } }
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 ); } }
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 ); } }