summaryrefslogtreecommitdiff
path: root/protocols/Telegram/src/tgl/tgl-layout.h
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Telegram/src/tgl/tgl-layout.h')
-rw-r--r--protocols/Telegram/src/tgl/tgl-layout.h539
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