Skip to content

Commit

Permalink
Fix android to android
Browse files Browse the repository at this point in the history
Fixes #37
  • Loading branch information
ShortDevelopment committed Feb 10, 2023
1 parent 5edb1c9 commit 84a943c
Show file tree
Hide file tree
Showing 8 changed files with 50 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ internal sealed class NearShareApp : CdpAppBase

const uint PartitionSize = 102400u; // 131072u

uint _messageId = 0;
public override void HandleMessage(CdpMessage msg)
{
var payload = ValueSet.Parse(msg.Read());
var payload = ValueSet.Parse(msg.ReadBinary(out var binaryHeader));
_messageId = binaryHeader.MessageId;

if (!payload.ContainsKey("ControlMessage"))
throw new InvalidDataException();
Expand Down Expand Up @@ -146,14 +148,14 @@ void RequestBlob(ulong requestedPosition, uint size = PartitionSize)
request.Add("BlobPosition", requestedPosition);
request.Add("BlobSize", size);
request.Add("ContentId", 0u);
SendValueSet(request);
SendValueSet(request, _messageId);
}

void OnCancel()
{
ValueSet request = new();
request.Add("ControlMessage", (uint)NearShareControlMsgType.CancelTransfer);
SendValueSet(request);
SendValueSet(request, _messageId);

CloseChannel();
}
Expand All @@ -162,7 +164,7 @@ void OnCompleted()
{
ValueSet request = new();
request.Add("ControlMessage", (uint)NearShareControlMsgType.CompleteTransfer);
SendValueSet(request);
SendValueSet(request, _messageId);

CloseChannel();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ public class NearShareHandshakeApp : CdpAppBase, ICdpAppId

public override void HandleMessage(CdpMessage msg)
{
var payload = ValueSet.Parse(msg.Read());
var payload = ValueSet.Parse(msg.ReadBinary(out _));

string id = payload.Get<Guid>("OperationId").ToString();
CdpAppRegistration.RegisterApp(
Expand All @@ -29,7 +29,7 @@ public override void HandleMessage(CdpMessage msg)
ValueSet response = new();
response.Add("SelectedPlatformVersion", 1u);
response.Add("VersionHandShakeResult", 1u);
SendValueSet(response);
SendValueSet(response, msgId: 0);

Channel.Dispose();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public static void StartHandshake(CdpChannel channel, Guid operationId)
msg.Add("MaxPlatformVersion", 1u);
msg.Add("MinPlatformVersion", 1u);
msg.Add("OperationId", operationId);
channel.SendMessage(msg.Write);
channel.SendBinaryMessage(msg.Write, msgId: 0);
}

public void HandleMessage(CdpMessage msg)
Expand Down
4 changes: 2 additions & 2 deletions ShortDev.Microsoft.ConnectedDevices/CdpAppBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ public abstract class CdpAppBase : IChannelMessageHandler

public abstract void HandleMessage(CdpMessage msg);

protected void SendValueSet(ValueSet request)
=> Channel.SendMessage(request.Write);
protected void SendValueSet(ValueSet request, uint msgId)
=> Channel.SendBinaryMessage(request.Write, msgId);

protected virtual void CloseChannel()
{
Expand Down
19 changes: 11 additions & 8 deletions ShortDev.Microsoft.ConnectedDevices/CdpChannel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,16 @@ internal CdpChannel(CdpSession session, ulong channelId, IChannelMessageHandler
public void HandleMessageAsync(CdpMessage msg)
=> MessageHandler.HandleMessage(msg);

public void SendBinaryMessage(BodyCallback bodyCallback, uint msgId)
=> SendMessage(writer =>
{
new BinaryMsgHeader()
{
MessageId = msgId
}.Write(writer);
bodyCallback(writer);
});

public void SendMessage(BodyCallback bodyCallback)
{
CommonHeader header = new()
Expand All @@ -57,14 +67,7 @@ public void SendMessage(BodyCallback bodyCallback)
ChannelId = ChannelId
};

Session.SendMessage(Socket, header, writer =>
{
new SessionFragmentHeader()
{
MessageId = 0
}.Write(writer);
bodyCallback(writer);
});
Session.SendMessage(Socket, header, bodyCallback);
}

void IDisposable.Dispose()
Expand Down
22 changes: 16 additions & 6 deletions ShortDev.Microsoft.ConnectedDevices/Messages/CdpMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,28 @@ public void AddFragment(ReadOnlySpan<byte> fragment)
}
#endregion

public SessionFragmentHeader? FragmentHeader { get; private set; }

public EndianReader Read()
{
if (!IsComplete)
throw new InvalidOperationException("Wait for completion");
ThrowIfNotCompleted();

return new(Endianness.BigEndian, _buffer.AsSpan());
}

public EndianReader ReadBinary(out BinaryMsgHeader header)
{
ThrowIfNotCompleted();

EndianReader reader = new(Endianness.BigEndian, _buffer.AsSpan());
FragmentHeader = SessionFragmentHeader.Parse(reader);
var reader = Read();
header = BinaryMsgHeader.Parse(reader);
return reader;
}

void ThrowIfNotCompleted()
{
if (!IsComplete)
throw new InvalidOperationException("Wait for completion");
}

public void Dispose()
{
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
using ShortDev.Networking;
using System.IO;

namespace ShortDev.Microsoft.ConnectedDevices.Messages.Session;

/// <summary>
/// cdp.dll!cdp::BinaryFragmenter::GetMessageFragments <br/>
/// <see cref="AdditionalHeaderType.UserMessageRequestId"/>
/// </summary>
public sealed class SessionFragmentHeader : ICdpHeader<SessionFragmentHeader>
public sealed class BinaryMsgHeader : ICdpHeader<BinaryMsgHeader>
{
public int FragmentCount { get; set; } = 1;
public int FragmentIndex { get; set; } = 0;
public required int MessageId { get; set; }
public uint FragmentCount { get; set; } = 1;
public uint FragmentIndex { get; set; } = 0;
public required uint MessageId { get; set; }

public static SessionFragmentHeader Parse(EndianReader reader)
public static BinaryMsgHeader Parse(EndianReader reader)
=> new()
{
FragmentCount = reader.ReadInt32(),
FragmentIndex = reader.ReadInt32(),
MessageId = reader.ReadInt32(),
FragmentCount = reader.ReadUInt32(),
FragmentIndex = reader.ReadUInt32(),
MessageId = reader.ReadUInt32(),
};

public void Write(EndianWriter writer)
Expand Down
7 changes: 4 additions & 3 deletions Test/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
using ShortDev.Microsoft.ConnectedDevices.Messages.Connection;
using ShortDev.Microsoft.ConnectedDevices.Messages.Connection.Authentication;
using ShortDev.Microsoft.ConnectedDevices.Messages.Connection.DeviceInfo;
using ShortDev.Microsoft.ConnectedDevices.Messages.Session;
using ShortDev.Microsoft.ConnectedDevices.Serialization;
using ShortDev.Networking;
using Spectre.Console;

Expand Down Expand Up @@ -59,9 +61,8 @@ void HandleMessage(CommonHeader header, EndianReader reader)
}
else if (header.Type == MessageType.Session)
{
// reader.PrintPayload();
//var prepend = reader.ReadBytes(0x0000000C);
//var valueSet = ValueSet.Parse(reader.BaseStream);
BinaryMsgHeader binaryHeader = BinaryMsgHeader.Parse(reader);
var valueSet = ValueSet.Parse(reader);
}
else
{
Expand Down

0 comments on commit 84a943c

Please sign in to comment.