Merge branch 'master' of github.com:vysheng/tg

This commit is contained in:
vvaltman 2014-11-15 14:49:26 +03:00
commit 5405d183f1
3 changed files with 41 additions and 5 deletions

View File

@ -151,7 +151,7 @@ If two or more peers have same name, <sharp>number is appended to the name. (for
* **chat_add_user** \<chat\> \<user\> - add user to chat
* **chat_del_user** \<chat\> \<user\> - remove user from chat
* **rename_chat** \<chat\> \<new-name\>
* **create_group_chat** \<user\> \<chat topic\> - creates a groupchat with user, use chat_add_user to add more users
* **create_group_chat** \<chat topic\> \<user1\> \<user2\> \<user3\> ... - creates a groupchat with users, use chat_add_user to add more users
* **chat_set_photo** \<chat\> \<photo-file-name\> - sets group chat photo. Same limits as for profile photos.
#### Search

View File

@ -862,6 +862,15 @@ void do_create_secret_chat (int arg_num, struct arg args[], struct in_ev *ev) {
tgl_do_create_secret_chat (TLS, args[0].P->id, print_secret_chat_gw, ev);
}
void do_secret_chat_rekey (int arg_num, struct arg args[], struct in_ev *ev) {
assert (arg_num == 1);
tgl_peer_t *P = args[0].P;
if (P->encr_chat.state == sc_ok) {
vlogprintf (E_WARNING, "START REKEY\n");
tgl_do_request_exchange (TLS, (void *)P);
}
}
void do_chat_add_user (int arg_num, struct arg args[], struct in_ev *ev) {
assert (arg_num == 3);
if (ev) { ev->refcnt ++; }
@ -1110,6 +1119,7 @@ struct command commands[] = {
{"restore_msg", {ca_number, ca_none}, do_restore_msg, "restore_msg <msg-id>\tRestores message. Only available shortly (one hour?) after deletion"},
{"safe_quit", {ca_none}, do_safe_quit, "safe_quit\tWaits for all queries to end, then quits"},
{"search", {ca_peer | ca_optional, ca_number | ca_optional, ca_number | ca_optional, ca_number | ca_optional, ca_number | ca_optional, ca_string_end}, do_search, "search [peer] [limit] [from] [to] [offset] pattern\tSearch for pattern in messages from date from to date to (unixtime) in messages with peer (if peer not present, in all messages)"},
{"secret_chat_rekey", { ca_secret_chat, ca_none}, do_secret_chat_rekey, "generate new key for active secret chat"},
{"send_audio", {ca_peer, ca_file_name_end, ca_none}, do_send_audio, "send_audio <peer> <file>\tSends audio to peer"},
{"send_contact", {ca_peer, ca_string, ca_string, ca_string, ca_none}, do_send_contact, "send_contact <peer> <phone> <first-name> <last-name>\tSends contact (not necessary telegram user)"},
{"send_document", {ca_peer, ca_file_name_end, ca_none}, do_send_document, "send_document <peer> <file>\tSends document to peer"},
@ -2654,8 +2664,21 @@ void print_service_message (struct in_ev *ev, struct tgl_message *M) {
mprintf (ev, " is ");
print_typing (ev, M->action.typing);
break;
default:
assert (0);
case tgl_message_action_noop:
mprintf (ev, " noop\n");
break;
case tgl_message_action_request_key:
mprintf (ev, " request rekey #%016llx\n", M->action.exchange_id);
break;
case tgl_message_action_accept_key:
mprintf (ev, " accept rekey #%016llx\n", M->action.exchange_id);
break;
case tgl_message_action_commit_key:
mprintf (ev, " commit rekey #%016llx\n", M->action.exchange_id);
break;
case tgl_message_action_abort_key:
mprintf (ev, " abort rekey #%016llx\n", M->action.exchange_id);
break;
}
mpop_color (ev);
//print_end ();

17
loop.c
View File

@ -62,6 +62,8 @@
#include <tgl/tgl-net.h>
#include <tgl/tgl-timers.h>
#include <openssl/sha.h>
int verbosity;
extern int readline_disabled;
@ -465,6 +467,7 @@ void write_secret_chat (tgl_peer_t *_P, void *extra) {
assert (write (fd, &P->state, 4) == 4);
assert (write (fd, &P->key_fingerprint, 8) == 8);
assert (write (fd, &P->key, 256) == 256);
assert (write (fd, &P->first_key_sha, 20) == 20);
assert (write (fd, &P->in_seq_no, 4) == 4);
assert (write (fd, &P->last_in_seq_no, 4) == 4);
assert (write (fd, &P->out_seq_no, 4) == 4);
@ -476,7 +479,7 @@ void write_secret_chat_file (void) {
assert (secret_chat_fd >= 0);
int x = SECRET_CHAT_FILE_MAGIC;
assert (write (secret_chat_fd, &x, 4) == 4);
x = 1;
x = 2;
assert (write (secret_chat_fd, &x, 4) == 4); // version
assert (write (secret_chat_fd, &x, 4) == 4); // num
@ -574,6 +577,7 @@ void read_secret_chat (int fd, int v) {
long long access_hash, key_fingerprint;
static char s[1000];
static unsigned char key[256];
static unsigned char sha[20];
assert (read (fd, &id, 4) == 4);
//assert (read (fd, &flags, 4) == 4);
assert (read (fd, &l, 4) == 4);
@ -588,6 +592,9 @@ void read_secret_chat (int fd, int v) {
assert (read (fd, &state, 4) == 4);
assert (read (fd, &key_fingerprint, 8) == 8);
assert (read (fd, &key, 256) == 256);
if (v >= 2) {
assert (read (fd, sha, 20) == 20);
}
int in_seq_no = 0, out_seq_no = 0, last_in_seq_no = 0;
if (v >= 1) {
assert (read (fd, &in_seq_no, 4) == 4);
@ -604,6 +611,12 @@ void read_secret_chat (int fd, int v) {
bl_do_encr_chat_set_access_hash (TLS, P, access_hash);
bl_do_encr_chat_set_state (TLS, P, state);
bl_do_encr_chat_set_key (TLS, P, key, key_fingerprint);
if (v >= 2) {
bl_do_encr_chat_set_sha (TLS, P, sha);
} else {
SHA1 ((void *)key, 256, sha);
bl_do_encr_chat_set_sha (TLS, P, sha);
}
if (v >= 1) {
bl_do_encr_chat_set_seq (TLS, P, in_seq_no, last_in_seq_no, out_seq_no);
}
@ -619,7 +632,7 @@ void read_secret_chat_file (void) {
if (x != SECRET_CHAT_FILE_MAGIC) { close (secret_chat_fd); return; }
int v = 0;
assert (read (secret_chat_fd, &v, 4) == 4);
assert (v == 0 || v == 1); // version
assert (v == 0 || v == 1 || v == 2); // version
assert (read (secret_chat_fd, &x, 4) == 4);
assert (x >= 0);
while (x --> 0) {