public readonly string[] ExtensionIds; // nullable // not null only for requests /// <summary> /// creates packet for transmission to peer /// </summary> /// <param name="connectedPeer">destination</param> /// <param name="stream">destination</param> public PeerHelloPacket(LocalPeer localPeer, ConnectedPeer connectedPeer, ConnectedPeerStream stream, PeerHelloRequestStatus status) { LibraryVersion = CompilationInfo.CompilationDateTimeUtc_uint32; ProtocolVersion = P2ptpCommon.ProtocolVersion; FromPeerId = localPeer.LocalPeerId; ExtensionIds = localPeer.Configuration.Extensions?.Select(x => x.ExtensionId).ToArray(); StreamId = stream.StreamId; ToPeerId = connectedPeer.RemotePeerId; Status = status; RequestTime32 = localPeer.Time32; RoleFlags = localPeer.Configuration.RoleAsUser ? (byte)0x01 : (byte)0x00; }
} // not null if FlagIshareMyIpLocation == true /// <summary> /// creates request, for transmission to peer /// </summary> /// <param name="connectedPeer">destination</param> /// <param name="stream">destination</param> public PeerHelloPacket(LocalPeer localPeer, ConnectedPeer connectedPeer, ConnectedPeerStream stream, PeerHelloRequestStatus status, bool requestIpLocation) { LibraryVersion = MiscProcedures.CompilationDateTimeUtc_uint32Seconds; ProtocolVersion = P2ptpCommon.ProtocolVersion; FromPeerId = localPeer.LocalPeerId; ExtensionIds = localPeer.Configuration.Extensions?.Select(x => x.ExtensionId).ToArray(); StreamId = stream.StreamId; ToPeerId = connectedPeer.RemotePeerId; Status = status; RequestTime32 = localPeer.Time32; if (localPeer.Configuration.RoleAsUser) { Flags |= (byte)0x01; } if (requestIpLocation) { Flags |= (byte)0x04; } }