private Token DeserializeNext( byte tokenCode = Byte.MaxValue ) { var tokenPosition = CodePosition; if( tokenCode == Byte.MaxValue ) { tokenCode = FixToken( Buffer.ReadByte() ); AlignSize( sizeof(byte) ); } Token tokenItem = null; if( tokenCode >= (byte)ExprToken.FirstNative ) { tokenItem = FindNativeTable( tokenCode ); } else if( tokenCode >= (byte)ExprToken.ExtendedNative ) { tokenItem = FindNativeTable( (tokenCode - (byte)ExprToken.ExtendedNative) << 8 | Buffer.ReadByte() ); AlignSize( sizeof(byte) ); } else switch( tokenCode ) { #region Cast case (byte)ExprToken.DynamicCast: tokenItem = new DynamicCastToken(); break; case (byte)ExprToken.MetaCast: tokenItem = new MetaCastToken(); break; case (byte)ExprToken.InterfaceCast: if( Buffer.Version < PrimitveCastVersion ) // UE1 { tokenItem = new IntToStringToken(); } else { tokenItem = new InterfaceCastToken(); } break; // Redefined, can be RotatorToVector!(UE1) case (byte)ExprToken.PrimitiveCast: if( Buffer.Version < PrimitveCastVersion ) // UE1 { tokenItem = new RotatorToVectorToken(); } else // UE2+ { // Next byte represents the CastToken! tokenCode = Buffer.ReadByte(); AlignSize( sizeof(byte) ); tokenItem = DeserializeCastToken( tokenCode ); //tokenitem = new PrimitiveCastToken(); } break; #endregion #region Context case (byte)ExprToken.ClassContext: tokenItem = new ClassContextToken(); break; case (byte)ExprToken.InterfaceContext: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new ByteToStringToken(); } else { tokenItem = new InterfaceContextToken(); } break; case (byte)ExprToken.Context: tokenItem = new ContextToken(); break; case (byte)ExprToken.StructMember: tokenItem = new StructMemberToken(); break; #endregion #region Assigns case (byte)ExprToken.Let: tokenItem = new LetToken(); break; case (byte)ExprToken.LetBool: tokenItem = new LetBoolToken(); break; case (byte)ExprToken.EndParmValue: tokenItem = new EndParmValueToken(); break; // Redefined, can be FloatToBool!(UE1) case (byte)ExprToken.LetDelegate: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new FloatToBoolToken(); } else { tokenItem = new LetDelegateToken(); } break; // Redefined, can be NameToBool!(UE1) case (byte)ExprToken.Conditional: tokenItem = new ConditionalToken(); break; case (byte)ExprToken.Eval: // case (byte)ExprToken.DynArrayFindStruct: case (byte)ExprToken.Conditional: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new NameToBoolToken(); } else if( Buffer.Version >= 300 ) { tokenItem = new DynamicArrayFindStructToken(); } else { tokenItem = new ConditionalToken(); } break; #endregion #region Jumps case (byte)ExprToken.Return: tokenItem = new ReturnToken(); break; case (byte)ExprToken.ReturnNothing: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new ByteToIntToken(); } // Definitely existed since GoW(490) else if( Buffer.Version > 420 && (DeserializedTokens.Count > 0 && !(DeserializedTokens[DeserializedTokens.Count - 1] is ReturnToken)) ) // Should only be done if the last token wasn't Return { tokenItem = new DynamicArrayInsertToken(); } else { tokenItem = new ReturnNothingToken(); } break; case (byte)ExprToken.GotoLabel: tokenItem = new GoToLabelToken(); break; case (byte)ExprToken.Jump: tokenItem = new JumpToken(); break; case (byte)ExprToken.JumpIfNot: tokenItem = new JumpIfNotToken(); break; case (byte)ExprToken.Switch: tokenItem = new SwitchToken(); break; case (byte)ExprToken.Case: tokenItem = new CaseToken(); break; case (byte)ExprToken.DynArrayIterator: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new RotatorToStringToken(); } else { tokenItem = new ArrayIteratorToken(); } break; case (byte)ExprToken.Iterator: tokenItem = new IteratorToken(); break; case (byte)ExprToken.IteratorNext: tokenItem = new IteratorNextToken(); break; case (byte)ExprToken.IteratorPop: tokenItem = new IteratorPopToken(); break; case (byte)ExprToken.FilterEditorOnly: tokenItem = new FilterEditorOnlyToken(); break; #endregion #region Variables case (byte)ExprToken.NativeParm: tokenItem = new NativeParameterToken(); break; // Referenced variables that are from this function e.g. Local and params case (byte)ExprToken.InstanceVariable: tokenItem = new InstanceVariableToken(); break; case (byte)ExprToken.LocalVariable: tokenItem = new LocalVariableToken(); break; case (byte)ExprToken.StateVariable: tokenItem = new StateVariableToken(); break; // Referenced variables that are default case (byte)ExprToken.UndefinedVariable: #if BORDERLANDS2 if( _Container.Package.Build == UnrealPackage.GameBuild.BuildName.Borderlands2 ) { tokenItem = new DynamicVariableToken(); break; } #endif tokenItem = new UndefinedVariableToken(); break; case (byte)ExprToken.DefaultVariable: tokenItem = new DefaultVariableToken(); break; // UE3+ case (byte)ExprToken.OutVariable: tokenItem = new OutVariableToken(); break; case (byte)ExprToken.BoolVariable: tokenItem = new BoolVariableToken(); break; // Redefined, can be FloatToInt!(UE1) case (byte)ExprToken.DelegateProperty: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new FloatToIntToken(); } else { tokenItem = new DelegatePropertyToken(); } break; case (byte)ExprToken.DefaultParmValue: if( Buffer.Version < PrimitveCastVersion ) // StringToInt { tokenItem = new StringToIntToken(); } else { tokenItem = new DefaultParameterToken(); } break; #endregion #region Misc // Redefined, can be BoolToFloat!(UE1) case (byte)ExprToken.DebugInfo: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new BoolToFloatToken(); } else { tokenItem = new DebugInfoToken(); } break; case (byte)ExprToken.Nothing: tokenItem = new NothingToken(); break; case (byte)ExprToken.EndFunctionParms: tokenItem = new EndFunctionParmsToken(); break; case (byte)ExprToken.IntZero: tokenItem = new IntZeroToken(); break; case (byte)ExprToken.IntOne: tokenItem = new IntOneToken(); break; case (byte)ExprToken.True: tokenItem = new TrueToken(); break; case (byte)ExprToken.False: tokenItem = new FalseToken(); break; case (byte)ExprToken.NoDelegate: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new IntToFloatToken(); } else { tokenItem = new NoDelegateToken(); } break; // No value passed to an optional parameter. case (byte)ExprToken.NoParm: tokenItem = new NoParmToken(); break; case (byte)ExprToken.NoObject: tokenItem = new NoObjectToken(); break; case (byte)ExprToken.Self: tokenItem = new SelfToken(); break; // End of state code. case (byte)ExprToken.Stop: tokenItem = new StopToken(); break; case (byte)ExprToken.Assert: tokenItem = new AssertToken(); break; case (byte)ExprToken.LabelTable: tokenItem = new LabelTableToken(); break; case (byte)ExprToken.EndOfScript: //CastToken.BoolToString: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new BoolToStringToken(); } else { tokenItem = new EndOfScriptToken(); } break; case (byte)ExprToken.Skip: tokenItem = new SkipToken(); break; case (byte)ExprToken.StructCmpEq: tokenItem = new StructCmpEqToken(); break; case (byte)ExprToken.StructCmpNE: tokenItem = new StructCmpNeToken(); break; case (byte)ExprToken.DelegateCmpEq: tokenItem = new DelegateCmpEqToken(); break; case (byte)ExprToken.DelegateFunctionCmpEq: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new IntToBoolToken(); } else { tokenItem = new DelegateFunctionCmpEqToken(); } break; case (byte)ExprToken.DelegateCmpNE: tokenItem = new DelegateCmpNEToken(); break; case (byte)ExprToken.DelegateFunctionCmpNE: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new IntToBoolToken(); } else { tokenItem = new DelegateFunctionCmpNEToken(); } break; case (byte)ExprToken.InstanceDelegate: tokenItem = new InstanceDelegateToken(); break; case (byte)ExprToken.EatString: tokenItem = new EatStringToken(); break; case (byte)ExprToken.New: tokenItem = new NewToken(); break; case (byte)ExprToken.FunctionEnd: // case (byte)ExprToken.DynArrayFind: if( Buffer.Version < 300 ) { tokenItem = new EndOfScriptToken(); } else { tokenItem = new DynamicArrayFindToken(); } break; case (byte)ExprToken.VarInt: case (byte)ExprToken.VarFloat: case (byte)ExprToken.VarByte: case (byte)ExprToken.VarBool: //case (byte)ExprToken.VarObject: // See UndefinedVariable if (_Container.Package.Build == UnrealPackage.GameBuild.BuildName.Mass_Effect) { // Don't know what this op code is for.... just know it takes two bytes. tokenItem = new MassEffectUnknownToken(); } else { tokenItem = new DynamicVariableToken(); } break; #endregion #region Constants case (byte)ExprToken.IntConst: tokenItem = new IntConstToken(); break; case (byte)ExprToken.ByteConst: tokenItem = new ByteConstToken(); break; case (byte)ExprToken.IntConstByte: tokenItem = new IntConstByteToken(); break; case (byte)ExprToken.FloatConst: tokenItem = new FloatConstToken(); break; // ClassConst? case (byte)ExprToken.ObjectConst: tokenItem = new ObjectConstToken(); break; case (byte)ExprToken.NameConst: tokenItem = new NameConstToken(); break; case (byte)ExprToken.StringConst: tokenItem = new StringConstToken(); break; case (byte)ExprToken.UniStringConst: tokenItem = new UniStringConstToken(); break; case (byte)ExprToken.RotatorConst: tokenItem = new RotatorConstToken(); break; case (byte)ExprToken.VectorConst: tokenItem = new VectorConstToken(); break; #endregion #region Functions case (byte)ExprToken.FinalFunction: tokenItem = new FinalFunctionToken(); break; case (byte)ExprToken.VirtualFunction: tokenItem = new VirtualFunctionToken(); break; case (byte)ExprToken.GlobalFunction: tokenItem = new GlobalFunctionToken(); break; // Redefined, can be FloatToByte!(UE1) case (byte)ExprToken.DelegateFunction: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new FloatToByteToken(); } else { tokenItem = new DelegateFunctionToken(); } break; #endregion #region Arrays case (byte)ExprToken.ArrayElement: tokenItem = new ArrayElementToken(); break; case (byte)ExprToken.DynArrayElement: tokenItem = new DynamicArrayElementToken(); break; case (byte)ExprToken.DynArrayLength: tokenItem = new DynamicArrayLengthToken(); break; case (byte)ExprToken.DynArrayInsert: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new BoolToByteToken(); } else { tokenItem = new DynamicArrayInsertToken(); } break; case (byte)ExprToken.DynArrayInsertItem: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new VectorToStringToken(); } else { tokenItem = new DynamicArrayInsertItemToken(); } break; // Redefined, can be BoolToInt!(UE1) case (byte)ExprToken.DynArrayRemove: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new BoolToIntToken(); } else { tokenItem = new DynamicArrayRemoveToken(); } break; case (byte)ExprToken.DynArrayRemoveItem: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new NameToStringToken(); } else { tokenItem = new DynamicArrayRemoveItemToken(); } break; case (byte)ExprToken.DynArrayAdd: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new FloatToStringToken(); } else { tokenItem = new DynamicArrayAddToken(); } break; case (byte)ExprToken.DynArrayAddItem: if( Buffer.Version < PrimitveCastVersion ) { tokenItem = new ObjectToStringToken(); } else { tokenItem = new DynamicArrayAddItemToken(); } break; case (byte)ExprToken.DynArraySort: tokenItem = new DynamicArraySortToken(); break; // See FunctionEnd and Eval /*case (byte)ExprToken.DynArrayFind: break; case (byte)ExprToken.DynArrayFindStruct: break;*/ #endregion default: { #region Casts if( Buffer.Version < PrimitveCastVersion ) { // No other token was matched. Check if it matches any of the CastTokens // We don't just use PrimitiveCast detection due compatible with UE1 games tokenItem = DeserializeCastToken( tokenCode ); } break; #endregion } } if( tokenItem == null ) { tokenItem = new UnknownExprToken(); } Console.Out.WriteLine("Token is: "+ tokenCode.ToString("X") + " type: " + tokenItem.GetType().Name + " pos: " + Buffer.Position); tokenItem.Decompiler = this; tokenItem.RepresentToken = tokenCode; tokenItem.Position = tokenPosition;// + (uint)Owner._ScriptOffset; tokenItem.StoragePosition = (uint)Buffer.Position - (uint)_Container.ScriptOffset - 1; // IMPORTANT:Add before deserialize, due the possibility that the tokenitem might deserialize other tokens as well. DeserializedTokens.Add( tokenItem ); tokenItem.Deserialize( Buffer ); // Includes all sizes of followed tokens as well! e.g. i = i + 1; is summed here but not i = i +1; (not>>)i ++; tokenItem.Size = (ushort)(CodePosition - tokenPosition); tokenItem.StorageSize = (ushort)((uint)Buffer.Position - (uint)_Container.ScriptOffset - tokenItem.StoragePosition); tokenItem.PostDeserialized(); return tokenItem; }
public virtual IQueryable ApplyTo(IQueryable query, ODataQuerySettings querySettings) { if (query == null) { throw Error.ArgumentNull("query"); } if (querySettings == null) { throw Error.ArgumentNull("querySettings"); } IQueryable result = query; // First apply $apply // Section 3.15 of the spec http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/cs01/odata-data-aggregation-ext-v4.0-cs01.html#_Toc378326311 if (IsAvailableODataQueryOption(Apply, AllowedQueryOptions.Apply)) { result = Apply.ApplyTo(result, querySettings); InternalRequest.Context.ApplyClause = Apply.ApplyClause; this.Context.ElementClrType = Apply.ResultClrType; } // Construct the actual query and apply them in the following order: filter, orderby, skip, top if (IsAvailableODataQueryOption(Filter, AllowedQueryOptions.Filter)) { result = Filter.ApplyTo(result, querySettings); } if (IsAvailableODataQueryOption(Count, AllowedQueryOptions.Count)) { if (InternalRequest.Context.TotalCountFunc == null) { Func <long> countFunc = Count.GetEntityCountFunc(result); if (countFunc != null) { InternalRequest.Context.TotalCountFunc = countFunc; } } if (InternalRequest.IsCountRequest()) { return(result); } } OrderByQueryOption orderBy = OrderBy; // $skip or $top require a stable sort for predictable results. // Result limits require a stable sort to be able to generate a next page link. // If either is present in the query and we have permission, // generate an $orderby that will produce a stable sort. if (querySettings.EnsureStableOrdering && (IsAvailableODataQueryOption(Skip, AllowedQueryOptions.Skip) || IsAvailableODataQueryOption(Top, AllowedQueryOptions.Top) || querySettings.PageSize.HasValue)) { // If there is no OrderBy present, we manufacture a default. // If an OrderBy is already present, we add any missing // properties necessary to make a stable sort. // Instead of failing early here if we cannot generate the OrderBy, // let the IQueryable backend fail (if it has to). orderBy = GenerateStableOrder(); } if (IsAvailableODataQueryOption(orderBy, AllowedQueryOptions.OrderBy)) { result = orderBy.ApplyTo(result, querySettings); } if (IsAvailableODataQueryOption(SkipToken, AllowedQueryOptions.SkipToken)) { result = SkipToken.ApplyTo(result, querySettings, this); } AddAutoSelectExpandProperties(); if (SelectExpand != null) { var tempResult = ApplySelectExpand(result, querySettings); if (tempResult != default(IQueryable)) { result = tempResult; } } if (IsAvailableODataQueryOption(Skip, AllowedQueryOptions.Skip)) { result = Skip.ApplyTo(result, querySettings); } if (IsAvailableODataQueryOption(Top, AllowedQueryOptions.Top)) { result = Top.ApplyTo(result, querySettings); } result = ApplyPaging(result, querySettings); return(result); }
/// <summary> /// Serializes the state of this cmdlet to a <see cref="Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonNode" /> object. /// </summary> /// <param name="container">The <see cref="Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonObject"/> container to serialize this object into. If the caller /// passes in <c>null</c>, a new instance will be created and returned to the caller.</param> /// <param name="serializationMode">Allows the caller to choose the depth of the serialization. See <see cref="Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.SerializationMode"/>.</param> /// <returns> /// a serialized instance of <see cref="GetAzConfigurationStore_SubscriptionIdSkipToken" /> as a <see cref="Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonNode" /// />. /// </returns> public Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonNode ToJson(Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonObject container, Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.SerializationMode serializationMode) { // serialization method container = container ?? new Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonObject(); AddIf(null != (((object)SubscriptionId)?.ToString()) ? (Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonNode) new Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonString(SubscriptionId.ToString()) : null, "SubscriptionId", container.Add); AddIf(null != (((object)SkipToken)?.ToString()) ? (Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonNode) new Microsoft.Azure.PowerShell.Cmdlets.AppConfiguration.Runtime.Json.JsonString(SkipToken.ToString()) : null, "SkipToken", container.Add); return(container); }
/// <summary> /// Serializes the state of this cmdlet to a <see cref="Microsoft.Azure.AzConfig.Runtime.Json.JsonNode" /> object. /// </summary> /// <param name="container">The <see cref="Microsoft.Azure.AzConfig.Runtime.Json.JsonObject"/> container to serialize this object into. If the caller /// passes in <c>null</c>, a new instance will be created and returned to the caller.</param> /// <param name="serializationMode">Allows the caller to choose the depth of the serialization. See <see cref="Microsoft.Azure.AzConfig.Runtime.SerializationMode"/>.</param> /// <returns> /// a serialized instance of <see cref="GetAzConfigurationStore_ResourceGroupResourceGroupNameSkipToken" /> as a <see cref="Microsoft.Azure.AzConfig.Runtime.Json.JsonNode" /// />. /// </returns> public Microsoft.Azure.AzConfig.Runtime.Json.JsonNode ToJson(Microsoft.Azure.AzConfig.Runtime.Json.JsonObject container, Microsoft.Azure.AzConfig.Runtime.SerializationMode serializationMode) { // serialization method container = container ?? new Microsoft.Azure.AzConfig.Runtime.Json.JsonObject(); AddIf(null != (((object)SubscriptionId)?.ToString()) ? (Microsoft.Azure.AzConfig.Runtime.Json.JsonNode) new Microsoft.Azure.AzConfig.Runtime.Json.JsonString(SubscriptionId.ToString()) : null, "SubscriptionId", container.Add); AddIf(null != (((object)ResourceGroupName)?.ToString()) ? (Microsoft.Azure.AzConfig.Runtime.Json.JsonNode) new Microsoft.Azure.AzConfig.Runtime.Json.JsonString(ResourceGroupName.ToString()) : null, "ResourceGroupName", container.Add); AddIf(null != (((object)SkipToken)?.ToString()) ? (Microsoft.Azure.AzConfig.Runtime.Json.JsonNode) new Microsoft.Azure.AzConfig.Runtime.Json.JsonString(SkipToken.ToString()) : null, "SkipToken", container.Add); return(container); }
/// <summary> /// Asks the user for the users that should participate in the synchronization. /// </summary> /// <param name="configuration">The configuration of the synchronization process.</param> private static async Task AskForAzureActiveDirectoryUsersAsync(Configuration configuration) { System.Console.WriteLine("4. Azure Active Directory - Select Users"); System.Console.WriteLine("Please select the users that should participate in the synchronization. Leave the input blank if all users should be synchronized; otherwise, provide the numbers of the selection separated by commas."); System.Console.WriteLine(); // Gets the users from the API List <string> userIds = new List <string>(); try { // Downloads all users System.Console.WriteLine("Getting users from Azure Active Directory..."); using (ExchangeService exchangeService = new ExchangeService(configuration.AzureActiveDirectoryTenant, configuration.AzureClientId, configuration.AzureClientSecret)) { List <User> users = new List <User>(); SkipToken skipToken = null; do { UserList userList = await exchangeService.GetUsersAsync(skipToken); skipToken = userList.SkipToken; users.AddRange(userList); }while (skipToken != null); // Prints out the users System.Console.WriteLine(); for (int i = 1; i <= users.Count(); i++) { System.Console.WriteLine($"[{i}]\t{users.ElementAt(i - 1).UserPrincipalName}"); } // Gets the list of users System.Console.WriteLine(); do { System.Console.Write("Users: "); string usersString = System.Console.ReadLine(); // Checks whether nothing has been provided if (string.IsNullOrWhiteSpace(usersString)) { userIds = null; break; } // Cycles through the numbers foreach (string userString in usersString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList()) { if (!int.TryParse(userString, out int number) || number < 1 || number > users.Count()) { System.Console.WriteLine("Please provide a valid list of users."); System.Console.WriteLine(); continue; } // Adds the ID of the category userIds.Add(users.ElementAt(number - 1).Id); } }while (userIds != null && !userIds.Any()); } } catch (Exception e) { System.Console.WriteLine($"Users could not be retrieved: {e.Message}"); System.Console.WriteLine("Please reenter the Azure application credentials."); System.Console.WriteLine(); System.Console.WriteLine(); // Redirects the user to the third step configuration.AzureActiveDirectoryTenant = null; configuration.AzureClientId = null; configuration.AzureClientSecret = null; await Program.AskForAzureCredentialsAsync(configuration); await Program.AskForAzureActiveDirectoryUsersAsync(configuration); return; } // Stores the user IDs configuration.AzureActiveDirectoryUsers = userIds; System.Console.WriteLine(); System.Console.WriteLine(); }