-
-
Notifications
You must be signed in to change notification settings - Fork 310
[wiki] Basic Authentication possible fix #362
Comments
First thing I noticed is you map a Your problem was that your first call to get the id read more data then the internall array had. It also moved the start pointer. Your next call was instructing it to get data from an already moved start pointer that was pointing out of range for the internal array hence the exception. So your example code should be written like this: public void AcceptChallenge(
NetWorker networker,
BMSByte challenge,
Action<BMSByte> authServerAction,
Action rejectServerAction
) {
ulong steamId = yourMethodThatGetsThis();
var data = ObjectMapper.BMSByte(steamId, Encoding.UTF8.GetBytes($"test:test"));
authServerAction(data);
} Then on the server: public void VerifyResponse(
NetWorker networker,
NetworkingPlayer player,
BMSByte response,
Action<NetworkingPlayer> authUserAction,
Action<NetworkingPlayer> rejectUserAction
) {
ulong steamid = response.GetBasicType<ulong>(); // <--- Moves internal array pointer.
byte[] ticketBinary = response.GetBasicType<byte[]>();
if (AuthUser(steamid, ticketBinary))
{
authUserAction(player);
}
else
{
rejectUserAction(player);
}
} |
You are correct but: If I change as you mention, I now get an OutOfMemoryException: response.GetBasicType<byte[]>() => at x = GetBasicType(StartIndex(), true); // x gets a huge value If I remove the steamid completely from client and server (since I do not use it), the data sent is not correctly retrieved (in my case it is an encrypted text and decryption does not recognize it). So, there is an issue of 4 bytes somewhere... |
That is weird. Haven't seen that before and I have used byte[]s multiple times. Just an fyi you should not touch |
Yes you are seeing the meta data in front. The first 4 bytes is the number of elements as an int of your byte array that you mapped in. Then you have the 9 elements. Please use You could just map the string instead of the byte array though. |
Mapping the string directly worked. Thanks! :) |
Version Number and Operating System(s):
master; Windows
Expected behavior:
Get the correct data set from client.
Actual behavior:
Exception in response.GetByteArray()
Steps to reproduce:
Possible fix of VerifyResponse:
The text was updated successfully, but these errors were encountered: