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
e2e7d0c9
Commit
e2e7d0c9
authored
Aug 15, 2014
by
Vysheng
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixes
parent
b12ca538
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
228 additions
and
135 deletions
+228
-135
binlog.c
binlog.c
+1
-0
binlog.h
binlog.h
+1
-1
loop.c
loop.c
+127
-95
main.c
main.c
+12
-13
mtproto-client.c
mtproto-client.c
+4
-1
net.c
net.c
+28
-1
net.h
net.h
+3
-1
queries.c
queries.c
+23
-16
tgl.c
tgl.c
+15
-0
tgl.h
tgl.h
+13
-6
tools.h
tools.h
+1
-1
No files found.
binlog.c
View file @
e2e7d0c9
...
...
@@ -82,6 +82,7 @@ static int fetch_comb_binlog_dc_option (void *extra) {
vlogprintf
(
E_NOTICE
,
"DC%d '%.*s' update: %.*s:%d
\n
"
,
id
,
l1
,
name
,
l2
,
ip
,
port
);
tglmp_alloc_dc
(
id
,
tstrndup
(
ip
,
l2
),
port
);
return
0
;
}
...
...
binlog.h
View file @
e2e7d0c9
...
...
@@ -19,7 +19,7 @@
#ifndef __BINLOG_H__
#define __BINLOG_H__
#include "structures.h"
//
#include "structures.h"
void
bl_do_set_auth_key_id
(
int
num
,
unsigned
char
*
buf
);
...
...
loop.c
View file @
e2e7d0c9
...
...
@@ -43,12 +43,16 @@
#include <sys/stat.h>
#include <fcntl.h>
#include <event2/event.h>
#include "interface.h"
#include "telegram.h"
#include "loop.h"
#include "lua-tg.h"
#include "tgl.h"
int
verbosity
;
extern
char
*
default_username
;
extern
char
*
auth_token
;
void
set_default_username
(
const
char
*
s
);
...
...
@@ -61,37 +65,27 @@ extern int safe_quit;
extern
int
queries_num
;
void
got_it
(
char
*
line
,
int
len
);
static
void
stdin_read_callback
(
evutil_socket_t
fd
,
short
what
,
void
*
arg
)
{
if
(((
long
)
arg
)
&
1
)
{
rl_callback_read_char
();
}
else
{
char
*
line
=
0
;
size_t
len
=
0
;
assert
(
getline
(
&
line
,
&
len
,
stdin
)
>=
0
);
got_it
(
line
,
strlen
(
line
));
}
}
void
net_loop
(
int
flags
,
int
(
*
is_end
)(
void
))
{
while
(
!
is_end
())
{
struct
pollfd
fds
[
101
];
int
cc
=
0
;
if
(
flags
&
3
)
{
fds
[
0
].
fd
=
0
;
fds
[
0
].
events
=
POLLIN
;
cc
++
;
}
struct
event
*
ev
=
0
;
if
(
flags
&
3
)
{
ev
=
event_new
(
tgl_state
.
ev_base
,
0
,
EV_READ
|
EV_PERSIST
,
stdin_read_callback
,
(
void
*
)(
long
)
flags
)
;
event_add
(
ev
,
0
);
}
while
(
!
is_end
||
!
is_end
())
{
event_base_loop
(
tgl_state
.
ev_base
,
EVLOOP_ONCE
);
//write_state_file ();
int
x
=
connections_make_poll_array
(
fds
+
cc
,
101
-
cc
)
+
cc
;
double
timer
=
next_timer_in
();
if
(
timer
>
1000
)
{
timer
=
1000
;
}
if
(
poll
(
fds
,
x
,
timer
)
<
0
)
{
work_timers
();
continue
;
}
work_timers
();
if
((
flags
&
3
)
&&
(
fds
[
0
].
revents
&
POLLIN
))
{
tgl_state
.
unread_messages
=
0
;
if
(
flags
&
1
)
{
rl_callback_read_char
();
}
else
{
char
*
line
=
0
;
size_t
len
=
0
;
assert
(
getline
(
&
line
,
&
len
,
stdin
)
>=
0
);
got_it
(
line
,
strlen
(
line
));
}
}
connections_poll_result
(
fds
+
cc
,
x
-
cc
);
#ifdef USE_LUA
lua_do_all
();
#endif
...
...
@@ -101,10 +95,17 @@ void net_loop (int flags, int (*is_end)(void)) {
exit
(
0
);
}
if
(
unknown_user_list_pos
)
{
tgl_do_get_user_list_info_silent
(
unknown_user_list_pos
,
unknown_user_list
);
int
i
;
for
(
i
=
0
;
i
<
unknown_user_list_pos
;
i
++
)
{
tgl_do_get_user_info
(
TGL_MK_USER
(
unknown_user_list
[
i
]),
0
,
0
,
0
);
}
unknown_user_list_pos
=
0
;
}
}
if
(
ev
)
{
event_free
(
ev
);
}
}
char
**
_s
;
...
...
@@ -134,31 +135,75 @@ int net_getline (char **s, size_t *l) {
return
0
;
}
int
ret1
(
void
)
{
return
0
;
}
int
main_loop
(
void
)
{
net_loop
(
1
,
ret1
);
net_loop
(
1
,
0
);
return
0
;
}
char
*
get_auth_key_filename
(
void
);
char
*
get_state_filename
(
void
);
char
*
get_secret_chat_filename
(
void
);
int
zero
[
512
];
struct
dc
*
cur_a_dc
;
int
is_authorized
(
void
)
{
return
tgl_authorized_dc
(
cur_a_dc
);
}
int
config_got
;
int
got_config
(
void
)
{
return
config_got
;
}
void
on_get_config
(
void
*
extra
,
int
success
)
{
if
(
!
success
)
{
logprintf
(
"Can not get config.
\n
"
);
exit
(
1
);
}
config_got
=
1
;
extern
int
max_chat_size
;
int
mcs
(
void
)
{
return
max_chat_size
;
}
extern
int
difference_got
;
int
dgot
(
void
)
{
return
difference_got
;
int
should_register
;
char
*
hash
;
void
sign_in_callback
(
void
*
extra
,
int
success
,
int
registered
,
const
char
*
mhash
)
{
if
(
!
success
)
{
logprintf
(
"Can not send code
\n
"
);
exit
(
1
);
}
should_register
=
!
registered
;
hash
=
strdup
(
mhash
);
}
int
signed_in_ok
;
void
sign_in_result
(
void
*
extra
,
int
success
,
struct
tgl_user
*
U
)
{
if
(
!
success
)
{
logprintf
(
"Can not login
\n
"
);
exit
(
1
);
}
signed_in_ok
=
1
;
}
int
dlgot
(
void
)
{
return
dialog_list_got
;
int
signed_in
(
void
)
{
return
signed_in_ok
;
}
int
sent_code
(
void
)
{
return
hash
!=
0
;
}
int
dc_signed_in
(
void
)
{
return
tgl_signed_dc
(
cur_a_dc
);
}
void
export_auth_callback
(
void
*
DC
,
int
success
)
{
if
(
!
success
)
{
logprintf
(
"Can not export auth
\n
"
);
exit
(
1
);
}
}
int
zero
[
512
];
int
readline_active
;
int
new_dc_num
;
int
wait_dialog_list
;
...
...
@@ -167,43 +212,37 @@ int loop (void) {
//on_start ();
tgl_init
();
double
t
=
get_double_time
();
double
t
=
tglt_
get_double_time
();
logprintf
(
"replay log start
\n
"
);
tgl_replay_log
();
logprintf
(
"replay log end in %lf seconds
\n
"
,
get_double_time
()
-
t
);
logprintf
(
"replay log end in %lf seconds
\n
"
,
tglt_
get_double_time
()
-
t
);
tgl_reopen_binlog_for_writing
();
#ifdef USE_LUA
lua_binlog_end
();
#endif
update_prompt
();
assert
(
DC_list
[
dc_working_num
]);
if
(
!
DC_working
||
!
DC_working
->
auth_key_id
)
{
// if (auth_state == 0) {
DC_working
=
DC_list
[
dc_working_num
];
assert
(
!
DC_working
->
auth_key_id
);
dc_authorize
(
DC_working
);
assert
(
DC_working
->
auth_key_id
);
auth_state
=
100
;
write_auth_file
();
if
(
!
tgl_authorized_dc
(
tgl_state
.
DC_working
))
{
cur_a_dc
=
tgl_state
.
DC_working
;
tgl_dc_authorize
(
tgl_state
.
DC_working
);
net_loop
(
0
,
is_authorized
);
}
if
(
verbosity
)
{
logprintf
(
"Requesting info about DC...
\n
"
);
}
tgl_do_help_get_config
();
net_loop
(
0
,
mcs
);
tgl_do_help_get_config
(
on_get_config
,
0
);
net_loop
(
0
,
got_config
);
if
(
verbosity
)
{
logprintf
(
"DC_info: %d new DC got
\n
"
,
new_dc_num
);
}
int
i
;
for
(
i
=
0
;
i
<=
MAX_DC_NUM
;
i
++
)
if
(
DC_list
[
i
]
&&
!
DC_list
[
i
]
->
auth_key_id
)
{
dc_authorize
(
DC_list
[
i
])
;
assert
(
DC_list
[
i
]
->
auth_key_id
);
write_auth_file
(
);
for
(
i
=
0
;
i
<=
tgl_state
.
max_dc_num
;
i
++
)
if
(
tgl_state
.
DC_list
[
i
]
&&
!
tgl_authorized_dc
(
tgl_state
.
DC_list
[
i
])
)
{
cur_a_dc
=
tgl_state
.
DC_list
[
i
]
;
tgl_dc_authorize
(
cur_a_dc
);
net_loop
(
0
,
is_authorized
);
}
if
(
auth_state
==
100
||
!
(
DC_working
->
has_auth
))
{
if
(
!
tgl_signed_dc
(
tgl_state
.
DC_working
))
{
if
(
!
default_username
)
{
size_t
size
=
0
;
char
*
user
=
0
;
...
...
@@ -217,11 +256,11 @@ int loop (void) {
set_default_username
(
user
);
}
}
int
res
=
tgl_do_auth_check_phone
(
default_username
);
assert
(
res
>=
0
);
logprintf
(
"%s
\n
"
,
res
>
0
?
"phone registered"
:
"phone not registered"
);
if
(
res
>
0
&&
!
register_mode
)
{
tgl_do_send_code
(
default_username
);
tgl_do_send_code
(
default_username
,
sign_in_callback
,
0
);
net_loop
(
0
,
sent_code
);
logprintf
(
"%s
\n
"
,
should_register
?
"phone not registered"
:
"phone registered"
);
if
(
!
should_register
)
{
char
*
code
=
0
;
size_t
size
=
0
;
printf
(
"Code from sms (if you did not receive an SMS and want to be called, type
\"
call
\"
): "
);
...
...
@@ -232,17 +271,16 @@ int loop (void) {
}
if
(
!
strcmp
(
code
,
"call"
))
{
printf
(
"You typed
\"
call
\"
, switching to phone system.
\n
"
);
tgl_do_phone_call
(
default_username
);
tgl_do_phone_call
(
default_username
,
hash
,
0
,
0
);
printf
(
"Calling you! Code: "
);
continue
;
}
if
(
tgl_do_send_code_result
(
code
)
>=
0
)
{
if
(
tgl_do_send_code_result
(
default_username
,
hash
,
code
,
sign_in_result
,
0
)
>=
0
)
{
break
;
}
printf
(
"Invalid code. Try again: "
);
tfree_str
(
code
);
free
(
code
);
}
auth_state
=
300
;
}
else
{
printf
(
"User is not registered. Do you want to register? [Y/n] "
);
char
*
code
;
...
...
@@ -269,13 +307,6 @@ int loop (void) {
perror
(
"getline()"
);
exit
(
EXIT_FAILURE
);
}
int
dc_num
=
tgl_do_get_nearest_dc
();
assert
(
dc_num
>=
0
&&
dc_num
<=
MAX_DC_NUM
&&
DC_list
[
dc_num
]);
dc_working_num
=
dc_num
;
DC_working
=
DC_list
[
dc_working_num
];
tgl_do_send_code
(
default_username
);
printf
(
"Code from sms (if you did not receive an SMS and want to be called, type
\"
call
\"
): "
);
while
(
1
)
{
if
(
net_getline
(
&
code
,
&
size
)
==
-
1
)
{
...
...
@@ -284,37 +315,38 @@ int loop (void) {
}
if
(
!
strcmp
(
code
,
"call"
))
{
printf
(
"You typed
\"
call
\"
, switching to phone system.
\n
"
);
tgl_do_phone_call
(
default_username
);
tgl_do_phone_call
(
default_username
,
hash
,
0
,
0
);
printf
(
"Calling you! Code: "
);
continue
;
}
if
(
tgl_do_send_code_result_auth
(
code
,
first_name
,
last_name
)
>=
0
)
{
if
(
tgl_do_send_code_result_auth
(
default_username
,
hash
,
code
,
first_name
,
last_name
,
sign_in_result
,
0
)
>=
0
)
{
break
;
}
printf
(
"Invalid code. Try again: "
);
tfree_str
(
code
);
free
(
code
);
}
auth_state
=
300
;
}
net_loop
(
0
,
signed_in
);
bl_do_dc_signed
(
tgl_state
.
DC_working
);
}
for
(
i
=
0
;
i
<=
MAX_DC_NUM
;
i
++
)
if
(
DC_list
[
i
]
&&
!
DC_list
[
i
]
->
has_auth
)
{
tgl_do_export_auth
(
i
);
tgl_do_import_auth
(
i
);
bl_do_dc_signed
(
i
);
write_auth_file
();
for
(
i
=
0
;
i
<=
tgl_state
.
max_dc_num
;
i
++
)
if
(
tgl_state
.
DC_list
[
i
]
&&
!
tgl_signed_dc
(
tgl_state
.
DC_list
[
i
]))
{
tgl_do_export_auth
(
i
,
export_auth_callback
,
(
void
*
)(
long
)
tgl_state
.
DC_list
[
i
]);
cur_a_dc
=
tgl_state
.
DC_working
;
net_loop
(
0
,
dc_signed_in
);
}
write_auth_file
();
//
write_auth_file ();
fflush
(
stdout
);
fflush
(
stderr
);
read_state_file
();
read_secret_chat_file
();
//
read_state_file ();
//
read_secret_chat_file ();
set_interface_callbacks
();
tgl_do_get_difference
();
tgl_do_get_difference
(
0
,
0
);
net_loop
(
0
,
dgot
);
#ifdef USE_LUA
lua_diff_end
();
...
...
main.c
View file @
e2e7d0c9
...
...
@@ -374,7 +374,6 @@ void usage (void) {
printf
(
" -N message num mode
\n
"
);
printf
(
" -c config-file specify config file
\n
"
);
printf
(
" -p prefix specify prefix
\n
"
);
printf
(
" -R register mode
\n
"
);
printf
(
" -f sync from start
\n
"
);
printf
(
" -B enable binlog
\n
"
);
printf
(
" -E disable auto accept
\n
"
);
...
...
@@ -400,7 +399,7 @@ char *lua_file;
void
args_parse
(
int
argc
,
char
**
argv
)
{
int
opt
=
0
;
while
((
opt
=
getopt
(
argc
,
argv
,
"u:hk:vn:Nc:p:l:
RfBL:
Es:wW"
))
!=
-
1
)
{
while
((
opt
=
getopt
(
argc
,
argv
,
"u:hk:vn:Nc:p:l:
fB
Es:wW"
))
!=
-
1
)
{
switch
(
opt
)
{
case
'u'
:
set_default_username
(
optarg
);
...
...
@@ -425,23 +424,23 @@ void args_parse (int argc, char **argv) {
case
'l'
:
log_level
=
atoi
(
optarg
);
break
;
case
'R'
:
register_mode
=
1
;
break
;
//
case 'R':
//
register_mode = 1;
//
break;
case
'f'
:
sync_from_start
=
1
;
break
;
case
'B'
:
binlog_enabled
=
1
;
break
;
case
'L'
:
if
(
log_net_file
)
{
usage
();
}
log_net_file
=
tstrdup
(
optarg
);
log_net_f
=
fopen
(
log_net_file
,
"a"
);
assert
(
log_net_f
);
break
;
//
case 'L':
//
if (log_net_file) {
//
usage ();
//
}
//
log_net_file = tstrdup (optarg);
//
log_net_f = fopen (log_net_file, "a");
//
assert (log_net_f);
//
break;
case
'E'
:
disable_auto_accept
=
1
;
break
;
...
...
mtproto-client.c
View file @
e2e7d0c9
...
...
@@ -1158,6 +1158,9 @@ struct dc *tglmp_alloc_dc (int id, char *ip, int port UU) {
DC
->
ip
=
ip
;
DC
->
port
=
port
;
tgl_state
.
DC_list
[
id
]
=
DC
;
if
(
id
>
tgl_state
.
max_dc_num
)
{
tgl_state
.
max_dc_num
=
id
;
}
return
DC
;
}
...
...
@@ -1171,7 +1174,7 @@ void tglmp_dc_create_session (struct dc *DC) {
struct
session
*
S
=
talloc0
(
sizeof
(
*
S
));
assert
(
RAND_pseudo_bytes
((
unsigned
char
*
)
&
S
->
session_id
,
8
)
>=
0
);
S
->
dc
=
DC
;
S
->
c
=
tgl_state
.
net_methods
->
create_connection
(
DC
->
ip
,
DC
->
port
,
DC
,
S
,
&
mtproto_methods
);
S
->
c
=
tgl_state
.
net_methods
->
create_connection
(
DC
->
ip
,
DC
->
port
,
S
,
DC
,
&
mtproto_methods
);
if
(
!
S
->
c
)
{
vlogprintf
(
E_DEBUG
,
"Can not create connection to DC. Is network down?
\n
"
);
exit
(
1
);
...
...
net.c
View file @
e2e7d0c9
...
...
@@ -244,7 +244,7 @@ static void conn_try_write (evutil_socket_t fd, short what, void *arg) {
}
}
struct
connection
*
tgln_create_connection
(
const
char
*
host
,
int
port
,
struct
session
*
session
,
struct
mtproto_methods
*
methods
)
{
struct
connection
*
tgln_create_connection
(
const
char
*
host
,
int
port
,
struct
session
*
session
,
struct
dc
*
dc
,
struct
mtproto_methods
*
methods
)
{
struct
connection
*
c
=
talloc0
(
sizeof
(
*
c
));
int
fd
=
socket
(
AF_INET
,
SOCK_STREAM
,
0
);
if
(
fd
==
-
1
)
{
...
...
@@ -294,6 +294,10 @@ struct connection *tgln_create_connection (const char *host, int port, struct se
start_ping_timer
(
c
);
c
->
dc
=
dc
;
c
->
session
=
session
;
c
->
methods
=
methods
;
char
byte
=
0xef
;
assert
(
tgln_write_out
(
c
,
&
byte
,
1
)
==
1
);
tgln_flush_out
(
c
);
...
...
@@ -569,3 +573,26 @@ void tgl_connections_poll_result (struct pollfd *fds, int max) {
}
}
}
static
void
incr_out_packet_num
(
struct
connection
*
c
)
{
c
->
out_packet_num
++
;
}
static
struct
dc
*
get_dc
(
struct
connection
*
c
)
{
return
c
->
dc
;
}
static
struct
session
*
get_session
(
struct
connection
*
c
)
{
return
c
->
session
;
}
struct
tgl_net_methods
tgl_conn_methods
=
{
.
write_out
=
tgln_write_out
,
.
read_in
=
tgln_read_in
,
.
read_in_lookup
=
tgln_read_in_lookup
,
.
flush_out
=
tgln_flush_out
,
.
incr_out_packet_num
=
incr_out_packet_num
,
.
get_dc
=
get_dc
,
.
get_session
=
get_session
,
.
create_connection
=
tgln_create_connection
};
net.h
View file @
e2e7d0c9
...
...
@@ -71,6 +71,7 @@ struct connection {
int
in_fail_timer
;
struct
mtproto_methods
*
methods
;
struct
session
*
session
;
struct
dc
*
dc
;
void
*
extra
;
struct
event
*
ping_ev
;
struct
event
*
fail_ev
;
...
...
@@ -88,13 +89,14 @@ int tgln_read_in_lookup (struct connection *c, void *data, int len);
void
tgln_insert_msg_id
(
struct
session
*
S
,
long
long
id
);
extern
struct
tgl_net_methods
tgl_conn_methods
;
//void create_all_outbound_connections (void);
//struct connection *create_connection (const char *host, int port, struct session *session, struct connection_methods *methods);
struct
dc
*
tgln_alloc_dc
(
int
id
,
char
*
ip
,
int
port
);
void
tgln_dc_create_session
(
struct
dc
*
DC
,
struct
mtproto_methods
*
methods
);
struct
connection
*
tgln_create_connection
(
const
char
*
host
,
int
port
,
struct
session
*
session
,
struct
mtproto_methods
*
methods
);
struct
connection
*
tgln_create_connection
(
const
char
*
host
,
int
port
,
struct
session
*
session
,
struct
dc
*
dc
,
struct
mtproto_methods
*
methods
);
#define GET_DC(c) (c->session->dc)
#endif
queries.c
View file @
e2e7d0c9
...
...
@@ -368,8 +368,8 @@ void tgl_do_help_get_config (void (*callback)(void *, int), void *callback_extra
/* }}} */
/* {{{ Send code */
static
char
*
phone_code_hash
;
static
int
send_code_on_answer
(
struct
query
*
q
UU
)
{
static
char
*
phone_code_hash
;
assert
(
fetch_int
()
==
(
int
)
CODE_auth_sent_code
);
int
registered
=
fetch_bool
();
int
l
=
prefetch_strlen
();
...
...
@@ -380,7 +380,8 @@ static int send_code_on_answer (struct query *q UU) {
phone_code_hash
=
tstrndup
(
s
,
l
);
fetch_int
();
fetch_bool
();
want_dc_num
=
-
1
;
tfree_str
(
q
->
extra
);
if
(
q
->
callback
)
{
((
void
(
*
)(
void
*
,
int
,
int
,
const
char
*
))(
q
->
callback
))
(
q
->
callback_extra
,
1
,
registered
,
phone_code_hash
);
}
...
...
@@ -390,6 +391,7 @@ static int send_code_on_answer (struct query *q UU) {
static
int
send_code_on_error
(
struct
query
*
q
UU
,
int
error_code
,
int
l
,
char
*
error
)
{
int
s
=
strlen
(
"PHONE_MIGRATE_"
);
int
s2
=
strlen
(
"NETWORK_MIGRATE_"
);
int
want_dc_num
=
0
;
if
(
l
>=
s
&&
!
memcmp
(
error
,
"PHONE_MIGRATE_"
,
s
))
{
int
i
=
error
[
s
]
-
'0'
;
want_dc_num
=
i
;
...
...
@@ -400,9 +402,13 @@ static int send_code_on_error (struct query *q UU, int error_code, int l, char *
vlogprintf
(
E_ERROR
,
"error_code = %d, error = %.*s
\n
"
,
error_code
,
l
,
error
);
assert
(
0
);
}
if
(
q
->
callback
)
{
((
void
(
*
)(
void
*
,
int
,
int
,
const
char
*
))(
q
->
callback
))
(
q
->
callback_extra
,
0
,
0
,
0
);
}
bl_do_set_working_dc
(
want_dc_num
);
//if (q->callback) {
// ((void (*)(void *, int, int, const char *))(q->callback)) (q->callback_extra, 0, 0, 0);
//}
assert
(
DC_working
->
id
==
want_dc_num
);
tgl_do_send_code
(
q
->
extra
,
q
->
callback
,
q
->
callback_extra
);
tfree_str
(
q
->
extra
);
return
0
;
}
...
...
@@ -413,11 +419,10 @@ static struct query_methods send_code_methods = {
};
//char *suser;
extern
int
dc_working_num
;
//
extern int dc_working_num;
void
tgl_do_send_code
(
const
char
*
user
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
int
registered
,
const
char
*
hash
),
void
*
callback_extra
)
{
vlogprintf
(
E_DEBUG
,
"sending code to dc %d
\n
"
,
dc_working_num
);
vlogprintf
(
E_DEBUG
,
"sending code to dc %d
\n
"
,
tgl_state
.
dc_working_num
);
//suser = tstrdup (user);
want_dc_num
=
0
;
clear_packet
();
tgl_do_insert_header
();
out_int
(
CODE_auth_send_code
);
...
...
@@ -427,7 +432,7 @@ void tgl_do_send_code (const char *user, void (*callback)(void *callback_extra,
out_string
(
TG_APP_HASH
);
out_string
(
"en"
);
tglq_send_query
(
DC_working
,
packet_ptr
-
packet_buffer
,
packet_buffer
,
&
send_code_methods
,
0
,
callback
,
callback_extra
);
tglq_send_query
(
DC_working
,
packet_ptr
-
packet_buffer
,
packet_buffer
,
&
send_code_methods
,
tstrdup
(
user
)
,
callback
,
callback_extra
);
}
...
...
@@ -444,7 +449,7 @@ static struct query_methods phone_call_methods = {
.
type
=
TYPE_TO_PARAM
(
bool
)
};
void
tgl_do_phone_call
(
const
char
*
user
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
),
void
*
callback_extra
)
{
void
tgl_do_phone_call
(
const
char
*
user
,
const
char
*
hash
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
),
void
*
callback_extra
)
{
vlogprintf
(
E_DEBUG
,
"calling user
\n
"
);
//suser = tstrdup (user);
want_dc_num
=
0
;
...
...
@@ -452,7 +457,7 @@ void tgl_do_phone_call (const char *user, void (*callback)(void *callback_extra,
tgl_do_insert_header
();
out_int
(
CODE_auth_send_call
);
out_string
(
user
);
out_string
(
phone_code_
hash
);
out_string
(
hash
);
tglq_send_query
(
DC_working
,
packet_ptr
-
packet_buffer
,
packet_buffer
,
&
phone_call_methods
,
0
,
callback
,
callback_extra
);
}
...
...
@@ -581,21 +586,21 @@ static struct query_methods sign_in_methods = {
.
type
=
TYPE_TO_PARAM
(
auth_authorization
)
};
int
tgl_do_send_code_result
(
const
char
*
user
,
const
char
*
code
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
)
{
int
tgl_do_send_code_result
(
const
char
*
user
,
const
char
*
hash
,
const
char
*
code
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
)
{
clear_packet
();
out_int
(
CODE_auth_sign_in
);
out_string
(
user
);
out_string
(
phone_code_
hash
);
out_string
(
hash
);
out_string
(
code
);
tglq_send_query
(
DC_working
,
packet_ptr
-
packet_buffer
,
packet_buffer
,
&
sign_in_methods
,
0
,
callback
,
callback_extra
);
return
0
;
}
int
tgl_do_send_code_result_auth
(
const
char
*
user
,
const
char
*
code
,
const
char
*
first_name
,
const
char
*
last_name
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
)
{
int
tgl_do_send_code_result_auth
(
const
char
*
user
,
const
char
*
hash
,
const
char
*
code
,
const
char
*
first_name
,
const
char
*
last_name
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
)
{
clear_packet
();
out_int
(
CODE_auth_sign_up
);
out_string
(
user
);
out_string
(
phone_code_
hash
);
out_string
(
hash
);
out_string
(
code
);
out_string
(
first_name
);
out_string
(
last_name
);
...
...
@@ -2115,6 +2120,8 @@ static int import_auth_on_answer (struct query *q UU) {
assert
(
fetch_int
()
==
(
int
)
CODE_auth_authorization
);
fetch_int
();
// expires
tglf_fetch_alloc_user
();
bl_do_dc_signed
(((
struct
dc
*
)
q
->
extra
)
->
id
);
if
(
q
->
callback
)
{
((
void
(
*
)(
void
*
,
int
))
q
->
callback
)
(
q
->
callback_extra
,
1
);
...
...
@@ -2140,7 +2147,7 @@ static int export_auth_on_answer (struct query *q UU) {
out_int
(
CODE_auth_import_authorization
);
out_int
(
tgl_state
.
our_id
);
out_cstring
(
s
,
l
);
tglq_send_query
(
q
->
extra
,
packet_ptr
-
packet_buffer
,
packet_buffer
,
&
import_auth_methods
,
0
,
q
->
callback
,
q
->
callback_extra
);
tglq_send_query
(
q
->
extra
,
packet_ptr
-
packet_buffer
,
packet_buffer
,
&
import_auth_methods
,
q
->
extra
,
q
->
callback
,
q
->
callback_extra
);
tfree
(
s
,
l
);
return
0
;
}
...
...
tgl.c
View file @
e2e7d0c9
...
...
@@ -5,6 +5,7 @@
#include "tgl.h"
#include "tools.h"
#include "mtproto-client.h"
#include "net.h"
#include <event2/event.h>
struct
tgl_state
tgl_state
;
...
...
@@ -36,5 +37,19 @@ void tgl_set_rsa_key (const char *key) {
void
tgl_init
(
void
)
{
tgl_state
.
ev_base
=
event_base_new
();
if
(
!
tgl_state
.
net_methods
)
{
tgl_state
.
net_methods
=
&
tgl_conn_methods
;
}
tglmp_on_start
(
tgl_state
.
rsa_key
);
}
int
tgl_authorized_dc
(
struct
dc
*
DC
)
{
assert
(
DC
);
return
DC
->
auth_key_id
;
}
int
tgl_signed_dc
(
struct
dc
*
DC
)
{
assert
(
DC
);
return
DC
->
has_auth
;
}
tgl.h
View file @
e2e7d0c9
...
...
@@ -31,15 +31,15 @@ struct tgl_update_callback {
};
struct
tgl_net_methods
{
int
(
*
write_out
)
(
struct
connection
*
c
,
void
*
data
,
int
len
);
int
(
*
write_out
)
(
struct
connection
*
c
,
const
void
*
data
,
int
len
);
int
(
*
read_in
)
(
struct
connection
*
c
,
void
*
data
,
int
len
);
int
(
*
read_in_lookup
)
(
struct
connection
*
c
,
void
*
data
,
int
len
);
int
(
*
flush_out
)
(
struct
connection
*
c
);
void
(
*
flush_out
)
(
struct
connection
*
c
);
void
(
*
incr_out_packet_num
)
(
struct
connection
*
c
);
struct
dc
*
(
*
get_dc
)
(
struct
connection
*
c
);
struct
session
*
(
*
get_session
)
(
struct
connection
*
c
);
struct
connection
*
(
*
create_connection
)
(
const
char
*
host
,
int
port
,
struct
dc
*
dc
,
struct
session
*
session
,
struct
mtproto_methods
*
methods
);
struct
connection
*
(
*
create_connection
)
(
const
char
*
host
,
int
port
,
struct
session
*
session
,
struct
dc
*
dc
,
struct
mtproto_methods
*
methods
);
};
...
...
@@ -64,6 +64,7 @@ struct tgl_state {
struct
dc
*
DC_list
[
TGL_MAX_DC_NUM
];
struct
dc
*
DC_working
;
int
max_dc_num
;
int
dc_working_num
;
long
long
cur_uploading_bytes
;
...
...
@@ -154,9 +155,9 @@ void tgl_connections_poll_result (struct pollfd *fds, int max);
void
tgl_do_help_get_config
(
void
(
*
callback
)(
void
*
callback_extra
,
int
success
),
void
*
callback_extra
);
void
tgl_do_send_code
(
const
char
*
user
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
int
registered
,
const
char
*
hash
),
void
*
callback_extra
);
void
tgl_do_phone_call
(
const
char
*
user
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
),
void
*
callback_extra
);
int
tgl_do_send_code_result
(
const
char
*
user
,
const
char
*
code
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
)
;
int
tgl_do_send_code_result_auth
(
const
char
*
user
,
const
char
*
code
,
const
char
*
first_name
,
const
char
*
last_name
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
);
void
tgl_do_phone_call
(
const
char
*
user
,
const
char
*
hash
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
),
void
*
callback_extra
);
int
tgl_do_send_code_result
(
const
char
*
user
,
const
char
*
hash
,
const
char
*
code
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
)
;
int
tgl_do_send_code_result_auth
(
const
char
*
user
,
const
char
*
hash
,
const
char
*
code
,
const
char
*
first_name
,
const
char
*
last_name
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_user
*
Self
),
void
*
callback_extra
);
void
tgl_do_update_contact_list
(
void
(
*
callback
)
(
void
*
callback_extra
,
int
success
,
int
size
,
struct
tgl_user
*
contacts
[]),
void
*
callback_extra
);
void
tgl_do_send_message
(
tgl_peer_id_t
id
,
const
char
*
msg
,
int
len
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_message
*
M
),
void
*
callback_extra
);
void
tgl_do_send_msg
(
struct
tgl_message
*
M
,
void
(
*
callback
)(
void
*
callback_extra
,
int
success
,
struct
tgl_message
*
M
),
void
*
callback_extra
);
...
...
@@ -195,6 +196,9 @@ void tgl_do_visualize_key (tgl_peer_id_t id, unsigned char buf[16]);
void
tgl_do_send_ping
(
struct
connection
*
c
);
int
tgl_authorized_dc
(
struct
dc
*
DC
);
int
tgl_signed_dc
(
struct
dc
*
DC
);
//void tgl_do_get_suggested (void);
void
tgl_do_create_keys_end
(
struct
tgl_secret_chat
*
U
);
...
...
@@ -208,4 +212,7 @@ struct mtproto_methods {
void
tgl_init
(
void
);
void
tgl_dc_authorize
(
struct
dc
*
DC
);
double
tglt_get_double_time
(
void
);
#endif
tools.h
View file @
e2e7d0c9
...
...
@@ -20,7 +20,7 @@
#ifndef __TOOLS_H__
#define __TOOLS_H__
double
get_double_time
(
void
);
double
tglt_
get_double_time
(
void
);
void
*
talloc
(
size_t
size
);
void
*
trealloc
(
void
*
ptr
,
size_t
old_size
,
size_t
size
);
...
...
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