Commit 33d25bab authored by Vysheng's avatar Vysheng

Use tree for peer_name search

parent ec0d7274
...@@ -224,6 +224,7 @@ void replay_log_event (void) { ...@@ -224,6 +224,7 @@ void replay_log_event (void) {
tsnprintf (buf, 99, "user#%d", U->user_id); tsnprintf (buf, 99, "user#%d", U->user_id);
U->print_name = create_print_name (U->id, "!", buf, 0, 0); U->print_name = create_print_name (U->id, "!", buf, 0, 0);
} }
peer_insert_name ((void *)U);
} }
}; };
break; break;
...@@ -280,6 +281,7 @@ void replay_log_event (void) { ...@@ -280,6 +281,7 @@ void replay_log_event (void) {
tsnprintf (buf, 99, "user#%d", U->user_id); tsnprintf (buf, 99, "user#%d", U->user_id);
U->print_name = create_print_name (U->id, "!", buf, 0, 0); U->print_name = create_print_name (U->id, "!", buf, 0, 0);
} }
peer_insert_name ((void *)U);
} }
rptr += 2; rptr += 2;
}; };
...@@ -315,7 +317,9 @@ void replay_log_event (void) { ...@@ -315,7 +317,9 @@ void replay_log_event (void) {
} }
U->first_name = fetch_str_dup (); U->first_name = fetch_str_dup ();
U->last_name = fetch_str_dup (); U->last_name = fetch_str_dup ();
assert (!U->print_name);
U->print_name = create_print_name (U->id, U->first_name, U->last_name, 0, 0); U->print_name = create_print_name (U->id, U->first_name, U->last_name, 0, 0);
peer_insert_name ((void *)U);
U->access_hash = fetch_long (); U->access_hash = fetch_long ();
U->phone = fetch_str_dup (); U->phone = fetch_str_dup ();
if (fetch_int ()) { if (fetch_int ()) {
...@@ -452,6 +456,7 @@ void replay_log_event (void) { ...@@ -452,6 +456,7 @@ void replay_log_event (void) {
U->user_id = *(rptr ++); U->user_id = *(rptr ++);
peer_t *Us = user_chat_get (MK_USER (U->user_id)); peer_t *Us = user_chat_get (MK_USER (U->user_id));
assert (!U->print_name);
if (Us) { if (Us) {
U->print_name = create_print_name (id, "!", Us->user.first_name, Us->user.last_name, 0); U->print_name = create_print_name (id, "!", Us->user.first_name, Us->user.last_name, 0);
} else { } else {
...@@ -459,6 +464,7 @@ void replay_log_event (void) { ...@@ -459,6 +464,7 @@ void replay_log_event (void) {
tsnprintf (buf, 99, "user#%d", U->user_id); tsnprintf (buf, 99, "user#%d", U->user_id);
U->print_name = create_print_name (id, "!", buf, 0, 0); U->print_name = create_print_name (id, "!", buf, 0, 0);
} }
peer_insert_name ((void *)U);
U->g_key = talloc (256); U->g_key = talloc (256);
U->nonce = talloc (256); U->nonce = talloc (256);
memcpy (U->g_key, rptr, 256); memcpy (U->g_key, rptr, 256);
...@@ -559,6 +565,7 @@ void replay_log_event (void) { ...@@ -559,6 +565,7 @@ void replay_log_event (void) {
peer_t *Us = user_chat_get (MK_USER (P->encr_chat.user_id)); peer_t *Us = user_chat_get (MK_USER (P->encr_chat.user_id));
assert (Us); assert (Us);
P->print_name = create_print_name (P->id, "!", Us->user.first_name, Us->user.last_name, 0); P->print_name = create_print_name (P->id, "!", Us->user.first_name, Us->user.last_name, 0);
peer_insert_name (P);
memcpy (P->encr_chat.key, rptr, 256); memcpy (P->encr_chat.key, rptr, 256);
rptr += 64; rptr += 64;
P->encr_chat.g_key = talloc (256); P->encr_chat.g_key = talloc (256);
...@@ -598,7 +605,9 @@ void replay_log_event (void) { ...@@ -598,7 +605,9 @@ void replay_log_event (void) {
struct chat *C = &_C->chat; struct chat *C = &_C->chat;
C->flags = FLAG_CREATED | fetch_int (); C->flags = FLAG_CREATED | fetch_int ();
C->title = fetch_str_dup (); C->title = fetch_str_dup ();
assert (!C->print_title);
C->print_title = create_print_name (id, C->title, 0, 0, 0); C->print_title = create_print_name (id, C->title, 0, 0, 0);
peer_insert_name ((void *)C);
C->users_num = fetch_int (); C->users_num = fetch_int ();
C->date = fetch_int (); C->date = fetch_int ();
C->version = fetch_int (); C->version = fetch_int ();
...@@ -628,8 +637,12 @@ void replay_log_event (void) { ...@@ -628,8 +637,12 @@ void replay_log_event (void) {
struct chat *C = &_C->chat; struct chat *C = &_C->chat;
if (C->title) { tfree_str (C->title); } if (C->title) { tfree_str (C->title); }
C->title = fetch_str_dup (); C->title = fetch_str_dup ();
if (C->print_title) { tfree_str (C->print_title); } if (C->print_title) {
peer_delete_name ((void *)C);
tfree_str (C->print_title);
}
C->print_title = create_print_name (C->id, C->title, 0, 0, 0); C->print_title = create_print_name (C->id, C->title, 0, 0, 0);
peer_insert_name ((void *)C);
#ifdef USE_LUA #ifdef USE_LUA
lua_chat_update (C); lua_chat_update (C);
#endif #endif
...@@ -1778,7 +1791,6 @@ void bl_do_create_message_service (int msg_id, int from_id, int to_type, int to_ ...@@ -1778,7 +1791,6 @@ void bl_do_create_message_service (int msg_id, int from_id, int to_type, int to_
out_ints (data, len); out_ints (data, len);
add_log_event (packet_buffer, 4 * (packet_ptr - packet_buffer)); add_log_event (packet_buffer, 4 * (packet_ptr - packet_buffer));
} }
void bl_do_create_message_service_encr (long long msg_id, int from_id, int to_type, int to_id, int date, const int *data, int len) { void bl_do_create_message_service_encr (long long msg_id, int from_id, int to_type, int to_id, int date, const int *data, int len) {
clear_packet (); clear_packet ();
out_int (CODE_binlog_create_message_service_encr); out_int (CODE_binlog_create_message_service_encr);
......
...@@ -840,10 +840,14 @@ void work_update_binlog (void) { ...@@ -840,10 +840,14 @@ void work_update_binlog (void) {
struct user *U = &UC->user; struct user *U = &UC->user;
if (U->first_name) { tfree_str (U->first_name); } if (U->first_name) { tfree_str (U->first_name); }
if (U->last_name) { tfree_str (U->last_name); } if (U->last_name) { tfree_str (U->last_name); }
if (U->print_name) { tfree_str (U->print_name); } if (U->print_name) {
peer_delete_name (UC);
tfree_str (U->print_name);
}
U->first_name = fetch_str_dup (); U->first_name = fetch_str_dup ();
U->last_name = fetch_str_dup (); U->last_name = fetch_str_dup ();
U->print_name = create_print_name (U->id, U->first_name, U->last_name, 0, 0); U->print_name = create_print_name (U->id, U->first_name, U->last_name, 0, 0);
peer_insert_name ((void *)U);
} else { } else {
fetch_skip_str (); fetch_skip_str ();
fetch_skip_str (); fetch_skip_str ();
......
...@@ -38,7 +38,9 @@ ...@@ -38,7 +38,9 @@
static int id_cmp (struct message *M1, struct message *M2); static int id_cmp (struct message *M1, struct message *M2);
#define peer_cmp(a,b) (cmp_peer_id (a->id, b->id)) #define peer_cmp(a,b) (cmp_peer_id (a->id, b->id))
#define peer_cmp_name(a,b) (strcmp (a->print_name, b->print_name))
DEFINE_TREE(peer,peer_t *,peer_cmp,0) DEFINE_TREE(peer,peer_t *,peer_cmp,0)
DEFINE_TREE(peer_by_name,peer_t *,peer_cmp_name,0)
DEFINE_TREE(message,struct message *,id_cmp,0) DEFINE_TREE(message,struct message *,id_cmp,0)
...@@ -48,6 +50,7 @@ struct message message_list = { ...@@ -48,6 +50,7 @@ struct message message_list = {
}; };
struct tree_peer *peer_tree; struct tree_peer *peer_tree;
struct tree_peer_by_name *peer_by_name_tree;
struct tree_message *message_tree; struct tree_message *message_tree;
struct tree_message *message_unsent_tree; struct tree_message *message_unsent_tree;
...@@ -165,16 +168,8 @@ char *create_print_name (peer_id_t id, const char *a1, const char *a2, const cha ...@@ -165,16 +168,8 @@ char *create_print_name (peer_id_t id, const char *a1, const char *a2, const cha
int fl = strlen (s); int fl = strlen (s);
int cc = 0; int cc = 0;
while (1) { while (1) {
int ok = 1; peer_t *P = peer_lookup_name (s);
int i; if (!P || !cmp_peer_id (Peers[i]->id, id)) {
for (i = 0; i < peer_num; i++) {
assert (Peers[i]);
if (cmp_peer_id (Peers[i]->id, id) && Peers[i]->print_name && !strcmp (Peers[i]->print_name, s)) {
ok = 0;
break;
}
}
if (ok) {
break; break;
} }
cc ++; cc ++;
...@@ -1980,3 +1975,22 @@ void __send_msg (struct message *M) { ...@@ -1980,3 +1975,22 @@ void __send_msg (struct message *M) {
void send_all_unsent (void ) { void send_all_unsent (void ) {
tree_act_message (message_unsent_tree, __send_msg); tree_act_message (message_unsent_tree, __send_msg);
} }
void peer_insert_name (peer_t *P) {
//if (!P->print_name || !strlen (P->print_name)) { return; }
//logprintf ("+%s\n", P->print_name);
peer_by_name_tree = tree_insert_peer_by_name (peer_by_name_tree, P, lrand48 ());
}
void peer_delete_name (peer_t *P) {
//if (!P->print_name || !strlen (P->print_name)) { return; }
//logprintf ("-%s\n", P->print_name);
peer_by_name_tree = tree_delete_peer_by_name (peer_by_name_tree, P);
}
peer_t *peer_lookup_name (const char *s) {
static peer_t P;
P.print_name = (void *)s;
peer_t *R = tree_lookup_peer_by_name (peer_by_name_tree, &P);
return R;
}
...@@ -374,6 +374,9 @@ void message_add_peer (struct message *M); ...@@ -374,6 +374,9 @@ void message_add_peer (struct message *M);
void message_del_peer (struct message *M); void message_del_peer (struct message *M);
void free_message (struct message *M); void free_message (struct message *M);
void message_del_use (struct message *M); void message_del_use (struct message *M);
void peer_insert_name (peer_t *P);
void peer_delete_name (peer_t *P);
peer_t *peer_lookup_name (const char *s);
#define PEER_USER 1 #define PEER_USER 1
#define PEER_CHAT 2 #define PEER_CHAT 2
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment