Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
T
tg
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
tg
Commits
8a39f039
Commit
8a39f039
authored
Dec 02, 2013
by
Vysheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Many fixes.
parent
b1b4cd8b
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
93 additions
and
39 deletions
+93
-39
binlog.c
binlog.c
+7
-2
main.c
main.c
+20
-11
mtproto-client.c
mtproto-client.c
+2
-2
net.c
net.c
+1
-1
structures.c
structures.c
+59
-21
structures.h
structures.h
+1
-0
telegram.h
telegram.h
+1
-2
tree.h
tree.h
+2
-0
No files found.
binlog.c
View file @
8a39f039
...
...
@@ -1033,8 +1033,13 @@ void replay_log_event (void) {
message_remove_tree
(
M
);
message_del_peer
(
M
);
M
->
id
=
*
(
rptr
++
);
message_insert_tree
(
M
);
message_add_peer
(
M
);
if
(
message_get
(
M
->
id
))
{
free_message
(
M
);
free
(
M
);
}
else
{
message_insert_tree
(
M
);
message_add_peer
(
M
);
}
}
break
;
case
CODE_update_user_photo
:
...
...
main.c
View file @
8a39f039
...
...
@@ -86,24 +86,33 @@ void set_default_username (const char *s) {
default_username
=
strdup
(
s
);
}
/* {{{ TERMINAL */
tcflag_t
old_lflag
;
cc_t
old_vtime
;
st
ruct
termios
term
;
static
struct
termios
term_in
,
term_out
;
static
int
term_set_in
;
st
atic
int
term_set_out
;
void
get_terminal_attributes
(
void
)
{
if
(
tcgetattr
(
STDIN_FILENO
,
&
term
)
<
0
)
{
perror
(
"tcgetattr()"
);
exit
(
EXIT_FAILURE
);
if
(
tcgetattr
(
STDIN_FILENO
,
&
term_in
)
<
0
)
{
}
else
{
term_set_in
=
1
;
}
if
(
tcgetattr
(
STDOUT_FILENO
,
&
term_out
)
<
0
)
{
}
else
{
term_set_out
=
1
;
}
old_lflag
=
term
.
c_lflag
;
old_vtime
=
term
.
c_cc
[
VTIME
];
}
void
set_terminal_attributes
(
void
)
{
if
(
tcsetattr
(
STDIN_FILENO
,
0
,
&
term
)
<
0
)
{
perror
(
"tcsetattr()"
);
exit
(
EXIT_FAILURE
);
if
(
term_set_in
)
{
if
(
tcsetattr
(
STDIN_FILENO
,
0
,
&
term_in
)
<
0
)
{
perror
(
"tcsetattr()"
);
}
}
if
(
term_set_out
)
{
if
(
tcsetattr
(
STDOUT_FILENO
,
0
,
&
term_out
)
<
0
)
{
perror
(
"tcsetattr()"
);
}
}
}
/* }}} */
...
...
mtproto-client.c
View file @
8a39f039
...
...
@@ -1284,8 +1284,8 @@ void work_updates (struct connection *c, long long msg_id) {
for
(
i
=
0
;
i
<
n
;
i
++
)
{
fetch_alloc_chat
();
}
fetch_date
();
// date
fetch_seq
();
// seq
bl_do_set_date
(
fetch_int
());
bl_do_set_seq
(
fetch_int
());
}
void
work_update_short_message
(
struct
connection
*
c
UU
,
long
long
msg_id
UU
)
{
...
...
net.c
View file @
8a39f039
...
...
@@ -411,7 +411,7 @@ void hexdump_buf (struct connection_buffer *b) {
void
try_rpc_read
(
struct
connection
*
c
)
{
assert
(
c
->
in_head
);
if
(
verbosity
>=
1
)
{
if
(
verbosity
>=
3
)
{
hexdump_buf
(
c
->
in_head
);
}
...
...
structures.c
View file @
8a39f039
...
...
@@ -52,19 +52,27 @@ struct tree_message *message_unsent_tree;
int
users_allocated
;
int
chats_allocated
;
int
messages_allocated
;
int
our_id
;
int
verbosity
;
peer_t
*
Peers
[
MAX_USER_NUM
];
int
peer_num
;
int
encr_chats_allocated
;
int
geo_chats_allocated
;
int
our_id
;
int
verbosity
;
peer_t
*
Peers
[
MAX_PEER_NUM
];
extern
int
binlog_enabled
;
void
fetch_skip_photo
(
void
);
#define code_assert(x) if (!(x)) { logprintf ("Can not parse at line %d\n", __LINE__); assert (0); return -1; }
#define code_try(x) if ((x) == -1) { return -1; }
/*
*
* Fetch simple structures (immediate fetch into buffer)
*
*/
int
fetch_file_location
(
struct
file_location
*
loc
)
{
int
x
=
fetch_int
();
...
...
@@ -84,18 +92,6 @@ int fetch_file_location (struct file_location *loc) {
return
0
;
}
int
fetch_skip_file_location
(
void
)
{
int
x
=
fetch_int
();
code_assert
(
x
==
CODE_file_location_unavailable
||
x
==
CODE_file_location
);
if
(
x
==
CODE_file_location_unavailable
)
{
in_ptr
+=
5
;
}
else
{
in_ptr
+=
6
;
}
return
0
;
}
int
fetch_user_status
(
struct
user_status
*
S
)
{
unsigned
x
=
fetch_int
();
code_assert
(
x
==
CODE_user_status_empty
||
x
==
CODE_user_status_online
||
x
==
CODE_user_status_offline
);
...
...
@@ -118,6 +114,33 @@ int fetch_user_status (struct user_status *S) {
return
0
;
}
/*
*
* Skip simple structures
*
*/
int
fetch_skip_file_location
(
void
)
{
int
x
=
fetch_int
();
code_assert
(
x
==
CODE_file_location_unavailable
||
x
==
CODE_file_location
);
if
(
x
==
CODE_file_location_unavailable
)
{
in_ptr
+=
5
;
}
else
{
in_ptr
+=
6
;
}
return
0
;
}
int
fetch_skip_user_status
(
void
)
{
unsigned
x
=
fetch_int
();
code_assert
(
x
==
CODE_user_status_empty
||
x
==
CODE_user_status_online
||
x
==
CODE_user_status_offline
);
if
(
x
!=
CODE_user_status_empty
)
{
fetch_int
();
}
return
0
;
}
char
*
create_print_name
(
peer_id_t
id
,
const
char
*
a1
,
const
char
*
a2
,
const
char
*
a3
,
const
char
*
a4
)
{
const
char
*
d
[
4
];
d
[
0
]
=
a1
;
d
[
1
]
=
a2
;
d
[
2
]
=
a3
;
d
[
3
]
=
a4
;
...
...
@@ -159,6 +182,12 @@ char *create_print_name (peer_id_t id, const char *a1, const char *a2, const cha
return
strdup
(
s
);
}
/*
*
* Fetch with log event
*
*/
long
long
fetch_user_photo
(
struct
user
*
U
)
{
unsigned
x
=
fetch_int
();
code_assert
(
x
==
CODE_user_profile_photo
||
x
==
CODE_user_profile_photo_old
||
x
==
CODE_user_profile_photo_empty
);
...
...
@@ -172,8 +201,8 @@ long long fetch_user_photo (struct user *U) {
}
struct
file_location
big
;
struct
file_location
small
;
if
(
fetch_file_location
(
&
small
)
<
0
)
{
return
-
1
;
}
if
(
fetch_file_location
(
&
big
)
<
0
)
{
return
-
1
;
}
code_try
(
fetch_file_location
(
&
small
));
code_try
(
fetch_file_location
(
&
big
));
bl_do_set_user_profile_photo
(
U
,
photo_id
,
&
big
,
&
small
);
return
0
;
...
...
@@ -183,9 +212,6 @@ int fetch_user (struct user *U) {
unsigned
x
=
fetch_int
();
code_assert
(
x
==
CODE_user_empty
||
x
==
CODE_user_self
||
x
==
CODE_user_contact
||
x
==
CODE_user_request
||
x
==
CODE_user_foreign
||
x
==
CODE_user_deleted
);
U
->
id
=
MK_USER
(
fetch_int
());
if
((
U
->
flags
&
FLAG_CREATED
)
&&
x
==
CODE_user_empty
)
{
return
0
;
}
if
(
x
==
CODE_user_empty
)
{
return
0
;
}
...
...
@@ -204,8 +230,10 @@ int fetch_user (struct user *U) {
}
if
(
new
)
{
int
l1
=
prefetch_strlen
();
code_assert
(
l1
>=
0
);
char
*
s1
=
fetch_str
(
l1
);
int
l2
=
prefetch_strlen
();
code_assert
(
l2
>=
0
);
char
*
s2
=
fetch_str
(
l2
);
if
(
x
==
CODE_user_deleted
&&
!
(
U
->
flags
&
FLAG_DELETED
))
{
...
...
@@ -221,6 +249,7 @@ int fetch_user (struct user *U) {
char
*
phone
=
0
;
if
(
x
!=
CODE_user_foreign
)
{
phone_len
=
prefetch_strlen
();
code_assert
(
phone_len
>=
0
);
phone
=
fetch_str
(
phone_len
);
}
bl_do_new_user
(
get_peer_id
(
U
->
id
),
s1
,
l1
,
s2
,
l2
,
access_token
,
phone
,
phone_len
,
x
==
CODE_user_contact
);
...
...
@@ -1496,6 +1525,7 @@ struct user *fetch_alloc_user (void) {
memset
(
U
,
0
,
sizeof
(
*
U
));
U
->
id
=
MK_USER
(
data
[
1
]);
peer_tree
=
tree_insert_peer
(
peer_tree
,
U
,
lrand48
());
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
U
;
}
fetch_user
(
&
U
->
user
);
...
...
@@ -1512,6 +1542,7 @@ struct secret_chat *fetch_alloc_encrypted_chat (void) {
U
->
id
=
MK_ENCR_CHAT
(
data
[
1
]);
encr_chats_allocated
++
;
peer_tree
=
tree_insert_peer
(
peer_tree
,
U
,
lrand48
());
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
U
;
}
fetch_encrypted_chat
(
&
U
->
encr_chat
);
...
...
@@ -1521,18 +1552,21 @@ struct secret_chat *fetch_alloc_encrypted_chat (void) {
void
insert_encrypted_chat
(
peer_t
*
P
)
{
encr_chats_allocated
++
;
peer_tree
=
tree_insert_peer
(
peer_tree
,
P
,
lrand48
());
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
P
;
}
void
insert_user
(
peer_t
*
P
)
{
users_allocated
++
;
peer_tree
=
tree_insert_peer
(
peer_tree
,
P
,
lrand48
());
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
P
;
}
void
insert_chat
(
peer_t
*
P
)
{
chats_allocated
++
;
peer_tree
=
tree_insert_peer
(
peer_tree
,
P
,
lrand48
());
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
P
;
}
...
...
@@ -1550,6 +1584,7 @@ struct user *fetch_alloc_user_full (void) {
U
->
id
=
MK_USER
(
data
[
2
]);
peer_tree
=
tree_insert_peer
(
peer_tree
,
U
,
lrand48
());
fetch_user_full
(
&
U
->
user
);
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
U
;
return
&
U
->
user
;
}
...
...
@@ -1707,6 +1742,7 @@ void message_add_peer (struct message *M) {
break
;
}
peer_tree
=
tree_insert_peer
(
peer_tree
,
P
,
lrand48
());
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
P
;
}
if
(
!
P
->
last
)
{
...
...
@@ -1856,6 +1892,7 @@ struct chat *fetch_alloc_chat (void) {
memset
(
U
,
0
,
sizeof
(
*
U
));
U
->
id
=
MK_CHAT
(
data
[
1
]);
peer_tree
=
tree_insert_peer
(
peer_tree
,
U
,
lrand48
());
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
U
;
}
fetch_chat
(
&
U
->
chat
);
...
...
@@ -1876,6 +1913,7 @@ struct chat *fetch_alloc_chat_full (void) {
U
->
id
=
MK_CHAT
(
data
[
2
]);
peer_tree
=
tree_insert_peer
(
peer_tree
,
U
,
lrand48
());
fetch_chat_full
(
&
U
->
chat
);
assert
(
peer_num
<
MAX_PEER_NUM
);
Peers
[
peer_num
++
]
=
U
;
return
&
U
->
chat
;
}
...
...
structures.h
View file @
8a39f039
...
...
@@ -371,6 +371,7 @@ void send_all_unsent (void);
void
message_remove_tree
(
struct
message
*
M
);
void
message_add_peer
(
struct
message
*
M
);
void
message_del_peer
(
struct
message
*
M
);
void
free_message
(
struct
message
*
M
);
#define PEER_USER 1
#define PEER_CHAT 2
...
...
telegram.h
View file @
8a39f039
...
...
@@ -17,5 +17,4 @@
Copyright Vitaly Valtman 2013
*/
#define MAX_DC_NUM 9
#define MAX_USER_NUM 100000
#define MAX_CHAT_NUM 100000
#define MAX_PEER_NUM 100000
tree.h
View file @
8a39f039
...
...
@@ -147,6 +147,8 @@ void tree_check_ ## X_NAME (struct tree_ ## X_NAME *T) { \
assert (T->right->y <= T->y);\
assert (X_CMP (T->right->x, T->x) > 0); \
}\
tree_check_ ## X_NAME (T->left); \
tree_check_ ## X_NAME (T->right); \
}\
#define int_cmp(a,b) ((a) - (b))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment