From 15a51818f935216d6e30ab516b9cb36c5fd3fe36 Mon Sep 17 00:00:00 2001 From: David Woakes Date: Wed, 20 Jul 2016 08:09:27 +0100 Subject: [PATCH 1/3] Fix spelling of Receive --- TLSharp.Core/Network/MtProtoSender.cs | 2 +- TLSharp.Core/TelegramClient.cs | 26 +++++++++++++------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/TLSharp.Core/Network/MtProtoSender.cs b/TLSharp.Core/Network/MtProtoSender.cs index 3f9ff94..441b8e1 100644 --- a/TLSharp.Core/Network/MtProtoSender.cs +++ b/TLSharp.Core/Network/MtProtoSender.cs @@ -132,7 +132,7 @@ namespace TLSharp.Core.Network return new Tuple(message, remoteMessageId, remoteSequence); } - public async Task Recieve(MTProtoRequest request) + public async Task Receive(MTProtoRequest request) { while (!request.ConfirmReceived) { diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index 774e80e..7c4fd90 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -55,7 +55,7 @@ namespace TLSharp.Core var request = new InitConnectionRequest(_apiId); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); dcOptions = request.ConfigConstructor.dc_options; } @@ -89,7 +89,7 @@ namespace TLSharp.Core var authCheckPhoneRequest = new AuthCheckPhoneRequest(phoneNumber); await _sender.Send(authCheckPhoneRequest); - await _sender.Recieve(authCheckPhoneRequest); + await _sender.Receive(authCheckPhoneRequest); return authCheckPhoneRequest._phoneRegistered; } @@ -108,7 +108,7 @@ namespace TLSharp.Core await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); completed = true; } @@ -132,7 +132,7 @@ namespace TLSharp.Core { var request = new AuthSignInRequest(phoneNumber, phoneHash, code); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); _session.SessionExpires = request.SessionExpires; _session.User = request.user; @@ -165,7 +165,7 @@ namespace TLSharp.Core { var saveFilePartRequest = new Upload_SaveFilePartRequest(file_id, i, partedData[i]); await _sender.Send(saveFilePartRequest); - await _sender.Recieve(saveFilePartRequest); + await _sender.Receive(saveFilePartRequest); if (saveFilePartRequest.Done == false) throw new InvalidOperationException($"File part {i} does not uploaded"); @@ -195,7 +195,7 @@ namespace TLSharp.Core new InputMediaUploadedPhotoConstructor(file)); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); return true; } @@ -207,7 +207,7 @@ namespace TLSharp.Core var request = new ImportContactRequest(new InputPhoneContactConstructor(0, phoneNumber, "My Test Name", String.Empty)); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); var importedUser = (ImportedContactConstructor)request.imported.FirstOrDefault(); @@ -221,7 +221,7 @@ namespace TLSharp.Core var request = new ImportByUserName(username); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); return request.id; } @@ -231,14 +231,14 @@ namespace TLSharp.Core var request = new SendMessageRequest(new InputPeerContactConstructor(id), message); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); } public async Task> GetMessagesHistoryForContact(int user_id, int offset, int limit, int max_id = -1) { var request = new GetHistoryRequest(new InputPeerContactConstructor(user_id), offset, max_id, limit); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); return request.messages; } @@ -247,7 +247,7 @@ namespace TLSharp.Core { var request = new GetFileRequest(new InputFileLocationConstructor(volume_id, local_id, secret), offset, limit); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); return Tuple.Create(request.type, request.bytes); } @@ -256,7 +256,7 @@ namespace TLSharp.Core { var request = new GetDialogsRequest(offset, max_id, limit); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); return new MessageDialogs { @@ -271,7 +271,7 @@ namespace TLSharp.Core { var request = new GetUserFullRequest(user_id); await _sender.Send(request); - await _sender.Recieve(request); + await _sender.Receive(request); return request._userFull; } From 397f20298e0d44ab8abbb9018bc4aeacdeb54e82 Mon Sep 17 00:00:00 2001 From: David Woakes Date: Wed, 20 Jul 2016 08:15:28 +0100 Subject: [PATCH 2/3] Fix spelling of Receive --- TLSharp.Core/Auth/Authenticator.cs | 6 +++--- TLSharp.Core/Network/MtProtoPlainSender.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/TLSharp.Core/Auth/Authenticator.cs b/TLSharp.Core/Auth/Authenticator.cs index 32df199..f63523c 100644 --- a/TLSharp.Core/Auth/Authenticator.cs +++ b/TLSharp.Core/Auth/Authenticator.cs @@ -11,7 +11,7 @@ namespace TLSharp.Core.Auth var step1 = new Step1_PQRequest(); await sender.Send(step1.ToBytes()); - var step1Response = step1.FromBytes(await sender.Recieve()); + var step1Response = step1.FromBytes(await sender.Receive()); var step2 = new Step2_DHExchange(); await sender.Send(step2.ToBytes( @@ -20,7 +20,7 @@ namespace TLSharp.Core.Auth step1Response.Fingerprints, step1Response.Pq)); - var step2Response = step2.FromBytes(await sender.Recieve()); + var step2Response = step2.FromBytes(await sender.Receive()); var step3 = new Step3_CompleteDHExchange(); await sender.Send(step3.ToBytes( @@ -29,7 +29,7 @@ namespace TLSharp.Core.Auth step2Response.NewNonce, step2Response.EncryptedAnswer)); - var step3Response = step3.FromBytes(await sender.Recieve()); + var step3Response = step3.FromBytes(await sender.Receive()); return step3Response; } diff --git a/TLSharp.Core/Network/MtProtoPlainSender.cs b/TLSharp.Core/Network/MtProtoPlainSender.cs index 1be43e8..b88ecbb 100644 --- a/TLSharp.Core/Network/MtProtoPlainSender.cs +++ b/TLSharp.Core/Network/MtProtoPlainSender.cs @@ -36,7 +36,7 @@ namespace TLSharp.Core.Network } } - public async Task Recieve() + public async Task Receive() { var result = await _transport.Receieve(); From 089f80fcce908af327bf4643f80bc6fe2e53daf7 Mon Sep 17 00:00:00 2001 From: David Woakes Date: Thu, 21 Jul 2016 06:57:15 +0100 Subject: [PATCH 3/3] Add contacts.GetContacts method to client --- TLSharp.Core/MTProto/TL.cs | 6 ++ TLSharp.Core/Requests/GetContactRequest | 72 ----------------- TLSharp.Core/Requests/GetContactsRequest.cs | 85 +++++++++++++++++++++ TLSharp.Core/TLSharp.Core.csproj | 3 +- TLSharp.Core/TelegramClient.cs | 16 +++- 5 files changed, 107 insertions(+), 75 deletions(-) delete mode 100644 TLSharp.Core/Requests/GetContactRequest create mode 100644 TLSharp.Core/Requests/GetContactsRequest.cs diff --git a/TLSharp.Core/MTProto/TL.cs b/TLSharp.Core/MTProto/TL.cs index cee1be6..6e98dd7 100644 --- a/TLSharp.Core/MTProto/TL.cs +++ b/TLSharp.Core/MTProto/TL.cs @@ -5960,6 +5960,12 @@ namespace TLSharp.Core.MTProto } } + public class ContactsContacts + { + public IList Contacts { get; set; } + public IList Users { get; set; } + } + public class MessageDialogs { public int? Count { get; set; } diff --git a/TLSharp.Core/Requests/GetContactRequest b/TLSharp.Core/Requests/GetContactRequest deleted file mode 100644 index ba57235..0000000 --- a/TLSharp.Core/Requests/GetContactRequest +++ /dev/null @@ -1,72 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using TLSharp.Core.MTProto; - -namespace TLSharp.Core.Requests -{ - public class GetContactRequest : MTProtoRequest - { - private List currentContacts { get; set; } - - public List contacts; - public List users; - - public GetContactRequest(List currentContactsID = null) - { - currentContacts = currentContactsID; - } - - public override void OnSend(BinaryWriter writer) - { - writer.Write(0x22c6aa08); - if (currentContacts == null) - Serializers.String.write(writer, ""); - else - { - string hash = ""; - foreach (var currentUserID in currentContacts) - { - var md5 = Utils.Helpers.md5(currentUserID.ToString()); - hash += md5 + ","; - } - hash = hash.Length > 0 ? hash.Remove(hash.LastIndexOf(','), 1) : Utils.Helpers.md5( hash); - Serializers.String.write(writer, hash); - } - } - - public override void OnResponse(BinaryReader reader) - { - var code = reader.ReadUInt32(); - var result = reader.ReadInt32(); // vector code - int contact_len = reader.ReadInt32(); - this.contacts = new List(contact_len); - for (int imported_index = 0; imported_index < contact_len; imported_index++) - { - Contact imported_element; - imported_element = TL.Parse(reader); - this.contacts.Add(imported_element); - } - reader.ReadInt32(); // vector code - int users_len = reader.ReadInt32(); - this.users = new List(users_len); - for (int users_index = 0; users_index < users_len; users_index++) - { - UserContactConstructor users_element; - users_element = TL.Parse(reader); - this.users.Add(users_element); - } - } - - public override void OnException(Exception exception) - { - throw new NotImplementedException(); - } - public override bool Confirmed { get { return true; } } - private readonly bool responded; - public override bool Responded { get { return responded; } } - } -} diff --git a/TLSharp.Core/Requests/GetContactsRequest.cs b/TLSharp.Core/Requests/GetContactsRequest.cs new file mode 100644 index 0000000..dd7aa5d --- /dev/null +++ b/TLSharp.Core/Requests/GetContactsRequest.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using TLSharp.Core.MTProto; +using System.Security.Cryptography; + +namespace TLSharp.Core.Requests +{ + public class GetContactsRequest : MTProtoRequest + { + private List CurrentContacts { get; set; } + + public List Contacts; + public List Users; + + public GetContactsRequest(IList currentContacts = null) + { + if (currentContacts != null) + { + CurrentContacts = currentContacts.ToList(); + CurrentContacts.Sort(); + } + } + + public override void OnSend(BinaryWriter writer) + { + writer.Write(0x22c6aa08); + if (CurrentContacts == null) + Serializers.String.write(writer, ""); + else + { + // create CSV of contactids and calculate md5 hash + string hash; + var list = string.Join(",", CurrentContacts); + using (var md5 = MD5.Create()) + { + var retVal = md5.ComputeHash(Encoding.UTF8.GetBytes(list)); + var sb = new StringBuilder(); + foreach (var t in retVal) + { + sb.Append(t.ToString("x2")); + } + hash = sb.ToString(); + } + + Serializers.String.write(writer, hash); + } + } + + public override void OnResponse(BinaryReader reader) + { + var code = reader.ReadUInt32(); + // if contactsNotModified then exit + if (code == 0xb74ba9d2) return; + + reader.ReadInt32(); // vector code + var contactLen = reader.ReadInt32(); + Contacts = new List(contactLen); + for (var importedIndex = 0; importedIndex < contactLen; importedIndex++) + { + var importedElement = TL.Parse(reader); + this.Contacts.Add(importedElement); + } + reader.ReadInt32(); // vector code + var usersLen = reader.ReadInt32(); + Users = new List(usersLen); + for (var usersIndex = 0; usersIndex < usersLen; usersIndex++) + { + var usersElement = TL.Parse(reader); + this.Users.Add(usersElement); + } + } + + public override void OnException(Exception exception) + { + throw new NotImplementedException(); + } + public override bool Confirmed { get { return true; } } + private readonly bool _responded; + public override bool Responded { get { return _responded; } } + } +} diff --git a/TLSharp.Core/TLSharp.Core.csproj b/TLSharp.Core/TLSharp.Core.csproj index 67821e5..66a2d8f 100644 --- a/TLSharp.Core/TLSharp.Core.csproj +++ b/TLSharp.Core/TLSharp.Core.csproj @@ -69,6 +69,7 @@ + @@ -100,4 +101,4 @@ --> - + \ No newline at end of file diff --git a/TLSharp.Core/TelegramClient.cs b/TLSharp.Core/TelegramClient.cs index 7c4fd90..8c71f32 100644 --- a/TLSharp.Core/TelegramClient.cs +++ b/TLSharp.Core/TelegramClient.cs @@ -105,8 +105,6 @@ namespace TLSharp.Core request = new AuthSendCodeRequest(phoneNumber, (int)tokenDestination, _apiId, _apiHash, "en"); try { - - await _sender.Send(request); await _sender.Receive(request); @@ -282,5 +280,19 @@ namespace TLSharp.Core return regex.IsMatch(number); } + + public async Task GetContacts(IList contactIds = null) + { + var request = new GetContactsRequest(contactIds); + await _sender.Send(request); + await _sender.Receive(request); + + return new ContactsContacts + { + Contacts = request.Contacts, + Users = request.Users, + }; + } + } }