Added export_card/import_card queries
This commit is contained in:
parent
201e2deaf2
commit
949aa7f92f
@ -2,3 +2,6 @@ decryptedMessageMediaVideoL12#4cee6ef3 thumb:bytes thumb_w:int thumb_h:int durat
|
|||||||
decryptedMessageMediaAudioL12#6080758f duration:int size:int key:bytes iv:bytes = DecryptedMessageMedia;
|
decryptedMessageMediaAudioL12#6080758f duration:int size:int key:bytes iv:bytes = DecryptedMessageMedia;
|
||||||
|
|
||||||
auth.bindTempAuthKey perm_auth_key_id:long nonce:long expires_at:int encrypted_message:string = Bool;
|
auth.bindTempAuthKey perm_auth_key_id:long nonce:long expires_at:int encrypted_message:string = Bool;
|
||||||
|
|
||||||
|
contacts.exportCard = Vector<int>;
|
||||||
|
contacts.importCard export_card:Vector<int> = User;
|
||||||
|
51
interface.c
51
interface.c
@ -374,6 +374,8 @@ struct command commands[] = {
|
|||||||
{"chat_set_photo", {ca_chat, ca_file_name_end}},
|
{"chat_set_photo", {ca_chat, ca_file_name_end}},
|
||||||
{"set_profile_photo", {ca_file_name_end}},
|
{"set_profile_photo", {ca_file_name_end}},
|
||||||
{"accept_secret_chat", {ca_secret_chat, ca_none}},
|
{"accept_secret_chat", {ca_secret_chat, ca_none}},
|
||||||
|
{"export_card", {ca_none}},
|
||||||
|
{"import_card", {ca_string, ca_none}},
|
||||||
{0, {ca_none}}
|
{0, {ca_none}}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -559,6 +561,14 @@ void print_user_list_gw (void *extra, int success, int num, struct tgl_user *UL[
|
|||||||
print_end ();
|
print_end ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_user_gw (void *extra, int success, struct tgl_user *U) {
|
||||||
|
if (!success) { return; }
|
||||||
|
print_start ();
|
||||||
|
print_user_name (U->id, (void *)U);
|
||||||
|
printf ("\n");
|
||||||
|
print_end ();
|
||||||
|
}
|
||||||
|
|
||||||
void print_filename_gw (void *extra, int success, char *name) {
|
void print_filename_gw (void *extra, int success, char *name) {
|
||||||
if (!success) { return; }
|
if (!success) { return; }
|
||||||
print_start ();
|
print_start ();
|
||||||
@ -972,6 +982,17 @@ void secret_chat_update_gw (struct tgl_secret_chat *U, unsigned flags) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_card_gw (void *extra, int success, int size, int *card) {
|
||||||
|
assert (success);
|
||||||
|
print_start ();
|
||||||
|
printf ("Card: ");
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < size; i++) {
|
||||||
|
printf ("%08x%c", card[i], i == size - 1 ? '\n' : ':');
|
||||||
|
}
|
||||||
|
print_end ();
|
||||||
|
}
|
||||||
|
|
||||||
struct tgl_update_callback upd_cb = {
|
struct tgl_update_callback upd_cb = {
|
||||||
.new_msg = print_message_gw,
|
.new_msg = print_message_gw,
|
||||||
.marked_read = mark_read_upd,
|
.marked_read = mark_read_upd,
|
||||||
@ -1572,6 +1593,36 @@ void interpreter (char *line UU) {
|
|||||||
}
|
}
|
||||||
tgl_do_delete_msg (num, 0, 0);
|
tgl_do_delete_msg (num, 0, 0);
|
||||||
tgl_do_restore_msg (num, 0, 0);
|
tgl_do_restore_msg (num, 0, 0);
|
||||||
|
} else if (IS_WORD ("export_card")) {
|
||||||
|
tgl_do_export_card (print_card_gw, 0);
|
||||||
|
} else if (IS_WORD ("import_card")) {
|
||||||
|
int l;
|
||||||
|
char *s = next_token (&l);
|
||||||
|
if (l > 0) {
|
||||||
|
int i;
|
||||||
|
static int p[10];
|
||||||
|
int pp = 0;
|
||||||
|
int cur = 0;
|
||||||
|
int ok = 1;
|
||||||
|
for (i = 0; i < l; i ++) {
|
||||||
|
if (s[i] >= '0' && s[i] <= '9') {
|
||||||
|
cur = cur * 16 + s[i] - '0';
|
||||||
|
} else if (s[i] >= 'a' && s[i] <= 'f') {
|
||||||
|
cur = cur * 16 + s[i] - 'a' + 10;
|
||||||
|
} else if (s[i] == ':') {
|
||||||
|
if (pp >= 9) {
|
||||||
|
ok = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p[pp ++] = cur;
|
||||||
|
cur = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ok) {
|
||||||
|
p[pp ++] = cur;
|
||||||
|
tgl_do_import_card (pp, p, print_user_gw, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
} else if (IS_WORD ("quit")) {
|
} else if (IS_WORD ("quit")) {
|
||||||
exit (0);
|
exit (0);
|
||||||
} else if (IS_WORD ("accept_secret_chat")) {
|
} else if (IS_WORD ("accept_secret_chat")) {
|
||||||
|
54
queries.c
54
queries.c
@ -3208,6 +3208,60 @@ void tgl_do_restore_msg (long long id, void (*callback)(void *callback_extra, in
|
|||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
/* {{{ Export card */
|
||||||
|
|
||||||
|
static int export_card_on_answer (struct query *q UU) {
|
||||||
|
assert (fetch_int () == CODE_vector);
|
||||||
|
int n = fetch_int ();
|
||||||
|
//logprintf ("Restored %d messages\n", n);
|
||||||
|
int *r = talloc (4 * n);
|
||||||
|
fetch_ints (r, n);
|
||||||
|
|
||||||
|
if (q->callback) {
|
||||||
|
((void (*)(void *, int, int, int *))q->callback) (q->callback_extra, 1, n, r);
|
||||||
|
}
|
||||||
|
free (r);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct query_methods export_card_methods = {
|
||||||
|
.on_answer = export_card_on_answer,
|
||||||
|
.type = TYPE_TO_PARAM_1(vector, TYPE_TO_PARAM (bare_int))
|
||||||
|
};
|
||||||
|
|
||||||
|
void tgl_do_export_card (void (*callback)(void *callback_extra, int success, int size, int *card), void *callback_extra) {
|
||||||
|
clear_packet ();
|
||||||
|
out_int (CODE_contacts_export_card);
|
||||||
|
tglq_send_query (tgl_state.DC_working, packet_ptr - packet_buffer, packet_buffer, &export_card_methods, 0, callback, callback_extra);
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
|
||||||
|
/* {{{ Import card */
|
||||||
|
|
||||||
|
static int import_card_on_answer (struct query *q UU) {
|
||||||
|
struct tgl_user *U = tglf_fetch_alloc_user ();
|
||||||
|
|
||||||
|
if (q->callback) {
|
||||||
|
((void (*)(void *, int, struct tgl_user *))q->callback) (q->callback_extra, 1, U);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct query_methods import_card_methods = {
|
||||||
|
.on_answer = import_card_on_answer,
|
||||||
|
.type = TYPE_TO_PARAM (user)
|
||||||
|
};
|
||||||
|
|
||||||
|
void tgl_do_import_card (int size, int *card, void (*callback)(void *callback_extra, int success, struct tgl_user *U), void *callback_extra) {
|
||||||
|
clear_packet ();
|
||||||
|
out_int (CODE_contacts_import_card);
|
||||||
|
out_int (CODE_vector);
|
||||||
|
out_int (size);
|
||||||
|
out_ints (card, size);
|
||||||
|
tglq_send_query (tgl_state.DC_working, packet_ptr - packet_buffer, packet_buffer, &import_card_methods, 0, callback, callback_extra);
|
||||||
|
}
|
||||||
|
/* }}} */
|
||||||
|
|
||||||
static void set_flag_4 (void *_D, int success) {
|
static void set_flag_4 (void *_D, int success) {
|
||||||
struct tgl_dc *D = _D;
|
struct tgl_dc *D = _D;
|
||||||
assert (success);
|
assert (success);
|
||||||
|
2
tgl.h
2
tgl.h
@ -274,6 +274,8 @@ void tgl_do_delete_msg (long long id, void (*callback)(void *callback_extra, int
|
|||||||
void tgl_do_restore_msg (long long id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
void tgl_do_restore_msg (long long id, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
||||||
void tgl_do_update_status (int online, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
void tgl_do_update_status (int online, void (*callback)(void *callback_extra, int success), void *callback_extra);
|
||||||
void tgl_do_help_get_config_dc (struct tgl_dc *D, void (*callback)(void *, int), void *callback_extra);
|
void tgl_do_help_get_config_dc (struct tgl_dc *D, void (*callback)(void *, int), void *callback_extra);
|
||||||
|
void tgl_do_export_card (void (*callback)(void *callback_extra, int success, int size, int *card), void *callback_extra);
|
||||||
|
void tgl_do_import_card (int size, int *card, void (*callback)(void *callback_extra, int success, struct tgl_user *U), void *callback_extra);
|
||||||
|
|
||||||
|
|
||||||
void tgl_do_visualize_key (tgl_peer_id_t id, unsigned char buf[16]);
|
void tgl_do_visualize_key (tgl_peer_id_t id, unsigned char buf[16]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user