/// <summary>
 /// <para>/ Returns info about a configuration value.  Returns false if the value does not exist.</para>
 /// <para>/ pOutNextValue can be used to iterate through all of the known configuration values.</para>
 /// <para>/ (Use GetFirstConfigValue() to begin the iteration, will be k_ESteamNetworkingConfig_Invalid on the last value)</para>
 /// <para>/ Any of the output parameters can be NULL if you do not need that information.</para>
 /// <para>/</para>
 /// <para>/ See k_ESteamNetworkingConfig_EnumerateDevVars for some more info about "dev" variables,</para>
 /// <para>/ which are usually excluded from the set of variables enumerated using this function.</para>
 /// </summary>
 public static bool GetConfigValueInfo(ESteamNetworkingConfigValue eValue, IntPtr pOutName, out ESteamNetworkingConfigDataType pOutDataType, out ESteamNetworkingConfigScope pOutScope, out ESteamNetworkingConfigValue pOutNextValue)
 {
     InteropHelp.TestIfAvailableClient();
     return(NativeMethods.ISteamNetworkingUtils_GetConfigValueInfo(CSteamAPIContext.GetSteamNetworkingUtils(), eValue, pOutName, out pOutDataType, out pOutScope, out pOutNextValue));
 }
 /// <summary>
 /// <para>/ Set a configuration value, using a struct to pass the value.</para>
 /// <para>/ (This is just a convenience shortcut; see below for the implementation and</para>
 /// <para>/ a little insight into how SteamNetworkingConfigValue_t is used when</para>
 /// <para>/ setting config options during listen socket and connection creation.)</para>
 /// <para>/ Get a configuration value.</para>
 /// <para>/ - eValue: which value to fetch</para>
 /// <para>/ - eScopeType: query setting on what type of object</para>
 /// <para>/ - eScopeArg: the object to query the setting for</para>
 /// <para>/ - pOutDataType: If non-NULL, the data type of the value is returned.</para>
 /// <para>/ - pResult: Where to put the result.  Pass NULL to query the required buffer size.  (k_ESteamNetworkingGetConfigValue_BufferTooSmall will be returned.)</para>
 /// <para>/ - cbResult: IN: the size of your buffer.  OUT: the number of bytes filled in or required.</para>
 /// </summary>
 public static ESteamNetworkingGetConfigValueResult GetConfigValue(ESteamNetworkingConfigValue eValue, ESteamNetworkingConfigScope eScopeType, IntPtr scopeObj, out ESteamNetworkingConfigDataType pOutDataType, IntPtr pResult, out ulong cbResult)
 {
     InteropHelp.TestIfAvailableClient();
     return(NativeMethods.ISteamNetworkingUtils_GetConfigValue(CSteamAPIContext.GetSteamNetworkingUtils(), eValue, eScopeType, scopeObj, out pOutDataType, pResult, out cbResult));
 }
 /// <summary>
 /// <para>/ Iterate the list of all configuration values in the current environment that it might</para>
 /// <para>/ be possible to display or edit using a generic UI.  To get the first iterable value,</para>
 /// <para>/ pass k_ESteamNetworkingConfig_Invalid.  Returns k_ESteamNetworkingConfig_Invalid</para>
 /// <para>/ to signal end of list.</para>
 /// <para>/</para>
 /// <para>/ The bEnumerateDevVars argument can be used to include "dev" vars.  These are vars that</para>
 /// <para>/ are recommended to only be editable in "debug" or "dev" mode and typically should not be</para>
 /// <para>/ shown in a retail environment where a malicious local user might use this to cheat.</para>
 /// </summary>
 public static ESteamNetworkingConfigValue IterateGenericEditableConfigValues(ESteamNetworkingConfigValue eCurrent, bool bEnumerateDevVars)
 {
     InteropHelp.TestIfAvailableClient();
     return(NativeMethods.ISteamNetworkingUtils_IterateGenericEditableConfigValues(CSteamAPIContext.GetSteamNetworkingUtils(), eCurrent, bEnumerateDevVars));
 }
 /// <summary>
 /// <para> Set and get configuration values, see ESteamNetworkingConfigValue for individual descriptions.</para>
 /// <para> Shortcuts for common cases.  (Implemented as inline functions below)</para>
 /// <para>/ Set a configuration value.</para>
 /// <para>/ - eValue: which value is being set</para>
 /// <para>/ - eScope: Onto what type of object are you applying the setting?</para>
 /// <para>/ - scopeArg: Which object you want to change?  (Ignored for global scope).  E.g. connection handle, listen socket handle, interface pointer, etc.</para>
 /// <para>/ - eDataType: What type of data is in the buffer at pValue?  This must match the type of the variable exactly!</para>
 /// <para>/ - pArg: Value to set it to.  You can pass NULL to remove a non-global setting at this scope,</para>
 /// <para>/   causing the value for that object to use global defaults.  Or at global scope, passing NULL</para>
 /// <para>/   will reset any custom value and restore it to the system default.</para>
 /// <para>/   NOTE: When setting callback functions, do not pass the function pointer directly.</para>
 /// <para>/   Your argument should be a pointer to a function pointer.</para>
 /// </summary>
 public static bool SetConfigValue(ESteamNetworkingConfigValue eValue, ESteamNetworkingConfigScope eScopeType, IntPtr scopeObj, ESteamNetworkingConfigDataType eDataType, IntPtr pArg)
 {
     InteropHelp.TestIfAvailableClient();
     return(NativeMethods.ISteamNetworkingUtils_SetConfigValue(CSteamAPIContext.GetSteamNetworkingUtils(), eValue, eScopeType, scopeObj, eDataType, pArg));
 }
 /// <summary>
 /// <para>/ Get info about a configuration value.  Returns the name of the value,</para>
 /// <para>/ or NULL if the value doesn't exist.  Other output parameters can be NULL</para>
 /// <para>/ if you do not need them.</para>
 /// </summary>
 public static string GetConfigValueInfo(ESteamNetworkingConfigValue eValue, out ESteamNetworkingConfigDataType pOutDataType, out ESteamNetworkingConfigScope pOutScope)
 {
     InteropHelp.TestIfAvailableClient();
     return(InteropHelp.PtrToStringUTF8(NativeMethods.ISteamNetworkingUtils_GetConfigValueInfo(CSteamAPIContext.GetSteamNetworkingUtils(), eValue, out pOutDataType, out pOutScope)));
 }