mirror of
https://github.com/sochix/TLSharp.git
synced 2026-01-07 01:09:57 +01:00
commit
29568bef11
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5960,6 +5960,12 @@ namespace TLSharp.Core.MTProto
|
|||
}
|
||||
}
|
||||
|
||||
public class ContactsContacts
|
||||
{
|
||||
public IList<Contact> Contacts { get; set; }
|
||||
public IList<User> Users { get; set; }
|
||||
}
|
||||
|
||||
public class MessageDialogs
|
||||
{
|
||||
public int? Count { get; set; }
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ namespace TLSharp.Core.Network
|
|||
}
|
||||
}
|
||||
|
||||
public async Task<byte[]> Recieve()
|
||||
public async Task<byte[]> Receive()
|
||||
{
|
||||
var result = await _transport.Receieve();
|
||||
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ namespace TLSharp.Core.Network
|
|||
return new Tuple<byte[], ulong, int>(message, remoteMessageId, remoteSequence);
|
||||
}
|
||||
|
||||
public async Task<byte[]> Recieve(MTProtoRequest request)
|
||||
public async Task<byte[]> Receive(MTProtoRequest request)
|
||||
{
|
||||
while (!request.ConfirmReceived)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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<int> currentContacts { get; set; }
|
||||
|
||||
public List<Contact> contacts;
|
||||
public List<UserContactConstructor> users;
|
||||
|
||||
public GetContactRequest(List<int> 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>(contact_len);
|
||||
for (int imported_index = 0; imported_index < contact_len; imported_index++)
|
||||
{
|
||||
Contact imported_element;
|
||||
imported_element = TL.Parse<Contact>(reader);
|
||||
this.contacts.Add(imported_element);
|
||||
}
|
||||
reader.ReadInt32(); // vector code
|
||||
int users_len = reader.ReadInt32();
|
||||
this.users = new List<UserContactConstructor>(users_len);
|
||||
for (int users_index = 0; users_index < users_len; users_index++)
|
||||
{
|
||||
UserContactConstructor users_element;
|
||||
users_element = TL.Parse<UserContactConstructor>(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; } }
|
||||
}
|
||||
}
|
||||
85
TLSharp.Core/Requests/GetContactsRequest.cs
Normal file
85
TLSharp.Core/Requests/GetContactsRequest.cs
Normal file
|
|
@ -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<int> CurrentContacts { get; set; }
|
||||
|
||||
public List<Contact> Contacts;
|
||||
public List<User> Users;
|
||||
|
||||
public GetContactsRequest(IList<int> 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<Contact>(contactLen);
|
||||
for (var importedIndex = 0; importedIndex < contactLen; importedIndex++)
|
||||
{
|
||||
var importedElement = TL.Parse<Contact>(reader);
|
||||
this.Contacts.Add(importedElement);
|
||||
}
|
||||
reader.ReadInt32(); // vector code
|
||||
var usersLen = reader.ReadInt32();
|
||||
Users = new List<User>(usersLen);
|
||||
for (var usersIndex = 0; usersIndex < usersLen; usersIndex++)
|
||||
{
|
||||
var usersElement = TL.Parse<User>(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; } }
|
||||
}
|
||||
}
|
||||
|
|
@ -69,6 +69,7 @@
|
|||
<Compile Include="Requests\AuthSendSmsRequest.cs" />
|
||||
<Compile Include="Requests\AuthSignInRequest.cs" />
|
||||
<Compile Include="Requests\AuthSignUpRequest.cs" />
|
||||
<Compile Include="Requests\GetContactsRequest.cs" />
|
||||
<Compile Include="Requests\GetDialogsRequest.cs" />
|
||||
<Compile Include="Requests\GetFileRequest.cs" />
|
||||
<Compile Include="Requests\GetHistoryRequest.cs" />
|
||||
|
|
@ -100,4 +101,4 @@
|
|||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
||||
</Project>
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -105,10 +105,8 @@ namespace TLSharp.Core
|
|||
request = new AuthSendCodeRequest(phoneNumber, (int)tokenDestination, _apiId, _apiHash, "en");
|
||||
try
|
||||
{
|
||||
|
||||
|
||||
await _sender.Send(request);
|
||||
await _sender.Recieve(request);
|
||||
await _sender.Receive(request);
|
||||
|
||||
completed = true;
|
||||
}
|
||||
|
|
@ -132,7 +130,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 +163,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 +193,7 @@ namespace TLSharp.Core
|
|||
new InputMediaUploadedPhotoConstructor(file));
|
||||
|
||||
await _sender.Send(request);
|
||||
await _sender.Recieve(request);
|
||||
await _sender.Receive(request);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
@ -207,7 +205,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 +219,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 +229,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<List<Message>> 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 +245,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 +254,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 +269,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;
|
||||
}
|
||||
|
|
@ -282,5 +280,19 @@ namespace TLSharp.Core
|
|||
|
||||
return regex.IsMatch(number);
|
||||
}
|
||||
|
||||
public async Task<ContactsContacts> GetContacts(IList<int> contactIds = null)
|
||||
{
|
||||
var request = new GetContactsRequest(contactIds);
|
||||
await _sender.Send(request);
|
||||
await _sender.Receive(request);
|
||||
|
||||
return new ContactsContacts
|
||||
{
|
||||
Contacts = request.Contacts,
|
||||
Users = request.Users,
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue