diff options
author | Kirill Volinsky <mataes2007@gmail.com> | 2016-03-12 17:48:57 +0000 |
---|---|---|
committer | Kirill Volinsky <mataes2007@gmail.com> | 2016-03-12 17:48:57 +0000 |
commit | 534db770dbe8c358ea267df20145e9793fb0275a (patch) | |
tree | 66989fb4e5511b4efe5652cf5312ac4f160bfd01 /protocols/Telegram/src/tgl/tgl-layout.h | |
parent | 461f53bf697335fabdc82c6c9143e6020de4f022 (diff) |
tgl inside telegram
git-svn-id: http://svn.miranda-ng.org/main/trunk@16471 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
Diffstat (limited to 'protocols/Telegram/src/tgl/tgl-layout.h')
-rw-r--r-- | protocols/Telegram/src/tgl/tgl-layout.h | 539 |
1 files changed, 539 insertions, 0 deletions
diff --git a/protocols/Telegram/src/tgl/tgl-layout.h b/protocols/Telegram/src/tgl/tgl-layout.h new file mode 100644 index 0000000000..fee5b2c3d6 --- /dev/null +++ b/protocols/Telegram/src/tgl/tgl-layout.h @@ -0,0 +1,539 @@ +/* + This file is part of tgl-library + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + Copyright Vitaly Valtman 2014-2015 +*/ +#ifndef __TGL_LAYOUT_H__ +#define __TGL_LAYOUT_H__ + +#define TGLDF_IMAGE 1 +#define TGLDF_STICKER 2 +#define TGLDF_ANIMATED 4 +#define TGLDF_AUDIO 8 +#define TGLDF_VIDEO 16 + +#define TGLMF_UNREAD 1 +#define TGLMF_OUT 2 +#define TGLMF_DISABLE_PREVIEW 4 +#define TGLMF_MENTION 16 +#define TGLMF_CREATED (1 << 8) +#define TGLMF_PENDING (1 << 9) +#define TGLMF_DELETED (1 << 10) +#define TGLMF_ENCRYPTED (1 << 11) +#define TGLMF_EMPTY (1 << 12) +#define TGLMF_SERVICE (1 << 13) +#define TGLMF_SESSION_OUTBOUND (1 << 14) + +#define TGLMF_CREATE 0x10000 + +#define TGLPF_CREATED (1 << 8) +#define TGLPF_CREATE (1 << 16) +#define TGLPF_HAS_PHOTO (1 << 11) +#define TGLPF_DELETED (1 << 10) + +#define TGLUF_CONTACT 1 +#define TGLUF_MUTUAL_CONTACT 2 +#define TGLUF_BLOCKED 4 +#define TGLUF_SELF 8 +#define TGLUF_CREATED TGLPF_CREATED +#define TGLUF_DELETED TGLPF_DELETED +#define TGLUF_HAS_PHOTO TGLPF_HAS_PHOTO +#define TGLUF_CREATE TGLPF_CREATE +#define TGLUF_BOT (1 << 12) + +#define TGLCF_CREATED TGLPF_CREATED +#define TGLCF_CREATE TGLPF_CREATE +#define TGLCF_HAS_PHOTO TGLPF_HAS_PHOTO + +#define TGLECF_CREATED TGLPF_CREATED +#define TGLECF_CREATE TGLPF_CREATE +#define TGLECF_HAS_PHOTO TGLPF_HAS_PHOTO +#define TGLECF_DELETED TGLPF_DELETED + +#define TGL_FLAGS_UNCHANGED 0xffff + +#define TGLDCF_AUTHORIZED 1 +#define TGLDCF_LOGGED_IN 8 + +#pragma pack(push,4) + +typedef struct { int type; int id; } tgl_peer_id_t; + +enum tgl_dc_state { + st_init, + st_reqpq_sent, + st_reqdh_sent, + st_client_dh_sent, + st_init_temp, + st_reqpq_sent_temp, + st_reqdh_sent_temp, + st_client_dh_sent_temp, + st_authorized, + st_error +}; + +#define MAX_DC_SESSIONS 3 + +struct tgl_session { + struct tgl_dc *dc; + long long session_id; + long long last_msg_id; + int seq_no; + int received_messages; + struct connection *c; + struct tree_long *ack_tree; + struct tgl_timer *ev; +}; + +struct tgl_dc_option { + struct tgl_dc_option *next; + char *ip; + int port; +}; + +struct tgl_dc { + int id; + //int port; + int flags; + int rsa_key_idx; + enum tgl_dc_state state; + //char *ip; + //char *user; + struct tgl_session *sessions[MAX_DC_SESSIONS]; + char auth_key[256]; + char temp_auth_key[256]; + char nonce[256]; + char new_nonce[256]; + char server_nonce[256]; + long long auth_key_id; + long long temp_auth_key_id; + long long temp_auth_key_bind_query_id; + + long long server_salt; + struct tgl_timer *ev; + + int server_time_delta; + double server_time_udelta; + + // ipv4, ipv6, ipv4_media, ipv6_media + struct tgl_dc_option *options[4]; +}; + +enum tgl_message_media_type { + tgl_message_media_none, + tgl_message_media_photo, + tgl_message_media_document, + tgl_message_media_geo, + tgl_message_media_contact, + tgl_message_media_unsupported, + //tgl_message_media_photo_encr, + //tgl_message_media_video_encr, + //tgl_message_media_audio_encr, + tgl_message_media_document_encr, + tgl_message_media_webpage, + tgl_message_media_venue, + tgl_message_media_video, + tgl_message_media_audio +}; + +enum tgl_message_action_type { + tgl_message_action_none, + tgl_message_action_geo_chat_create, + tgl_message_action_geo_chat_checkin, + tgl_message_action_chat_create, + tgl_message_action_chat_edit_title, + tgl_message_action_chat_edit_photo, + tgl_message_action_chat_delete_photo, + tgl_message_action_chat_add_user, + tgl_message_action_chat_add_user_by_link, + tgl_message_action_chat_delete_user, + tgl_message_action_set_message_ttl, + tgl_message_action_read_messages, + tgl_message_action_delete_messages, + tgl_message_action_screenshot_messages, + tgl_message_action_flush_history, + tgl_message_action_resend, + tgl_message_action_notify_layer, + tgl_message_action_typing, + tgl_message_action_noop, + tgl_message_action_commit_key, + tgl_message_action_abort_key, + tgl_message_action_request_key, + tgl_message_action_accept_key +}; + +enum tgl_typing_status { + tgl_typing_none, + tgl_typing_typing, + tgl_typing_cancel, + tgl_typing_record_video, + tgl_typing_upload_video, + tgl_typing_record_audio, + tgl_typing_upload_audio, + tgl_typing_upload_photo, + tgl_typing_upload_document, + tgl_typing_geo, + tgl_typing_choose_contact +}; + +struct tgl_file_location { + int dc; + long long volume; + int local_id; + long long secret; +}; + +struct tgl_photo_size { + char *type; + struct tgl_file_location loc; + int w; + int h; + int size; + char *data; +}; + +struct tgl_geo { + double longitude; + double latitude; +}; + +struct tgl_photo { + long long id; + long long access_hash; + int refcnt; + int user_id; + int date; + char *caption; + struct tgl_geo geo; + int sizes_num; + struct tgl_photo_size *sizes; +}; + +struct tgl_encr_document { + long long id; + long long access_hash; + int refcnt; + + int dc_id; + int size; + int key_fingerprint; + int flags; + + unsigned char *key; + unsigned char *iv; + int w; + int h; + char *caption; + char *mime_type; + int duration; +}; + + +struct tgl_user_status { + int online; + int when; + struct tgl_timer *ev; +}; + +struct tgl_bot_command { + char *command; + char *description; +}; + +struct tgl_bot_info { + int version; + char *share_text; + char *description; + int commands_num; + struct tgl_bot_command *commands; +}; + +struct tgl_user { + tgl_peer_id_t id; + int flags; + struct tgl_message *last; + char *print_name; + int structure_version; + struct tgl_file_location photo_big; + struct tgl_file_location photo_small; + int last_read_in; + int last_read_out; + long long photo_id; + struct tgl_photo *photo; + char *first_name; + char *last_name; + char *phone; + long long access_hash; + struct tgl_user_status status; + int blocked; + char *real_first_name; + char *real_last_name; + char *username; + + struct tgl_bot_info *bot_info; +}; + +struct tgl_chat_user { + int user_id; + int inviter_id; + int date; +}; + +struct tgl_chat { + tgl_peer_id_t id; + int flags; + struct tgl_message *last; + char *print_title; + int structure_version; + struct tgl_file_location photo_big; + struct tgl_file_location photo_small; + int last_read_in; + int last_read_out; + struct tgl_photo *photo; + char *title; + int users_num; + int user_list_size; + int user_list_version; + struct tgl_chat_user *user_list; + int date; + int version; + int admin_id; +}; + +enum tgl_secret_chat_state { + sc_none, + sc_waiting, + sc_request, + sc_ok, + sc_deleted +}; + +enum tgl_secret_chat_exchange_state { + tgl_sce_none, + tgl_sce_requested, + tgl_sce_accepted, + tgl_sce_committed, + tgl_sce_confirmed, + tgl_sce_aborted +}; + +struct tgl_secret_chat { + tgl_peer_id_t id; + int flags; + struct tgl_message *last; + char *print_name; + int structure_version; + struct tgl_file_location photo_big; + struct tgl_file_location photo_small; + struct tgl_photo *photo; + int user_id; + int admin_id; + int date; + int ttl; + int layer; + int in_seq_no; + int out_seq_no; + int last_in_seq_no; + long long access_hash; + unsigned char *g_key; + + enum tgl_secret_chat_state state; + int key[64]; + long long key_fingerprint; + unsigned char first_key_sha[20]; + + long long exchange_id; + enum tgl_secret_chat_exchange_state exchange_state; + int exchange_key[64]; + long long exchange_key_fingerprint; +}; + +typedef union tgl_peer { + struct { + tgl_peer_id_t id; + int flags; + struct tgl_message *last; + char *print_name; + int structure_version; + struct tgl_file_location photo_big; + struct tgl_file_location photo_small; + struct tgl_photo *photo; + }; + struct tgl_user user; + struct tgl_chat chat; + struct tgl_secret_chat encr_chat; +} tgl_peer_t; +/* +struct tgl_video { + long long id; + long long access_hash; + int user_id; + int date; + int size; + int dc_id; + struct tgl_photo_size thumb; + char *caption; + int duration; + int w; + int h; + char *mime_type; +}; + +struct tgl_audio { + long long id; + long long access_hash; + int user_id; + int date; + int size; + int dc_id; + int duration; + char *mime_type; +};*/ + +struct tgl_document { + long long id; + long long access_hash; + int refcnt; + int user_id; + int date; + int size; + int dc_id; + struct tgl_photo_size thumb; + char *caption; + char *mime_type; + + int w; + int h; + int flags; + int duration; +}; + +struct tgl_message_action { + enum tgl_message_action_type type; + union { + struct { + char *title; + int user_num; + int *users; + }; + char *new_title; + struct tgl_photo *photo; + int user; + int ttl; + int layer; + int read_cnt; + int delete_cnt; + int screenshot_cnt; + enum tgl_typing_status typing; + struct { + int start_seq_no; + int end_seq_no; + }; + struct { + unsigned char *g_a; + long long exchange_id; + long long key_fingerprint; + }; + }; +}; + + +struct tgl_webpage { + long long id; + int refcnt; + char *url; + char *display_url; + char *type; + char *site_name; + char *title; + char *description; + struct tgl_photo *photo; + char *embed_url; + char *embed_type; + int embed_width; + int embed_height; + int duration; + char *author; +}; + +struct tgl_message_media { + enum tgl_message_media_type type; + union { + struct { + union { + struct tgl_photo *photo; + struct tgl_document *document; + }; + char *caption; + }; + + struct tgl_encr_document *encr_document; + struct tgl_webpage *webpage; + + struct tgl_geo geo; + struct { + char *phone; + char *first_name; + char *last_name; + int user_id; + }; + + struct { + void *data; + int data_size; + }; + struct { + struct tgl_geo geo; + char *title; + char *address; + char *provider; + char *venue_id; + } venue; + }; +}; + +struct tgl_message_reply_markup { + int refcnt; + int flags; + int rows; + int *row_start; + char **buttons; +}; + +struct tgl_message { + struct tgl_message *next_use, *prev_use; + struct tgl_message *next, *prev; + long long id; + int flags; + tgl_peer_id_t fwd_from_id; + int fwd_date; + int reply_id; + tgl_peer_id_t from_id; + tgl_peer_id_t to_id; + int date; + struct tgl_message_reply_markup *reply_markup; + union { + struct tgl_message_action action; + struct { + char *message; + int message_len; + struct tgl_message_media media; + }; + }; +}; +#pragma pack(pop) +#endif |