Ejemplo n.º 1
0
        public static Session FromBytes(byte[] buffer, ISessionStore store)
        {
            using (var stream = new MemoryStream(buffer))
                using (var reader = new BinaryReader(stream))
                {
                    var id            = reader.ReadUInt64();
                    var sequence      = reader.ReadInt32();
                    var salt          = reader.ReadUInt64();
                    var lastMessageId = reader.ReadInt64();
                    var timeOffset    = reader.ReadInt32();
                    var serverAddress = Serializers.String.Read(reader);
                    var port          = reader.ReadInt32();

                    var  isAuthExsist   = reader.ReadInt32() == 1;
                    int  sessionExpires = 0;
                    User user           = null;
                    if (isAuthExsist)
                    {
                        sessionExpires = reader.ReadInt32();
                        user           = TLObject.Read <User>(reader);
                    }

                    var authData = Serializers.Bytes.Read(reader);

                    return(new Session(store)
                    {
                        authKey = new AuthKey(authData),
                        id = id,
                        salt = salt,
                        sequence = sequence,
                        lastMessageId = lastMessageId,
                        timeOffset = timeOffset,
                        sessionExpires = sessionExpires,
                        user = user,
                        serverAddress = serverAddress,
                        port = port
                    });
                }
        }
Ejemplo n.º 2
0
        private void HandleUpdateMessage(BinaryReader messageReader, uint updateDataCode)
        {
            var update = TLObject.Read <Updates>(messageReader, updateDataCode);

            OnUpdateMessage(update);
        }
Ejemplo n.º 3
0
        private void ProcessMessage(long messageId, int sequence, BinaryReader messageReader)
        {
            // TODO: check salt
            // TODO: check sessionid
            // TODO: check seqno

            //logger.debug("processMessage: msg_id {0}, sequence {1}, data {2}", BitConverter.ToString(((MemoryStream)messageReader.BaseStream).GetBuffer(), (int) messageReader.BaseStream.Position, (int) (messageReader.BaseStream.Length - messageReader.BaseStream.Position)).Replace("-","").ToLower());
            needConfirmation.Add(messageId);

            uint code = messageReader.ReadUInt32();

            switch (code)
            {
            case 0x73f1f8dc:     // messages container
                                 //logger.debug("MSG container");
                HandleContainer(messageId, sequence, messageReader);
                break;

            case 0x347773c5:     // pong
                Debug.WriteLine("Got Pong response from server.");
                var pong = TLObject.Read <Pong>(messageReader, 0x347773c5);
                if (runningRequests.ContainsKey(pong.messageId))
                {
                    runningRequests[pong.messageId].Item2.TrySetResult(true);
                }

                break;

            case 0xae500895:     // future_salts
                                 //logger.debug("MSG future_salts");
                break;

            case 0x9ec20908:     // new_session_created
                                 //logger.debug("MSG new_session_created");
                HandleNewSessionCreated(messageReader);
                break;

            case 0x62d6b459:     // msgs_ack
                                 //logger.debug("MSG msds_ack");
                break;

            case 0xedab447b:     // bad_server_salt
                                 //logger.debug("MSG bad_server_salt");
                HandleBadServerSalt(messageId, sequence, messageReader);
                break;

            case 0xa7eff811:     // bad_msg_notification
                                 //logger.debug("MSG bad_msg_notification");
                HandleBadMsgNotification(messageId, sequence, messageReader);
                break;

            case 0x276d3ec6:     // msg_detailed_info
                                 //logger.debug("MSG msg_detailed_info");
                break;

            case 0xf35c6d01:     // rpc_result
                                 //logger.debug("MSG rpc_result");
                HandleRpcResult(messageReader);
                break;

            case 0x3072cfa1:     // gzip_packed
                                 //logger.debug("MSG gzip_packed");
                HandleGzipPacked(messageId, sequence, messageReader);
                break;

            case 0xe317af7e:     // updatesTooLong
            case 0xd3f45784:     // updateShortMessage
            case 0x2b2fbd4e:     // updateShortChatMessage
            case 0x78d4dec1:     // updateShort
            case 0x725b04c3:     // updatesCombined
            case 0x74ae4240:     // updates
            {
                HandleUpdateMessage(messageReader, code);
                break;
            }

            default:
                Debug.WriteLine($"Unknown error: {code}");
                break;
            }
        }
Ejemplo n.º 4
0
 public override void OnResponse(BinaryReader reader)
 {
     authorization = TLObject.Read <AuthAuthorization>(reader);
 }
Ejemplo n.º 5
0
 public override void OnResponse(BinaryReader reader)
 {
     sentMessage = TLObject.Read <SentMessage>(reader);
 }
Ejemplo n.º 6
0
 public override void OnResponse(BinaryReader reader)
 {
     file = TLObject.Read <UploadFile>(reader);
 }
Ejemplo n.º 7
0
 public override void OnResponse(BinaryReader reader)
 {
     config = TLObject.Read <Config>(reader);
 }
 public override void OnResponse(BinaryReader reader)
 {
     affectedHistory = TLObject.Read <MessagesAffectedHistory>(reader);
 }
Ejemplo n.º 9
0
 public override void OnResponse(BinaryReader reader)
 {
     updatesDifference = TLObject.Read <UpdatesDifference>(reader);
 }
 public override void OnResponse(BinaryReader reader)
 {
     isAvailable = TLObject.Read <bool>(reader);
 }
Ejemplo n.º 11
0
 public override void OnResponse(BinaryReader reader)
 {
     userFull = TLObject.Read <UserFull>(reader);
 }
Ejemplo n.º 12
0
 public override void OnResponse(BinaryReader reader)
 {
     eventsOccured = TLObject.Read <Update>(reader);
 }
Ejemplo n.º 13
0
 public override void OnResponse(BinaryReader reader)
 {
     updatesState = TLObject.Read <UpdatesState>(reader);
 }
Ejemplo n.º 14
0
 public override void OnResponse(BinaryReader reader)
 {
     checkedPhone = TLObject.Read <AuthCheckedPhone>(reader);
 }
Ejemplo n.º 15
0
 public override void OnResponse(BinaryReader reader)
 {
     sentCode = TLObject.Read <AuthSentCode>(reader);
 }
Ejemplo n.º 16
0
 public override void OnResponse(BinaryReader reader)
 {
     chatFull = TLObject.Read <ChatFull>(reader);
 }
 public override void OnResponse(BinaryReader reader)
 {
     contactsLink = TLObject.Read <ContactsLink>(reader);
 }
Ejemplo n.º 18
0
 public override void OnResponse(BinaryReader reader)
 {
     state = TLObject.Read <bool>(reader);
 }
Ejemplo n.º 19
0
 public override void OnResponse(BinaryReader reader)
 {
     statedMessage = TLObject.Read <MessagesStatedMessage>(reader);
 }
Ejemplo n.º 20
0
 public override void OnResponse(BinaryReader reader)
 {
     importedContacts = TLObject.Read <ContactsImportedContacts>(reader);
 }
Ejemplo n.º 21
0
 public override void OnResponse(BinaryReader reader)
 {
     nearestDc = TLObject.Read <NearestDc>(reader);
 }
Ejemplo n.º 22
0
 public override void OnResponse(BinaryReader reader)
 {
     messagesDialogs = TLObject.Read <MessagesDialogs>(reader);
 }