mirror of
https://github.com/sochix/TLSharp.git
synced 2025-12-06 08:02:00 +01:00
style: more consistent naming removing underscores
There were less places with underscores in field names than places without them, so we now are consistent with the most abundant occurrence.
This commit is contained in:
parent
c031fa4f6d
commit
90f9305dd6
|
|
@ -10,11 +10,11 @@ namespace TLSharp.Core.Network
|
||||||
private int timeOffset;
|
private int timeOffset;
|
||||||
private long lastMessageId;
|
private long lastMessageId;
|
||||||
private Random random;
|
private Random random;
|
||||||
private TcpTransport _transport;
|
private TcpTransport transport;
|
||||||
|
|
||||||
public MtProtoPlainSender(TcpTransport transport)
|
public MtProtoPlainSender(TcpTransport transport)
|
||||||
{
|
{
|
||||||
_transport = transport;
|
this.transport = transport;
|
||||||
random = new Random();
|
random = new Random();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ namespace TLSharp.Core.Network
|
||||||
|
|
||||||
byte[] packet = memoryStream.ToArray();
|
byte[] packet = memoryStream.ToArray();
|
||||||
|
|
||||||
await _transport.Send(packet, token).ConfigureAwait(false);
|
await transport.Send(packet, token).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -42,7 +42,7 @@ namespace TLSharp.Core.Network
|
||||||
{
|
{
|
||||||
token.ThrowIfCancellationRequested();
|
token.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
var result = await _transport.Receive(token).ConfigureAwait(false);
|
var result = await transport.Receive(token).ConfigureAwait(false);
|
||||||
|
|
||||||
using (var memoryStream = new MemoryStream(result.Body))
|
using (var memoryStream = new MemoryStream(result.Body))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -21,20 +21,20 @@ namespace TLSharp.Core.Network
|
||||||
{
|
{
|
||||||
//private ulong sessionId = GenerateRandomUlong();
|
//private ulong sessionId = GenerateRandomUlong();
|
||||||
|
|
||||||
private readonly TcpTransport _transport;
|
private readonly TcpTransport transport;
|
||||||
private readonly Session _session;
|
private readonly Session session;
|
||||||
|
|
||||||
public readonly List<ulong> needConfirmation = new List<ulong>();
|
public readonly List<ulong> needConfirmation = new List<ulong>();
|
||||||
|
|
||||||
public MtProtoSender(TcpTransport transport, Session session)
|
public MtProtoSender(TcpTransport transport, Session session)
|
||||||
{
|
{
|
||||||
_transport = transport;
|
this.transport = transport;
|
||||||
_session = session;
|
this.session = session;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int GenerateSequence(bool confirmed)
|
private int GenerateSequence(bool confirmed)
|
||||||
{
|
{
|
||||||
return confirmed ? _session.Sequence++ * 2 + 1 : _session.Sequence * 2;
|
return confirmed ? session.Sequence++ * 2 + 1 : session.Sequence * 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Send(TeleSharp.TL.TLMethod request, CancellationToken token = default(CancellationToken))
|
public async Task Send(TeleSharp.TL.TLMethod request, CancellationToken token = default(CancellationToken))
|
||||||
|
|
@ -62,14 +62,14 @@ namespace TLSharp.Core.Network
|
||||||
await Send(memory.ToArray(), request, token).ConfigureAwait(false);
|
await Send(memory.ToArray(), request, token).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
_session.Save();
|
session.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Send(byte[] packet, TeleSharp.TL.TLMethod request, CancellationToken token = default(CancellationToken))
|
public async Task Send(byte[] packet, TeleSharp.TL.TLMethod request, CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
token.ThrowIfCancellationRequested();
|
token.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
request.MessageId = _session.GetNewMessageId();
|
request.MessageId = session.GetNewMessageId();
|
||||||
|
|
||||||
byte[] msgKey;
|
byte[] msgKey;
|
||||||
byte[] ciphertext;
|
byte[] ciphertext;
|
||||||
|
|
@ -77,15 +77,15 @@ namespace TLSharp.Core.Network
|
||||||
{
|
{
|
||||||
using (BinaryWriter plaintextWriter = new BinaryWriter(plaintextPacket))
|
using (BinaryWriter plaintextWriter = new BinaryWriter(plaintextPacket))
|
||||||
{
|
{
|
||||||
plaintextWriter.Write(_session.Salt);
|
plaintextWriter.Write(session.Salt);
|
||||||
plaintextWriter.Write(_session.Id);
|
plaintextWriter.Write(session.Id);
|
||||||
plaintextWriter.Write(request.MessageId);
|
plaintextWriter.Write(request.MessageId);
|
||||||
plaintextWriter.Write(GenerateSequence(request.Confirmed));
|
plaintextWriter.Write(GenerateSequence(request.Confirmed));
|
||||||
plaintextWriter.Write(packet.Length);
|
plaintextWriter.Write(packet.Length);
|
||||||
plaintextWriter.Write(packet);
|
plaintextWriter.Write(packet);
|
||||||
|
|
||||||
msgKey = Helpers.CalcMsgKey(plaintextPacket.GetBuffer());
|
msgKey = Helpers.CalcMsgKey(plaintextPacket.GetBuffer());
|
||||||
ciphertext = AES.EncryptAES(Helpers.CalcKey(_session.AuthKey.Data, msgKey, true), plaintextPacket.GetBuffer());
|
ciphertext = AES.EncryptAES(Helpers.CalcKey(session.AuthKey.Data, msgKey, true), plaintextPacket.GetBuffer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -93,11 +93,11 @@ namespace TLSharp.Core.Network
|
||||||
{
|
{
|
||||||
using (BinaryWriter writer = new BinaryWriter(ciphertextPacket))
|
using (BinaryWriter writer = new BinaryWriter(ciphertextPacket))
|
||||||
{
|
{
|
||||||
writer.Write(_session.AuthKey.Id);
|
writer.Write(session.AuthKey.Id);
|
||||||
writer.Write(msgKey);
|
writer.Write(msgKey);
|
||||||
writer.Write(ciphertext);
|
writer.Write(ciphertext);
|
||||||
|
|
||||||
await _transport.Send(ciphertextPacket.GetBuffer(), token).ConfigureAwait(false);
|
await transport.Send(ciphertextPacket.GetBuffer(), token).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -116,7 +116,7 @@ namespace TLSharp.Core.Network
|
||||||
|
|
||||||
ulong remoteAuthKeyId = inputReader.ReadUInt64(); // TODO: check auth key id
|
ulong remoteAuthKeyId = inputReader.ReadUInt64(); // TODO: check auth key id
|
||||||
byte[] msgKey = inputReader.ReadBytes(16); // TODO: check msg_key correctness
|
byte[] msgKey = inputReader.ReadBytes(16); // TODO: check msg_key correctness
|
||||||
AESKeyData keyData = Helpers.CalcKey(_session.AuthKey.Data, msgKey, false);
|
AESKeyData keyData = Helpers.CalcKey(session.AuthKey.Data, msgKey, false);
|
||||||
|
|
||||||
byte[] plaintext = AES.DecryptAES(keyData, inputReader.ReadBytes((int)(inputStream.Length - inputStream.Position)));
|
byte[] plaintext = AES.DecryptAES(keyData, inputReader.ReadBytes((int)(inputStream.Length - inputStream.Position)));
|
||||||
|
|
||||||
|
|
@ -138,7 +138,7 @@ namespace TLSharp.Core.Network
|
||||||
{
|
{
|
||||||
while (!request.ConfirmReceived)
|
while (!request.ConfirmReceived)
|
||||||
{
|
{
|
||||||
var result = DecodeMessage((await _transport.Receive(token).ConfigureAwait(false)).Body);
|
var result = DecodeMessage((await transport.Receive(token).ConfigureAwait(false)).Body);
|
||||||
|
|
||||||
using (var messageStream = new MemoryStream(result.Item1, false))
|
using (var messageStream = new MemoryStream(result.Item1, false))
|
||||||
using (var messageReader = new BinaryReader(messageStream))
|
using (var messageReader = new BinaryReader(messageStream))
|
||||||
|
|
@ -439,7 +439,7 @@ namespace TLSharp.Core.Network
|
||||||
|
|
||||||
//logger.debug("bad_server_salt: msgid {0}, seq {1}, errorcode {2}, newsalt {3}", badMsgId, badMsgSeqNo, errorCode, newSalt);
|
//logger.debug("bad_server_salt: msgid {0}, seq {1}, errorcode {2}, newsalt {3}", badMsgId, badMsgSeqNo, errorCode, newSalt);
|
||||||
|
|
||||||
_session.Salt = newSalt;
|
session.Salt = newSalt;
|
||||||
|
|
||||||
//resend
|
//resend
|
||||||
Send(request, token);
|
Send(request, token);
|
||||||
|
|
|
||||||
|
|
@ -7,19 +7,19 @@ namespace TLSharp.Core.Network.Requests
|
||||||
{
|
{
|
||||||
public class AckRequest : TLMethod
|
public class AckRequest : TLMethod
|
||||||
{
|
{
|
||||||
private readonly List<ulong> _msgs;
|
private readonly List<ulong> msgs;
|
||||||
|
|
||||||
public AckRequest(List<ulong> msgs)
|
public AckRequest(List<ulong> msgs)
|
||||||
{
|
{
|
||||||
_msgs = msgs;
|
this.msgs = msgs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SerializeBody(BinaryWriter writer)
|
public override void SerializeBody(BinaryWriter writer)
|
||||||
{
|
{
|
||||||
writer.Write(0x62d6b459); // msgs_ack
|
writer.Write(0x62d6b459); // msgs_ack
|
||||||
writer.Write(0x1cb5c415); // Vector
|
writer.Write(0x1cb5c415); // Vector
|
||||||
writer.Write(_msgs.Count);
|
writer.Write(msgs.Count);
|
||||||
foreach (ulong messageId in _msgs)
|
foreach (ulong messageId in msgs)
|
||||||
{
|
{
|
||||||
writer.Write(messageId);
|
writer.Write(messageId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ namespace TLSharp.Core.Network
|
||||||
|
|
||||||
public class TcpTransport : IDisposable
|
public class TcpTransport : IDisposable
|
||||||
{
|
{
|
||||||
private readonly TcpClient _tcpClient;
|
private readonly TcpClient tcpClient;
|
||||||
private readonly NetworkStream _stream;
|
private readonly NetworkStream stream;
|
||||||
private int sendCounter = 0;
|
private int sendCounter = 0;
|
||||||
|
|
||||||
public TcpTransport(string address, int port, TcpClientConnectionHandler handler = null)
|
public TcpTransport(string address, int port, TcpClientConnectionHandler handler = null)
|
||||||
|
|
@ -21,38 +21,38 @@ namespace TLSharp.Core.Network
|
||||||
var ipAddress = IPAddress.Parse(address);
|
var ipAddress = IPAddress.Parse(address);
|
||||||
var endpoint = new IPEndPoint(ipAddress, port);
|
var endpoint = new IPEndPoint(ipAddress, port);
|
||||||
|
|
||||||
_tcpClient = new TcpClient(ipAddress.AddressFamily);
|
tcpClient = new TcpClient(ipAddress.AddressFamily);
|
||||||
_tcpClient.Connect(endpoint);
|
tcpClient.Connect(endpoint);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_tcpClient = handler(address, port);
|
tcpClient = handler(address, port);
|
||||||
|
|
||||||
if (_tcpClient.Connected)
|
if (tcpClient.Connected)
|
||||||
{
|
{
|
||||||
_stream = _tcpClient.GetStream();
|
stream = tcpClient.GetStream();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Send(byte[] packet, CancellationToken token = default(CancellationToken))
|
public async Task Send(byte[] packet, CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
if (!_tcpClient.Connected)
|
if (!tcpClient.Connected)
|
||||||
throw new InvalidOperationException("Client not connected to server.");
|
throw new InvalidOperationException("Client not connected to server.");
|
||||||
|
|
||||||
var tcpMessage = new TcpMessage(sendCounter, packet);
|
var tcpMessage = new TcpMessage(sendCounter, packet);
|
||||||
|
|
||||||
await _stream.WriteAsync(tcpMessage.Encode(), 0, tcpMessage.Encode().Length, token).ConfigureAwait(false);
|
await stream.WriteAsync(tcpMessage.Encode(), 0, tcpMessage.Encode().Length, token).ConfigureAwait(false);
|
||||||
sendCounter++;
|
sendCounter++;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<TcpMessage> Receive(CancellationToken token = default(CancellationToken))
|
public async Task<TcpMessage> Receive(CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
var packetLengthBytes = new byte[4];
|
var packetLengthBytes = new byte[4];
|
||||||
if (await _stream.ReadAsync(packetLengthBytes, 0, 4, token).ConfigureAwait(false) != 4)
|
if (await stream.ReadAsync(packetLengthBytes, 0, 4, token).ConfigureAwait(false) != 4)
|
||||||
throw new InvalidOperationException("Couldn't read the packet length");
|
throw new InvalidOperationException("Couldn't read the packet length");
|
||||||
int packetLength = BitConverter.ToInt32(packetLengthBytes, 0);
|
int packetLength = BitConverter.ToInt32(packetLengthBytes, 0);
|
||||||
|
|
||||||
var seqBytes = new byte[4];
|
var seqBytes = new byte[4];
|
||||||
if (await _stream.ReadAsync(seqBytes, 0, 4, token).ConfigureAwait(false) != 4)
|
if (await stream.ReadAsync(seqBytes, 0, 4, token).ConfigureAwait(false) != 4)
|
||||||
throw new InvalidOperationException("Couldn't read the sequence");
|
throw new InvalidOperationException("Couldn't read the sequence");
|
||||||
int seq = BitConverter.ToInt32(seqBytes, 0);
|
int seq = BitConverter.ToInt32(seqBytes, 0);
|
||||||
|
|
||||||
|
|
@ -63,7 +63,7 @@ namespace TLSharp.Core.Network
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
var bodyByte = new byte[packetLength - 12];
|
var bodyByte = new byte[packetLength - 12];
|
||||||
var availableBytes = await _stream.ReadAsync(bodyByte, 0, neededToRead, token).ConfigureAwait(false);
|
var availableBytes = await stream.ReadAsync(bodyByte, 0, neededToRead, token).ConfigureAwait(false);
|
||||||
neededToRead -= availableBytes;
|
neededToRead -= availableBytes;
|
||||||
Buffer.BlockCopy(bodyByte, 0, body, readBytes, availableBytes);
|
Buffer.BlockCopy(bodyByte, 0, body, readBytes, availableBytes);
|
||||||
readBytes += availableBytes;
|
readBytes += availableBytes;
|
||||||
|
|
@ -71,7 +71,7 @@ namespace TLSharp.Core.Network
|
||||||
while (readBytes != packetLength - 12);
|
while (readBytes != packetLength - 12);
|
||||||
|
|
||||||
var crcBytes = new byte[4];
|
var crcBytes = new byte[4];
|
||||||
if (await _stream.ReadAsync(crcBytes, 0, 4, token).ConfigureAwait(false) != 4)
|
if (await stream.ReadAsync(crcBytes, 0, 4, token).ConfigureAwait(false) != 4)
|
||||||
throw new InvalidOperationException("Couldn't read the crc");
|
throw new InvalidOperationException("Couldn't read the crc");
|
||||||
int checksum = BitConverter.ToInt32(crcBytes, 0);
|
int checksum = BitConverter.ToInt32(crcBytes, 0);
|
||||||
|
|
||||||
|
|
@ -96,17 +96,17 @@ namespace TLSharp.Core.Network
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
return this._tcpClient.Connected;
|
return this.tcpClient.Connected;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (_tcpClient.Connected)
|
if (tcpClient.Connected)
|
||||||
{
|
{
|
||||||
_stream.Close();
|
stream.Close();
|
||||||
_tcpClient.Close();
|
tcpClient.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -88,12 +88,12 @@ namespace TLSharp.Core
|
||||||
public TLUser TLUser { get; set; }
|
public TLUser TLUser { get; set; }
|
||||||
private Random random;
|
private Random random;
|
||||||
|
|
||||||
private ISessionStore _store;
|
private ISessionStore store;
|
||||||
|
|
||||||
public Session(ISessionStore store)
|
public Session(ISessionStore store)
|
||||||
{
|
{
|
||||||
random = new Random();
|
random = new Random();
|
||||||
_store = store;
|
this.store = store;
|
||||||
}
|
}
|
||||||
|
|
||||||
public byte[] ToBytes()
|
public byte[] ToBytes()
|
||||||
|
|
@ -169,7 +169,7 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
public void Save()
|
public void Save()
|
||||||
{
|
{
|
||||||
_store.Save(this);
|
store.Save(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Session TryLoadOrCreateNew(ISessionStore store, string sessionUserId)
|
public static Session TryLoadOrCreateNew(ISessionStore store, string sessionUserId)
|
||||||
|
|
|
||||||
|
|
@ -24,17 +24,17 @@ namespace TLSharp.Core
|
||||||
{
|
{
|
||||||
public class TelegramClient : IDisposable
|
public class TelegramClient : IDisposable
|
||||||
{
|
{
|
||||||
private MtProtoSender _sender;
|
private MtProtoSender sender;
|
||||||
private TcpTransport _transport;
|
private TcpTransport transport;
|
||||||
private string _apiHash = "";
|
private string apiHash = String.Empty;
|
||||||
private int _apiId = 0;
|
private int apiId = 0;
|
||||||
private Session _session;
|
private Session session;
|
||||||
private List<TLDcOption> dcOptions;
|
private List<TLDcOption> dcOptions;
|
||||||
private TcpClientConnectionHandler _handler;
|
private TcpClientConnectionHandler handler;
|
||||||
|
|
||||||
public Session Session
|
public Session Session
|
||||||
{
|
{
|
||||||
get { return _session; }
|
get { return session; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public TelegramClient(int apiId, string apiHash,
|
public TelegramClient(int apiId, string apiHash,
|
||||||
|
|
@ -48,32 +48,32 @@ namespace TLSharp.Core
|
||||||
if (store == null)
|
if (store == null)
|
||||||
store = new FileSessionStore();
|
store = new FileSessionStore();
|
||||||
|
|
||||||
_apiHash = apiHash;
|
this.apiHash = apiHash;
|
||||||
_apiId = apiId;
|
this.apiId = apiId;
|
||||||
_handler = handler;
|
this.handler = handler;
|
||||||
|
|
||||||
_session = Session.TryLoadOrCreateNew(store, sessionUserId);
|
session = Session.TryLoadOrCreateNew(store, sessionUserId);
|
||||||
_transport = new TcpTransport(_session.DataCenter.Address, _session.DataCenter.Port, _handler);
|
transport = new TcpTransport (session.DataCenter.Address, session.DataCenter.Port, this.handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ConnectAsync(bool reconnect = false, CancellationToken token = default(CancellationToken))
|
public async Task ConnectAsync(bool reconnect = false, CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
token.ThrowIfCancellationRequested();
|
token.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
if (_session.AuthKey == null || reconnect)
|
if (session.AuthKey == null || reconnect)
|
||||||
{
|
{
|
||||||
var result = await Authenticator.DoAuthentication(_transport, token).ConfigureAwait(false);
|
var result = await Authenticator.DoAuthentication(transport, token).ConfigureAwait(false);
|
||||||
_session.AuthKey = result.AuthKey;
|
session.AuthKey = result.AuthKey;
|
||||||
_session.TimeOffset = result.TimeOffset;
|
session.TimeOffset = result.TimeOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
_sender = new MtProtoSender(_transport, _session);
|
sender = new MtProtoSender(transport, session);
|
||||||
|
|
||||||
//set-up layer
|
//set-up layer
|
||||||
var config = new TLRequestGetConfig();
|
var config = new TLRequestGetConfig();
|
||||||
var request = new TLRequestInitConnection()
|
var request = new TLRequestInitConnection()
|
||||||
{
|
{
|
||||||
ApiId = _apiId,
|
ApiId = apiId,
|
||||||
AppVersion = "1.0.0",
|
AppVersion = "1.0.0",
|
||||||
DeviceModel = "PC",
|
DeviceModel = "PC",
|
||||||
LangCode = "en",
|
LangCode = "en",
|
||||||
|
|
@ -81,8 +81,8 @@ namespace TLSharp.Core
|
||||||
SystemVersion = "Win 10.0"
|
SystemVersion = "Win 10.0"
|
||||||
};
|
};
|
||||||
var invokewithLayer = new TLRequestInvokeWithLayer() { Layer = 66, Query = request };
|
var invokewithLayer = new TLRequestInvokeWithLayer() { Layer = 66, Query = request };
|
||||||
await _sender.Send(invokewithLayer, token).ConfigureAwait(false);
|
await sender.Send(invokewithLayer, token).ConfigureAwait(false);
|
||||||
await _sender.Receive(invokewithLayer, token).ConfigureAwait(false);
|
await sender.Receive(invokewithLayer, token).ConfigureAwait(false);
|
||||||
|
|
||||||
dcOptions = ((TLConfig)invokewithLayer.Response).DcOptions.ToList();
|
dcOptions = ((TLConfig)invokewithLayer.Response).DcOptions.ToList();
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +95,7 @@ namespace TLSharp.Core
|
||||||
throw new InvalidOperationException($"Can't reconnect. Establish initial connection first.");
|
throw new InvalidOperationException($"Can't reconnect. Establish initial connection first.");
|
||||||
|
|
||||||
TLExportedAuthorization exported = null;
|
TLExportedAuthorization exported = null;
|
||||||
if (_session.TLUser != null)
|
if (session.TLUser != null)
|
||||||
{
|
{
|
||||||
TLRequestExportAuthorization exportAuthorization = new TLRequestExportAuthorization() { DcId = dcId };
|
TLRequestExportAuthorization exportAuthorization = new TLRequestExportAuthorization() { DcId = dcId };
|
||||||
exported = await SendRequestAsync<TLExportedAuthorization>(exportAuthorization, token).ConfigureAwait(false);
|
exported = await SendRequestAsync<TLExportedAuthorization>(exportAuthorization, token).ConfigureAwait(false);
|
||||||
|
|
@ -104,22 +104,22 @@ namespace TLSharp.Core
|
||||||
var dc = dcOptions.First(d => d.Id == dcId);
|
var dc = dcOptions.First(d => d.Id == dcId);
|
||||||
var dataCenter = new DataCenter (dcId, dc.IpAddress, dc.Port);
|
var dataCenter = new DataCenter (dcId, dc.IpAddress, dc.Port);
|
||||||
|
|
||||||
_transport = new TcpTransport(dc.IpAddress, dc.Port, _handler);
|
transport = new TcpTransport(dc.IpAddress, dc.Port, handler);
|
||||||
_session.DataCenter = dataCenter;
|
session.DataCenter = dataCenter;
|
||||||
|
|
||||||
await ConnectAsync(true, token).ConfigureAwait(false);
|
await ConnectAsync(true, token).ConfigureAwait(false);
|
||||||
|
|
||||||
if (_session.TLUser != null)
|
if (session.TLUser != null)
|
||||||
{
|
{
|
||||||
TLRequestImportAuthorization importAuthorization = new TLRequestImportAuthorization() { Id = exported.Id, Bytes = exported.Bytes };
|
TLRequestImportAuthorization importAuthorization = new TLRequestImportAuthorization() { Id = exported.Id, Bytes = exported.Bytes };
|
||||||
var imported = await SendRequestAsync<TLAuthorization>(importAuthorization, token).ConfigureAwait(false);
|
var imported = await SendRequestAsync<TLAuthorization>(importAuthorization, token).ConfigureAwait(false);
|
||||||
OnUserAuthenticated(((TLUser)imported.User));
|
OnUserAuthenticated((TLUser)imported.User);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task RequestWithDcMigration(TLMethod request, CancellationToken token = default(CancellationToken))
|
private async Task RequestWithDcMigration(TLMethod request, CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
if (_sender == null)
|
if (sender == null)
|
||||||
throw new InvalidOperationException("Not connected!");
|
throw new InvalidOperationException("Not connected!");
|
||||||
|
|
||||||
var completed = false;
|
var completed = false;
|
||||||
|
|
@ -127,14 +127,14 @@ namespace TLSharp.Core
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await _sender.Send(request, token).ConfigureAwait(false);
|
await sender.Send(request, token).ConfigureAwait(false);
|
||||||
await _sender.Receive(request, token).ConfigureAwait(false);
|
await sender.Receive(request, token).ConfigureAwait(false);
|
||||||
completed = true;
|
completed = true;
|
||||||
}
|
}
|
||||||
catch(DataCenterMigrationException e)
|
catch(DataCenterMigrationException e)
|
||||||
{
|
{
|
||||||
if (_session.DataCenter.DataCenterId.HasValue &&
|
if (session.DataCenter.DataCenterId.HasValue &&
|
||||||
_session.DataCenter.DataCenterId.Value == e.DC)
|
session.DataCenter.DataCenterId.Value == e.DC)
|
||||||
{
|
{
|
||||||
throw new Exception($"Telegram server replied requesting a migration to DataCenter {e.DC} when this connection was already using this DataCenter", e);
|
throw new Exception($"Telegram server replied requesting a migration to DataCenter {e.DC} when this connection was already using this DataCenter", e);
|
||||||
}
|
}
|
||||||
|
|
@ -148,7 +148,7 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
public bool IsUserAuthorized()
|
public bool IsUserAuthorized()
|
||||||
{
|
{
|
||||||
return _session.TLUser != null;
|
return session.TLUser != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> IsPhoneRegisteredAsync(string phoneNumber, CancellationToken token = default(CancellationToken))
|
public async Task<bool> IsPhoneRegisteredAsync(string phoneNumber, CancellationToken token = default(CancellationToken))
|
||||||
|
|
@ -168,7 +168,7 @@ namespace TLSharp.Core
|
||||||
if (String.IsNullOrWhiteSpace(phoneNumber))
|
if (String.IsNullOrWhiteSpace(phoneNumber))
|
||||||
throw new ArgumentNullException(nameof(phoneNumber));
|
throw new ArgumentNullException(nameof(phoneNumber));
|
||||||
|
|
||||||
var request = new TLRequestSendCode() { PhoneNumber = phoneNumber, ApiId = _apiId, ApiHash = _apiHash };
|
var request = new TLRequestSendCode() { PhoneNumber = phoneNumber, ApiId = apiId, ApiHash = apiHash };
|
||||||
|
|
||||||
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
||||||
|
|
||||||
|
|
@ -201,7 +201,7 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
||||||
|
|
||||||
return ((TLPassword)request.Response);
|
return (TLPassword)request.Response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<TLUser> MakeAuthWithPasswordAsync(TLPassword password, string password_str, CancellationToken token = default(CancellationToken))
|
public async Task<TLUser> MakeAuthWithPasswordAsync(TLPassword password, string password_str, CancellationToken token = default(CancellationToken))
|
||||||
|
|
@ -218,9 +218,9 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
||||||
|
|
||||||
OnUserAuthenticated(((TLUser)request.Response.User));
|
OnUserAuthenticated((TLUser)request.Response.User);
|
||||||
|
|
||||||
return ((TLUser)request.Response.User);
|
return (TLUser)request.Response.User;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<TLUser> SignUpAsync(string phoneNumber, string phoneCodeHash, string code, string firstName, string lastName, CancellationToken token = default(CancellationToken))
|
public async Task<TLUser> SignUpAsync(string phoneNumber, string phoneCodeHash, string code, string firstName, string lastName, CancellationToken token = default(CancellationToken))
|
||||||
|
|
@ -229,9 +229,9 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
await RequestWithDcMigration(request, token).ConfigureAwait(false);
|
||||||
|
|
||||||
OnUserAuthenticated(((TLUser)request.Response.User));
|
OnUserAuthenticated((TLUser)request.Response.User);
|
||||||
|
|
||||||
return ((TLUser)request.Response.User);
|
return (TLUser)request.Response.User;
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<T> SendRequestAsync<T>(TLMethod methodToExecute, CancellationToken token = default(CancellationToken))
|
public async Task<T> SendRequestAsync<T>(TLMethod methodToExecute, CancellationToken token = default(CancellationToken))
|
||||||
|
|
@ -374,8 +374,7 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
public async Task<TLFile> GetFile(TLAbsInputFileLocation location, int filePartSize, int offset = 0, CancellationToken token = default(CancellationToken))
|
public async Task<TLFile> GetFile(TLAbsInputFileLocation location, int filePartSize, int offset = 0, CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
TLFile result = null;
|
TLFile result = await SendAuthenticatedRequestAsync<TLFile>(new TLRequestGetFile
|
||||||
result = await SendAuthenticatedRequestAsync<TLFile>(new TLRequestGetFile
|
|
||||||
{
|
{
|
||||||
Location = location,
|
Location = location,
|
||||||
Limit = filePartSize,
|
Limit = filePartSize,
|
||||||
|
|
@ -387,7 +386,7 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
public async Task SendPingAsync(CancellationToken token = default(CancellationToken))
|
public async Task SendPingAsync(CancellationToken token = default(CancellationToken))
|
||||||
{
|
{
|
||||||
await _sender.SendPingAsync(token)
|
await sender.SendPingAsync(token)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -427,28 +426,28 @@ namespace TLSharp.Core
|
||||||
|
|
||||||
private void OnUserAuthenticated(TLUser TLUser)
|
private void OnUserAuthenticated(TLUser TLUser)
|
||||||
{
|
{
|
||||||
_session.TLUser = TLUser;
|
session.TLUser = TLUser;
|
||||||
_session.SessionExpires = int.MaxValue;
|
session.SessionExpires = int.MaxValue;
|
||||||
|
|
||||||
_session.Save();
|
session.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool IsConnected
|
public bool IsConnected
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_transport == null)
|
if (transport == null)
|
||||||
return false;
|
return false;
|
||||||
return _transport.IsConnected;
|
return transport.IsConnected;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (_transport != null)
|
if (transport != null)
|
||||||
{
|
{
|
||||||
_transport.Dispose();
|
transport.Dispose();
|
||||||
_transport = null;
|
transport = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ namespace TLSharp.Core.Utils
|
||||||
{
|
{
|
||||||
private static string GetFileHash(byte[] data)
|
private static string GetFileHash(byte[] data)
|
||||||
{
|
{
|
||||||
string md5_checksum;
|
string md5CheckSum;
|
||||||
using (var md5 = MD5.Create())
|
using (var md5 = MD5.Create())
|
||||||
{
|
{
|
||||||
var hash = md5.ComputeHash(data);
|
var hash = md5.ComputeHash(data);
|
||||||
|
|
@ -24,10 +24,10 @@ namespace TLSharp.Core.Utils
|
||||||
foreach (byte t in hash)
|
foreach (byte t in hash)
|
||||||
hashResult.Append(t.ToString("x2"));
|
hashResult.Append(t.ToString("x2"));
|
||||||
|
|
||||||
md5_checksum = hashResult.ToString();
|
md5CheckSum = hashResult.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return md5_checksum;
|
return md5CheckSum;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task<TLAbsInputFile> UploadFile(this TelegramClient client, string name, StreamReader reader, CancellationToken token = default(CancellationToken))
|
public static async Task<TLAbsInputFile> UploadFile(this TelegramClient client, string name, StreamReader reader, CancellationToken token = default(CancellationToken))
|
||||||
|
|
|
||||||
|
|
@ -141,10 +141,10 @@ namespace TLSharp.Tests
|
||||||
}
|
}
|
||||||
catch (CloudPasswordNeededException ex)
|
catch (CloudPasswordNeededException ex)
|
||||||
{
|
{
|
||||||
var password = await client.GetPasswordSetting();
|
var passwordSetting = await client.GetPasswordSetting();
|
||||||
var password_str = PasswordToAuthenticate;
|
var password = PasswordToAuthenticate;
|
||||||
|
|
||||||
user = await client.MakeAuthWithPasswordAsync(password,password_str);
|
user = await client.MakeAuthWithPasswordAsync(passwordSetting, password);
|
||||||
}
|
}
|
||||||
catch (InvalidPhoneCodeException ex)
|
catch (InvalidPhoneCodeException ex)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue