diff --git a/Launcher/Form1.Designer.cs b/Launcher/Form1.Designer.cs index 532304617..e8f681919 100644 --- a/Launcher/Form1.Designer.cs +++ b/Launcher/Form1.Designer.cs @@ -37,6 +37,12 @@ this.contentPackageBox = new System.Windows.Forms.ComboBox(); this.label2 = new System.Windows.Forms.Label(); this.packageManagerButton = new System.Windows.Forms.Button(); + this.label3 = new System.Windows.Forms.Label(); + this.autoUpdateCheckBox = new System.Windows.Forms.CheckBox(); + this.progressBar = new System.Windows.Forms.ProgressBar(); + this.patchNoteBox = new System.Windows.Forms.TextBox(); + this.updateLabel = new System.Windows.Forms.Label(); + this.downloadButton = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // @@ -70,7 +76,7 @@ // this.resolutionBox.AllowDrop = true; this.resolutionBox.FormattingEnabled = true; - this.resolutionBox.Location = new System.Drawing.Point(57, 207); + this.resolutionBox.Location = new System.Drawing.Point(369, 236); this.resolutionBox.Name = "resolutionBox"; this.resolutionBox.Size = new System.Drawing.Size(212, 21); this.resolutionBox.TabIndex = 2; @@ -80,7 +86,7 @@ this.label1.AutoSize = true; this.label1.BackColor = System.Drawing.Color.Transparent; this.label1.ForeColor = System.Drawing.SystemColors.Window; - this.label1.Location = new System.Drawing.Point(54, 191); + this.label1.Location = new System.Drawing.Point(366, 220); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(60, 13); this.label1.TabIndex = 3; @@ -91,7 +97,7 @@ this.fullscreenBox.AutoSize = true; this.fullscreenBox.BackColor = System.Drawing.Color.Transparent; this.fullscreenBox.ForeColor = System.Drawing.SystemColors.Window; - this.fullscreenBox.Location = new System.Drawing.Point(57, 252); + this.fullscreenBox.Location = new System.Drawing.Point(369, 281); this.fullscreenBox.Name = "fullscreenBox"; this.fullscreenBox.Size = new System.Drawing.Size(74, 17); this.fullscreenBox.TabIndex = 4; @@ -101,7 +107,7 @@ // contentPackageBox // this.contentPackageBox.FormattingEnabled = true; - this.contentPackageBox.Location = new System.Drawing.Point(368, 207); + this.contentPackageBox.Location = new System.Drawing.Point(369, 138); this.contentPackageBox.Name = "contentPackageBox"; this.contentPackageBox.Size = new System.Drawing.Size(212, 21); this.contentPackageBox.TabIndex = 5; @@ -112,7 +118,7 @@ this.label2.AutoSize = true; this.label2.BackColor = System.Drawing.Color.Transparent; this.label2.ForeColor = System.Drawing.SystemColors.Window; - this.label2.Location = new System.Drawing.Point(365, 191); + this.label2.Location = new System.Drawing.Point(366, 122); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(92, 13); this.label2.TabIndex = 6; @@ -123,7 +129,7 @@ this.packageManagerButton.BackColor = System.Drawing.Color.OrangeRed; this.packageManagerButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.packageManagerButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.packageManagerButton.Location = new System.Drawing.Point(368, 234); + this.packageManagerButton.Location = new System.Drawing.Point(369, 165); this.packageManagerButton.Name = "packageManagerButton"; this.packageManagerButton.Size = new System.Drawing.Size(120, 35); this.packageManagerButton.TabIndex = 7; @@ -131,6 +137,71 @@ this.packageManagerButton.UseVisualStyleBackColor = false; this.packageManagerButton.Click += new System.EventHandler(this.packageManagerButton_Click); // + // label3 + // + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.Color.Transparent; + this.label3.ForeColor = System.Drawing.SystemColors.ControlLightLight; + this.label3.Location = new System.Drawing.Point(266, 78); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(86, 13); + this.label3.TabIndex = 8; + this.label3.Text = "Installed version:"; + // + // autoUpdateCheckBox + // + this.autoUpdateCheckBox.AutoSize = true; + this.autoUpdateCheckBox.BackColor = System.Drawing.Color.Transparent; + this.autoUpdateCheckBox.ForeColor = System.Drawing.SystemColors.Window; + this.autoUpdateCheckBox.Location = new System.Drawing.Point(47, 122); + this.autoUpdateCheckBox.Name = "autoUpdateCheckBox"; + this.autoUpdateCheckBox.Size = new System.Drawing.Size(177, 17); + this.autoUpdateCheckBox.TabIndex = 9; + this.autoUpdateCheckBox.Text = "Automatically check for updates"; + this.autoUpdateCheckBox.UseVisualStyleBackColor = false; + // + // progressBar + // + this.progressBar.Location = new System.Drawing.Point(129, 407); + this.progressBar.Name = "progressBar"; + this.progressBar.Size = new System.Drawing.Size(207, 30); + this.progressBar.TabIndex = 10; + // + // patchNoteBox + // + this.patchNoteBox.AcceptsReturn = true; + this.patchNoteBox.Location = new System.Drawing.Point(47, 145); + this.patchNoteBox.Multiline = true; + this.patchNoteBox.Name = "patchNoteBox"; + this.patchNoteBox.ReadOnly = true; + this.patchNoteBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical; + this.patchNoteBox.Size = new System.Drawing.Size(289, 226); + this.patchNoteBox.TabIndex = 11; + // + // updateLabel + // + this.updateLabel.AutoSize = true; + this.updateLabel.BackColor = System.Drawing.Color.Transparent; + this.updateLabel.ForeColor = System.Drawing.SystemColors.ButtonHighlight; + this.updateLabel.Location = new System.Drawing.Point(44, 383); + this.updateLabel.Name = "updateLabel"; + this.updateLabel.Size = new System.Drawing.Size(98, 13); + this.updateLabel.TabIndex = 12; + this.updateLabel.Text = "New update found!"; + // + // downloadButton + // + this.downloadButton.BackColor = System.Drawing.Color.OrangeRed; + this.downloadButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.downloadButton.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.downloadButton.Location = new System.Drawing.Point(47, 407); + this.downloadButton.Name = "downloadButton"; + this.downloadButton.Size = new System.Drawing.Size(76, 30); + this.downloadButton.TabIndex = 13; + this.downloadButton.Text = "Download"; + this.downloadButton.UseVisualStyleBackColor = false; + this.downloadButton.Click += new System.EventHandler(this.downloadButton_Click); + // // LauncherMain // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -139,6 +210,12 @@ this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); this.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Stretch; this.ClientSize = new System.Drawing.Size(628, 453); + this.Controls.Add(this.downloadButton); + this.Controls.Add(this.updateLabel); + this.Controls.Add(this.patchNoteBox); + this.Controls.Add(this.progressBar); + this.Controls.Add(this.autoUpdateCheckBox); + this.Controls.Add(this.label3); this.Controls.Add(this.packageManagerButton); this.Controls.Add(this.label2); this.Controls.Add(this.contentPackageBox); @@ -166,6 +243,12 @@ private System.Windows.Forms.ComboBox contentPackageBox; private System.Windows.Forms.Label label2; private System.Windows.Forms.Button packageManagerButton; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.CheckBox autoUpdateCheckBox; + private System.Windows.Forms.ProgressBar progressBar; + private System.Windows.Forms.TextBox patchNoteBox; + private System.Windows.Forms.Label updateLabel; + private System.Windows.Forms.Button downloadButton; } } diff --git a/Launcher/Form1.cs b/Launcher/Form1.cs index 9a92d6ccc..bca24cdc9 100644 --- a/Launcher/Form1.cs +++ b/Launcher/Form1.cs @@ -1,4 +1,5 @@ -using Subsurface; +using RestSharp; +using Subsurface; using System; using System.Collections.Generic; using System.ComponentModel; @@ -7,6 +8,8 @@ using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; +using System.Net; +using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; @@ -17,9 +20,13 @@ namespace Launcher { public partial class LauncherMain : Form { + string version = AssemblyName.GetAssemblyName("subsurface.exe").Version.ToString(); + private const string configPath = "config.xml"; private Subsurface.GameSettings settings; + private string latestVersionFileList, latestVersionFolder; + [DllImport("user32.dll")] public static extern bool EnumDisplaySettings( string deviceName, int modeNum, ref DEVMODE devMode); @@ -35,6 +42,12 @@ namespace Launcher set { settings.FullScreenEnabled = value; } } + public bool AutoCheckUpdates + { + get { return settings.AutoCheckUpdates; } + set { settings.AutoCheckUpdates = value; } + } + //private GraphicsMode selectedMode; public LauncherMain() @@ -80,6 +93,9 @@ namespace Launcher fullscreenBox.DataBindings.Add("Checked", this, "FullscreenEnabled"); + autoUpdateCheckBox.DataBindings.Add("Checked", this, "AutoCheckUpdates"); + + if (settings.SelectedContentPackage == null) { if (contentPackageBox.Items.Count > 0) contentPackageBox.SelectedItem = contentPackageBox.Items[0]; @@ -89,6 +105,15 @@ namespace Launcher contentPackageBox.SelectedItem = settings.SelectedContentPackage; } + progressBar.Visible = false; + updateLabel.Visible = false; + downloadButton.Visible = false; + + if (settings.AutoCheckUpdates) + { + CheckForUpdates(); + } + //resolutionBox.SelectedItem = selectedMode; } @@ -122,6 +147,172 @@ namespace Launcher settings.SelectedContentPackage = comboBox.SelectedItem as ContentPackage; } + + private bool CheckForUpdates() + { + patchNoteBox.Text = "Checking for updates..."; + + XDocument doc = null; + + try + { + doc = FetchXML("versioninfo.xml"); + } + + catch (Exception e) + { + patchNoteBox.Text = "Error while checking for updates: " + e.Message; + return false; + } + + CheckUpdateXML(doc); + + return true; + } + + private XDocument FetchXML(string fileName) + { + var client = new RestClient(settings.MasterServerUrl); + + var request = new RestRequest(fileName, Method.GET); + + IRestResponse response = client.Execute(request); + + if (response.ResponseStatus!= ResponseStatus.Completed) return null; + if (response.StatusCode != HttpStatusCode.OK) return null; + + string xml = response.Content; + + string _byteOrderMarkUtf8 = Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()); + if (xml.StartsWith(_byteOrderMarkUtf8)) + { + xml = xml.Remove(0, _byteOrderMarkUtf8.Length); + } + + return XDocument.Parse(xml); + } + + private bool CheckUpdateXML(XDocument doc) + { + if (doc.Root==null) + { + patchNoteBox.Text = "Error while checking for updates: could not parse update info"; + return false; + } + + progressBar.Visible = true; + downloadButton.Visible = true; + updateLabel.Visible = true; + + string latestVersion = ToolBox.GetAttributeString(doc.Root, "latestversion", ""); + latestVersionFolder = ToolBox.GetAttributeString(doc.Root, "latestversionfolder", ""); + latestVersionFileList = ToolBox.GetAttributeString(doc.Root, "latestversionfilelist", ""); + + if (latestVersion == version) + { + patchNoteBox.Text = "Game is up to date!"; + return false; + } + + updateLabel.Text = "New update found! (" + latestVersion + ")"; + + XElement patchNotes = doc.Root.Element("patchnotes"); + + if (patchNotes!=null) + { + StringBuilder sb = new StringBuilder(); + + foreach (XElement patchNote in patchNotes.Elements()) + { + string patchNumber = ToolBox.GetAttributeString(patchNote, "version", ""); + + //read the patch notes until we reach the user's version + if (patchNumber == version) break; + + sb.AppendLine(ToolBox.ElementInnerText(patchNote)); + sb.AppendLine("*************************************\n"); + } + + patchNoteBox.Text = sb.ToString(); + } + + return true; + } + + private void downloadButton_Click(object sender, EventArgs e) + { + if (string.IsNullOrWhiteSpace(latestVersionFolder)) return; + + Button senderButton = sender as Button; + senderButton.Enabled = false; + + XDocument doc = null; + + try + { + doc = FetchXML("filelist.xml"); + } + + catch (Exception exception) + { + patchNoteBox.Text = "Error while checking for updates: " + exception.Message; + return; + } + + filesToDownload = UpdaterUtil.GetRequiredFiles(doc); + + string dir = Directory.GetCurrentDirectory(); + + filesToDownloadCount = filesToDownload.Count; + if (filesToDownloadCount>0) + { + WebClient webClient = new WebClient(); + webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); + //webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); + + webClient.DownloadFileAsync(new Uri(latestVersionFolder + filesToDownload[0]), dir); + } + } + + private List filesToDownload; + + private int filesDownloaded, filesToDownloadCount; + + private void Completed(object sender, AsyncCompletedEventArgs e) + { + filesDownloaded++; + progressBar.Value = (int)(((float)filesDownloaded / (float)filesToDownloadCount) * 100.0f);//e.ProgressPercentage; + + filesToDownload.RemoveAt(0); + + if (filesToDownload.Count==0) + { + progressBar.Visible = false; + downloadButton.Visible = false; + updateLabel.Visible = false; + + MessageBox.Show("Download completed!"); + return; + } + + updateLabel.Text = "Downloading file "+ filesDownloaded + "/" + filesToDownloadCount + " ("+ filesToDownload[0] + ")"; + + WebClient webClient = new WebClient(); + webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); + //webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); + + string dir = Directory.GetCurrentDirectory(); + + string fileDir = Path.GetDirectoryName(filesToDownload[0]); + if (!string.IsNullOrWhiteSpace(fileDir) && !Directory.Exists(fileDir)) + { + Directory.CreateDirectory(fileDir); + } + + webClient.DownloadFileAsync(new Uri(latestVersionFolder + filesToDownload[0]), @dir + "\\" + filesToDownload[0]); + + } + } public class GraphicsMode @@ -182,7 +373,6 @@ namespace Launcher public int dmReserved2; public int dmPanningWidth; public int dmPanningHeight; - } } diff --git a/Launcher/Form1.resx b/Launcher/Form1.resx index e6caebe5f..6d55b84ba 100644 --- a/Launcher/Form1.resx +++ b/Launcher/Form1.resx @@ -121,2777 +121,3563 @@ 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 + gg== iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1 - MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACw4AAAsOAUC+4UEAAAveSURBVHhe7d3vch23DcbhvZz4 + MAAA6mAAADqYAAAXb5JfxUYAAAAJcEhZcwAACwwAAAsMAT9AIsgAAAveSURBVHhe7d3vch23DcbhvZz4 v2Q7tmQnjpO2Se//hrYEQ7AvcbiS26/v78MTkgCI3XMyg3FmpPh48eLhBODpePny8QTgiQEAGDtevfpy AvB0vH799QTg6Xjz5usJwFMbAL+0DQBHx9u3v54APB3v3n07AXg67u6+nQA8Hff3v50APB3377+f7++/ n7HelzXjsc6apLFYh6xVmr+5r/G6l9isbbH3QWNDniOfdVqf99PlfYl1US/n7DvPsUps9skardf9heX5 diff --git a/Launcher/Launcher.csproj b/Launcher/Launcher.csproj index 0a2113637..a19de67a6 100644 --- a/Launcher/Launcher.csproj +++ b/Launcher/Launcher.csproj @@ -38,6 +38,10 @@ Icon.ico + + False + ..\packages\RestSharp.105.2.3\lib\net45\RestSharp.dll + @@ -67,6 +71,7 @@ Form1.cs + Designer PackageManager.cs @@ -80,6 +85,7 @@ True Resources.resx + SettingsSingleFileGenerator Settings.Designer.cs diff --git a/Launcher/packages.config b/Launcher/packages.config new file mode 100644 index 000000000..a63cb4deb --- /dev/null +++ b/Launcher/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Launcher2/Content/Content.mgcb b/Launcher2/Content/Content.mgcb new file mode 100644 index 000000000..ccb6d33b2 --- /dev/null +++ b/Launcher2/Content/Content.mgcb @@ -0,0 +1,15 @@ + +#----------------------------- Global Properties ----------------------------# + +/outputDir:bin/Windows +/intermediateDir:obj/Windows +/platform:Windows +/config: +/profile:Reach +/compress:False + +#-------------------------------- References --------------------------------# + + +#---------------------------------- Content ---------------------------------# + diff --git a/Launcher2/Icon.ico b/Launcher2/Icon.ico new file mode 100644 index 000000000..7d9dec187 Binary files /dev/null and b/Launcher2/Icon.ico differ diff --git a/Launcher2/Launcher2.csproj b/Launcher2/Launcher2.csproj new file mode 100644 index 000000000..3aa5b4d02 --- /dev/null +++ b/Launcher2/Launcher2.csproj @@ -0,0 +1,81 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {251AAFE1-F24B-4837-9128-9D04FCBFD528} + WinExe + Properties + Launcher2 + Launcher2 + 512 + Windows + + + + + x86 + true + full + false + ..\Subsurface\bin\Windows\Debug\ + DEBUG;TRACE;WINDOWS + prompt + 4 + + + x86 + pdbonly + true + bin\Windows\Release\ + TRACE;WINDOWS + prompt + 4 + + + Icon.ico + + + + + + + + + $(MSBuildProgramFiles32)\MonoGame\v3.0\Assemblies\Windows\MonoGame.Framework.dll + + + False + ..\packages\RestSharp.105.2.3\lib\net4\RestSharp.dll + + + + + + + + + + + + + + {008c0f83-e914-4966-9135-ea885059edd8} + Subsurface + + + + + + + + + \ No newline at end of file diff --git a/Launcher2/LauncherMain.cs b/Launcher2/LauncherMain.cs new file mode 100644 index 000000000..ae2e27d2e --- /dev/null +++ b/Launcher2/LauncherMain.cs @@ -0,0 +1,486 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Subsurface; +using System.Collections.Generic; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Xml.Linq; +using System.Linq; +using System.Diagnostics; +using System.IO; +using System; +using System.Net; +using System.ComponentModel; +using RestSharp; +using System.Text; + +namespace Launcher2 +{ + /// + /// This is the main type for your game + /// + public class LauncherMain : Game + { + string version = AssemblyName.GetAssemblyName("subsurface.exe").Version.ToString(); + + private const string configPath = "config.xml"; + private Subsurface.GameSettings settings; + + private string latestVersionFileList, latestVersionFolder; + + private List supportedModes; + + private GUIDropDown resolutionDD, contentPackageDD; + + private GUITextBlock updateInfoText; + private GUIListBox updateInfoBox; + private GUIProgressBar progressBar; + private GUIButton downloadButton; + + public bool FullScreenEnabled + { + get { return settings.FullScreenEnabled; } + set { settings.FullScreenEnabled = value; } + } + + public bool AutoCheckUpdates + { + get { return settings.AutoCheckUpdates; } + set { settings.AutoCheckUpdates = value; } + } + + Texture2D backgroundTexture, titleTexture; + + GraphicsDeviceManager graphics; + SpriteBatch spriteBatch; + + int graphicsWidth, graphicsHeight; + + GUIFrame guiRoot; + + public LauncherMain() + : base() + { + graphics = new GraphicsDeviceManager(this); + graphics.PreferredBackBufferWidth = 640; + graphics.PreferredBackBufferHeight = 360; + + IsMouseVisible = true; + + supportedModes = new List(); + + Content.RootDirectory = "Content"; + } + + protected override void Initialize() + { + // TODO: Add your initialization logic here + + + ContentPackage.LoadAll(ContentPackage.Folder); + settings = new GameSettings(configPath); + + base.Initialize(); + } + + protected override void LoadContent() + { + graphicsWidth = GraphicsDevice.Viewport.Width; + graphicsHeight = GraphicsDevice.Viewport.Height; + + TextureLoader.Init(GraphicsDevice); + + GUI.Init(Content); + + // Create a new SpriteBatch, which can be used to draw textures. + spriteBatch = new SpriteBatch(GraphicsDevice); + + GUI.LoadContent(GraphicsDevice); + + backgroundTexture = TextureLoader.FromFile("Content/UI/titleBackground.png"); + titleTexture = TextureLoader.FromFile("Content/UI/titleText.png"); + + guiRoot = new GUIFrame(new Rectangle(0,0,graphicsWidth, graphicsHeight), Color.Transparent); + guiRoot.Padding = new Vector4(40.0f, 40.0f, 40.0f, 40.0f); + + GUIButton button = new GUIButton(new Rectangle(0,0,100,30), "START", Alignment.BottomRight, GUI.Style, guiRoot); + button.OnClicked = LaunchClick; + + int y = 50; + + var checkForUpdates = new GUITickBox(new Rectangle(0, y, 20, 20), "Automatically check for updates", Alignment.TopLeft, guiRoot); + checkForUpdates.Selected = settings.AutoCheckUpdates; + + updateInfoText = new GUITextBlock(new Rectangle(0,y+30,100,20), "", GUI.Style, guiRoot); + + updateInfoBox = new GUIListBox(new Rectangle(0, y + 55, 330, 150), GUI.Style, guiRoot); + updateInfoBox.Visible = false; + + progressBar = new GUIProgressBar(new Rectangle(110,y+220,220,20), Color.Green, 0.0f, guiRoot); + progressBar.Visible = false; + + downloadButton = new GUIButton(new Rectangle(0, y+220, 100, 20), "Download", GUI.Style, guiRoot); + downloadButton.OnClicked = DownloadButtonClicked; + downloadButton.Visible = false; + + //----------------------------------------------------------------- + //----------------------------------------------------------------- + + int x = 360; + new GUITextBlock(new Rectangle(x, y, 20, 20), "Resolution", GUI.Style, Alignment.TopLeft, Alignment.TopLeft, guiRoot); + resolutionDD = new GUIDropDown(new Rectangle(x, y + 20, 200, 20), "", GUI.Style, guiRoot); + + foreach (DisplayMode mode in GraphicsAdapter.DefaultAdapter.SupportedDisplayModes) + { + if (supportedModes.FirstOrDefault(m => m.Width == mode.Width && m.Height == mode.Height)!=null) continue; + + resolutionDD.AddItem(mode.Width+"x"+mode.Height, mode); + supportedModes.Add(mode); + + if (settings.GraphicsWidth == mode.Width && settings.GraphicsHeight == mode.Height) resolutionDD.SelectItem(mode); + } + + new GUITextBlock(new Rectangle(x, y + 50, 20, 20), "Content package", GUI.Style, Alignment.TopLeft, Alignment.TopLeft, guiRoot); + contentPackageDD = new GUIDropDown(new Rectangle(x, y + 70, 200, 20), "", GUI.Style, guiRoot); + + foreach (ContentPackage contentPackage in ContentPackage.list) + { + contentPackageDD.AddItem(contentPackage.Name, contentPackage); + + if (settings.SelectedContentPackage == contentPackage) contentPackageDD.SelectItem(contentPackage); + } + + new GUIButton(new Rectangle(x,y+120,150,20), "Package Manager", GUI.Style, guiRoot); + + var fullScreenTick = new GUITickBox(new Rectangle(x,y+150,20,20), "Fullscreen", Alignment.TopLeft, guiRoot); + fullScreenTick.OnSelected = ToggleFullScreen; + fullScreenTick.Selected = settings.FullScreenEnabled; + + if (settings.AutoCheckUpdates) + { + CheckForUpdates(); + } + } + + protected override void Update(GameTime gameTime) + { + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) + Exit(); + + base.Update(gameTime); + + float deltaTime = (float)gameTime.ElapsedGameTime.TotalSeconds; + + PlayerInput.Update(deltaTime); + + guiRoot.Update(deltaTime); + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.Black); + + spriteBatch.Begin(); + + spriteBatch.Draw(backgroundTexture, + new Rectangle(0, 0, graphicsWidth, graphicsHeight), + new Rectangle(635, 995, graphicsWidth, graphicsHeight), + Color.White); + + spriteBatch.Draw(titleTexture, new Vector2(40.0f, 20.0f), null, Color.White, 0.0f, Vector2.Zero, new Vector2(0.2f, 0.2f), SpriteEffects.None, 0.0f); + + + guiRoot.Draw(spriteBatch); + + spriteBatch.End(); + } + + private bool TrySaveSettings(string filePath) + { + DisplayMode selectedMode = resolutionDD.SelectedItemData as DisplayMode; + if (selectedMode==null) + { + resolutionDD.Flash(); + return false; + } + + ContentPackage selectedPackage = contentPackageDD.SelectedItemData as ContentPackage; + if (selectedPackage==null) + { + contentPackageDD.Flash(); + return false; + } + + settings.GraphicsWidth = selectedMode.Width; + settings.GraphicsHeight = selectedMode.Height; + settings.SelectedContentPackage = selectedPackage; + settings.Save(configPath); + + return true; + } + + private bool ToggleFullScreen(object obj) + { + settings.FullScreenEnabled = !settings.FullScreenEnabled; + return true; + } + + private bool LaunchClick(GUIButton button, object obj) + { + if (!TrySaveSettings(configPath)) return false; + + Process.Start(new ProcessStartInfo(Directory.GetCurrentDirectory() + "//" + settings.SelectedContentPackage.GetFilesOfType(ContentType.Executable)[0])); + Exit(); + + return true; + } + + private void SetUpdateInfoBox(string text) + { + updateInfoBox.ClearChildren(); + + string wrappedText = ToolBox.WrapText(text, updateInfoBox.Rect.Width, GUI.SmallFont); + + int lineHeight = (int)GUI.SmallFont.MeasureString(" ").Y; + + string[] lines = wrappedText.Split('\n'); + foreach (string line in lines) + { + if (string.IsNullOrWhiteSpace(line)) continue; + + GUITextBlock textBlock = new GUITextBlock( + new Rectangle(0,0,0,lineHeight), + line, GUI.Style, + Alignment.TopLeft, Alignment.TopLeft, + updateInfoBox, false, GUI.SmallFont); + textBlock.CanBeFocused = false; + } + + + } + + private bool CheckForUpdates() + { + updateInfoText.Text = "Checking for updates..."; + + XDocument doc = null; + + try + { + doc = FetchXML("versioninfo.xml"); + } + + catch (Exception e) + { + SetUpdateInfoBox("Error while checking for updates: " + e.Message); + return false; + } + + CheckUpdateXML(doc); + + return true; + } + + private XDocument FetchXML(string fileName) + { + var client = new RestClient(settings.MasterServerUrl); + + var request = new RestRequest(fileName, Method.GET); + + IRestResponse response = client.Execute(request); + + if (response.ResponseStatus != ResponseStatus.Completed) return null; + if (response.StatusCode != HttpStatusCode.OK) return null; + + string xml = response.Content; + + string _byteOrderMarkUtf8 = System.Text.Encoding.UTF8.GetString(System.Text.Encoding.UTF8.GetPreamble()); + if (xml.StartsWith(_byteOrderMarkUtf8)) + { + xml = xml.Remove(0, _byteOrderMarkUtf8.Length); + } + + return XDocument.Parse(xml); + } + + private bool CheckUpdateXML(XDocument doc) + { + if (doc.Root == null) + { + updateInfoText.Text = "Error while checking for updates: could not parse update info"; + return false; + } + + string latestVersion = ToolBox.GetAttributeString(doc.Root, "latestversion", ""); + latestVersionFolder = ToolBox.GetAttributeString(doc.Root, "latestversionfolder", ""); + latestVersionFileList = ToolBox.GetAttributeString(doc.Root, "latestversionfilelist", ""); + + if (latestVersion == version) + { + updateInfoText.Text = "Game is up to date!"; + return false; + } + + progressBar.Visible = true; + downloadButton.Visible = true; + updateInfoBox.Visible = true; + + updateInfoText.Text = "New update found! (" + latestVersion + ")"; + + XElement patchNotes = doc.Root.Element("patchnotes"); + + if (patchNotes != null) + { + StringBuilder sb = new StringBuilder(); + + foreach (XElement patchNote in patchNotes.Elements()) + { + string patchNumber = ToolBox.GetAttributeString(patchNote, "version", ""); + + //read the patch notes until we reach the user's version + if (patchNumber == version) break; + + string innerText = ToolBox.ElementInnerText(patchNote); + + innerText = innerText.Replace("\r\n", "\n"); + sb.Append(innerText+"\n"); + + sb.AppendLine("*************************************\n"); + } + + SetUpdateInfoBox(sb.ToString()); + } + + return true; + } + + private bool DownloadButtonClicked(GUIButton button, object obj) + { + if (string.IsNullOrWhiteSpace(latestVersionFolder)) return false; + + button.Enabled = false; + + XDocument doc = null; + + try + { + doc = FetchXML("filelist.xml"); + } + + catch (Exception e) + { + SetUpdateInfoBox("Error while updating: " + e.Message); + return false; + } + + updateInfoBox.ClearChildren(); + + latestVersionFiles = UpdaterUtil.GetFileList(doc); + filesToDownload = UpdaterUtil.GetRequiredFiles(doc); + + string dir = Directory.GetCurrentDirectory(); + + filesToDownloadCount = filesToDownload.Count; + if (filesToDownloadCount > 0) + { + //WebClient webClient = new WebClient(); + //webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); + ////webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); + + //webClient.DownloadFileAsync(new Uri(latestVersionFolder + filesToDownload[0]), dir); + DownloadNextFile(); + } + + return true; + } + + private List filesToDownload; + private List latestVersionFiles; + private int filesDownloaded, filesToDownloadCount; + + private void DownloadNextFile() + { + string dir = Directory.GetCurrentDirectory() + "\\UpdateFiles"; + + if (filesDownloaded == filesToDownload.Count) + { + progressBar.Visible = false; + downloadButton.Visible = false; + //updateInfoBox.Visible = false; + + updateInfoText.Text = "Installing update..."; + + try + { + UpdaterUtil.InstallUpdatedFiles(dir); + } + + catch (Exception e) + { + updateInfoText.Text = "Update failed"; + SetUpdateInfoBox("Error while installing the update: "+e.Message); + return; + } + + UpdaterUtil.CleanUnnecessaryFiles(latestVersionFiles); + + updateInfoText.Text = "The game was updated succesfully!"; + + //MessageBox.Show("Download completed!"); + return; + } + + updateInfoText.Text = "Downloading file " + filesDownloaded + "/" + filesToDownloadCount; + + GUITextBlock textBlock = new GUITextBlock( + new Rectangle(0, 0, 0, 17), + "Downloading " + filesToDownload[filesDownloaded] + "...", GUI.Style, + Alignment.TopLeft, Alignment.TopLeft, + updateInfoBox, false, GUI.SmallFont); + textBlock.CanBeFocused = false; + + WebClient webClient = new WebClient(); + webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); + //webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); + + + + if (!Directory.Exists(dir)) + { + Directory.CreateDirectory(dir); + } + + string fileDir = Path.GetDirectoryName(filesToDownload[filesDownloaded]); + if (!string.IsNullOrWhiteSpace(fileDir) && !Directory.Exists(fileDir)) + { + Directory.CreateDirectory(fileDir); + } + + webClient.DownloadFileAsync(new Uri(latestVersionFolder + filesToDownload[filesDownloaded]), @dir + "\\" + filesToDownload[filesDownloaded]); + } + + private void Completed(object sender, AsyncCompletedEventArgs e) + { + if (e.Error!=null) + { + string errorMsg = "Error while downloading: " + e.Error.InnerException.Message; + + GUITextBlock textBlock = new GUITextBlock( + new Rectangle(0, 0, 0, 0), + errorMsg, GUI.Style, + Alignment.TopLeft, Alignment.TopLeft, + updateInfoBox, true, GUI.SmallFont); + textBlock.TextColor = Color.Red; + //textBlock.CanBeFocused = false; + + } + + filesDownloaded++; + progressBar.BarSize = ((float)filesDownloaded / (float)filesToDownloadCount);//e.ProgressPercentage; + + DownloadNextFile(); + } + } + +} diff --git a/Launcher2/Program.cs b/Launcher2/Program.cs new file mode 100644 index 000000000..e308801da --- /dev/null +++ b/Launcher2/Program.cs @@ -0,0 +1,26 @@ +#region Using Statements +using System; +using System.Collections.Generic; +using System.Linq; +#endregion + +namespace Launcher2 +{ +#if WINDOWS || LINUX + /// + /// The main class. + /// + public static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + using (var game = new LauncherMain()) + game.Run(); + } + } +#endif +} diff --git a/Launcher2/Properties/AssemblyInfo.cs b/Launcher2/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..4ddff2475 --- /dev/null +++ b/Launcher2/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Launcher2")] +[assembly: AssemblyProduct("Launcher2")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyCopyright("Copyright © 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("809d00d0-88f0-4b93-8a77-718afeaeb614")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("3.3.0.2069")] +[assembly: AssemblyFileVersion("3.3.0.2069")] diff --git a/Launcher2/packages.config b/Launcher2/packages.config new file mode 100644 index 000000000..1acdfb47e --- /dev/null +++ b/Launcher2/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Subsurface/Content/UI/style.xml b/Subsurface/Content/UI/style.xml index e96349746..093d47574 100644 --- a/Subsurface/Content/UI/style.xml +++ b/Subsurface/Content/UI/style.xml @@ -16,11 +16,11 @@ - - - Lidgren.Network - - - - - Interface for an encryption algorithm - - - - - NetPeer - - - - - Constructor - - - - - Encrypt an outgoing message in place - - - - - Decrypt an incoming message in place - - - - - Base for a non-threadsafe encryption class - - - - - NetBlockEncryptionBase constructor - - - - - Encrypt am outgoing message with this algorithm; no writing can be done to the message after encryption, or message will be corrupted - - - - - Decrypt an incoming message encrypted with corresponding Encrypt - - message to decrypt - true if successful; false if failed - - - - Encrypt a block of bytes - - - - - Decrypt a block of bytes - - - - - Block size in bytes for this cipher - - - - - Example class; not very good encryption - - - - - NetXorEncryption constructor - - - - - NetXorEncryption constructor - - - - - Encrypt an outgoing message - - - - - Decrypt an incoming message - - - - - Methods to encrypt and decrypt data using the XTEA algorithm - - - - - 16 byte key - - - - - 16 byte key - - - - - String to hash for key - - - - - Encrypts a block of bytes - - - - - Decrypts a block of bytes - - - - - Gets the block size for this cipher - - - - - Lidgren Network Library - - - - - Big integer class based on BouncyCastle (http://www.bouncycastle.org) big integer code - - - - - Fixed size vector of booleans - - - - - NetBitVector constructor - - - - - Returns true if all bits/booleans are set to zero/false - - - - - Returns the number of bits/booleans set to one/true - - - - - - Shift all bits one step down, cycling the first bit to the top - - - - - Gets the first (lowest) index set to true - - - - - Gets the bit/bool at the specified index - - - - - Sets or clears the bit/bool at the specified index - - - - - Sets all bits/booleans to zero/false - - - - - Returns a string that represents this object - - - - - Gets the number of bits/booleans stored in this vector - - - - - Gets the bit/bool at the specified index - - - - - Helper class for NetBuffer to write/read bits - - - - - Read 1-8 bits from a buffer into a byte - - - - - Read several bytes from a buffer - - - - - Write 0-8 bits of data to buffer - - - - - Write several whole bytes - - - - - Reads an unsigned 16 bit integer - - - - - Reads the specified number of bits into an UInt32 - - - - - Writes an unsigned 16 bit integer - - - - - Writes the specified number of bits into a byte array - - - - - Writes the specified number of bits into a byte array - - - - - Write Base128 encoded variable sized unsigned integer - - number of bytes written - - - - Reads a UInt32 written using WriteUnsignedVarInt(); will increment offset! - - - - - Base class for NetIncomingMessage and NetOutgoingMessage - - - - - Number of bytes to overallocate for each message to avoid resizing - - - - - Gets the internal data buffer - - - - - Reads a 1-bit Boolean without advancing the read pointer - - - - - Reads a Byte without advancing the read pointer - - - - - Reads an SByte without advancing the read pointer - - - - - Reads the specified number of bits into a Byte without advancing the read pointer - - - - - Reads the specified number of bytes without advancing the read pointer - - - - - Reads the specified number of bytes without advancing the read pointer - - - - - Reads an Int16 without advancing the read pointer - - - - - Reads a UInt16 without advancing the read pointer - - - - - Reads an Int32 without advancing the read pointer - - - - - Reads the specified number of bits into an Int32 without advancing the read pointer - - - - - Reads a UInt32 without advancing the read pointer - - - - - Reads the specified number of bits into a UInt32 without advancing the read pointer - - - - - Reads a UInt64 without advancing the read pointer - - - - - Reads an Int64 without advancing the read pointer - - - - - Reads the specified number of bits into an UInt64 without advancing the read pointer - - - - - Reads the specified number of bits into an Int64 without advancing the read pointer - - - - - Reads a 32-bit Single without advancing the read pointer - - - - - Reads a 32-bit Single without advancing the read pointer - - - - - Reads a 64-bit Double without advancing the read pointer - - - - - Reads a string without advancing the read pointer - - - - - Reads a boolean value (stored as a single bit) written using Write(bool) - - - - - Reads a byte - - - - - Reads a byte and returns true or false for success - - - - - Reads a signed byte - - - - - Reads 1 to 8 bits into a byte - - - - - Reads the specified number of bytes - - - - - Reads the specified number of bytes and returns true for success - - - - - Reads the specified number of bytes into a preallocated array - - The destination array - The offset where to start writing in the destination array - The number of bytes to read - - - - Reads the specified number of bits into a preallocated array - - The destination array - The offset where to start writing in the destination array - The number of bits to read - - - - Reads a 16 bit signed integer written using Write(Int16) - - - - - Reads a 16 bit unsigned integer written using Write(UInt16) - - - - - Reads a 32 bit signed integer written using Write(Int32) - - - - - Reads a 32 bit signed integer written using Write(Int32) - - - - - Reads a signed integer stored in 1 to 32 bits, written using Write(Int32, Int32) - - - - - Reads an 32 bit unsigned integer written using Write(UInt32) - - - - - Reads an 32 bit unsigned integer written using Write(UInt32) and returns true for success - - - - - Reads an unsigned integer stored in 1 to 32 bits, written using Write(UInt32, Int32) - - - - - Reads a 64 bit unsigned integer written using Write(UInt64) - - - - - Reads a 64 bit signed integer written using Write(Int64) - - - - - Reads an unsigned integer stored in 1 to 64 bits, written using Write(UInt64, Int32) - - - - - Reads a signed integer stored in 1 to 64 bits, written using Write(Int64, Int32) - - - - - Reads a 32 bit floating point value written using Write(Single) - - - - - Reads a 32 bit floating point value written using Write(Single) - - - - - Reads a 32 bit floating point value written using Write(Single) - - - - - Reads a 64 bit floating point value written using Write(Double) - - - - - Reads a variable sized UInt32 written using WriteVariableUInt32() - - - - - Reads a variable sized UInt32 written using WriteVariableUInt32() and returns true for success - - - - - Reads a variable sized Int32 written using WriteVariableInt32() - - - - - Reads a variable sized Int64 written using WriteVariableInt64() - - - - - Reads a variable sized UInt32 written using WriteVariableInt64() - - - - - Reads a 32 bit floating point value written using WriteSignedSingle() - - The number of bits used when writing the value - A floating point value larger or equal to -1 and smaller or equal to 1 - - - - Reads a 32 bit floating point value written using WriteUnitSingle() - - The number of bits used when writing the value - A floating point value larger or equal to 0 and smaller or equal to 1 - - - - Reads a 32 bit floating point value written using WriteRangedSingle() - - The minimum value used when writing the value - The maximum value used when writing the value - The number of bits used when writing the value - A floating point value larger or equal to MIN and smaller or equal to MAX - - - - Reads a 32 bit integer value written using WriteRangedInteger() - - The minimum value used when writing the value - The maximum value used when writing the value - A signed integer value larger or equal to MIN and smaller or equal to MAX - - - - Reads a string written using Write(string) - - - - - Reads a string written using Write(string) and returns true for success - - - - - Reads a value, in local time comparable to NetTime.Now, written using WriteTime() for the connection supplied - - - - - Reads a stored IPv4 endpoint description - - - - - Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes. - - - - - Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes. - - - - - Pads data with the specified number of bits. - - - - - Reads all public and private declared instance fields of the object in alphabetical order using reflection - - - - - Reads all fields with the specified binding of the object in alphabetical order using reflection - - - - - Ensures the buffer can hold this number of bits - - - - - Ensures the buffer can hold this number of bits - - - - - Writes a boolean value using 1 bit - - - - - Write a byte - - - - - Writes a signed byte - - - - - Writes 1 to 8 bits of a byte - - - - - Writes all bytes in an array - - - - - Writes the specified number of bytes from an array - - - - - Writes an unsigned 16 bit integer - - - - - - Writes a 16 bit unsigned integer at a given offset in the buffer - - - - - Writes an unsigned integer using 1 to 16 bits - - - - - Writes a signed 16 bit integer - - - - - Writes a 16 bit signed integer at a given offset in the buffer - - - - - Writes a 32 bit signed integer - - - - - Writes a 32 bit signed integer at a given offset in the buffer - - - - - Writes a 32 bit unsigned integer - - - - - Writes a 32 bit unsigned integer at a given offset in the buffer - - - - - Writes a 32 bit signed integer - - - - - Writes a signed integer using 1 to 32 bits - - - - - Writes a 64 bit unsigned integer - - - - - Writes a 64 bit unsigned integer at a given offset in the buffer - - - - - Writes an unsigned integer using 1 to 64 bits - - - - - Writes a 64 bit signed integer - - - - - Writes a signed integer using 1 to 64 bits - - - - - Writes a 32 bit floating point value - - - - - Writes a 64 bit floating point value - - - - - Write Base128 encoded variable sized unsigned integer of up to 32 bits - - number of bytes written - - - - Write Base128 encoded variable sized signed integer of up to 32 bits - - number of bytes written - - - - Write Base128 encoded variable sized signed integer of up to 64 bits - - number of bytes written - - - - Write Base128 encoded variable sized unsigned integer of up to 64 bits - - number of bytes written - - - - Compress (lossy) a float in the range -1..1 using numberOfBits bits - - - - - Compress (lossy) a float in the range 0..1 using numberOfBits bits - - - - - Compress a float within a specified range using a certain number of bits - - - - - Writes an integer with the least amount of bits need for the specified range - Returns number of bits written - - - - - Write a string - - - - - Writes an endpoint description - - - - - Writes the current local time to a message; readable (and convertable to local time) by the remote host using ReadTime() - - - - - Writes a local timestamp to a message; readable (and convertable to local time) by the remote host using ReadTime() - - - - - Pads data with enough bits to reach a full byte. Decreases cpu usage for subsequent byte writes. - - - - - Pads data with the specified number of bits. - - - - - Append all the bits of message to this message - - - - - Writes all public and private declared instance fields of the object in alphabetical order using reflection - - - - - Writes all fields with specified binding in alphabetical order using reflection - - - - - Gets or sets the internal data buffer - - - - - Gets or sets the length of the used portion of the buffer in bytes - - - - - Gets or sets the length of the used portion of the buffer in bits - - - - - Gets or sets the read position in the buffer, in bits (not bytes) - - - - - Gets the position in the buffer in bytes; note that the bits of the first returned byte may already have been read - check the Position property to make sure. - - - - - Utility struct for writing Singles - - - - - Value as a 32 bit float - - - - - Value as an unsigned 32 bit integer - - - - - Specialized version of NetPeer used for a "client" connection. It does not accept any incoming connections and maintains a ServerConnection property - - - - - Represents a local peer capable of holding zero, one or more connections to remote peers - - - - - Send NetIntroduction to hostExternal and clientExternal; introducing client to host - - - - - Called when host/client receives a NatIntroduction message from a master server - - - - - Called when receiving a NatPunchMessage from a remote endpoint - - - - - NetPeer constructor - - - - - Binds to socket and spawns the networking thread - - - - - Get the connection, if any, for a certain remote endpoint - - - - - Read a pending message from any connection, blocking up to maxMillis if needed - - - - - Read a pending message from any connection, if any - - - - - Read a pending message from any connection, if any - - - - - Create a connection to a remote endpoint - - - - - Create a connection to a remote endpoint - - - - - Create a connection to a remote endpoint - - - - - Create a connection to a remote endpoint - - - - - Send raw bytes; only used for debugging - - - - - In DEBUG, throws an exception, in RELEASE logs an error message - - - - - - Disconnects all active connections and closes the socket - - - - - Emit a discovery signal to all hosts on your subnet - - - - - Emit a discovery signal to a single known host - - - - - Emit a discovery signal to a single known host - - - - - Send a discovery response message - - - - - Call this to register a callback for when a new message arrives - - - - - Call this to unregister a callback, but remember to do it in the same synchronization context! - - - - - If NetPeerConfiguration.AutoFlushSendQueue() is false; you need to call this to send all messages queued using SendMessage() - - - - - Creates a new message for sending - - - - - Creates a new message for sending and writes the provided string to it - - - - - Creates a new message for sending - - initial capacity in bytes - - - - Recycles a NetIncomingMessage instance for reuse; taking pressure off the garbage collector - - - - - Recycles a list of NetIncomingMessage instances for reuse; taking pressure off the garbage collector - - - - - Creates an incoming message with the required capacity for releasing to the application - - - - - Send a message to a specific connection - - The message to send - The recipient connection - How to deliver the message - - - - Send a message to a specific connection - - The message to send - The recipient connection - How to deliver the message - Sequence channel within the delivery method - - - - Send a message to a list of connections - - The message to send - The list of recipients to send to - How to deliver the message - Sequence channel within the delivery method - - - - Send a message to an unconnected host - - - - - Send a message to an unconnected host - - - - - Send a message to an unconnected host - - - - - Send a message to this exact same netpeer (loopback) - - - - - Gets the NetPeerStatus of the NetPeer - - - - - Signalling event which can be waited on to determine when a message is queued for reading. - Note that there is no guarantee that after the event is signaled the blocked thread will - find the message in the queue. Other user created threads could be preempted and dequeue - the message before the waiting thread wakes up. - - - - - Gets a unique identifier for this NetPeer based on Mac address and ip/port. Note! Not available until Start() has been called! - - - - - Gets the port number this NetPeer is listening and sending on, if Start() has been called - - - - - Returns an UPnP object if enabled in the NetPeerConfiguration - - - - - Gets or sets the application defined object containing data about the peer - - - - - Gets a copy of the list of connections - - - - - Gets the number of active connections - - - - - Statistics on this NetPeer since it was initialized - - - - - Gets the configuration used to instanciate this NetPeer - - - - - Gets the socket, if Start() has been called - - - - - NetClient constructor - - - - - - Connect to a remote server - - The remote endpoint to connect to - The hail message to pass - server connection, or null if already connected - - - - Disconnect from server - - reason for disconnect - - - - Sends message to server - - - - - Sends message to server - - - - - Returns a string that represents this object - - - - - Gets the connection to the server, if any - - - - - Gets the connection status of the server connection (or NetConnectionStatus.Disconnected if no connection) - - - - - Represents a connection to a remote peer - - - - - Change the internal endpoint to this new one. Used when, during handshake, a switch in port is detected (due to NAT) - - - - - Send a message to this remote connection - - The message to send - How to deliver the message - Sequence channel within the delivery method - - - - Zero windowSize indicates that the channel is not yet instantiated (used) - Negative freeWindowSlots means this amount of messages are currently queued but delayed due to closed window - - - - - Returns a string that represents this object - - - - - Approves this connection; sending a connection response to the remote host - - - - - Approves this connection; sending a connection response to the remote host - - The local hail message that will be set as RemoteHailMessage on the remote host - - - - Denies this connection; disconnecting it - - - - - Denies this connection; disconnecting it - - The stated reason for the disconnect, readable as a string in the StatusChanged message on the remote host - - - - Disconnect from the remote peer - - the message to send with the disconnect message - - - - Gets local time value comparable to NetTime.Now from a remote value - - - - - Gets the remote time value for a local time value produced by NetTime.Now - - - - - Gets or sets the application defined object containing data about the connection - - - - - Gets the peer which holds this connection - - - - - Gets the current status of the connection (synced to the last status message read) - - - - - Gets various statistics for this connection - - - - - Gets the remote endpoint for the connection - - - - - Gets the unique identifier of the remote NetPeer for this connection - - - - - Gets the local hail message that was sent as part of the handshake - - - - - The message that the remote part specified via Connect() or Approve() - can be null. - - - - - Gets the current average roundtrip time in seconds - - - - - Time offset between this peer and the remote peer - - - - - Gets the current MTU in bytes. If PeerConfiguration.AutoExpandMTU is false, this will be PeerConfiguration.MaximumTransmissionUnit. - - - - - Statistics for a NetConnection instance - - - - - Returns a string that represents this object - - - - - Gets the number of sent packets for this connection - - - - - Gets the number of received packets for this connection - - - - - Gets the number of sent bytes for this connection - - - - - Gets the number of received bytes for this connection - - - - - Gets the number of resent reliable messages for this connection - - - - - Status for a NetConnection instance - - - - - No connection, or attempt, in place - - - - - Connect has been sent; waiting for ConnectResponse - - - - - Connect was received, but ConnectResponse hasn't been sent yet - - - - - Connect was received and ApprovalMessage released to the application; awaiting Approve() or Deny() - - - - - Connect was received and ConnectResponse has been sent; waiting for ConnectionEstablished - - - - - Connected - - - - - In the process of disconnecting - - - - - Disconnected - - - - - All the constants used when compiling the library - - - - - Number of channels which needs a sequence number to work - - - - - Number of reliable channels - - - - - How the library deals with resends and handling of late messages - - - - - Indicates an error - - - - - Unreliable, unordered delivery - - - - - Unreliable delivery, but automatically dropping late messages - - - - - Reliable delivery, but unordered - - - - - Reliable delivery, except for late messages which are dropped - - - - - Reliable, ordered delivery - - - - - Exception thrown in the Lidgren Network Library - - - - - NetException constructor - - - - - NetException constructor - - - - - NetException constructor - - - - - Throws an exception, in DEBUG only, if first parameter is false - - - - - Throws an exception, in DEBUG only, if first parameter is false - - - - - Incoming message either sent from a remote peer or generated within the library - - - - - Decrypt a message - - The encryption algorithm used to encrypt the message - true on success - - - - Reads a value, in local time comparable to NetTime.Now, written using WriteTime() - Must have a connected sender - - - - - Returns a string that represents this object - - - - - Gets the type of this incoming message - - - - - Gets the delivery method this message was sent with (if user data) - - - - - Gets the sequence channel this message was sent with (if user data) - - - - - endpoint of sender, if any - - - - - NetConnection of sender, if any - - - - - What local time the message was received from the network - - - - - The type of a NetIncomingMessage - - - - - Error; this value should never appear - - - - - Status for a connection changed - - - - - Data sent using SendUnconnectedMessage - - - - - Connection approval is needed - - - - - Application data - - - - - Receipt of delivery - - - - - Discovery request for a response - - - - - Discovery response to a request - - - - - Verbose debug message - - - - - Debug message - - - - - Warning message - - - - - Error message - - - - - NAT introduction was successful - - - - - A roundtrip was measured and NetConnection.AverageRoundtripTime was updated - - - - - Outgoing message used to send data to remote peer(s) - - - - - Encrypt this message using the provided algorithm; no more writing can be done before sending it or the message will be corrupt! - - - - - Returns a string that represents this object - - - - - Partly immutable after NetPeer has been initialized - - - - - Default MTU value in bytes - - - - - NetPeerConfiguration constructor - - - - - Enables receiving of the specified type of message - - - - - Disables receiving of the specified type of message - - - - - Enables or disables receiving of the specified type of message - - - - - Gets if receiving of the specified type of message is enabled - - - - - Creates a memberwise shallow clone of this configuration - - - - - Gets the identifier of this application; the library can only connect to matching app identifier peers - - - - - Gets or sets the behaviour of unreliable sends above MTU - - - - - Gets or sets the name of the library network thread. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets the maximum amount of connections this peer can hold. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets the maximum amount of bytes to send in a single packet, excluding ip, udp and lidgren headers. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets the default capacity in bytes when NetPeer.CreateMessage() is called without argument - - - - - Gets or sets the time between latency calculating pings - - - - - Gets or sets if the library should recycling messages to avoid excessive garbage collection. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets the maximum number of incoming/outgoing messages to keep in the recycle cache. - - - - - Gets or sets the number of seconds timeout will be postponed on a successful ping/pong - - - - - Enables UPnP support; enabling port forwarding and getting external ip - - - - - Enables or disables automatic flushing of the send queue. If disabled, you must manully call NetPeer.FlushSendQueue() to flush sent messages to network. - - - - - If true, will not send acks for unreliable unordered messages. This will save bandwidth, but disable flow control and duplicate detection for this type of messages. - - - - - Gets or sets the local ip address to bind to. Defaults to IPAddress.Any. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets the local broadcast address to use when broadcasting - - - - - Gets or sets the local port to bind to. Defaults to 0. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets the size in bytes of the receiving buffer. Defaults to 131071 bytes. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets the size in bytes of the sending buffer. Defaults to 131071 bytes. Cannot be changed once NetPeer is initialized. - - - - - Gets or sets if the NetPeer should accept incoming connections. This is automatically set to true in NetServer and false in NetClient. - - - - - Gets or sets the number of seconds between handshake attempts - - - - - Gets or sets the maximum number of handshake attempts before failing to connect - - - - - Gets or sets if the NetPeer should send large messages to try to expand the maximum transmission unit size - - - - - Gets or sets how often to send large messages to expand MTU if AutoExpandMTU is enabled - - - - - Gets or sets the number of failed expand mtu attempts to perform before setting final MTU - - - - - Gets or sets the simulated amount of sent packets lost from 0.0f to 1.0f - - - - - Gets or sets the minimum simulated amount of one way latency for sent packets in seconds - - - - - Gets or sets the simulated added random amount of one way latency for sent packets in seconds - - - - - Gets the average simulated one way latency in seconds - - - - - Gets or sets the simulated amount of duplicated packets from 0.0f to 1.0f - - - - - Behaviour of unreliable sends above MTU - - - - - Sending an unreliable message will ignore MTU and send everything in a single packet; this is the new default - - - - - Old behaviour; use normal fragmentation for unreliable messages - if a fragment is dropped, memory for received fragments are never reclaimed! - - - - - Alternate behaviour; just drops unreliable messages above MTU - - - - - Statistics for a NetPeer instance - - - - - Returns a string that represents this object - - - - - Gets the number of sent packets since the NetPeer was initialized - - - - - Gets the number of received packets since the NetPeer was initialized - - - - - Gets the number of sent messages since the NetPeer was initialized - - - - - Gets the number of received messages since the NetPeer was initialized - - - - - Gets the number of sent bytes since the NetPeer was initialized - - - - - Gets the number of received bytes since the NetPeer was initialized - - - - - Gets the number of bytes allocated (and possibly garbage collected) for message storage - - - - - Gets the number of bytes in the recycled pool - - - - - Status for a NetPeer instance - - - - - NetPeer is not running; socket is not bound - - - - - NetPeer is in the process of starting up - - - - - NetPeer is bound to socket and listening for packets - - - - - Shutdown has been requested and will be executed shortly - - - - - Thread safe (blocking) expanding queue with TryDequeue() and EnqueueFirst() - - - - - NetQueue constructor - - - - - Adds an item last/tail of the queue - - - - - Adds an item last/tail of the queue - - - - - Places an item first, at the head of the queue - - - - - Gets an item from the head of the queue, or returns default(T) if empty - - - - - Gets all items from the head of the queue, or returns number of items popped - - - - - Returns default(T) if queue is empty - - - - - Determines whether an item is in the queue - - - - - Copies the queue items to a new array - - - - - Removes all objects from the queue - - - - - Gets the number of items in the queue - - - - - Gets the current capacity for the queue - - - - - NetRandom base class - - - - - Get global instance of NetRandom (uses MWCRandom) - - - - - Constructor with randomized seed - - - - - Constructor with provided 32 bit seed - - - - - (Re)initialize this instance with provided 32 bit seed - - - - - Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively - - - - - Generates a random value that is greater or equal than 0 and less than Int32.MaxValue - - - - - Generates a random value greater or equal than 0 and less or equal than Int32.MaxValue (inclusively) - - - - - Returns random value larger or equal to 0.0 and less than 1.0 - - - - - Returns random value is greater or equal than 0.0 and less than 1.0 - - - - - Returns random value is greater or equal than 0.0f and less than 1.0f - - - - - Returns a random value is greater or equal than 0 and less than maxValue - - - - - Returns a random value is greater or equal than minValue and less than maxValue - - - - - Generates a random value between UInt64.MinValue to UInt64.MaxValue - - - - - Returns true or false, randomly - - - - - Fills all bytes from offset to offset + length in buffer with random values - - - - - Fill the specified buffer with random values - - - - - Multiply With Carry random - - - - - Get global instance of MWCRandom - - - - - Constructor with randomized seed - - - - - (Re)initialize this instance with provided 32 bit seed - - - - - (Re)initialize this instance with provided 64 bit seed - - - - - Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively - - - - - Xor Shift based random - - - - - Get global instance of XorShiftRandom - - - - - Constructor with randomized seed - - - - - Constructor with provided 64 bit seed - - - - - (Re)initialize this instance with provided 32 bit seed - - - - - (Re)initialize this instance with provided 64 bit seed - - - - - Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively - - - - - Mersenne Twister based random - - - - - Get global instance of MersenneTwisterRandom - - - - - Constructor with randomized seed - - - - - Constructor with provided 32 bit seed - - - - - (Re)initialize this instance with provided 32 bit seed - - - - - Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively - - - - - RNGCryptoServiceProvider based random; very slow but cryptographically safe - - - - - Global instance of CryptoRandom - - - - - Seed in CryptoRandom does not create deterministic sequences - - - - - Generates a random value from UInt32.MinValue to UInt32.MaxValue, inclusively - - - - - Fill the specified buffer with random values - - - - - Fills all bytes from offset to offset + length in buffer with random values - - - - - Class for generating random seeds - - - - - Generates a 32 bit random seed - - - - - Generates a 64 bit random seed - - - - - Sender part of Selective repeat ARQ for a particular NetChannel - - - - - Result of a SendMessage call - - - - - Message failed to enqueue because there is no connection - - - - - Message was immediately sent - - - - - Message was queued for delivery - - - - - Message was dropped immediately since too many message were queued - - - - - Specialized version of NetPeer used for "server" peers - - - - - NetServer constructor - - - - - Send a message to all connections - - The message to send - How to deliver the message - - - - Send a message to all connections except one - - The message to send - How to deliver the message - Don't send to this particular connection - Which sequence channel to use for the message - - - - Returns a string that represents this object - - - - - Helper methods for implementing SRP authentication - - - - - Compute multiplier (k) - - - - - Create 16 bytes of random salt - - - - - Create 32 bytes of random ephemeral value - - - - - Computer private key (x) - - - - - Creates a verifier that the server can later use to authenticate users later on (v) - - - - - Compute client public ephemeral value (A) - - - - - Compute server ephemeral value (B) - - - - - Compute intermediate value (u) - - - - - Computes the server session value - - - - - Computes the client session value - - - - - Create XTEA symmetrical encryption object from sessionValue - - - - - Time service - - - - - Given seconds it will output a human friendly readable string (milliseconds if less than 60 seconds) - - - - - Get number of seconds since the application started - - - - - Sender part of Selective repeat ARQ for a particular NetChannel - - - - - Status of the UPnP capabilities - - - - - Still discovering UPnP capabilities - - - - - UPnP is not available - - - - - UPnP is available and ready to use - - - - - UPnP support class - - - - - NetUPnP constructor - - - - - Add a forwarding rule to the router using UPnP - - - - - Delete a forwarding rule from the router using UPnP - - - - - Retrieve the extern ip using UPnP - - - - - Status of the UPnP capabilities of this NetPeer - - - - - Utility methods - - - - - Get IPv4 endpoint from notation (xxx.xxx.xxx.xxx) or hostname and port number (asynchronous version) - - - - - Get IPv4 endpoint from notation (xxx.xxx.xxx.xxx) or hostname and port number - - - - - Get IPv4 address from notation (xxx.xxx.xxx.xxx) or hostname (asynchronous version) - - - - - Get IPv4 address from notation (xxx.xxx.xxx.xxx) or hostname - - - - - Create a hex string from an Int64 value - - - - - Create a hex string from an array of bytes - - - - - Create a hex string from an array of bytes - - - - - Returns true if the endpoint supplied is on the same subnet as this host - - - - - Returns true if the IPAddress supplied is on the same subnet as this host - - - - - Returns how many bits are necessary to hold a certain number - - - - - Returns how many bytes are required to hold a certain number of bits - - - - - Convert a hexadecimal string to a byte array - - - - - Converts a number of bytes to a shorter, more readable string representation - - - - - Gets the window size used internally in the library for a certain delivery method - - - - - Creates a comma delimited string from a lite of items - - - - - If available, returns the bytes of the physical (MAC) address for the first usable network interface - - - - - Gets my local IPv4 address (not necessarily external) and subnet mask - - - - - Resolve endpoint callback - - - - - Resolve address callback - - - - diff --git a/Subsurface/Lidgren.Network.dll b/Subsurface/Lidgren.Network.dll deleted file mode 100644 index 52f7f22d7..000000000 Binary files a/Subsurface/Lidgren.Network.dll and /dev/null differ diff --git a/Subsurface/Lidgren.Network.pdb b/Subsurface/Lidgren.Network.pdb deleted file mode 100644 index 34c246dbe..000000000 Binary files a/Subsurface/Lidgren.Network.pdb and /dev/null differ diff --git a/Subsurface/Source/Characters/CharacterInfo.cs b/Subsurface/Source/Characters/CharacterInfo.cs index b2d473d47..f0ecaafad 100644 --- a/Subsurface/Source/Characters/CharacterInfo.cs +++ b/Subsurface/Source/Characters/CharacterInfo.cs @@ -170,24 +170,24 @@ namespace Subsurface GUIImage image = new GUIImage(new Rectangle(0,0,30,30), HeadSprite, Alignment.TopLeft, frame); int x = 0, y = 0; - new GUITextBlock(new Rectangle(x+80, y, 200, 20), Name, GUI.style, frame); + new GUITextBlock(new Rectangle(x+80, y, 200, 20), Name, GUI.Style, frame); y += 20; if (Job!=null) { - new GUITextBlock(new Rectangle(x+80, y, 200, 20), Job.Name, GUI.style, frame); + new GUITextBlock(new Rectangle(x+80, y, 200, 20), Job.Name, GUI.Style, frame); y += 30; var skills = Job.Skills; skills.Sort((s1, s2) => -s1.Level.CompareTo(s2.Level)); - new GUITextBlock(new Rectangle(x, y, 200, 20), "Skills:", GUI.style, frame); + new GUITextBlock(new Rectangle(x, y, 200, 20), "Skills:", GUI.Style, frame); y += 20; foreach (Skill skill in skills) { Color textColor = Color.White * (0.5f + skill.Level/200.0f); - new GUITextBlock(new Rectangle(x+20, y, 200, 20), skill.Name, Color.Transparent, textColor, Alignment.Left, GUI.style, frame); - new GUITextBlock(new Rectangle(x + 20, y, 200, 20), skill.Level.ToString(), Color.Transparent, textColor, Alignment.Right, GUI.style, frame); + new GUITextBlock(new Rectangle(x+20, y, 200, 20), skill.Name, Color.Transparent, textColor, Alignment.Left, GUI.Style, frame); + new GUITextBlock(new Rectangle(x + 20, y, 200, 20), skill.Level.ToString(), Color.Transparent, textColor, Alignment.Right, GUI.Style, frame); y += 20; } } diff --git a/Subsurface/Source/DebugConsole.cs b/Subsurface/Source/DebugConsole.cs index 16b0b63f7..1e0524cb0 100644 --- a/Subsurface/Source/DebugConsole.cs +++ b/Subsurface/Source/DebugConsole.cs @@ -153,6 +153,9 @@ namespace Subsurface switch (commands[0].ToLower()) { + case "createfilelist": + UpdaterUtil.SaveFileList("filelist.xml"); + break; case "spawn": if (commands.Length == 1) return; @@ -165,7 +168,7 @@ namespace Subsurface SinglePlayerMode mode = Game1.GameSession.gameMode as SinglePlayerMode; if (mode == null) break; mode.CrewManager.AddCharacter(Character.Controlled); - mode.CrewManager.SelectCharacter(Character.Controlled); + mode.CrewManager.SelectCharacter(null, Character.Controlled); } } else diff --git a/Subsurface/Source/GUI/ComponentStyle.cs b/Subsurface/Source/GUI/ComponentStyle.cs index 6187d7aa9..443e79558 100644 --- a/Subsurface/Source/GUI/ComponentStyle.cs +++ b/Subsurface/Source/GUI/ComponentStyle.cs @@ -7,7 +7,7 @@ using System.Xml.Linq; namespace Subsurface { - class GUIComponentStyle + public class GUIComponentStyle { public readonly Vector4 Padding; diff --git a/Subsurface/Source/GUI/GUI.cs b/Subsurface/Source/GUI/GUI.cs index 70b667c2d..a1221f4d1 100644 --- a/Subsurface/Source/GUI/GUI.cs +++ b/Subsurface/Source/GUI/GUI.cs @@ -1,4 +1,5 @@ using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Input; using System; @@ -15,9 +16,9 @@ namespace Subsurface BottomRight = (Bottom | Right), BottomLeft = (Bottom | Left), BottomCenter = (CenterX | Bottom) } - class GUI + public class GUI { - public static GUIStyle style; + public static GUIStyle Style; static Texture2D t; public static SpriteFont Font, SmallFont, LargeFont; @@ -31,6 +32,13 @@ namespace Subsurface private static bool pauseMenuOpen; private static GUIFrame pauseMenu; + public static void Init(ContentManager content) + { + GUI.Font = ToolBox.TryLoadFont("SpriteFont1", content); + GUI.SmallFont = ToolBox.TryLoadFont("SmallFont", content); + GUI.LargeFont = ToolBox.TryLoadFont("LargeFont", content); + } + public static bool PauseMenuOpen { get { return pauseMenuOpen; } @@ -48,7 +56,7 @@ namespace Subsurface t.SetData( new Color[] { Color.White });// fill the texture with white - style = new GUIStyle("Content/UI/style.xml"); + Style = new GUIStyle("Content/UI/style.xml"); } public static void TogglePauseMenu() @@ -59,10 +67,10 @@ namespace Subsurface if (pauseMenuOpen) { - pauseMenu = new GUIFrame(new Rectangle(0,0,200,300), null, Alignment.Center, style); + pauseMenu = new GUIFrame(new Rectangle(0,0,200,300), null, Alignment.Center, Style); int y = 0; - var button = new GUIButton(new Rectangle(0, y, 0, 30), "Resume", Alignment.CenterX, GUI.style, pauseMenu); + var button = new GUIButton(new Rectangle(0, y, 0, 30), "Resume", Alignment.CenterX, GUI.Style, pauseMenu); button.OnClicked = TogglePauseMenu; y += 60; @@ -72,7 +80,7 @@ namespace Subsurface SinglePlayerMode spMode = Game1.GameSession.gameMode as SinglePlayerMode; if (spMode!=null) { - button = new GUIButton(new Rectangle(0, y, 0, 30), "Load previous", Alignment.CenterX, GUI.style, pauseMenu); + button = new GUIButton(new Rectangle(0, y, 0, 30), "Load previous", Alignment.CenterX, GUI.Style, pauseMenu); button.OnClicked += TogglePauseMenu; button.OnClicked += Game1.GameSession.LoadPrevious; @@ -85,7 +93,7 @@ namespace Subsurface SinglePlayerMode spMode = Game1.GameSession.gameMode as SinglePlayerMode; if (spMode != null) { - button = new GUIButton(new Rectangle(0, y, 0, 30), "Save & quit", Alignment.CenterX, GUI.style, pauseMenu); + button = new GUIButton(new Rectangle(0, y, 0, 30), "Save & quit", Alignment.CenterX, GUI.Style, pauseMenu); button.OnClicked += QuitClicked; button.OnClicked += TogglePauseMenu; button.UserData = "save"; @@ -95,7 +103,7 @@ namespace Subsurface } - button = new GUIButton(new Rectangle(0, y, 0, 30), "Quit", Alignment.CenterX, GUI.style, pauseMenu); + button = new GUIButton(new Rectangle(0, y, 0, 30), "Quit", Alignment.CenterX, GUI.Style, pauseMenu); button.OnClicked += QuitClicked; button.OnClicked += TogglePauseMenu; } @@ -118,7 +126,7 @@ namespace Subsurface Game1.MainMenuScreen.Select(); - Game1.MainMenuScreen.SelectTab(null, (int)MainMenuScreen.Tabs.Main); + //Game1.MainMenuScreen.SelectTab(null, (int)MainMenuScreen.Tabs.Main); return true; } diff --git a/Subsurface/Source/GUI/GUIButton.cs b/Subsurface/Source/GUI/GUIButton.cs index bb238ba04..6fdb8e972 100644 --- a/Subsurface/Source/GUI/GUIButton.cs +++ b/Subsurface/Source/GUI/GUIButton.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Input; namespace Subsurface { - class GUIButton : GUIComponent + public class GUIButton : GUIComponent { protected GUITextBlock textBlock; protected GUIFrame frame; @@ -16,6 +16,42 @@ namespace Subsurface public OnPressedHandler OnPressed; public bool Enabled { get; set; } + + public override Color Color + { + get { return base.Color; } + set + { + base.Color = value; + frame.Color = value; + } + } + + public override Color HoverColor + { + get { return base.HoverColor; } + set + { + base.HoverColor = value; + frame.HoverColor = value; + } + } + + public override Color OutlineColor + { + get { return base.OutlineColor; } + set + { + base.OutlineColor = value; + if (frame != null) frame.OutlineColor = value; + } + } + + public Color TextColor + { + get { return textBlock.TextColor; } + set { textBlock.TextColor = value; } + } public string Text { @@ -23,6 +59,8 @@ namespace Subsurface set { textBlock.Text = value; } } + public bool Selected { get; set; } + public GUIButton(Rectangle rect, string text, GUIStyle style, GUIComponent parent = null) : this(rect, text, null, Alignment.Left, style, parent) { @@ -39,6 +77,12 @@ namespace Subsurface } public GUIButton(Rectangle rect, string text, Color? color, Alignment alignment, GUIStyle style, GUIComponent parent = null) + :this(rect, text, color, alignment, Alignment.Center, style, parent) + { + + } + + public GUIButton(Rectangle rect, string text, Color? color, Alignment alignment, Alignment textAlignment, GUIStyle style, GUIComponent parent = null) :base (style) { this.rect = rect; @@ -47,19 +91,20 @@ namespace Subsurface Enabled = true; - if (parent != null) - parent.AddChild(this); + if (parent != null) parent.AddChild(this); - frame = new GUIFrame(new Rectangle(0,0,0,0), style, this); - if (style!=null) style.Apply(frame, this); + frame = new GUIFrame(Rectangle.Empty, style, this); + if (style != null) style.Apply(frame, this); - textBlock = new GUITextBlock(new Rectangle(0, 0, 0, 0), text, - Color.Transparent, (this.style==null) ? Color.Black : this.style.textColor, - Alignment.Center, style, this); + textBlock = new GUITextBlock(Rectangle.Empty, text, + Color.Transparent, (this.style == null) ? Color.Black : this.style.textColor, + textAlignment, style, this); } public override void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + if (rect.Contains(PlayerInput.MousePosition) && Enabled && (MouseOn == null || MouseOn == this || IsParentOf(MouseOn))) { state = ComponentState.Hover; @@ -80,7 +125,7 @@ namespace Subsurface } else { - state = ComponentState.None; + state = Selected ? ComponentState.Selected : ComponentState.None; } frame.State = state; diff --git a/Subsurface/Source/GUI/GUIComponent.cs b/Subsurface/Source/GUI/GUIComponent.cs index 98756286a..5ae0841d8 100644 --- a/Subsurface/Source/GUI/GUIComponent.cs +++ b/Subsurface/Source/GUI/GUIComponent.cs @@ -7,7 +7,7 @@ using Microsoft.Xna.Framework.Graphics; namespace Subsurface { - abstract class GUIComponent + public abstract class GUIComponent { const float FlashDuration = 1.5f; @@ -53,6 +53,12 @@ namespace Subsurface set; } + public bool Visible + { + get; + set; + } + private GUITextBlock toolTipBlock; //protected float alpha; @@ -94,7 +100,7 @@ namespace Subsurface //public Alignment SpriteAlignment { get; set; } //public bool RepeatSpriteX, RepeatSpriteY; - public Color OutlineColor { get; set; } + public virtual Color OutlineColor { get; set; } public ComponentState State { @@ -125,38 +131,21 @@ namespace Subsurface set { color = value; } } - public Color HoverColor + public virtual Color HoverColor { get { return hoverColor; } set { hoverColor = value; } } - public Color SelectedColor + public virtual Color SelectedColor { get { return selectedColor; } set { selectedColor = value; } } - - //public float Alpha - //{ - // get - // { - // return alpha; - // } - // set - // { - // alpha = MathHelper.Clamp(value, 0.0f, 1.0f); - // foreach (GUIComponent child in children) - // { - // child.Alpha = value; - // } - // } - //} - protected GUIComponent(GUIStyle style) { - //alpha = 1.0f; + Visible = true; OutlineColor = Color.Transparent; @@ -218,6 +207,8 @@ namespace Subsurface public virtual void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + Color currColor = color; if (state == ComponentState.Selected) currColor = selectedColor; if (state == ComponentState.Hover) currColor = hoverColor; @@ -255,20 +246,26 @@ namespace Subsurface public void DrawToolTip(SpriteBatch spriteBatch) { - int width = 200; + if (!Visible) return; + + int width = 400; if (toolTipBlock==null || (string)toolTipBlock.userData != ToolTip) { string wrappedText = ToolBox.WrapText(ToolTip, width, GUI.SmallFont); - toolTipBlock = new GUITextBlock(new Rectangle(0,0,width, wrappedText.Split('\n').Length*15), ToolTip, GUI.style, null, true); + toolTipBlock = new GUITextBlock(new Rectangle(0,0,width, wrappedText.Split('\n').Length*15), ToolTip, GUI.Style, Alignment.TopLeft, Alignment.TopLeft, null, true, GUI.SmallFont); + toolTipBlock.Color = Color.Black*0.7f; + toolTipBlock.OutlineColor = Color.White; toolTipBlock.userData = ToolTip; } - toolTipBlock.rect = new Rectangle((int)PlayerInput.MousePosition.X, (int)PlayerInput.MousePosition.Y, toolTipBlock.rect.Width, toolTipBlock.rect.Height); + toolTipBlock.rect = new Rectangle(MouseOn.Rect.Center.X, MouseOn.rect.Bottom, toolTipBlock.rect.Width, toolTipBlock.rect.Height); toolTipBlock.Draw(spriteBatch); } public virtual void Update(float deltaTime) { + if (!Visible) return; + if (flashTimer>0.0f) flashTimer -= deltaTime; if (CanBeFocused) @@ -276,6 +273,7 @@ namespace Subsurface if (rect.Contains(PlayerInput.MousePosition)) { MouseOn = this; + //ToolTip = this.ToolTip; } else { diff --git a/Subsurface/Source/GUI/GUIDropDown.cs b/Subsurface/Source/GUI/GUIDropDown.cs new file mode 100644 index 000000000..89aa7091d --- /dev/null +++ b/Subsurface/Source/GUI/GUIDropDown.cs @@ -0,0 +1,138 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Subsurface +{ + public class GUIDropDown : GUIComponent + { + private GUIButton button; + private GUIListBox listBox; + + public bool Dropped { get; set; } + + public object SelectedItemData + { + get + { + if (listBox.Selected == null) return null; + return listBox.Selected.UserData; + } + } + + public GUIDropDown(Rectangle rect, string text, GUIStyle style, GUIComponent parent = null) + : base(style) + { + this.rect = rect; + + if (parent != null) parent.AddChild(this); + + button = new GUIButton(Rectangle.Empty, "", Color.White, Alignment.TopLeft, Alignment.TopLeft, null, this); + + button.TextColor = Color.White; + button.Color = Color.Black * 0.8f; + button.HoverColor = Color.DarkGray * 0.8f; + button.OutlineColor = Color.LightGray * 0.8f; + button.OnClicked = OnClicked; + + listBox = new GUIListBox(new Rectangle(this.rect.X, this.rect.Bottom, this.rect.Width, 200), style, null); + listBox.OnSelected = SelectItem; + //listBox.ScrollBarEnabled = false; + } + + public void AddItem(string text, object userData = null) + { + GUITextBlock textBlock = new GUITextBlock(new Rectangle(0,0,0,20), text, GUI.Style, listBox); + textBlock.UserData = userData; + + //int totalHeight = 0; + //foreach (GUIComponent child in listBox.children) + //{ + // totalHeight += child.Rect.Height; + //} + + //listBox.Rect = new Rectangle(listBox.Rect.X,listBox.Rect.Y,listBox.Rect.Width,totalHeight); + } + + private bool SelectItem(GUIComponent component, object obj) + { + GUITextBlock textBlock = component as GUITextBlock; + if (textBlock==null) return false; + button.Text = textBlock.Text; + + Dropped = false; + + return true; + } + + public void SelectItem(object userData) + { + //GUIComponent child = listBox.children.FirstOrDefault(c => c.UserData == userData); + + //if (child == null) return; + + listBox.Select(userData); + + //SelectItem(child, userData); + } + + + private bool wasOpened; + + private bool OnClicked(GUIComponent component, object obj) + { + if (wasOpened) return false; + + wasOpened = true; + Dropped = !Dropped; + + if (Dropped && parent.children[parent.children.Count-1]!=this) + { + parent.children.Remove(this); + parent.children.Add(this); + } + + return true; + } + + public override void Update(float deltaTime) + { + if (!Visible) return; + + wasOpened = false; + + base.Update(deltaTime); + + if (Dropped && PlayerInput.LeftButtonClicked()) + { + Rectangle listBoxRect = listBox.Rect; + listBoxRect.Width += 20; + if (!listBoxRect.Contains(PlayerInput.MousePosition)) + { + Dropped = false; + } + } + + + button.Update(deltaTime); + + if (Dropped) listBox.Update(deltaTime); + } + + public override void Draw(SpriteBatch spriteBatch) + { + if (!Visible) return; + + base.Draw(spriteBatch); + + button.Draw(spriteBatch); + + if (!Dropped) return; + + listBox.Draw(spriteBatch); + } + } +} diff --git a/Subsurface/Source/GUI/GUIFrame.cs b/Subsurface/Source/GUI/GUIFrame.cs index dff2ba29f..e7b4b575d 100644 --- a/Subsurface/Source/GUI/GUIFrame.cs +++ b/Subsurface/Source/GUI/GUIFrame.cs @@ -3,7 +3,7 @@ using System; namespace Subsurface { - class GUIFrame : GUIComponent + public class GUIFrame : GUIComponent { public GUIFrame(Rectangle rect, GUIStyle style = null, GUIComponent parent = null) : this(rect, null, (Alignment.Left | Alignment.Top), style, parent) @@ -39,7 +39,7 @@ namespace Subsurface public override void Draw(Microsoft.Xna.Framework.Graphics.SpriteBatch spriteBatch) { - + if (!Visible) return; Color currColor = color; if (state == ComponentState.Selected) currColor = selectedColor; diff --git a/Subsurface/Source/GUI/GUIImage.cs b/Subsurface/Source/GUI/GUIImage.cs index 9e9b5ddeb..d5eb06d38 100644 --- a/Subsurface/Source/GUI/GUIImage.cs +++ b/Subsurface/Source/GUI/GUIImage.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Graphics; namespace Subsurface { - class GUIImage : GUIComponent + public class GUIImage : GUIComponent { Sprite sprite; @@ -72,6 +72,8 @@ namespace Subsurface public override void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + Color currColor = color; if (state == ComponentState.Hover) currColor = hoverColor; if (state == ComponentState.Selected) currColor = selectedColor; diff --git a/Subsurface/Source/GUI/GUIListBox.cs b/Subsurface/Source/GUI/GUIListBox.cs index 56e882201..ed6b3e676 100644 --- a/Subsurface/Source/GUI/GUIListBox.cs +++ b/Subsurface/Source/GUI/GUIListBox.cs @@ -5,11 +5,11 @@ using Microsoft.Xna.Framework.Graphics; namespace Subsurface { - class GUIListBox : GUIComponent + public class GUIListBox : GUIComponent { protected GUIComponent selected; - public delegate bool OnSelectedHandler(object obj); + public delegate bool OnSelectedHandler(GUIComponent component, object obj); public OnSelectedHandler OnSelected; public delegate object CheckSelectedHandler(); @@ -34,7 +34,7 @@ namespace Subsurface return selected; } } - + public object SelectedData { get @@ -145,13 +145,15 @@ namespace Subsurface if (child.UserData != selection) continue; selected = child; - if (OnSelected != null) OnSelected(selected.UserData); + if (OnSelected != null) OnSelected(selected, selected.UserData); return; } } public override void Update(float deltaTime) { + if (!Visible) return; + base.Update(deltaTime); scrollBar.Update(deltaTime); @@ -165,7 +167,7 @@ namespace Subsurface if (childIndex >= children.Count || childIndex<0) return; selected = children[childIndex]; - if (OnSelected != null) OnSelected(selected.UserData); + if (OnSelected != null) OnSelected(selected, selected.UserData); } public void Deselect() @@ -238,6 +240,8 @@ namespace Subsurface public override void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + base.Draw(spriteBatch); frame.Draw(spriteBatch); @@ -284,7 +288,8 @@ namespace Subsurface if (CheckSelected() != selected.UserData) selected = null; } } - else if (enabled && (MouseOn == this || (MouseOn != null && this.IsParentOf(MouseOn))) && child.Rect.Contains(PlayerInput.MousePosition)) + else if (enabled && child.CanBeFocused && + (MouseOn == this || (MouseOn != null && this.IsParentOf(MouseOn))) && child.Rect.Contains(PlayerInput.MousePosition)) { child.State = ComponentState.Hover; if (PlayerInput.LeftButtonClicked()) @@ -293,7 +298,7 @@ namespace Subsurface selected = child; if (OnSelected != null) { - if (!OnSelected(child.UserData)) selected = null; + if (!OnSelected(selected, child.UserData)) selected = null; } } diff --git a/Subsurface/Source/GUI/GUIMessageBox.cs b/Subsurface/Source/GUI/GUIMessageBox.cs index d4d9dd0ed..6bd36bbe9 100644 --- a/Subsurface/Source/GUI/GUIMessageBox.cs +++ b/Subsurface/Source/GUI/GUIMessageBox.cs @@ -40,7 +40,7 @@ namespace Subsurface public GUIMessageBox(string header, string text, string[] buttons, int width=DefaultWidth, int height=DefaultHeight, Alignment textAlignment = Alignment.TopLeft) : base(new Rectangle(0,0, width, height), - null, Alignment.Center, GUI.style, null) + null, Alignment.Center, GUI.Style, null) { //Padding = GUI.style.smallPadding; @@ -50,14 +50,14 @@ namespace Subsurface // return; //} - new GUITextBlock(new Rectangle(0, 0, 0, 30), header, Color.Transparent, Color.White, textAlignment, GUI.style, this, true); - new GUITextBlock(new Rectangle(0, 30, 0, height - 70), text, Color.Transparent, Color.White, textAlignment, GUI.style, this, true); + new GUITextBlock(new Rectangle(0, 0, 0, 30), header, Color.Transparent, Color.White, textAlignment, GUI.Style, this, true); + new GUITextBlock(new Rectangle(0, 30, 0, height - 70), text, Color.Transparent, Color.White, textAlignment, GUI.Style, this, true); int x = 0; this.Buttons = new GUIButton[buttons.Length]; for (int i = 0; i < buttons.Length; i++) { - this.Buttons[i] = new GUIButton(new Rectangle(x, 0, 150, 30), buttons[i], Alignment.Left | Alignment.Bottom, GUI.style, this); + this.Buttons[i] = new GUIButton(new Rectangle(x, 0, 150, 30), buttons[i], Alignment.Left | Alignment.Bottom, GUI.Style, this); x += this.Buttons[i].Rect.Width + 20; } diff --git a/Subsurface/Source/GUI/GUIProgressBar.cs b/Subsurface/Source/GUI/GUIProgressBar.cs index 32f43b1fd..13b866a7b 100644 --- a/Subsurface/Source/GUI/GUIProgressBar.cs +++ b/Subsurface/Source/GUI/GUIProgressBar.cs @@ -3,7 +3,7 @@ using Microsoft.Xna.Framework.Graphics; namespace Subsurface { - class GUIProgressBar : GUIComponent + public class GUIProgressBar : GUIComponent { private bool isHorizontal; @@ -67,6 +67,8 @@ namespace Subsurface public override void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + if (ProgressGetter != null) BarSize = ProgressGetter(); DrawChildren(spriteBatch); diff --git a/Subsurface/Source/GUI/GUIScrollBar.cs b/Subsurface/Source/GUI/GUIScrollBar.cs index b654948c5..ae857dee6 100644 --- a/Subsurface/Source/GUI/GUIScrollBar.cs +++ b/Subsurface/Source/GUI/GUIScrollBar.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Graphics; namespace Subsurface { - class GUIScrollBar : GUIComponent + public class GUIScrollBar : GUIComponent { public static GUIScrollBar draggingBar; @@ -122,6 +122,8 @@ namespace Subsurface public override void Update(float deltaTime) { + if (!Visible) return; + base.Update(deltaTime); if (draggingBar != this) return; @@ -132,6 +134,8 @@ namespace Subsurface public override void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + DrawChildren(spriteBatch); } diff --git a/Subsurface/Source/GUI/GUIStyle.cs b/Subsurface/Source/GUI/GUIStyle.cs index 8231b5fb8..75e3f2008 100644 --- a/Subsurface/Source/GUI/GUIStyle.cs +++ b/Subsurface/Source/GUI/GUIStyle.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; namespace Subsurface { - class GUIStyle + public class GUIStyle { private Dictionary componentStyles; diff --git a/Subsurface/Source/GUI/GUITextBlock.cs b/Subsurface/Source/GUI/GUITextBlock.cs index 8842689c3..6f2afa6ed 100644 --- a/Subsurface/Source/GUI/GUITextBlock.cs +++ b/Subsurface/Source/GUI/GUITextBlock.cs @@ -3,7 +3,7 @@ using Microsoft.Xna.Framework.Graphics; namespace Subsurface { - class GUITextBlock : GUIComponent + public class GUITextBlock : GUIComponent { protected string text; @@ -21,8 +21,6 @@ namespace Subsurface public bool Wrap; - - public override Vector4 Padding { get { return padding; } @@ -75,15 +73,6 @@ namespace Subsurface { } - - public GUITextBlock(Rectangle rect, string text, GUIStyle style, Alignment alignment = Alignment.TopLeft, Alignment textAlignment = Alignment.TopLeft, GUIComponent parent = null, bool wrap = false, SpriteFont font =null) - : this (rect, text, null, null, alignment, textAlignment, style, parent, wrap) - { - this.Font = font == null ? GUI.Font : font; - - SetTextPos(); - } - public GUITextBlock(Rectangle rect, string text, Color? color, Color? textColor, Alignment textAlignment = Alignment.Left, GUIStyle style = null, GUIComponent parent = null, bool wrap = false) : this(rect, text,color, textColor, Alignment.TopLeft, textAlignment, style, parent, wrap) { @@ -105,24 +94,36 @@ namespace Subsurface public GUITextBlock(Rectangle rect, string text, Color? color, Color? textColor, Alignment alignment, Alignment textAlignment = Alignment.Left, GUIStyle style = null, GUIComponent parent = null, bool wrap = false) - :base (style) + : this (rect, text, style, alignment, textAlignment, parent, wrap, null) { + if (color != null) this.color = (Color)color; + if (textColor != null) this.textColor = (Color)textColor; + } + + public GUITextBlock(Rectangle rect, string text, GUIStyle style, Alignment alignment = Alignment.TopLeft, Alignment textAlignment = Alignment.TopLeft, GUIComponent parent = null, bool wrap = false, SpriteFont font = null) + :base (style) + { + this.Font = font == null ? GUI.Font : font; + this.rect = rect; - if (color!=null) this.color = (Color)color; - if (textColor!=null) this.textColor = (Color)textColor; this.text = text; this.alignment = alignment; - + this.textAlignment = textAlignment; - + if (parent != null) parent.AddChild(this); this.Wrap = wrap; SetTextPos(); + + if (rect.Height == 0) + { + this.rect.Height = (int)Font.MeasureString(Text).Y; + } } private void SetTextPos() @@ -201,6 +202,8 @@ namespace Subsurface public override void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + Color currColor = color; if (state == ComponentState.Hover) currColor = hoverColor; if (state == ComponentState.Selected) currColor = selectedColor; diff --git a/Subsurface/Source/GUI/GUITextBox.cs b/Subsurface/Source/GUI/GUITextBox.cs index 4401d2cd0..d1c1f2b25 100644 --- a/Subsurface/Source/GUI/GUITextBox.cs +++ b/Subsurface/Source/GUI/GUITextBox.cs @@ -153,6 +153,8 @@ namespace Subsurface MouseState previousMouse; public override void Update(float deltaTime) { + if (!Visible) return; + if (flashTimer > 0.0f) flashTimer -= deltaTime; if (!Enabled) return; @@ -186,6 +188,8 @@ namespace Subsurface public override void Draw(SpriteBatch spriteBatch) { + if (!Visible) return; + DrawChildren(spriteBatch); Vector2 caretPos = textBlock.CaretPos; diff --git a/Subsurface/Source/GUI/GUITickBox.cs b/Subsurface/Source/GUI/GUITickBox.cs index 0564b2bb5..6caa9a870 100644 --- a/Subsurface/Source/GUI/GUITickBox.cs +++ b/Subsurface/Source/GUI/GUITickBox.cs @@ -4,7 +4,7 @@ using Microsoft.Xna.Framework.Input; namespace Subsurface { - class GUITickBox : GUIComponent + public class GUITickBox : GUIComponent { GUIFrame box; GUITextBlock text; @@ -41,25 +41,24 @@ namespace Subsurface box.HoverColor = Color.Gray; box.SelectedColor = Color.DarkGray; + text = new GUITextBlock(new Rectangle(rect.X + 40, rect.Y, 200, rect.Height), label, Color.Transparent, Color.White, Alignment.TopLeft, null, this); + this.rect = new Rectangle(box.Rect.X, box.Rect.Y, 240, rect.Height); + Enabled = true; } public override void Update(float deltaTime) { - if (rect.Width ==420) - { - int asd = 1; - } - //base.Update(deltaTime); + if (!Visible || !Enabled) return; - if (!Enabled) return; + if (text.Rect.Contains(PlayerInput.MousePosition)) MouseOn = this; if (box.Rect.Contains(PlayerInput.MousePosition)) { - - + //ToolTip = this.ToolTip; + MouseOn = this; box.State = ComponentState.Hover; @@ -84,10 +83,7 @@ namespace Subsurface public override void Draw(SpriteBatch spriteBatch) { - if (rect.Width == 420) - { - int asd = 1; - } + if (!Visible) return; DrawChildren(spriteBatch); diff --git a/Subsurface/Source/GUI/TitleScreen.cs b/Subsurface/Source/GUI/TitleScreen.cs index 842e51bc1..f5106ce51 100644 --- a/Subsurface/Source/GUI/TitleScreen.cs +++ b/Subsurface/Source/GUI/TitleScreen.cs @@ -17,13 +17,26 @@ namespace Subsurface float state; - public Vector2 Position; + public Vector2 CenterPosition; + + public Vector2 TitlePosition; + + public Vector2 TitleSize + { + get { return new Vector2(titleTexture.Width, titleTexture.Height); } + } + + public float Scale + { + get; + private set; + } public TitleScreen(GraphicsDevice graphics) { - backgroundTexture = Game1.TextureLoader.FromFile("Content/UI/titleBackground.png"); - monsterTexture = Game1.TextureLoader.FromFile("Content/UI/titleMonster.png"); - titleTexture = Game1.TextureLoader.FromFile("Content/UI/titleText.png"); + backgroundTexture = TextureLoader.FromFile("Content/UI/titleBackground.png"); + monsterTexture = TextureLoader.FromFile("Content/UI/titleMonster.png"); + titleTexture = TextureLoader.FromFile("Content/UI/titleText.png"); renderTarget = new RenderTarget2D(graphics, Game1.GraphicsWidth, Game1.GraphicsHeight); @@ -40,46 +53,44 @@ namespace Subsurface graphics.SetRenderTarget(renderTarget); //Debug.WriteLine(stopwatch.Elapsed.TotalMilliseconds); - float scale = Game1.GraphicsHeight/2048.0f; + Scale = Game1.GraphicsHeight/1500.0f; state += deltaTime; - Vector2 center = new Vector2(Game1.GraphicsWidth*0.3f, Game1.GraphicsHeight/2.0f) + Position*scale; + if (loadState>-1) + { + CenterPosition = new Vector2(Game1.GraphicsWidth*0.3f, Game1.GraphicsHeight/2.0f); + TitlePosition = CenterPosition + new Vector2(-0.0f + (float)Math.Sqrt(state) * 220.0f, 0.0f) * Scale; + TitlePosition.X = Math.Min(TitlePosition.X, (float)Game1.GraphicsWidth / 2.0f); + } - Vector2 titlePos = center + new Vector2(-0.0f + (float)Math.Sqrt(state) * 220.0f, 0.0f) * scale; - titlePos.X = Math.Min(titlePos.X, (float)Game1.GraphicsWidth / 2.0f); spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied); graphics.Clear(Color.Black); - spriteBatch.Draw(backgroundTexture, center, null, Color.White * Math.Min(state / 5.0f, 1.0f), 0.0f, + spriteBatch.Draw(backgroundTexture, CenterPosition, null, Color.White * Math.Min(state / 5.0f, 1.0f), 0.0f, new Vector2(backgroundTexture.Width / 2.0f, backgroundTexture.Height / 2.0f), - scale, SpriteEffects.None, 0.2f); + Scale*1.5f, SpriteEffects.None, 0.2f); spriteBatch.Draw(monsterTexture, - center + new Vector2(state * 100.0f - 1200.0f, state * 30.0f - 100.0f) * scale, null, - Color.White, 0.0f, Vector2.Zero, scale, SpriteEffects.None, 0.1f); + CenterPosition + new Vector2((state % 40) * 100.0f - 1800.0f, (state % 40) * 30.0f - 200.0f) * Scale, null, + Color.White, 0.0f, Vector2.Zero, Scale, SpriteEffects.None, 0.1f); spriteBatch.Draw(titleTexture, - titlePos, null, - Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), scale, SpriteEffects.None, 0.0f); + TitlePosition, null, + Color.White * Math.Min((state - 1.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), Scale, SpriteEffects.None, 0.0f); spriteBatch.End(); graphics.SetRenderTarget(null); - Matrix transform = Matrix.CreateTranslation( - new Vector3(Game1.GraphicsWidth / 2.0f, - Game1.GraphicsHeight / 2.0f, 0)); - - Hull.renderer.RenderBack(spriteBatch, renderTarget, transform); - - + Hull.renderer.RenderBack(spriteBatch, renderTarget, 0.0f); + spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.NonPremultiplied); spriteBatch.Draw(titleTexture, - titlePos, null, - Color.White * Math.Min((state - 3.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), scale, SpriteEffects.None, 0.0f); + TitlePosition, null, + Color.White * Math.Min((state - 3.0f) / 5.0f, 1.0f), 0.0f, new Vector2(titleTexture.Width / 2.0f, titleTexture.Height / 2.0f), Scale, SpriteEffects.None, 0.0f); string loadText = ""; if (loadState == 100.0f) diff --git a/Subsurface/Source/Game1.cs b/Subsurface/Source/Game1.cs index 9ffae0f04..748c79ed4 100644 --- a/Subsurface/Source/Game1.cs +++ b/Subsurface/Source/Game1.cs @@ -53,7 +53,7 @@ namespace Subsurface public static ParticleManager ParticleManager; - public static TextureLoader TextureLoader; + //public static TextureLoader TextureLoader; public static World World; @@ -153,7 +153,7 @@ namespace Subsurface ConvertUnits.SetDisplayUnitToSimUnitRatio(Physics.DisplayToSimRation); spriteBatch = new SpriteBatch(GraphicsDevice); - TextureLoader = new TextureLoader(GraphicsDevice); + TextureLoader.Init(GraphicsDevice); titleScreenOpen = true; TitleScreen = new TitleScreen(GraphicsDevice); @@ -164,9 +164,7 @@ namespace Subsurface private float loadState = 0.0f; private IEnumerable Load() { - GUI.Font = ToolBox.TryLoadFont("SpriteFont1", Content); - GUI.SmallFont = ToolBox.TryLoadFont("SmallFont", Content); - GUI.LargeFont = ToolBox.TryLoadFont("LargeFont", Content); + GUI.Init(Content); sw = new Stopwatch(); diff --git a/Subsurface/Source/GameSession/CrewManager.cs b/Subsurface/Source/GameSession/CrewManager.cs index 5f97e700e..f9ab24ad9 100644 --- a/Subsurface/Source/GameSession/CrewManager.cs +++ b/Subsurface/Source/GameSession/CrewManager.cs @@ -53,8 +53,8 @@ namespace Subsurface characterInfos.Add(new CharacterInfo(subElement)); } } - - public bool SelectCharacter(object selection) + + public bool SelectCharacter(GUIComponent component, object selection) { //listBox.Select(selection); Character character = selection as Character; @@ -137,7 +137,7 @@ namespace Subsurface AddCharacter(character); } - if (characters.Count > 0) SelectCharacter(characters[0]); + if (characters.Count > 0) SelectCharacter(null, characters[0]); } public void EndShift() diff --git a/Subsurface/Source/GameSession/GameModes/SinglePlayerMode.cs b/Subsurface/Source/GameSession/GameModes/SinglePlayerMode.cs index fcb4e90c4..3d826c44c 100644 --- a/Subsurface/Source/GameSession/GameModes/SinglePlayerMode.cs +++ b/Subsurface/Source/GameSession/GameModes/SinglePlayerMode.cs @@ -47,7 +47,7 @@ namespace Subsurface CargoManager = new CargoManager(); - endShiftButton = new GUIButton(new Rectangle(Game1.GraphicsWidth - 220, 20, 200, 25), "End shift", Alignment.TopLeft, GUI.style); + endShiftButton = new GUIButton(new Rectangle(Game1.GraphicsWidth - 220, 20, 200, 25), "End shift", Alignment.TopLeft, GUI.Style); endShiftButton.OnClicked = EndShift; for (int i = 0; i < 3; i++) diff --git a/Subsurface/Source/GameSession/GameModes/TutorialMode.cs b/Subsurface/Source/GameSession/GameModes/TutorialMode.cs index 74c703ccf..88b91fa1d 100644 --- a/Subsurface/Source/GameSession/GameModes/TutorialMode.cs +++ b/Subsurface/Source/GameSession/GameModes/TutorialMode.cs @@ -543,7 +543,7 @@ namespace Subsurface messageBox.Buttons[0].OnClicked += Restart; messageBox.Buttons[0].OnClicked += messageBox.Close; - messageBox.Buttons[1].UserData = MainMenuScreen.Tabs.Main; + //messageBox.Buttons[1].UserData = MainMenuScreen.Tabs.Main; messageBox.Buttons[1].OnClicked = Game1.MainMenuScreen.SelectTab; messageBox.Buttons[1].OnClicked += messageBox.Close; @@ -605,12 +605,12 @@ namespace Subsurface height += wrappedText.Split('\n').Length*25; - var infoBlock = new GUIFrame(new Rectangle(-20, 20, width, height), null, Alignment.TopRight, GUI.style); + var infoBlock = new GUIFrame(new Rectangle(-20, 20, width, height), null, Alignment.TopRight, GUI.Style); //infoBlock.Color = infoBlock.Color * 0.8f; infoBlock.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); infoBlock.Flash(Color.Green); - new GUITextBlock(new Rectangle(10, 10, width - 40, height), text, GUI.style, infoBlock, true); + new GUITextBlock(new Rectangle(10, 10, width - 40, height), text, GUI.Style, infoBlock, true); GUI.PlayMessageSound(); diff --git a/Subsurface/Source/GameSettings.cs b/Subsurface/Source/GameSettings.cs index bfe7f1ee4..74b84e378 100644 --- a/Subsurface/Source/GameSettings.cs +++ b/Subsurface/Source/GameSettings.cs @@ -37,6 +37,12 @@ namespace Subsurface private set; } + public bool AutoCheckUpdates + { + get; + set; + } + public GameSettings(string filePath) { Load(filePath); @@ -68,6 +74,8 @@ namespace Subsurface MasterServerUrl = ToolBox.GetAttributeString(doc.Root, "masterserverurl", ""); + AutoCheckUpdates = ToolBox.GetAttributeBool(doc.Root, "autocheckupdates", true); + foreach (XElement subElement in doc.Root.Elements()) { switch (subElement.Name.ToString().ToLower()) @@ -91,7 +99,10 @@ namespace Subsurface doc.Add(new XElement("config")); } - doc.Root.Add(new XAttribute("masterserverurl", MasterServerUrl)); + doc.Root.Add( + new XAttribute("masterserverurl", MasterServerUrl), + new XAttribute("autocheckupdates", AutoCheckUpdates)); + XElement gMode = doc.Root.Element("graphicsmode"); if (gMode == null) diff --git a/Subsurface/Source/Items/CharacterInventory.cs b/Subsurface/Source/Items/CharacterInventory.cs index 91fb609f0..f2af51d79 100644 --- a/Subsurface/Source/Items/CharacterInventory.cs +++ b/Subsurface/Source/Items/CharacterInventory.cs @@ -29,7 +29,7 @@ namespace Subsurface { this.character = character; - if (icons == null) icons = Game1.TextureLoader.FromFile("Content/UI/inventoryIcons.png"); + if (icons == null) icons = TextureLoader.FromFile("Content/UI/inventoryIcons.png"); slotPositions = new Vector2[limbSlots.Length]; diff --git a/Subsurface/Source/Items/Components/ItemComponent.cs b/Subsurface/Source/Items/Components/ItemComponent.cs index e65b0a8ba..b259e758e 100644 --- a/Subsurface/Source/Items/Components/ItemComponent.cs +++ b/Subsurface/Source/Items/Components/ItemComponent.cs @@ -216,7 +216,7 @@ namespace Subsurface.Items.Components guiFrame = new GUIFrame( new Rectangle((int)rect.X, (int)rect.Y, (int)rect.Z, (int)rect.W), - new Color(color.X, color.Y, color.Z, color.W), alignment, GUI.style); + new Color(color.X, color.Y, color.Z, color.W), alignment, GUI.Style); //guiFrame.Alpha = color.W; break; diff --git a/Subsurface/Source/Items/Components/Label.cs b/Subsurface/Source/Items/Components/Label.cs index dbc63f08b..b09c58a5c 100644 --- a/Subsurface/Source/Items/Components/Label.cs +++ b/Subsurface/Source/Items/Components/Label.cs @@ -34,12 +34,12 @@ namespace Subsurface.Items.Components { if (textBox == null) { - textBox = new GUITextBox(Rectangle.Empty, GUI.style, GuiFrame); + textBox = new GUITextBox(Rectangle.Empty, GUI.Style, GuiFrame); textBox.Wrap = true; textBox.OnTextChanged = TextChanged; textBox.LimitText = true; - GUIButton button = new GUIButton(new Rectangle(0,0,100,15), "OK", null, Alignment.BottomRight, GUI.style, GuiFrame); + GUIButton button = new GUIButton(new Rectangle(0,0,100,15), "OK", null, Alignment.BottomRight, GUI.Style, GuiFrame); button.OnClicked = Close; } diff --git a/Subsurface/Source/Items/Components/Machines/Fabricator.cs b/Subsurface/Source/Items/Components/Machines/Fabricator.cs index 6e8d84d4c..fd4b52d8a 100644 --- a/Subsurface/Source/Items/Components/Machines/Fabricator.cs +++ b/Subsurface/Source/Items/Components/Machines/Fabricator.cs @@ -104,7 +104,7 @@ namespace Subsurface.Items.Components } } - private bool SelectItem(object obj) + private bool SelectItem(GUIComponent component, object obj) { FabricableItem targetItem = obj as FabricableItem; if (targetItem == null) return false; @@ -134,7 +134,7 @@ namespace Subsurface.Items.Components Alignment.Left, null, selectedItemFrame); - GUIButton button = new GUIButton(new Rectangle(0,0,100,20), "Create", Color.White, Alignment.CenterX | Alignment.Bottom, GUI.style, selectedItemFrame); + GUIButton button = new GUIButton(new Rectangle(0,0,100,20), "Create", Color.White, Alignment.CenterX | Alignment.Bottom, GUI.Style, selectedItemFrame); button.OnClicked = StartFabricating; button.UserData = targetItem; diff --git a/Subsurface/Source/Items/FixRequirement.cs b/Subsurface/Source/Items/FixRequirement.cs index e7a5a02a7..4545d71d5 100644 --- a/Subsurface/Source/Items/FixRequirement.cs +++ b/Subsurface/Source/Items/FixRequirement.cs @@ -82,11 +82,11 @@ namespace Subsurface int width = 400, height = 500; int x = 0, y = 0; - frame = new GUIFrame(new Rectangle(0, 0, width, height), Color.White * 0.8f, Alignment.Center, GUI.style); + frame = new GUIFrame(new Rectangle(0, 0, width, height), Color.White * 0.8f, Alignment.Center, GUI.Style); frame.Padding = new Vector4(20.0f, 20.0f, 20.0f, 20.0f); frame.UserData = item; - new GUITextBlock(new Rectangle(0,0,200,20), "Attempting to fix " + item.Name, GUI.style, frame); + new GUITextBlock(new Rectangle(0,0,200,20), "Attempting to fix " + item.Name, GUI.Style, frame); y = y + 40; foreach (FixRequirement requirement in item.FixRequirements) @@ -97,7 +97,7 @@ namespace Subsurface reqFrame.UserData = requirement; - var fixButton = new GUIButton(new Rectangle(0, 0, 50, 20), "Fix", GUI.style, reqFrame); + var fixButton = new GUIButton(new Rectangle(0, 0, 50, 20), "Fix", GUI.Style, reqFrame); fixButton.OnClicked = FixButtonPressed; fixButton.UserData = requirement; @@ -107,7 +107,7 @@ namespace Subsurface int y2 = 20; foreach (string itemName in requirement.requiredItems) { - var itemBlock = new GUITextBlock(new Rectangle(30, y2, 200, 15), itemName, GUI.style, reqFrame); + var itemBlock = new GUITextBlock(new Rectangle(30, y2, 200, 15), itemName, GUI.Style, reqFrame); itemBlock.Font = GUI.SmallFont; itemBlock.UserData = itemName; @@ -117,7 +117,7 @@ namespace Subsurface y2 = 20; foreach (Skill skill in requirement.requiredSkills) { - var skillBlock = new GUITextBlock(new Rectangle(150, y2, 200, 15), skill.Name + " - " + skill.Level, GUI.style, Alignment.Right, Alignment.TopLeft, reqFrame); + var skillBlock = new GUITextBlock(new Rectangle(150, y2, 200, 15), skill.Name + " - " + skill.Level, GUI.Style, Alignment.Right, Alignment.TopLeft, reqFrame); skillBlock.Font = GUI.SmallFont; skillBlock.UserData = skill; diff --git a/Subsurface/Source/Items/Item.cs b/Subsurface/Source/Items/Item.cs index 6ba5a8bc3..1ca61ddc9 100644 --- a/Subsurface/Source/Items/Item.cs +++ b/Subsurface/Source/Items/Item.cs @@ -635,11 +635,11 @@ namespace Subsurface } } - editingHUD = new GUIFrame(new Rectangle(x, y, width, 60 + (editableProperties.Count() + requiredItemCount) * 30), GUI.style); + editingHUD = new GUIFrame(new Rectangle(x, y, width, 60 + (editableProperties.Count() + requiredItemCount) * 30), GUI.Style); editingHUD.Padding = new Vector4(10, 10, 0, 0); editingHUD.UserData = this; - new GUITextBlock(new Rectangle(0, 0, 100, 20), prefab.Name, GUI.style, + new GUITextBlock(new Rectangle(0, 0, 100, 20), prefab.Name, GUI.Style, Alignment.TopLeft, Alignment.TopLeft, editingHUD, false, GUI.LargeFont); y += 20; @@ -649,15 +649,15 @@ namespace Subsurface if (prefab.IsLinkable) { new GUITextBlock(new Rectangle(0, 0, 0, 20), "Hold space to link to another item", - GUI.style, Alignment.TopLeft, Alignment.TopRight, editingHUD); + GUI.Style, Alignment.TopLeft, Alignment.TopRight, editingHUD); y += 25; } foreach (ItemComponent ic in components) { foreach (RelatedItem relatedItem in ic.requiredItems) { - new GUITextBlock(new Rectangle(0, y, 100, 20), ic.Name + ": " + relatedItem.Type.ToString() + " required", GUI.style, editingHUD); - GUITextBox namesBox = new GUITextBox(new Rectangle(0, y, 200, 20), Alignment.Right, GUI.style, editingHUD); + new GUITextBlock(new Rectangle(0, y, 100, 20), ic.Name + ": " + relatedItem.Type.ToString() + " required", GUI.Style, editingHUD); + GUITextBox namesBox = new GUITextBox(new Rectangle(0, y, 200, 20), Alignment.Right, GUI.Style, editingHUD); PropertyDescriptorCollection properties = TypeDescriptor.GetProperties (relatedItem); PropertyDescriptor property = properties.Find("JoinedNames", false); @@ -681,7 +681,7 @@ namespace Subsurface var editable = objectProperty.Attributes.OfType().FirstOrDefault(); if (editable != null) height = (int)(Math.Ceiling(editable.MaxLength / 20.0f) * 20.0f); - GUITextBox propertyBox = new GUITextBox(new Rectangle(100, y, 200, height), GUI.style, editingHUD); + GUITextBox propertyBox = new GUITextBox(new Rectangle(100, y, 200, height), GUI.Style, editingHUD); if (height>20) propertyBox.Wrap = true; object value = objectProperty.GetValue(); diff --git a/Subsurface/Source/Map/Levels/Level.cs b/Subsurface/Source/Map/Levels/Level.cs index c60253e88..1db919d70 100644 --- a/Subsurface/Source/Map/Levels/Level.cs +++ b/Subsurface/Source/Map/Levels/Level.cs @@ -97,7 +97,7 @@ namespace Subsurface public Level(string seed, float difficulty, int width, int height, int siteInterval) { - if (shaftTexture == null) shaftTexture = Game1.TextureLoader.FromFile("Content/Map/shaft.png"); + if (shaftTexture == null) shaftTexture = TextureLoader.FromFile("Content/Map/shaft.png"); if (basicEffect==null) { @@ -106,7 +106,7 @@ namespace Subsurface basicEffect.VertexColorEnabled = false; basicEffect.TextureEnabled = true; - basicEffect.Texture = Game1.TextureLoader.FromFile("Content/Map/iceSurface.png"); + basicEffect.Texture = TextureLoader.FromFile("Content/Map/iceSurface.png"); } this.seed = seed; diff --git a/Subsurface/Source/Map/Lights/ConvexHull.cs b/Subsurface/Source/Map/Lights/ConvexHull.cs index b77f1f36c..8f0e39254 100644 --- a/Subsurface/Source/Map/Lights/ConvexHull.cs +++ b/Subsurface/Source/Map/Lights/ConvexHull.cs @@ -46,7 +46,7 @@ namespace Subsurface.Lights penumbraEffect.TextureEnabled = true; //shadowEffect.VertexColorEnabled = true; penumbraEffect.LightingEnabled = false; - penumbraEffect.Texture = Game1.TextureLoader.FromFile("Content/Lights/penumbra.png"); + penumbraEffect.Texture = TextureLoader.FromFile("Content/Lights/penumbra.png"); } if (penumbraVertices==null) diff --git a/Subsurface/Source/Map/Lights/Light.cs b/Subsurface/Source/Map/Lights/Light.cs index 400ad8efc..5a343f4fb 100644 --- a/Subsurface/Source/Map/Lights/Light.cs +++ b/Subsurface/Source/Map/Lights/Light.cs @@ -43,7 +43,7 @@ namespace Subsurface.Lights if (lightTexture == null) { - lightTexture = Game1.TextureLoader.FromFile("Content/Lights/light.png"); + lightTexture = TextureLoader.FromFile("Content/Lights/light.png"); } texture = lightTexture; diff --git a/Subsurface/Source/Map/Lights/LightManager.cs b/Subsurface/Source/Map/Lights/LightManager.cs index 0787febbf..a270b226c 100644 --- a/Subsurface/Source/Map/Lights/LightManager.cs +++ b/Subsurface/Source/Map/Lights/LightManager.cs @@ -41,7 +41,7 @@ namespace Subsurface.Lights if (alphaClearTexture==null) { - alphaClearTexture = Game1.TextureLoader.FromFile("Content/Lights/alphaOne.png"); + alphaClearTexture = TextureLoader.FromFile("Content/Lights/alphaOne.png"); } } diff --git a/Subsurface/Source/Map/Map.cs b/Subsurface/Source/Map/Map.cs index dfc0a72a4..89e5924da 100644 --- a/Subsurface/Source/Map/Map.cs +++ b/Subsurface/Source/Map/Map.cs @@ -69,8 +69,8 @@ namespace Subsurface connections = new List(); if (iceTexture==null) iceTexture = new Sprite("Content/Map/iceSurface.png", Vector2.Zero); - if (iceCraters == null) iceCraters = Game1.TextureLoader.FromFile("Content/Map/iceCraters.png"); - if (iceCrack == null) iceCrack = Game1.TextureLoader.FromFile("Content/Map/iceCrack.png"); + if (iceCraters == null) iceCraters = TextureLoader.FromFile("Content/Map/iceCraters.png"); + if (iceCrack == null) iceCrack = TextureLoader.FromFile("Content/Map/iceCrack.png"); Rand.SetSyncedSeed(ToolBox.StringToInt(this.seed)); diff --git a/Subsurface/Source/Map/WaterRenderer.cs b/Subsurface/Source/Map/WaterRenderer.cs index 5d63583ab..ade28cd35 100644 --- a/Subsurface/Source/Map/WaterRenderer.cs +++ b/Subsurface/Source/Map/WaterRenderer.cs @@ -31,10 +31,10 @@ namespace Subsurface waterEffect = new Effect(graphicsDevice, bytecode); - waterTexture = Game1.TextureLoader.FromFile("Content/waterbump.jpg"); - waterEffect.Parameters["xWaveWidth"].SetValue(0.1f); - waterEffect.Parameters["xWaveHeight"].SetValue(0.1f); - waterEffect.Parameters["xBlurDistance"].SetValue(0.0007f); + waterTexture = TextureLoader.FromFile("Content/waterbump.png"); + waterEffect.Parameters["xWaveWidth"].SetValue(0.05f); + waterEffect.Parameters["xWaveHeight"].SetValue(0.05f); + if (basicEffect==null) { @@ -45,13 +45,14 @@ namespace Subsurface } } - public void RenderBack (SpriteBatch spriteBatch, RenderTarget2D texture, Matrix transform) + public void RenderBack (SpriteBatch spriteBatch, RenderTarget2D texture, float blurAmount = 0.0007f) { spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.LinearWrap); waterEffect.CurrentTechnique = waterEffect.Techniques["WaterShader"]; waterEffect.Parameters["xTexture"].SetValue(texture); - waterEffect.Parameters["xWavePos"].SetValue(wavePos); + waterEffect.Parameters["xWavePos"].SetValue(wavePos); + waterEffect.Parameters["xBlurDistance"].SetValue(blurAmount); waterEffect.CurrentTechnique.Passes[0].Apply(); wavePos.X += 0.0001f; diff --git a/Subsurface/Source/Map/WayPoint.cs b/Subsurface/Source/Map/WayPoint.cs index da17484b7..c4e83ed75 100644 --- a/Subsurface/Source/Map/WayPoint.cs +++ b/Subsurface/Source/Map/WayPoint.cs @@ -150,17 +150,17 @@ namespace Subsurface editingHUD.Padding = new Vector4(10, 10, 0, 0); editingHUD.UserData = this; - new GUITextBlock(new Rectangle(0, 0, 100, 20), "Editing waypoint", GUI.style, editingHUD); - new GUITextBlock(new Rectangle(0, 20, 100, 20), "Hold space to link to another entity", GUI.style, editingHUD); - new GUITextBlock(new Rectangle(0, 40, 100, 20), "Spawnpoint: ", GUI.style, editingHUD); + new GUITextBlock(new Rectangle(0, 0, 100, 20), "Editing waypoint", GUI.Style, editingHUD); + new GUITextBlock(new Rectangle(0, 20, 100, 20), "Hold space to link to another entity", GUI.Style, editingHUD); + new GUITextBlock(new Rectangle(0, 40, 100, 20), "Spawnpoint: ", GUI.Style, editingHUD); - var spawnTypeText = new GUITextBlock(new Rectangle(0, 40, 200, 20), spawnType.ToString(), GUI.style, Alignment.Right, Alignment.TopLeft, editingHUD); + var spawnTypeText = new GUITextBlock(new Rectangle(0, 40, 200, 20), spawnType.ToString(), GUI.Style, Alignment.Right, Alignment.TopLeft, editingHUD); - var button = new GUIButton(new Rectangle(-30,0,20,20), "-", Alignment.Right, GUI.style, spawnTypeText); + var button = new GUIButton(new Rectangle(-30,0,20,20), "-", Alignment.Right, GUI.Style, spawnTypeText); button.UserData = -1; button.OnClicked = ChangeSpawnType; - button = new GUIButton(new Rectangle(0, 0, 20, 20), "+", Alignment.Right, GUI.style, spawnTypeText); + button = new GUIButton(new Rectangle(0, 0, 20, 20), "+", Alignment.Right, GUI.Style, spawnTypeText); button.UserData = 1; button.OnClicked = ChangeSpawnType; @@ -169,14 +169,14 @@ namespace Subsurface y = 40+20; new GUITextBlock(new Rectangle(0, y, 100, 20), "ID Card tags:", Color.Transparent, Color.Black, Alignment.TopLeft, null, editingHUD); - GUITextBox propertyBox = new GUITextBox(new Rectangle(100, y, 200, 20), GUI.style, editingHUD); + GUITextBox propertyBox = new GUITextBox(new Rectangle(100, y, 200, 20), GUI.Style, editingHUD); propertyBox.Text = string.Join(", ", idCardTags); propertyBox.OnEnter = EnterIDCardTags; propertyBox.OnTextChanged = TextBoxChanged; y = y + 30; new GUITextBlock(new Rectangle(0, y, 100, 20), "Assigned job:", Color.Transparent, Color.Black, Alignment.TopLeft, null, editingHUD); - propertyBox = new GUITextBox(new Rectangle(100, y, 200, 20), GUI.style, editingHUD); + propertyBox = new GUITextBox(new Rectangle(100, y, 200, 20), GUI.Style, editingHUD); propertyBox.Text = (assignedJob == null) ? "None" : assignedJob.Name; propertyBox.OnEnter = EnterAssignedJob; diff --git a/Subsurface/Source/Networking/GameServer.cs b/Subsurface/Source/Networking/GameServer.cs index eb175592c..bf64c528c 100644 --- a/Subsurface/Source/Networking/GameServer.cs +++ b/Subsurface/Source/Networking/GameServer.cs @@ -36,7 +36,7 @@ namespace Subsurface.Networking public GameServer(string name, int port, bool isPublic = false, string password = "", bool attemptUPnP = false, int maxPlayers = 10) { - var endRoundButton = new GUIButton(new Rectangle(Game1.GraphicsWidth - 290, 20, 150, 25), "End round", Alignment.TopLeft, GUI.style, inGameHUD); + var endRoundButton = new GUIButton(new Rectangle(Game1.GraphicsWidth - 290, 20, 150, 25), "End round", Alignment.TopLeft, GUI.Style, inGameHUD); endRoundButton.OnClicked = EndButtonHit; this.name = name; @@ -419,7 +419,7 @@ namespace Subsurface.Networking AddChatMessage(sender.name + " has joined the server", ChatMessageType.Server); - UpdateNetLobby(null); + UpdateNetLobby(null, null); } } else if (inc.SenderConnection.Status == NetConnectionStatus.Disconnected) @@ -798,10 +798,14 @@ namespace Subsurface.Networking y += 50; } - } public bool UpdateNetLobby(object obj) + { + return UpdateNetLobby(null, obj); + } + + public bool UpdateNetLobby(GUIComponent component, object obj) { NetOutgoingMessage msg = server.CreateMessage(); msg.Write((byte)PacketTypes.UpdateNetLobby); diff --git a/Subsurface/Source/Networking/NetworkMember.cs b/Subsurface/Source/Networking/NetworkMember.cs index 9bdf0a3de..e4366b75d 100644 --- a/Subsurface/Source/Networking/NetworkMember.cs +++ b/Subsurface/Source/Networking/NetworkMember.cs @@ -96,15 +96,15 @@ namespace Subsurface.Networking Game1.GraphicsWidth - 20 - width, Game1.GraphicsHeight - 40 - 25 - height, width, height), - Color.White * 0.5f, GUI.style, inGameHUD); + Color.White * 0.5f, GUI.Style, inGameHUD); chatMsgBox = new GUITextBox( new Rectangle(chatBox.Rect.X, chatBox.Rect.Y + chatBox.Rect.Height + 20, chatBox.Rect.Width, 25), - Color.White * 0.5f, Color.Black, Alignment.TopLeft, Alignment.Left, GUI.style, inGameHUD); + Color.White * 0.5f, Color.Black, Alignment.TopLeft, Alignment.Left, GUI.Style, inGameHUD); chatMsgBox.Font = GUI.SmallFont; chatMsgBox.OnEnter = EnterChatMessage; - crewButton = new GUIButton(new Rectangle(chatBox.Rect.Right-80, chatBox.Rect.Y-30, 80, 20), "Crew", GUI.style, inGameHUD); + crewButton = new GUIButton(new Rectangle(chatBox.Rect.Right-80, chatBox.Rect.Y-30, 80, 20), "Crew", GUI.Style, inGameHUD); crewButton.OnClicked = ToggleCrewFrame; } @@ -112,10 +112,10 @@ namespace Subsurface.Networking { int width = 500, height = 400; - crewFrame = new GUIFrame(new Rectangle(Game1.GraphicsWidth / 2 - width / 2, Game1.GraphicsHeight / 2 - height / 2, width, height), GUI.style); + crewFrame = new GUIFrame(new Rectangle(Game1.GraphicsWidth / 2 - width / 2, Game1.GraphicsHeight / 2 - height / 2, width, height), GUI.Style); crewFrame.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); - GUIListBox crewList = new GUIListBox(new Rectangle(0, 0, 200, 300), Color.White * 0.7f, GUI.style, crewFrame); + GUIListBox crewList = new GUIListBox(new Rectangle(0, 0, 200, 300), Color.White * 0.7f, GUI.Style, crewFrame); crewList.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); crewList.OnSelected = SelectCharacter; @@ -138,11 +138,11 @@ namespace Subsurface.Networking new GUIImage(new Rectangle(-10, -10, 0, 0), character.AnimController.limbs[0].sprite, Alignment.Left, frame); } - var closeButton = new GUIButton(new Rectangle(0,0, 80, 20), "Close", Alignment.BottomCenter, GUI.style, crewFrame); + var closeButton = new GUIButton(new Rectangle(0,0, 80, 20), "Close", Alignment.BottomCenter, GUI.Style, crewFrame); closeButton.OnClicked = ToggleCrewFrame; } - private bool SelectCharacter(object obj) + private bool SelectCharacter(GUIComponent component, object obj) { Character character = obj as Character; if (obj == null) return false; @@ -152,7 +152,7 @@ namespace Subsurface.Networking var previewPlayer = new GUIFrame( new Rectangle(0,0, 230, 300), - new Color(0.0f, 0.0f, 0.0f, 0.8f), Alignment.TopRight, GUI.style, crewFrame); + new Color(0.0f, 0.0f, 0.0f, 0.8f), Alignment.TopRight, GUI.Style, crewFrame); previewPlayer.Padding = new Vector4(5.0f, 5.0f, 5.0f, 5.0f); previewPlayer.UserData = "selectedcharacter"; diff --git a/Subsurface/Source/PlayerInput.cs b/Subsurface/Source/PlayerInput.cs index 913144525..bc687faea 100644 --- a/Subsurface/Source/PlayerInput.cs +++ b/Subsurface/Source/PlayerInput.cs @@ -65,7 +65,7 @@ namespace Subsurface } } - static class PlayerInput + public static class PlayerInput { static MouseState mouseState, oldMouseState; static KeyboardState keyboardState, oldKeyboardState; diff --git a/Subsurface/Source/Screens/EditCharacterScreen.cs b/Subsurface/Source/Screens/EditCharacterScreen.cs index 796dc3edb..5f1746521 100644 --- a/Subsurface/Source/Screens/EditCharacterScreen.cs +++ b/Subsurface/Source/Screens/EditCharacterScreen.cs @@ -43,18 +43,18 @@ namespace Subsurface cam = new Camera(); - GUIpanel = new GUIFrame(new Rectangle(0, 0, 300, Game1.GraphicsHeight), GUI.style); + GUIpanel = new GUIFrame(new Rectangle(0, 0, 300, Game1.GraphicsHeight), GUI.Style); GUIpanel.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); - physicsButton = new GUIButton(new Rectangle(0, 50, 200, 25), "Physics", Alignment.Left, GUI.style, GUIpanel); + physicsButton = new GUIButton(new Rectangle(0, 50, 200, 25), "Physics", Alignment.Left, GUI.Style, GUIpanel); physicsButton.OnClicked += TogglePhysics; - new GUITextBlock(new Rectangle(0, 80, 0, 25), "Limbs:", GUI.style, GUIpanel); - limbList = new GUIListBox(new Rectangle(0, 110, 0, 250), Color.White * 0.7f, GUI.style, GUIpanel); + new GUITextBlock(new Rectangle(0, 80, 0, 25), "Limbs:", GUI.Style, GUIpanel); + limbList = new GUIListBox(new Rectangle(0, 110, 0, 250), Color.White * 0.7f, GUI.Style, GUIpanel); limbList.OnSelected = SelectLimb; - new GUITextBlock(new Rectangle(0, 360, 0, 25), "Joints:", GUI.style, GUIpanel); - jointList = new GUIListBox(new Rectangle(0, 390, 0, 250), Color.White * 0.7f, GUI.style, GUIpanel); + new GUITextBlock(new Rectangle(0, 360, 0, 25), "Joints:", GUI.Style, GUIpanel); + jointList = new GUIListBox(new Rectangle(0, 390, 0, 250), Color.White * 0.7f, GUI.Style, GUIpanel); while (Character.CharacterList.Count > 1) { @@ -304,7 +304,7 @@ namespace Subsurface } } - private bool SelectLimb(object selection) + private bool SelectLimb(GUIComponent component, object selection) { try { diff --git a/Subsurface/Source/Screens/EditMapScreen.cs b/Subsurface/Source/Screens/EditMapScreen.cs index 1cb4753e0..779eb10b2 100644 --- a/Subsurface/Source/Screens/EditMapScreen.cs +++ b/Subsurface/Source/Screens/EditMapScreen.cs @@ -31,34 +31,34 @@ namespace Subsurface selectedTab = -1; - GUIpanel = new GUIFrame(new Rectangle(0, 0, 150, Game1.GraphicsHeight), GUI.style); + GUIpanel = new GUIFrame(new Rectangle(0, 0, 150, Game1.GraphicsHeight), GUI.Style); GUIpanel.Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); //GUIListBox constructionList = new GUIListBox(new Rectangle(0, 0, 0, 300), Color.White * 0.7f, GUIpanel); //constructionList.OnSelected = MapEntityPrefab.SelectPrefab; //constructionList.CheckSelected = MapEntityPrefab.GetSelected; - GUIButton button = new GUIButton(new Rectangle(0, 50, 100, 20), "Items", Alignment.Left, GUI.style, GUIpanel); + GUIButton button = new GUIButton(new Rectangle(0, 50, 100, 20), "Items", Alignment.Left, GUI.Style, GUIpanel); button.UserData = 0; button.OnClicked = SelectTab; - button = new GUIButton(new Rectangle(0, 80, 100, 20), "Structures", Alignment.Left, GUI.style, GUIpanel); + button = new GUIButton(new Rectangle(0, 80, 100, 20), "Structures", Alignment.Left, GUI.Style, GUIpanel); button.UserData = 1; button.OnClicked = SelectTab; - button = new GUIButton(new Rectangle(0, 140, 100, 20), "Character mode", Alignment.Left, GUI.style, GUIpanel); + button = new GUIButton(new Rectangle(0, 140, 100, 20), "Character mode", Alignment.Left, GUI.Style, GUIpanel); button.OnClicked = ToggleCharacterMode; GUItabs = new GUIComponent[2]; int width = 400, height = 400; - GUItabs[0] = new GUIFrame(new Rectangle(Game1.GraphicsWidth/2-width/2, Game1.GraphicsHeight/2-height/2, width, height), GUI.style); + GUItabs[0] = new GUIFrame(new Rectangle(Game1.GraphicsWidth/2-width/2, Game1.GraphicsHeight/2-height/2, width, height), GUI.Style); GUItabs[0].Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); - GUIListBox itemList = new GUIListBox(new Rectangle(0, 0, 0, 0), Color.White * 0.7f, GUI.style, GUItabs[0]); + GUIListBox itemList = new GUIListBox(new Rectangle(0, 0, 0, 0), Color.White * 0.7f, GUI.Style, GUItabs[0]); itemList.OnSelected = SelectPrefab; itemList.CheckSelected = MapEntityPrefab.GetSelected; - GUItabs[1] = new GUIFrame(new Rectangle(Game1.GraphicsWidth / 2 - width / 2, Game1.GraphicsHeight / 2 - height / 2, width, height), GUI.style); + GUItabs[1] = new GUIFrame(new Rectangle(Game1.GraphicsWidth / 2 - width / 2, Game1.GraphicsHeight / 2 - height / 2, width, height), GUI.Style); GUItabs[1].Padding = new Vector4(10.0f, 10.0f, 10.0f, 10.0f); - GUIListBox structureList = new GUIListBox(new Rectangle(0, 0, 0, 300), Color.White * 0.7f, GUI.style, GUItabs[1]); + GUIListBox structureList = new GUIListBox(new Rectangle(0, 0, 0, 300), Color.White * 0.7f, GUI.Style, GUItabs[1]); structureList.OnSelected = SelectPrefab; structureList.CheckSelected = MapEntityPrefab.GetSelected; @@ -154,7 +154,7 @@ namespace Subsurface return true; } - private bool SelectPrefab(object obj) + private bool SelectPrefab(GUIComponent component, object obj) { MapEntityPrefab.SelectPrefab(obj); selectedTab = -1; diff --git a/Subsurface/Source/Screens/GameScreen.cs b/Subsurface/Source/Screens/GameScreen.cs index a7f20762d..24f7a7e3a 100644 --- a/Subsurface/Source/Screens/GameScreen.cs +++ b/Subsurface/Source/Screens/GameScreen.cs @@ -246,7 +246,7 @@ namespace Subsurface //2. pass the renderTarget to the water shader to do the water effect //---------------------------------------------------------------------------------------- - Hull.renderer.RenderBack(spriteBatch, renderTargetWater, Cam.ShaderTransform); + Hull.renderer.RenderBack(spriteBatch, renderTargetWater); Array.Clear(Hull.renderer.vertices, 0, Hull.renderer.vertices.Length); Hull.renderer.PositionInBuffer = 0; diff --git a/Subsurface/Source/Screens/LobbyScreen.cs b/Subsurface/Source/Screens/LobbyScreen.cs index 266740951..3a12e1cc9 100644 --- a/Subsurface/Source/Screens/LobbyScreen.cs +++ b/Subsurface/Source/Screens/LobbyScreen.cs @@ -60,29 +60,29 @@ namespace Subsurface 180, Game1.GraphicsHeight - 80); - leftPanel = new GUIFrame(panelRect, GUI.style); + leftPanel = new GUIFrame(panelRect, GUI.Style); //leftPanel.Padding = GUI.style.smallPadding; new GUITextBlock(new Rectangle(0, 0, 200, 25), - "asdfdasfasdf", Color.Transparent, Color.White, Alignment.Left, GUI.style, leftPanel); + "asdfdasfasdf", Color.Transparent, Color.White, Alignment.Left, GUI.Style, leftPanel); GUITextBlock moneyText = new GUITextBlock(new Rectangle(0, 30, 200, 25), - "", Color.Transparent, Color.White, Alignment.Left, GUI.style, leftPanel); + "", Color.Transparent, Color.White, Alignment.Left, GUI.Style, leftPanel); moneyText.TextGetter = GetMoney; - GUIButton button = new GUIButton(new Rectangle(0, 70, 100, 30), "Map", null, Alignment.Left, GUI.style, leftPanel); + GUIButton button = new GUIButton(new Rectangle(0, 70, 100, 30), "Map", null, Alignment.Left, GUI.Style, leftPanel); button.UserData = PanelTab.Map; button.OnClicked = SelectRightPanel; - button = new GUIButton(new Rectangle(0, 110, 100, 30), "Crew", null, Alignment.Left, GUI.style, leftPanel); + button = new GUIButton(new Rectangle(0, 110, 100, 30), "Crew", null, Alignment.Left, GUI.Style, leftPanel); button.UserData = PanelTab.Crew; button.OnClicked = SelectRightPanel; - button = new GUIButton(new Rectangle(0, 150, 100, 30), "Hire", null, Alignment.Left, GUI.style, leftPanel); + button = new GUIButton(new Rectangle(0, 150, 100, 30), "Hire", null, Alignment.Left, GUI.Style, leftPanel); button.UserData = PanelTab.CurrentLocation; button.OnClicked = SelectRightPanel; - button = new GUIButton(new Rectangle(0, 190, 100, 30), "Store", null, Alignment.Left, GUI.style, leftPanel); + button = new GUIButton(new Rectangle(0, 190, 100, 30), "Store", null, Alignment.Left, GUI.Style, leftPanel); button.UserData = PanelTab.Store; button.OnClicked = SelectRightPanel; @@ -97,42 +97,42 @@ namespace Subsurface rightPanel = new GUIFrame[4]; - rightPanel[(int)PanelTab.Crew] = new GUIFrame(panelRect, GUI.style); + rightPanel[(int)PanelTab.Crew] = new GUIFrame(panelRect, GUI.Style); //rightPanel[(int)PanelTab.Crew].Padding = GUI.style.smallPadding; - new GUITextBlock(new Rectangle(0, 0, 200, 25), "Crew:", Color.Transparent, Color.White, Alignment.Left, GUI.style, rightPanel[(int)PanelTab.Crew]); + new GUITextBlock(new Rectangle(0, 0, 200, 25), "Crew:", Color.Transparent, Color.White, Alignment.Left, GUI.Style, rightPanel[(int)PanelTab.Crew]); - characterList = new GUIListBox(new Rectangle(0, 30, 300, 0), GUI.style, rightPanel[(int)PanelTab.Crew]); + characterList = new GUIListBox(new Rectangle(0, 30, 300, 0), GUI.Style, rightPanel[(int)PanelTab.Crew]); characterList.OnSelected = SelectCharacter; //--------------------------------------- - rightPanel[(int)PanelTab.Map] = new GUIFrame(panelRect, GUI.style); + rightPanel[(int)PanelTab.Map] = new GUIFrame(panelRect, GUI.Style); //rightPanel[(int)PanelTab.Map].Padding = GUI.style.smallPadding; startButton = new GUIButton(new Rectangle(0, 0, 100, 30), "Start", - Alignment.BottomRight, GUI.style, rightPanel[(int)PanelTab.Map]); + Alignment.BottomRight, GUI.Style, rightPanel[(int)PanelTab.Map]); startButton.OnClicked = StartShift; startButton.Enabled = false; //--------------------------------------- - rightPanel[(int)PanelTab.CurrentLocation] = new GUIFrame(panelRect, GUI.style); + rightPanel[(int)PanelTab.CurrentLocation] = new GUIFrame(panelRect, GUI.Style); //--------------------------------------- - rightPanel[(int)PanelTab.Store] = new GUIFrame(panelRect, GUI.style); + rightPanel[(int)PanelTab.Store] = new GUIFrame(panelRect, GUI.Style); - selectedItemList = new GUIListBox(new Rectangle(0, 0, 300, 400), Color.White * 0.7f, GUI.style, rightPanel[(int)PanelTab.Store]); + selectedItemList = new GUIListBox(new Rectangle(0, 0, 300, 400), Color.White * 0.7f, GUI.Style, rightPanel[(int)PanelTab.Store]); selectedItemList.OnSelected = DeselectItem; - var costText = new GUITextBlock(new Rectangle(0, 0, 200, 25), "Cost: ", GUI.style, Alignment.BottomLeft, Alignment.TopLeft, rightPanel[(int)PanelTab.Store]); + var costText = new GUITextBlock(new Rectangle(0, 0, 200, 25), "Cost: ", GUI.Style, Alignment.BottomLeft, Alignment.TopLeft, rightPanel[(int)PanelTab.Store]); costText.TextGetter = CostTextGetter; - buyButton = new GUIButton(new Rectangle(150, 0, 100, 25), "Buy", Alignment.Bottom, GUI.style, rightPanel[(int)PanelTab.Store]); + buyButton = new GUIButton(new Rectangle(150, 0, 100, 25), "Buy", Alignment.Bottom, GUI.Style, rightPanel[(int)PanelTab.Store]); buyButton.OnClicked = BuyItems; - itemList = new GUIListBox(new Rectangle(0, 0, 300, 400), Color.White * 0.7f, Alignment.TopRight, GUI.style, rightPanel[(int)PanelTab.Store]); + itemList = new GUIListBox(new Rectangle(0, 0, 300, 400), Color.White * 0.7f, Alignment.TopRight, GUI.Style, rightPanel[(int)PanelTab.Store]); itemList.OnSelected = SelectItem; foreach (MapEntityPrefab ep in MapEntityPrefab.list) @@ -158,18 +158,18 @@ namespace Subsurface private void UpdateLocationTab(Location location) { - rightPanel[(int)PanelTab.CurrentLocation] = new GUIFrame(rightPanel[(int)PanelTab.CurrentLocation].Rect, GUI.style); + rightPanel[(int)PanelTab.CurrentLocation] = new GUIFrame(rightPanel[(int)PanelTab.CurrentLocation].Rect, GUI.Style); rightPanel[(int)PanelTab.CurrentLocation].UserData = location; //rightPanel[(int)PanelTab.Hire].Padding = GUI.style.smallPadding; new GUITextBlock(new Rectangle(0, 0, 200, 25), - "Location: "+location.Name, GUI.style, rightPanel[(int)PanelTab.CurrentLocation]); + "Location: "+location.Name, GUI.Style, rightPanel[(int)PanelTab.CurrentLocation]); new GUITextBlock(new Rectangle(0, 20, 200, 25), - "("+location.Type.Name+")", GUI.style, rightPanel[(int)PanelTab.CurrentLocation]); + "("+location.Type.Name+")", GUI.Style, rightPanel[(int)PanelTab.CurrentLocation]); if (location.HireManager != null) { - hireList = new GUIListBox(new Rectangle(0, 60, 300, 0), GUI.style, Alignment.Left, rightPanel[(int)PanelTab.CurrentLocation]); + hireList = new GUIListBox(new Rectangle(0, 60, 300, 0), GUI.Style, Alignment.Left, rightPanel[(int)PanelTab.CurrentLocation]); hireList.OnSelected = SelectCharacter; hireList.ClearChildren(); @@ -177,14 +177,14 @@ namespace Subsurface { GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), - c.Name + " (" + c.Job.Name + ")", GUI.style, hireList); + c.Name + " (" + c.Job.Name + ")", GUI.Style, hireList); textBlock.UserData = c; textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), c.Salary.ToString(), null, null, - Alignment.TopRight, GUI.style, textBlock); + Alignment.TopRight, GUI.Style, textBlock); } } } @@ -234,7 +234,7 @@ namespace Subsurface { GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), - c.Name + " (" + c.Job.Name + ")", GUI.style, + c.Name + " (" + c.Job.Name + ")", GUI.Style, Alignment.Left, Alignment.Left, characterList); @@ -266,7 +266,7 @@ namespace Subsurface new Rectangle(0, 0, 0, 25), ep.Price.ToString(), null, null, - Alignment.TopRight, GUI.style, textBlock); + Alignment.TopRight, GUI.Style, textBlock); if (ep.sprite != null) { @@ -275,7 +275,7 @@ namespace Subsurface } } - private bool SelectItem(object obj) + private bool SelectItem(GUIComponent component, object obj) { MapEntityPrefab prefab = obj as MapEntityPrefab; if (prefab == null) return false; @@ -287,7 +287,7 @@ namespace Subsurface return false; } - private bool DeselectItem(object obj) + private bool DeselectItem(GUIComponent component, object obj) { MapEntityPrefab prefab = obj as MapEntityPrefab; if (prefab == null) return false; @@ -383,7 +383,7 @@ namespace Subsurface return "Money: " + ((Game1.GameSession == null) ? "" : gameMode.CrewManager.Money.ToString()); } - private bool SelectCharacter(object selection) + private bool SelectCharacter(GUIComponent component, object selection) { CharacterInfo characterInfo = selection as CharacterInfo; if (characterInfo == null) return false; @@ -394,7 +394,7 @@ namespace Subsurface { previewFrame = new GUIFrame(new Rectangle(350, 60, 300, 300), new Color(0.0f, 0.0f, 0.0f, 0.8f), - Alignment.Top, GUI.style, rightPanel[selectedRightPanel]); + Alignment.Top, GUI.Style, rightPanel[selectedRightPanel]); previewFrame.Padding = new Vector4(20.0f, 20.0f, 20.0f, 20.0f); previewFrame.UserData = characterInfo; @@ -403,7 +403,7 @@ namespace Subsurface if (selectedRightPanel == (int)PanelTab.CurrentLocation) { - GUIButton hireButton = new GUIButton(new Rectangle(0,0, 100, 20), "Hire", Alignment.BottomCenter, GUI.style, previewFrame); + GUIButton hireButton = new GUIButton(new Rectangle(0,0, 100, 20), "Hire", Alignment.BottomCenter, GUI.Style, previewFrame); hireButton.UserData = characterInfo; hireButton.OnClicked = HireCharacter; } diff --git a/Subsurface/Source/Screens/MainMenu.cs b/Subsurface/Source/Screens/MainMenu.cs index 75b258052..b19936f7c 100644 --- a/Subsurface/Source/Screens/MainMenu.cs +++ b/Subsurface/Source/Screens/MainMenu.cs @@ -9,7 +9,9 @@ namespace Subsurface { class MainMenuScreen : Screen { - public enum Tabs { Main = 0, NewGame = 1, LoadGame = 2, HostServer = 3 } + public enum Tabs { NewGame = 1, LoadGame = 2, HostServer = 3 } + + GUIFrame buttonsTab; private GUIFrame[] menuTabs; private GUIListBox mapList; @@ -27,145 +29,154 @@ namespace Subsurface public MainMenuScreen(Game1 game) { - menuTabs = new GUIFrame[Enum.GetValues(typeof(Tabs)).Length]; + menuTabs = new GUIFrame[Enum.GetValues(typeof(Tabs)).Length+1]; - Rectangle panelRect = new Rectangle( - Game1.GraphicsWidth / 2 - 250, - Game1.GraphicsHeight/ 2 - 250, - 500, 500); - menuTabs[(int)Tabs.Main] = new GUIFrame(panelRect, GUI.style); + + buttonsTab = new GUIFrame(new Rectangle(50, 200, 200, 500), Color.Transparent, Alignment.Left); //menuTabs[(int)Tabs.Main].Padding = GUI.style.smallPadding; - GUIButton button = new GUIButton(new Rectangle(0, 0, 0, 30), "Tutorial", Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.Main]); + Rectangle panelRect = new Rectangle( + Game1.GraphicsWidth / 2 - 250, + buttonsTab.Rect.Y, + 500, 360); + + GUIButton button = new GUIButton(new Rectangle(0, 0, 0, 30), "Tutorial", Alignment.CenterX, GUI.Style, buttonsTab); button.OnClicked = TutorialButtonClicked; - button = new GUIButton(new Rectangle(0, 70, 0, 30), "New Game", Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.Main]); + button = new GUIButton(new Rectangle(0, 70, 0, 30), "New Game", Alignment.CenterX, GUI.Style, buttonsTab); button.UserData = (int)Tabs.NewGame; button.OnClicked = SelectTab; - button = new GUIButton(new Rectangle(0, 130, 0, 30), "Load Game", Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.Main]); + button = new GUIButton(new Rectangle(0, 130, 0, 30), "Load Game", Alignment.CenterX, GUI.Style, buttonsTab); button.UserData = (int)Tabs.LoadGame; button.OnClicked = SelectTab; - button = new GUIButton(new Rectangle(0, 200, 0, 30), "Join Server", Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.Main]); + button = new GUIButton(new Rectangle(0, 200, 0, 30), "Join Server", Alignment.CenterX, GUI.Style, buttonsTab); //button.UserData = (int)Tabs.JoinServer; button.OnClicked = JoinServerClicked; - button = new GUIButton(new Rectangle(0, 260, 0, 30), "Host Server", Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.Main]); + button = new GUIButton(new Rectangle(0, 260, 0, 30), "Host Server", Alignment.CenterX, GUI.Style, buttonsTab); button.UserData = (int)Tabs.HostServer; button.OnClicked = SelectTab; - button = new GUIButton(new Rectangle(0, 330, 0, 30), "Quit", Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.Main]); + button = new GUIButton(new Rectangle(0, 330, 0, 30), "Quit", Alignment.CenterX, GUI.Style, buttonsTab); button.OnClicked = QuitClicked; //---------------------------------------------------------------------- - menuTabs[(int)Tabs.NewGame] = new GUIFrame(panelRect, GUI.style); + menuTabs[(int)Tabs.NewGame] = new GUIFrame(panelRect, GUI.Style); //menuTabs[(int)Tabs.NewGame].Padding = GUI.style.smallPadding; - new GUITextBlock(new Rectangle(0, -20, 0, 30), "New Game", null, null, Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.NewGame]); + //new GUITextBlock(new Rectangle(0, -20, 0, 30), "New Game", null, null, Alignment.CenterX, GUI.style, menuTabs[(int)Tabs.NewGame]); - new GUITextBlock(new Rectangle(0, 30, 0, 30), "Selected submarine:", null, null, Alignment.Left, GUI.style, menuTabs[(int)Tabs.NewGame]); - mapList = new GUIListBox(new Rectangle(0, 60, 200, 360), GUI.style, menuTabs[(int)Tabs.NewGame]); + new GUITextBlock(new Rectangle(0, 0, 0, 30), "Selected submarine:", null, null, Alignment.Left, GUI.Style, menuTabs[(int)Tabs.NewGame]); + mapList = new GUIListBox(new Rectangle(0, 30, 200, panelRect.Height-100), GUI.Style, menuTabs[(int)Tabs.NewGame]); foreach (Submarine sub in Submarine.SavedSubmarines) { GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), sub.Name, - GUI.style, + GUI.Style, Alignment.Left, Alignment.Left, mapList); textBlock.Padding = new Vector4(10.0f, 0.0f, 0.0f, 0.0f); textBlock.UserData = sub; } if (Submarine.SavedSubmarines.Count > 0) mapList.Select(Submarine.SavedSubmarines[0]); - new GUITextBlock(new Rectangle((int)(mapList.Rect.Width + 20), 30, 100, 20), - "Save name: ", GUI.style, Alignment.Left, Alignment.Left, menuTabs[(int)Tabs.NewGame]); + new GUITextBlock(new Rectangle((int)(mapList.Rect.Width + 20), 0, 100, 20), + "Save name: ", GUI.Style, Alignment.Left, Alignment.Left, menuTabs[(int)Tabs.NewGame]); - saveNameBox = new GUITextBox(new Rectangle((int)(mapList.Rect.Width + 20), 60, 180, 20), - Alignment.TopLeft, GUI.style, menuTabs[(int)Tabs.NewGame]); + saveNameBox = new GUITextBox(new Rectangle((int)(mapList.Rect.Width + 20), 30, 180, 20), + Alignment.TopLeft, GUI.Style, menuTabs[(int)Tabs.NewGame]); saveNameBox.Text = SaveUtil.CreateSavePath(); - new GUITextBlock(new Rectangle((int)(mapList.Rect.Width + 20), 90, 100, 20), - "Map Seed: ", GUI.style, Alignment.Left, Alignment.Left, menuTabs[(int)Tabs.NewGame]); + new GUITextBlock(new Rectangle((int)(mapList.Rect.Width + 20), 60, 100, 20), + "Map Seed: ", GUI.Style, Alignment.Left, Alignment.Left, menuTabs[(int)Tabs.NewGame]); - seedBox = new GUITextBox(new Rectangle((int)(mapList.Rect.Width + 20), 120, 180, 20), - Alignment.TopLeft, GUI.style, menuTabs[(int)Tabs.NewGame]); + seedBox = new GUITextBox(new Rectangle((int)(mapList.Rect.Width + 20), 90, 180, 20), + Alignment.TopLeft, GUI.Style, menuTabs[(int)Tabs.NewGame]); seedBox.Text = ToolBox.RandomSeed(8); - button = new GUIButton(new Rectangle(0, 0, 100, 30), "Start", Alignment.BottomRight, GUI.style, menuTabs[(int)Tabs.NewGame]); + button = new GUIButton(new Rectangle(0, 0, 100, 30), "Start", Alignment.BottomRight, GUI.Style, menuTabs[(int)Tabs.NewGame]); button.OnClicked = StartGame; //---------------------------------------------------------------------- - menuTabs[(int)Tabs.LoadGame] = new GUIFrame(panelRect, GUI.style); + menuTabs[(int)Tabs.LoadGame] = new GUIFrame(panelRect, GUI.Style); //menuTabs[(int)Tabs.LoadGame].Padding = GUI.style.smallPadding; - menuTabs[(int)Tabs.HostServer] = new GUIFrame(panelRect, GUI.style); + menuTabs[(int)Tabs.HostServer] = new GUIFrame(panelRect, GUI.Style); //menuTabs[(int)Tabs.JoinServer].Padding = GUI.style.smallPadding; - new GUITextBlock(new Rectangle(0, -25, 0, 30), "Host Server", GUI.style, Alignment.CenterX, Alignment.CenterX, menuTabs[(int)Tabs.HostServer], false, GUI.LargeFont); + //new GUITextBlock(new Rectangle(0, -25, 0, 30), "Host Server", GUI.style, Alignment.CenterX, Alignment.CenterX, menuTabs[(int)Tabs.HostServer], false, GUI.LargeFont); - new GUITextBlock(new Rectangle(0, 50, 0, 30), "Server Name:", GUI.style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); - serverNameBox = new GUITextBox(new Rectangle(160, 50, 200, 30), null, null, Alignment.TopLeft, Alignment.Left, GUI.style, menuTabs[(int)Tabs.HostServer]); + new GUITextBlock(new Rectangle(0, 0, 0, 30), "Server Name:", GUI.Style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); + serverNameBox = new GUITextBox(new Rectangle(160, 0, 200, 30), null, null, Alignment.TopLeft, Alignment.Left, GUI.Style, menuTabs[(int)Tabs.HostServer]); - new GUITextBlock(new Rectangle(0, 100, 0, 30), "Server port:", GUI.style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); - portBox = new GUITextBox(new Rectangle(160, 100, 200, 30), null, null, Alignment.TopLeft, Alignment.Left, GUI.style, menuTabs[(int)Tabs.HostServer]); + new GUITextBlock(new Rectangle(0, 50, 0, 30), "Server port:", GUI.Style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); + portBox = new GUITextBox(new Rectangle(160, 50, 200, 30), null, null, Alignment.TopLeft, Alignment.Left, GUI.Style, menuTabs[(int)Tabs.HostServer]); portBox.Text = NetConfig.DefaultPort.ToString(); portBox.ToolTip = "Server port"; - new GUITextBlock(new Rectangle(0, 150, 100, 30), "Max players:", GUI.style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); - maxPlayersBox = new GUITextBox(new Rectangle(195, 150, 30, 30), null, null, Alignment.TopLeft, Alignment.Center, GUI.style, menuTabs[(int)Tabs.HostServer]); + new GUITextBlock(new Rectangle(0, 100, 100, 30), "Max players:", GUI.Style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); + maxPlayersBox = new GUITextBox(new Rectangle(195, 100, 30, 30), null, null, Alignment.TopLeft, Alignment.Center, GUI.Style, menuTabs[(int)Tabs.HostServer]); maxPlayersBox.Text = "8"; maxPlayersBox.Enabled = false; - var plusPlayersBox = new GUIButton(new Rectangle(230, 150, 30, 30), "+", GUI.style, menuTabs[(int)Tabs.HostServer]); + var plusPlayersBox = new GUIButton(new Rectangle(230, 100, 30, 30), "+", GUI.Style, menuTabs[(int)Tabs.HostServer]); plusPlayersBox.UserData = 1; plusPlayersBox.OnClicked = ChangeMaxPlayers; - var minusPlayersBox = new GUIButton(new Rectangle(160, 150, 30, 30), "-", GUI.style, menuTabs[(int)Tabs.HostServer]); + var minusPlayersBox = new GUIButton(new Rectangle(160, 100, 30, 30), "-", GUI.Style, menuTabs[(int)Tabs.HostServer]); minusPlayersBox.UserData = -1; minusPlayersBox.OnClicked = ChangeMaxPlayers; - new GUITextBlock(new Rectangle(0, 200, 0, 30), "Password (optional):", GUI.style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); - passwordBox = new GUITextBox(new Rectangle(160, 200, 200, 30), null, null, Alignment.TopLeft, Alignment.Left, GUI.style, menuTabs[(int)Tabs.HostServer]); - - - isPublicBox = new GUITickBox(new Rectangle(10, 250, 20, 20), "Public server", Alignment.TopLeft, menuTabs[(int)Tabs.HostServer]); - - useUpnpBox = new GUITickBox(new Rectangle(10, 300, 20, 20), "Attempt UPnP port forwarding", Alignment.TopLeft, menuTabs[(int)Tabs.HostServer]); - new GUITextBlock(new Rectangle(0, 330, 0, 30), - "UPnP can be used for forwarding ports on your router to allow players join the server." - + " However, UPnP isn't supported by all routers, so you may need to setup port forwards manually" - +" if players are unable to join the server (see the readme for instructions).", - GUI.style, Alignment.TopLeft, Alignment.TopLeft, menuTabs[(int)Tabs.HostServer], true, GUI.SmallFont); + new GUITextBlock(new Rectangle(0, 150, 0, 30), "Password (optional):", GUI.Style, Alignment.TopLeft, Alignment.Left, menuTabs[(int)Tabs.HostServer]); + passwordBox = new GUITextBox(new Rectangle(160, 170, 200, 30), null, null, Alignment.TopLeft, Alignment.Left, GUI.Style, menuTabs[(int)Tabs.HostServer]); + isPublicBox = new GUITickBox(new Rectangle(10, 200, 20, 20), "Public server", Alignment.TopLeft, menuTabs[(int)Tabs.HostServer]); + isPublicBox.ToolTip = "Public servers are shown in the list of available servers in the ''Join Server'' -tab"; - GUIButton hostButton = new GUIButton(new Rectangle(0, 0, 200, 30), "Start", Alignment.BottomCenter, GUI.style, menuTabs[(int)Tabs.HostServer]); + useUpnpBox = new GUITickBox(new Rectangle(10, 250, 20, 20), "Attempt UPnP port forwarding", Alignment.TopLeft, menuTabs[(int)Tabs.HostServer]); + useUpnpBox.ToolTip = "UPnP can be used for forwarding ports on your router to allow players join the server." + + " However, UPnP isn't supported by all routers, so you may need to setup port forwards manually" + +" if players are unable to join the server (see the readme for instructions)."; + + GUIButton hostButton = new GUIButton(new Rectangle(0, 0, 200, 30), "Start", Alignment.BottomRight, GUI.Style, menuTabs[(int)Tabs.HostServer]); hostButton.OnClicked = HostServerClicked; - //---------------------------------------------------------------------- - for (int i = 1; i < 4; i++ ) - { - button = new GUIButton(new Rectangle(-20, -20, 100, 30), "Back", Alignment.TopLeft, GUI.style, menuTabs[i]); - button.OnClicked = PreviousTab; - } - this.game = game; } + + public override void Select() + { + base.Select(); + + selectedTab = 0; + } public bool SelectTab(GUIButton button, object obj) { selectedTab = (int)obj; + if (button != null) button.Selected = true; + + foreach (GUIComponent child in buttonsTab.children) + { + GUIButton otherButton = child as GUIButton; + if (otherButton == null || otherButton == button) continue; + + otherButton.Selected = false; + } + if (selectedTab == (int)Tabs.LoadGame) UpdateLoadScreen(); - this.Select(); + if (Selected != this) this.Select(); return true; } @@ -229,11 +240,9 @@ namespace Subsurface { menuTabs[(int)Tabs.LoadGame].ClearChildren(); - new GUITextBlock(new Rectangle(0, -25, 0, 30), "Load Game", GUI.style, Alignment.CenterX, Alignment.CenterX, menuTabs[(int)Tabs.LoadGame], false, GUI.LargeFont); - string[] saveFiles = SaveUtil.GetSaveFiles(); - saveList = new GUIListBox(new Rectangle(0, 60, 200, 360), Color.White, GUI.style, menuTabs[(int)Tabs.LoadGame]); + saveList = new GUIListBox(new Rectangle(0, 0, 200, menuTabs[(int)Tabs.LoadGame].Rect.Height - 80), Color.White, GUI.Style, menuTabs[(int)Tabs.LoadGame]); saveList.OnSelected = SelectSaveFile; foreach (string saveFile in saveFiles) @@ -241,7 +250,7 @@ namespace Subsurface GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), saveFile, - GUI.style, + GUI.Style, Alignment.Left, Alignment.Left, saveList); @@ -249,14 +258,12 @@ namespace Subsurface textBlock.UserData = saveFile; } - var button = new GUIButton(new Rectangle(0, 0, 100, 30), "Start", Alignment.Right | Alignment.Bottom, GUI.style, menuTabs[(int)Tabs.LoadGame]); + var button = new GUIButton(new Rectangle(0, 0, 100, 30), "Start", Alignment.Right | Alignment.Bottom, GUI.Style, menuTabs[(int)Tabs.LoadGame]); button.OnClicked = LoadGame; - button = new GUIButton(new Rectangle(-20, -20, 100, 30), "Back", Alignment.TopLeft, GUI.style, menuTabs[(int)Tabs.LoadGame]); - button.OnClicked = PreviousTab; } - private bool SelectSaveFile(object obj) + private bool SelectSaveFile(GUIComponent component, object obj) { string fileName = (string)obj; @@ -283,19 +290,19 @@ namespace Subsurface string mapseed = ToolBox.GetAttributeString(modeElement, "mapseed", "unknown"); - GUIFrame saveFileFrame = new GUIFrame(new Rectangle((int)(saveList.Rect.Width + 20), 60, 200, 200), Color.Black*0.4f, GUI.style, menuTabs[(int)Tabs.LoadGame]); + GUIFrame saveFileFrame = new GUIFrame(new Rectangle((int)(saveList.Rect.Width + 20), 0, 200, 200), Color.Black*0.4f, GUI.Style, menuTabs[(int)Tabs.LoadGame]); saveFileFrame.UserData = "savefileframe"; saveFileFrame.Padding = new Vector4(20.0f, 20.0f, 20.0f, 20.0f); - new GUITextBlock(new Rectangle(0,0,0,20), fileName, GUI.style, saveFileFrame); + new GUITextBlock(new Rectangle(0,0,0,20), fileName, GUI.Style, saveFileFrame); - new GUITextBlock(new Rectangle(0, 30, 0, 20), "Last saved: ", GUI.style, saveFileFrame).Font = GUI.SmallFont; - new GUITextBlock(new Rectangle(15, 45, 0, 20), saveTime, GUI.style, saveFileFrame).Font = GUI.SmallFont; + new GUITextBlock(new Rectangle(0, 30, 0, 20), "Last saved: ", GUI.Style, saveFileFrame).Font = GUI.SmallFont; + new GUITextBlock(new Rectangle(15, 45, 0, 20), saveTime, GUI.Style, saveFileFrame).Font = GUI.SmallFont; - new GUITextBlock(new Rectangle(0, 65, 0, 20), "Map seed: ", GUI.style, saveFileFrame).Font = GUI.SmallFont; - new GUITextBlock(new Rectangle(15, 80, 0, 20), mapseed, GUI.style, saveFileFrame).Font = GUI.SmallFont; + new GUITextBlock(new Rectangle(0, 65, 0, 20), "Map seed: ", GUI.Style, saveFileFrame).Font = GUI.SmallFont; + new GUITextBlock(new Rectangle(15, 80, 0, 20), mapseed, GUI.Style, saveFileFrame).Font = GUI.SmallFont; - var deleteSaveButton = new GUIButton(new Rectangle(0, 0, 100, 20), "Delete", Alignment.BottomCenter, GUI.style, saveFileFrame); + var deleteSaveButton = new GUIButton(new Rectangle(0, 0, 100, 20), "Delete", Alignment.BottomCenter, GUI.Style, saveFileFrame); deleteSaveButton.UserData = fileName; deleteSaveButton.OnClicked = DeleteSave; @@ -330,9 +337,15 @@ namespace Subsurface public override void Update(double deltaTime) { - menuTabs[selectedTab].Update((float)deltaTime); + buttonsTab.Update((float)deltaTime); + if (selectedTab>0) menuTabs[selectedTab].Update((float)deltaTime); - Game1.TitleScreen.Position.Y = MathHelper.Lerp(Game1.TitleScreen.Position.Y, -870.0f, 0.1f); + Game1.TitleScreen.TitlePosition = + Vector2.Lerp(Game1.TitleScreen.TitlePosition, new Vector2( + Game1.TitleScreen.TitleSize.X / 2.0f * Game1.TitleScreen.Scale + 30.0f, + Game1.TitleScreen.TitleSize.Y / 2.0f * Game1.TitleScreen.Scale + 30.0f), + 0.1f); + } public override void Draw(double deltaTime, GraphicsDevice graphics, SpriteBatch spriteBatch) @@ -345,7 +358,8 @@ namespace Subsurface spriteBatch.Begin(); - menuTabs[selectedTab].Draw(spriteBatch); + buttonsTab.Draw(spriteBatch); + if (selectedTab>0) menuTabs[selectedTab].Draw(spriteBatch); GUI.Draw((float)deltaTime, spriteBatch, null); @@ -384,7 +398,7 @@ namespace Subsurface private bool PreviousTab(GUIButton button, object obj) { - selectedTab = (int)Tabs.Main; + //selectedTab = (int)Tabs.Main; return true; } diff --git a/Subsurface/Source/Screens/NetLobbyScreen.cs b/Subsurface/Source/Screens/NetLobbyScreen.cs index 07282849d..dbd362f72 100644 --- a/Subsurface/Source/Screens/NetLobbyScreen.cs +++ b/Subsurface/Source/Screens/NetLobbyScreen.cs @@ -115,7 +115,7 @@ namespace Subsurface //server info panel ------------------------------------------------------------ - infoFrame = new GUIFrame(new Rectangle(0, 0, (int)(panelRect.Width * 0.7f), (int)(panelRect.Height * 0.6f)), GUI.style, menu); + infoFrame = new GUIFrame(new Rectangle(0, 0, (int)(panelRect.Width * 0.7f), (int)(panelRect.Height * 0.6f)), GUI.Style, menu); //infoFrame.Padding = GUI.style.smallPadding; //chatbox ---------------------------------------------------------------------- @@ -123,10 +123,10 @@ namespace Subsurface new Rectangle(0, (int)(panelRect.Height * 0.6f + 20), (int)(panelRect.Width * 0.7f), (int)(panelRect.Height * 0.4f - 20)), - GUI.style, menu); + GUI.Style, menu); - chatBox = new GUIListBox(new Rectangle(0,0,0,chatFrame.Rect.Height-80), Color.White, GUI.style, chatFrame); - textBox = new GUITextBox(new Rectangle(0, 25, 0, 25), Alignment.Bottom, GUI.style, chatFrame); + chatBox = new GUIListBox(new Rectangle(0,0,0,chatFrame.Rect.Height-80), Color.White, GUI.Style, chatFrame); + textBox = new GUITextBox(new Rectangle(0, 25, 0, 25), Alignment.Bottom, GUI.Style, chatFrame); textBox.Font = GUI.SmallFont; textBox.OnEnter = EnterChatMessage; @@ -135,24 +135,24 @@ namespace Subsurface playerFrame = new GUIFrame( new Rectangle((int)(panelRect.Width * 0.7f + 20), 0, (int)(panelRect.Width * 0.3f - 20), (int)(panelRect.Height * 0.6f)), - GUI.style, menu); + GUI.Style, menu); //player list ------------------------------------------------------------------ GUIFrame playerListFrame = new GUIFrame( new Rectangle((int)(panelRect.Width * 0.7f + 20), (int)(panelRect.Height * 0.6f + 20), (int)(panelRect.Width * 0.3f - 20), (int)(panelRect.Height * 0.4f - 20)), - GUI.style, menu); + GUI.Style, menu); - playerList = new GUIListBox(new Rectangle(0,0,0,0), null, GUI.style, playerListFrame); + playerList = new GUIListBox(new Rectangle(0,0,0,0), null, GUI.Style, playerListFrame); //submarine list ------------------------------------------------------------------ int columnWidth = infoFrame.Rect.Width / 5 - 30; int columnX = 0; - new GUITextBlock(new Rectangle(columnX, 120, columnWidth, 30), "Selected submarine:", GUI.style, infoFrame); - subList = new GUIListBox(new Rectangle(columnX, 150, columnWidth, infoFrame.Rect.Height - 150 - 80), Color.White, GUI.style, infoFrame); + new GUITextBlock(new Rectangle(columnX, 120, columnWidth, 30), "Selected submarine:", GUI.Style, infoFrame); + subList = new GUIListBox(new Rectangle(columnX, 150, columnWidth, infoFrame.Rect.Height - 150 - 80), Color.White, GUI.Style, infoFrame); subList.OnSelected = SelectMap; if (Submarine.SavedSubmarines.Count > 0) @@ -161,7 +161,7 @@ namespace Subsurface { GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), - sub.Name, GUI.style, + sub.Name, GUI.Style, Alignment.Left, Alignment.Left, subList); textBlock.Padding = new Vector4(10.0f, 0.0f, 0.0f, 0.0f); @@ -178,8 +178,8 @@ namespace Subsurface //gamemode ------------------------------------------------------------------ - new GUITextBlock(new Rectangle(columnX, 120, 0, 30), "Selected game mode: ", GUI.style, infoFrame); - modeList = new GUIListBox(new Rectangle(columnX, 150, columnWidth, infoFrame.Rect.Height - 150 - 80), GUI.style, infoFrame); + new GUITextBlock(new Rectangle(columnX, 120, 0, 30), "Selected game mode: ", GUI.Style, infoFrame); + modeList = new GUIListBox(new Rectangle(columnX, 150, columnWidth, infoFrame.Rect.Height - 150 - 80), GUI.Style, infoFrame); foreach (GameModePreset mode in GameModePreset.list) @@ -188,7 +188,7 @@ namespace Subsurface GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), - mode.Name, GUI.style, + mode.Name, GUI.Style, Alignment.Left, Alignment.Left, modeList); textBlock.Padding = new Vector4(10.0f, 0.0f, 0.0f, 0.0f); @@ -202,7 +202,7 @@ namespace Subsurface var modeDescription = new GUITextBlock( new Rectangle(columnX, 150, (int)(columnWidth * 1.5f), infoFrame.Rect.Height - 150 - 80), - "", Color.Black*0.3f, Color.White, Alignment.TopLeft, Alignment.TopLeft, GUI.style, infoFrame, true); + "", Color.Black*0.3f, Color.White, Alignment.TopLeft, Alignment.TopLeft, GUI.Style, infoFrame, true); modeList.UserData = modeDescription; @@ -211,31 +211,31 @@ namespace Subsurface //duration ------------------------------------------------------------------ GUITextBlock durationText = new GUITextBlock(new Rectangle(columnX, 120, columnWidth, 20), - "Game duration: ", GUI.style, Alignment.Left, Alignment.TopLeft, infoFrame); + "Game duration: ", GUI.Style, Alignment.Left, Alignment.TopLeft, infoFrame); durationText.TextGetter = DurationText; durationBar = new GUIScrollBar(new Rectangle(columnX, 150, columnWidth, 20), - GUI.style, 0.1f, infoFrame); + GUI.Style, 0.1f, infoFrame); durationBar.BarSize = 0.1f; //seed ------------------------------------------------------------------ new GUITextBlock(new Rectangle(columnX, 190, columnWidth, 20), - "Level Seed: ", GUI.style, Alignment.Left, Alignment.TopLeft, infoFrame); + "Level Seed: ", GUI.Style, Alignment.Left, Alignment.TopLeft, infoFrame); seedBox = new GUITextBox(new Rectangle(columnX, 220, columnWidth, 20), - Alignment.TopLeft, GUI.style, infoFrame); + Alignment.TopLeft, GUI.Style, infoFrame); seedBox.OnTextChanged = SelectSeed; LevelSeed = ToolBox.RandomSeed(8); //server info ------------------------------------------------------------------ - var serverName = new GUITextBox(new Rectangle(0, 0, 200, 20), null, null, Alignment.TopLeft, Alignment.TopLeft, GUI.style, infoFrame); + var serverName = new GUITextBox(new Rectangle(0, 0, 200, 20), null, null, Alignment.TopLeft, Alignment.TopLeft, GUI.Style, infoFrame); serverName.TextGetter = GetServerName; serverName.Enabled = Game1.Server != null; serverName.OnTextChanged = ChangeServerName; - serverMessage = new GUITextBox(new Rectangle(0, 30, 360, 70), null, null, Alignment.TopLeft, Alignment.TopLeft, GUI.style, infoFrame); + serverMessage = new GUITextBox(new Rectangle(0, 30, 360, 70), null, null, Alignment.TopLeft, Alignment.TopLeft, GUI.Style, infoFrame); serverMessage.Wrap = true; serverMessage.TextGetter = GetServerMessage; serverMessage.OnTextChanged = UpdateServerMessage; @@ -270,7 +270,7 @@ namespace Subsurface if (IsServer && Game1.Server != null) { - GUIButton startButton = new GUIButton(new Rectangle(0, 0, 200, 30), "Start", Alignment.BottomRight, GUI.style, infoFrame); + GUIButton startButton = new GUIButton(new Rectangle(0, 0, 200, 30), "Start", Alignment.BottomRight, GUI.Style, infoFrame); startButton.OnClicked = Game1.Server.StartGame; startButton.UserData = "startButton"; @@ -311,42 +311,42 @@ namespace Subsurface playYourself.UserData = "playyourself"; } - new GUITextBlock(new Rectangle(60, 0, 200, 30), "Name: ", GUI.style, playerFrame); + new GUITextBlock(new Rectangle(60, 0, 200, 30), "Name: ", GUI.Style, playerFrame); GUITextBox playerName = new GUITextBox(new Rectangle(60, 30, 0, 20), - Alignment.TopLeft, GUI.style, playerFrame); + Alignment.TopLeft, GUI.Style, playerFrame); playerName.Text = characterInfo.Name; playerName.OnEnter += ChangeCharacterName; - new GUITextBlock(new Rectangle(0, 70, 200, 30), "Gender: ", GUI.style, playerFrame); + new GUITextBlock(new Rectangle(0, 70, 200, 30), "Gender: ", GUI.Style, playerFrame); GUIButton maleButton = new GUIButton(new Rectangle(0, 100, 70, 20), "Male", - Alignment.TopLeft, GUI.style, playerFrame); + Alignment.TopLeft, GUI.Style, playerFrame); maleButton.UserData = Gender.Male; maleButton.OnClicked += SwitchGender; GUIButton femaleButton = new GUIButton(new Rectangle(90, 100, 70, 20), "Female", - Alignment.TopLeft, GUI.style, playerFrame); + Alignment.TopLeft, GUI.Style, playerFrame); femaleButton.UserData = Gender.Female; femaleButton.OnClicked += SwitchGender; - new GUITextBlock(new Rectangle(0, 150, 200, 30), "Job preferences:", GUI.style, playerFrame); + new GUITextBlock(new Rectangle(0, 150, 200, 30), "Job preferences:", GUI.Style, playerFrame); - jobList = new GUIListBox(new Rectangle(0, 180, 180, 0), GUI.style, playerFrame); + jobList = new GUIListBox(new Rectangle(0, 180, 180, 0), GUI.Style, playerFrame); jobList.Enabled = false; int i = 1; foreach (JobPrefab job in JobPrefab.List) { - GUITextBlock jobText = new GUITextBlock(new Rectangle(0, 0, 0, 20), i + ". " + job.Name, GUI.style, Alignment.Left, Alignment.Right, jobList); + GUITextBlock jobText = new GUITextBlock(new Rectangle(0, 0, 0, 20), i + ". " + job.Name, GUI.Style, Alignment.Left, Alignment.Right, jobList); jobText.UserData = job; - GUIButton upButton = new GUIButton(new Rectangle(0, 0, 15, 15), "u", GUI.style, jobText); + GUIButton upButton = new GUIButton(new Rectangle(0, 0, 15, 15), "u", GUI.Style, jobText); upButton.UserData = -1; upButton.OnClicked += ChangeJobPreference; - GUIButton downButton = new GUIButton(new Rectangle(25, 0, 15, 15), "d", GUI.style, jobText); + GUIButton downButton = new GUIButton(new Rectangle(25, 0, 15, 15), "d", GUI.Style, jobText); downButton.UserData = 1; downButton.OnClicked += ChangeJobPreference; } @@ -383,7 +383,7 @@ namespace Subsurface return false; } - private bool SelectMap(object obj) + private bool SelectMap(GUIComponent component, object obj) { if (Game1.Server != null) Game1.Server.UpdateNetLobby(obj); @@ -401,7 +401,7 @@ namespace Subsurface { if (Game1.Server == null) return false; ServerName = text; - Game1.Server.UpdateNetLobby(null); + Game1.Server.UpdateNetLobby(null, null); return true; } @@ -410,7 +410,7 @@ namespace Subsurface { if (Game1.Server == null) return false; ServerMessage = text; - Game1.Server.UpdateNetLobby(null); + Game1.Server.UpdateNetLobby(null, null); return true; } @@ -421,7 +421,7 @@ namespace Subsurface GUITextBlock textBlock = new GUITextBlock( new Rectangle(0, 0, 0, 25), client.name + ((client.assignedJob==null) ? "" : " (" + client.assignedJob.Name + ")"), - GUI.style, Alignment.Left, Alignment.Left, + GUI.Style, Alignment.Left, Alignment.Left, playerList); textBlock.Padding = new Vector4(10.0f, 0.0f, 0.0f, 0.0f); textBlock.UserData = client; @@ -494,7 +494,7 @@ namespace Subsurface GUITextBlock msg = new GUITextBlock(new Rectangle(0, 0, 0, 20), message, ((chatBox.CountChildren % 2) == 0) ? Color.Transparent : Color.Black*0.1f, color, - Alignment.Left, GUI.style, null, true); + Alignment.Left, GUI.Style, null, true); msg.Font = GUI.SmallFont; msg.CanBeFocused = false; @@ -545,7 +545,7 @@ namespace Subsurface return true; } - private bool SelectMode(object obj) + private bool SelectMode(GUIComponent component, object obj) { GameModePreset modePreset = obj as GameModePreset; if (modePreset == null) return false; diff --git a/Subsurface/Source/Screens/ServerListScreen.cs b/Subsurface/Source/Screens/ServerListScreen.cs index b7cd51b58..d2e0beddc 100644 --- a/Subsurface/Source/Screens/ServerListScreen.cs +++ b/Subsurface/Source/Screens/ServerListScreen.cs @@ -41,19 +41,19 @@ namespace Subsurface Rectangle panelRect = new Rectangle(0, 0, width, height); - menu = new GUIFrame(panelRect, null, Alignment.Center, GUI.style); + menu = new GUIFrame(panelRect, null, Alignment.Center, GUI.Style); - new GUITextBlock(new Rectangle(0, -25, 0, 30), "Join Server", GUI.style, Alignment.CenterX, Alignment.CenterX, menu, false, GUI.LargeFont); + new GUITextBlock(new Rectangle(0, -25, 0, 30), "Join Server", GUI.Style, Alignment.CenterX, Alignment.CenterX, menu, false, GUI.LargeFont); - new GUITextBlock(new Rectangle(0, 30, 0, 30), "Your Name:", GUI.style, menu); - clientNameBox = new GUITextBox(new Rectangle(0, 60, 200, 30), GUI.style, menu); + new GUITextBlock(new Rectangle(0, 30, 0, 30), "Your Name:", GUI.Style, menu); + clientNameBox = new GUITextBox(new Rectangle(0, 60, 200, 30), GUI.Style, menu); - new GUITextBlock(new Rectangle(0, 100, 0, 30), "Server IP:", GUI.style, menu); - ipBox = new GUITextBox(new Rectangle(0, 130, 200, 30), GUI.style, menu); + new GUITextBlock(new Rectangle(0, 100, 0, 30), "Server IP:", GUI.Style, menu); + ipBox = new GUITextBox(new Rectangle(0, 130, 200, 30), GUI.Style, menu); int middleX = (int)(width * 0.4f); - serverList = new GUIListBox(new Rectangle(middleX,60,0,(int)(height*0.7f)), GUI.style, menu); + serverList = new GUIListBox(new Rectangle(middleX,60,0,(int)(height*0.7f)), GUI.Style, menu); serverList.OnSelected = SelectServer; float[] columnRelativeX = new float[] { 0.15f, 0.55f, 0.15f, 0.15f }; @@ -64,19 +64,19 @@ namespace Subsurface if (n > 0) columnX[n] += columnX[n - 1]; } - new GUITextBlock(new Rectangle(middleX, 30, 0, 30), "Password", GUI.style, menu); + new GUITextBlock(new Rectangle(middleX, 30, 0, 30), "Password", GUI.Style, menu); - new GUITextBlock(new Rectangle(middleX + columnX[0], 30, 0, 30), "Name", GUI.style, menu); - new GUITextBlock(new Rectangle(middleX + columnX[1], 30, 0, 30), "Players", GUI.style, menu); - new GUITextBlock(new Rectangle(middleX + columnX[2], 30, 0, 30), "Running", GUI.style, menu); + new GUITextBlock(new Rectangle(middleX + columnX[0], 30, 0, 30), "Name", GUI.Style, menu); + new GUITextBlock(new Rectangle(middleX + columnX[1], 30, 0, 30), "Players", GUI.Style, menu); + new GUITextBlock(new Rectangle(middleX + columnX[2], 30, 0, 30), "Running", GUI.Style, menu); - joinButton = new GUIButton(new Rectangle(-170, 0, 150, 30), "Refresh", Alignment.BottomRight, GUI.style, menu); + joinButton = new GUIButton(new Rectangle(-170, 0, 150, 30), "Refresh", Alignment.BottomRight, GUI.Style, menu); joinButton.OnClicked = RefreshServers; - joinButton = new GUIButton(new Rectangle(0,0,150,30), "Join", Alignment.BottomRight, GUI.style, menu); + joinButton = new GUIButton(new Rectangle(0,0,150,30), "Join", Alignment.BottomRight, GUI.Style, menu); joinButton.OnClicked = JoinServer; - GUIButton button = new GUIButton(new Rectangle(-20, -20, 100, 30), "Back", Alignment.TopLeft, GUI.style, menu); + GUIButton button = new GUIButton(new Rectangle(-20, -20, 100, 30), "Back", Alignment.TopLeft, GUI.Style, menu); button.UserData = 0; button.OnClicked = Game1.MainMenuScreen.SelectTab; @@ -93,7 +93,7 @@ namespace Subsurface //UpdateServerList(); } - private bool SelectServer(object obj) + private bool SelectServer(GUIComponent component, object obj) { string ip = obj as string; if (string.IsNullOrWhiteSpace(ip)) return false; @@ -108,7 +108,7 @@ namespace Subsurface if (waitingForRefresh) return false; serverList.ClearChildren(); - new GUITextBlock(new Rectangle(0, 0, 0, 20), "Refreshing server list...", GUI.style, serverList); + new GUITextBlock(new Rectangle(0, 0, 0, 20), "Refreshing server list...", GUI.Style, serverList); CoroutineManager.StartCoroutine(WaitForRefresh()); @@ -141,7 +141,7 @@ namespace Subsurface if (string.IsNullOrWhiteSpace(masterServerData)) { - var nameText = new GUITextBlock(new Rectangle(0, 0, 0, 20), "Couldn't find any servers", GUI.style, serverList); + var nameText = new GUITextBlock(new Rectangle(0, 0, 0, 20), "Couldn't find any servers", GUI.Style, serverList); return; } @@ -178,12 +178,12 @@ namespace Subsurface passwordBox.Enabled = false; passwordBox.UserData = "password"; - var nameText = new GUITextBlock(new Rectangle(columnX[0], 0, 0, 0), serverName, GUI.style, serverFrame); + var nameText = new GUITextBlock(new Rectangle(columnX[0], 0, 0, 0), serverName, GUI.Style, serverFrame); int playerCount, maxPlayers; playerCount = GameClient.ByteToPlayerCount((byte)int.Parse(playerCountStr), out maxPlayers); - var playerCountText = new GUITextBlock(new Rectangle(columnX[1], 0, 0, 0), playerCount + "/" + maxPlayers, GUI.style, serverFrame); + var playerCountText = new GUITextBlock(new Rectangle(columnX[1], 0, 0, 0), playerCount + "/" + maxPlayers, GUI.Style, serverFrame); var gameStartedBox = new GUITickBox(new Rectangle(columnX[2] + (columnX[3] - columnX[2])/ 2, 0, 20, 20), "", Alignment.TopLeft, serverFrame); gameStartedBox.Selected = gameStarted == "1"; @@ -288,7 +288,7 @@ namespace Subsurface if (serverList.Selected!=null && (serverList.Selected.GetChild("password") as GUITickBox).Selected) { var msgBox = new GUIMessageBox("Password required", ""); - var passwordBox = new GUITextBox(new Rectangle(0,0,150,20), Alignment.BottomCenter, GUI.style, msgBox); + var passwordBox = new GUITextBox(new Rectangle(0,0,150,20), Alignment.BottomCenter, GUI.Style, msgBox); passwordBox.UserData = "password"; var okButton = msgBox.GetChild(); diff --git a/Subsurface/Source/Sprite.cs b/Subsurface/Source/Sprite.cs index 482ffe367..7cf40d378 100644 --- a/Subsurface/Source/Sprite.cs +++ b/Subsurface/Source/Sprite.cs @@ -7,7 +7,7 @@ using System.Xml.Linq; namespace Subsurface { - class Sprite + public class Sprite { static List list = new List(); //the file from which the texture is loaded @@ -170,7 +170,7 @@ namespace Subsurface if (File.Exists(file)) { - return Game1.TextureLoader.FromFile(file); + return TextureLoader.FromFile(file); } else { diff --git a/Subsurface/Source/Utils/SaveUtil.cs b/Subsurface/Source/Utils/SaveUtil.cs index 5836779c1..a824054a4 100644 --- a/Subsurface/Source/Utils/SaveUtil.cs +++ b/Subsurface/Source/Utils/SaveUtil.cs @@ -8,7 +8,7 @@ using System.Xml.Linq; namespace Subsurface { - class SaveUtil + public class SaveUtil { private const string SaveFolder = "Content/Data/Saves/"; diff --git a/Subsurface/Source/Utils/TextureLoader.cs b/Subsurface/Source/Utils/TextureLoader.cs index 229261e98..63cddbe7d 100644 --- a/Subsurface/Source/Utils/TextureLoader.cs +++ b/Subsurface/Source/Utils/TextureLoader.cs @@ -11,10 +11,11 @@ namespace Subsurface /// /// Based on http://jakepoz.com/jake_poznanski__background_load_xna.html /// - public class TextureLoader + public static class TextureLoader { static TextureLoader() { + BlendColorBlendState = new BlendState { ColorDestinationBlend = Blend.Zero, @@ -34,14 +35,14 @@ namespace Subsurface }; } - public TextureLoader(GraphicsDevice graphicsDevice, bool needsBmp = false) + public static void Init(GraphicsDevice graphicsDevice, bool needsBmp = false) { _graphicsDevice = graphicsDevice; _needsBmp = needsBmp; _spriteBatch = new SpriteBatch(_graphicsDevice); } - public Texture2D FromFile(string path, bool preMultiplyAlpha = true) + public static Texture2D FromFile(string path, bool preMultiplyAlpha = true) { try { @@ -68,7 +69,7 @@ namespace Subsurface } #if WINDOWS - private Texture2D FromStream(Stream stream, bool preMultiplyAlpha = true) + private static Texture2D FromStream(Stream stream, bool preMultiplyAlpha = true) { Texture2D texture; @@ -97,7 +98,7 @@ namespace Subsurface } #endif - private Texture2D PreMultiplyAlpha(Texture2D texture) + private static Texture2D PreMultiplyAlpha(Texture2D texture) { // Setup a render target to hold our final texture which will have premulitplied alpha values using (RenderTarget2D renderTarget = new RenderTarget2D(_graphicsDevice, texture.Width, texture.Height)) @@ -136,8 +137,8 @@ namespace Subsurface private static readonly BlendState BlendColorBlendState; private static readonly BlendState BlendAlphaBlendState; - private readonly GraphicsDevice _graphicsDevice; - private readonly SpriteBatch _spriteBatch; - private readonly bool _needsBmp; + private static GraphicsDevice _graphicsDevice; + private static SpriteBatch _spriteBatch; + private static bool _needsBmp; } } \ No newline at end of file diff --git a/Subsurface/Source/Utils/ToolBox.cs b/Subsurface/Source/Utils/ToolBox.cs index 27d303c20..62f18258f 100644 --- a/Subsurface/Source/Utils/ToolBox.cs +++ b/Subsurface/Source/Utils/ToolBox.cs @@ -5,11 +5,12 @@ using System.Globalization; using System.IO; using System.Linq; using System.Text; +using System.Xml; using System.Xml.Linq; namespace Subsurface { - static class ToolBox + public static class ToolBox { public static XDocument TryLoadXml(string filePath) { @@ -195,6 +196,19 @@ namespace Subsurface return ParseToVector4(val); } + public static string ElementInnerText(this XElement el) + { + StringBuilder str = new StringBuilder(); + foreach (XNode element in el.DescendantNodes().Where(x => x.NodeType == XmlNodeType.Text)) + { + str.Append(element.ToString()); + } + return str.ToString(); + } + + + + public static Vector2 ParseToVector2(string stringVector2, bool errorMessages = true) { string[] components = stringVector2.Split(','); @@ -284,14 +298,16 @@ namespace Subsurface { if (font.MeasureString(text).X < lineLength) return text; - string[] words = text.Split(' ', '\n'); + text = text.Replace("\n", " \n "); + + string[] words = text.Split(' ');//, '\n'); StringBuilder wrappedText = new StringBuilder(); float linePos = 0f; float spaceWidth = font.MeasureString(" ").X; for (int i = 0; i < words.Length; ++i) { - if (string.IsNullOrWhiteSpace(words[i])) continue; + if (string.IsNullOrWhiteSpace(words[i]) && words[i]!="\n") continue; Vector2 size; string tempWord = words[i]; @@ -299,9 +315,8 @@ namespace Subsurface while ((size = font.MeasureString(tempWord)).X > lineLength) { tempWord = tempWord.Remove(tempWord.Length - 1, 1); - - } + words[i] = tempWord; if (prevWord.Length> tempWord.Length) { @@ -315,22 +330,29 @@ namespace Subsurface if (linePos + size.X < lineLength) { - wrappedText.Append(words[i]); - linePos += size.X + spaceWidth; + wrappedText.Append(words[i]); + if (words[i] == "\n") + { + linePos = 0.0f; + } + else + { + + linePos += size.X + spaceWidth; + } } else { //if (i>0)wrappedText.Remove(wrappedText.Length - 1, 1); - wrappedText.Append("\n"); - wrappedText.Append(words[i]); - - - - linePos = size.X + spaceWidth; + wrappedText.Append("\n"); + wrappedText.Append(words[i]); + + linePos = size.X + spaceWidth; + } - - if (i GetFileList(XDocument fileListDoc) + { + List fileList = new List(); + + XElement fileListElement = fileListDoc.Root; + + if (fileListElement == null) + { + throw new Exception("Received list of new files was corrupted"); + } + + foreach (XElement file in fileListElement.Elements()) + { + string filePath = ToolBox.GetAttributeString(file, "path", ""); + + fileList.Add(filePath); + } + + return fileList; + } + + public static List GetRequiredFiles(XDocument fileListDoc) + { + List requiredFiles = new List(); + + XElement fileList = fileListDoc.Root; + + if (fileList==null) + { + throw new Exception("Received list of new files was corrupted"); + } + + foreach (XElement file in fileList.Elements()) + { + string filePath = ToolBox.GetAttributeString(file, "path", ""); + + if (!File.Exists(filePath)) + { + requiredFiles.Add(filePath); + continue; + } + + string md5 = ToolBox.GetAttributeString(file, "md5", ""); + + if (GetFileMd5Hash(filePath) != md5) + { + requiredFiles.Add(filePath); + } + } + + return requiredFiles; + } + + private static string GetFileMd5Hash(string filePath) + { + Md5Hash md5Hash = null; + var md5 = MD5.Create(); + using (var stream = File.OpenRead(filePath)) + { + md5Hash = new Md5Hash(md5.ComputeHash(stream)); + } + + return md5Hash.Hash; + } + + public static string GetRelativePath(string filespec, string folder) + { + Uri pathUri = new Uri(filespec); + // Folders must end in a slash + if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString())) + { + folder += Path.DirectorySeparatorChar; + } + Uri folderUri = new Uri(folder); + return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); + } + + /// + /// moves the files in the updatefolder to the install folder + /// if there's an existing file with the same name in the install folder and it can't be removed, + /// it will be renamed as "OLD_[filename]" + /// + /// + public static void InstallUpdatedFiles(string updateFileFolder) + { + string[] files = Directory.GetFiles(updateFileFolder, "*", SearchOption.AllDirectories); + + string currentDir = Directory.GetCurrentDirectory(); + + foreach (string file in files) + { + string fileRelPath = GetRelativePath(file, updateFileFolder); + + if (File.Exists(fileRelPath)) + { + try + { + File.Delete(fileRelPath); + } + + catch + { + string oldFileName = currentDir+"\\"+Path.GetDirectoryName(fileRelPath)+"\\OLD_"+Path.GetFileName(fileRelPath); + + if (File.Exists(oldFileName)) File.Delete(oldFileName); + + //couldn't delete file, probably because it's already in use + File.Move(fileRelPath, oldFileName); + } + } + + File.Move(file, fileRelPath); + } + + Directory.Delete(updateFileFolder); + } + + public static void CleanUnnecessaryFiles(List filesToKeep) + { + string currentDir = Directory.GetCurrentDirectory(); + + string[] files = Directory.GetFiles(currentDir, "*", SearchOption.AllDirectories); + + foreach (string file in files) + { + if (filesToKeep.Contains(GetRelativePath(file, currentDir))) continue; + + System.Diagnostics.Debug.WriteLine("deleting file "+file); + + try + { + File.Delete(currentDir + "\\" + file); + } + + catch (Exception e) + { + System.Diagnostics.Debug.WriteLine("Could not delete file ''" + file + "'' (" + e.Message + ")"); + continue; + } + } + } + } +} diff --git a/Subsurface/Subsurface.csproj b/Subsurface/Subsurface.csproj index 12ee8651d..3cbaaa924 100644 --- a/Subsurface/Subsurface.csproj +++ b/Subsurface/Subsurface.csproj @@ -76,6 +76,7 @@ + @@ -222,6 +223,7 @@ + @@ -241,7 +243,7 @@ - + @@ -710,9 +712,6 @@ PreserveNewest - - PreserveNewest - PreserveNewest Designer @@ -720,6 +719,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/Subsurface_Solution.sln b/Subsurface_Solution.sln index 09f07cf09..1f5084252 100644 --- a/Subsurface_Solution.sln +++ b/Subsurface_Solution.sln @@ -15,10 +15,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher", "Launcher\Launch EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Lidgren.Network", "Lidgren.Network\Lidgren.Network.csproj", "{49BA1C69-6104-41AC-A5D8-B54FA9F696E8}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{30B01820-F0C0-4C31-8BE7-804EE61DBC8A}" - ProjectSection(SolutionItems) = preProject - Performance1.psess = Performance1.psess - EndProjectSection +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher2", "Launcher2\Launcher2.csproj", "{251AAFE1-F24B-4837-9128-9D04FCBFD528}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -303,6 +300,51 @@ Global {49BA1C69-6104-41AC-A5D8-B54FA9F696E8}.Windows8|Mixed Platforms.ActiveCfg = Release|Any CPU {49BA1C69-6104-41AC-A5D8-B54FA9F696E8}.Windows8|Mixed Platforms.Build.0 = Release|Any CPU {49BA1C69-6104-41AC-A5D8-B54FA9F696E8}.Windows8|x86.ActiveCfg = Release|Any CPU + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Android|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Android|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Android|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Android|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Android|x86.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Debug|Any CPU.ActiveCfg = Debug|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Debug|x86.ActiveCfg = Debug|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Debug|x86.Build.0 = Debug|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.iOS|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.iOS|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.iOS|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.iOS|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.iOS|x86.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Linux|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Linux|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Linux|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Linux|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Linux|x86.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.OSX|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.OSX|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.OSX|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.OSX|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.OSX|x86.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.PSM|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.PSM|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.PSM|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.PSM|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.PSM|x86.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Release|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Release|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Release|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Release|x86.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows|x86.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows8|Any CPU.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows8|Mixed Platforms.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows8|Mixed Platforms.Build.0 = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows8|x86.ActiveCfg = Release|x86 + {251AAFE1-F24B-4837-9128-9D04FCBFD528}.Windows8|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Subsurface_Solution.v12.suo b/Subsurface_Solution.v12.suo index bd0ea0d9c..60b92d540 100644 Binary files a/Subsurface_Solution.v12.suo and b/Subsurface_Solution.v12.suo differ diff --git a/packages/RestSharp.105.2.3/RestSharp.105.2.3.nupkg b/packages/RestSharp.105.2.3/RestSharp.105.2.3.nupkg new file mode 100644 index 000000000..af89bdafb Binary files /dev/null and b/packages/RestSharp.105.2.3/RestSharp.105.2.3.nupkg differ diff --git a/packages/RestSharp.105.2.3/RestSharp.105.2.3.nuspec b/packages/RestSharp.105.2.3/RestSharp.105.2.3.nuspec new file mode 100644 index 000000000..312823988 --- /dev/null +++ b/packages/RestSharp.105.2.3/RestSharp.105.2.3.nuspec @@ -0,0 +1,17 @@ + + + + RestSharp + 105.2.3 + John Sheehan, RestSharp Community + John Sheehan, RestSharp Community + https://github.com/restsharp/RestSharp/blob/master/LICENSE.txt + http://restsharp.org/ + http://dl.dropbox.com/u/1827/restsharp100.png + false + Simple REST and HTTP API Client + For full release notes see https://github.com/restsharp/RestSharp/blob/master/releasenotes.markdown + en-US + REST HTTP API JSON XML + + \ No newline at end of file diff --git a/packages/RestSharp.105.2.3/lib/MonoAndroid10/RestSharp.dll b/packages/RestSharp.105.2.3/lib/MonoAndroid10/RestSharp.dll new file mode 100644 index 000000000..9f15b1b04 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/MonoAndroid10/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/MonoAndroid10/RestSharp.xml b/packages/RestSharp.105.2.3/lib/MonoAndroid10/RestSharp.xml new file mode 100644 index 000000000..d48b0034a --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/MonoAndroid10/RestSharp.xml @@ -0,0 +1,3020 @@ + + + + RestSharp + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Deserialized entity data + + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + diff --git a/packages/RestSharp.105.2.3/lib/MonoTouch10/RestSharp.dll b/packages/RestSharp.105.2.3/lib/MonoTouch10/RestSharp.dll new file mode 100644 index 000000000..aff63af03 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/MonoTouch10/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/MonoTouch10/RestSharp.xml b/packages/RestSharp.105.2.3/lib/MonoTouch10/RestSharp.xml new file mode 100644 index 000000000..d48b0034a --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/MonoTouch10/RestSharp.xml @@ -0,0 +1,3020 @@ + + + + RestSharp + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Deserialized entity data + + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + diff --git a/packages/RestSharp.105.2.3/lib/Xamarin.iOS10/RestSharp.dll b/packages/RestSharp.105.2.3/lib/Xamarin.iOS10/RestSharp.dll new file mode 100644 index 000000000..5c24dc22b Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/Xamarin.iOS10/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/Xamarin.iOS10/RestSharp.xml b/packages/RestSharp.105.2.3/lib/Xamarin.iOS10/RestSharp.xml new file mode 100644 index 000000000..d48b0034a --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/Xamarin.iOS10/RestSharp.xml @@ -0,0 +1,3020 @@ + + + + RestSharp + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Deserialized entity data + + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + diff --git a/packages/RestSharp.105.2.3/lib/net35/RestSharp.dll b/packages/RestSharp.105.2.3/lib/net35/RestSharp.dll new file mode 100644 index 000000000..0b0001b5a Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/net35/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/net35/RestSharp.xml b/packages/RestSharp.105.2.3/lib/net35/RestSharp.xml new file mode 100644 index 000000000..543b8b01d --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/net35/RestSharp.xml @@ -0,0 +1,2858 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + HttpWebRequest wrapper (sync methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (async methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + diff --git a/packages/RestSharp.105.2.3/lib/net4-client/RestSharp.dll b/packages/RestSharp.105.2.3/lib/net4-client/RestSharp.dll new file mode 100644 index 000000000..b48af8715 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/net4-client/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/net4-client/RestSharp.xml b/packages/RestSharp.105.2.3/lib/net4-client/RestSharp.xml new file mode 100644 index 000000000..16ca278fa --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/net4-client/RestSharp.xml @@ -0,0 +1,3095 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.105.2.3/lib/net4/RestSharp.dll b/packages/RestSharp.105.2.3/lib/net4/RestSharp.dll new file mode 100644 index 000000000..b48af8715 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/net4/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/net4/RestSharp.xml b/packages/RestSharp.105.2.3/lib/net4/RestSharp.xml new file mode 100644 index 000000000..16ca278fa --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/net4/RestSharp.xml @@ -0,0 +1,3095 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.105.2.3/lib/net45/RestSharp.dll b/packages/RestSharp.105.2.3/lib/net45/RestSharp.dll new file mode 100644 index 000000000..533b3cc8a Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/net45/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/net45/RestSharp.xml b/packages/RestSharp.105.2.3/lib/net45/RestSharp.xml new file mode 100644 index 000000000..16ca278fa --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/net45/RestSharp.xml @@ -0,0 +1,3095 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.105.2.3/lib/net451/RestSharp.dll b/packages/RestSharp.105.2.3/lib/net451/RestSharp.dll new file mode 100644 index 000000000..d8414d1a9 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/net451/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/net451/RestSharp.xml b/packages/RestSharp.105.2.3/lib/net451/RestSharp.xml new file mode 100644 index 000000000..16ca278fa --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/net451/RestSharp.xml @@ -0,0 +1,3095 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.105.2.3/lib/net452/RestSharp.dll b/packages/RestSharp.105.2.3/lib/net452/RestSharp.dll new file mode 100644 index 000000000..31e4704f8 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/net452/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/net452/RestSharp.xml b/packages/RestSharp.105.2.3/lib/net452/RestSharp.xml new file mode 100644 index 000000000..16ca278fa --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/net452/RestSharp.xml @@ -0,0 +1,3095 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.105.2.3/lib/net46/RestSharp.dll b/packages/RestSharp.105.2.3/lib/net46/RestSharp.dll new file mode 100644 index 000000000..8af7bc116 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/net46/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/net46/RestSharp.xml b/packages/RestSharp.105.2.3/lib/net46/RestSharp.xml new file mode 100644 index 000000000..16ca278fa --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/net46/RestSharp.xml @@ -0,0 +1,3095 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + Tries to Authenticate with the credentials of the currently logged in user, or impersonate a user + + + + + Authenticate with the credentials of the currently logged in user + + + + + Authenticate by impersonation + + + + + + + Authenticate by impersonation, using an existing ICredentials instance + + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Decodes an HTML-encoded string and returns the decoded string. + + The HTML string to decode. + The decoded text. + + + + Decodes an HTML-encoded string and sends the resulting output to a TextWriter output stream. + + The HTML string to decode + The TextWriter output stream containing the decoded string. + + + + HTML-encodes a string and sends the resulting output to a TextWriter output stream. + + The string to encode. + The TextWriter output stream containing the encoded string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + HttpWebRequest wrapper (sync methods) + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + Execute a POST request + + + + + Execute a PUT request + + + + + Execute a GET request + + + + + Execute a HEAD request + + + + + Execute an OPTIONS request + + + + + Execute a DELETE request + + + + + Execute a PATCH request + + + + + Execute a MERGE request + + + + + Execute a GET-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + Execute a POST-style request with the specified HTTP Method. + + The HTTP method to execute. + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + X509CertificateCollection to be sent with request + + + + + Maximum number of automatic redirects to follow if FollowRedirects is true + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Proxy info to be sent with request + + + + + Caching policy for requests created with this wrapper. + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + X509CertificateCollection to be sent with request + + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Executes the specified request and downloads the response data + + Request to execute + Response data + + + + Executes the request and returns a response, authenticating if needed + + Request to be executed + RestResponse + + + + Executes the specified request and deserializes the response content using the appropriate content handler + + Target deserialization type + Request to execute + RestResponse[[T]] with deserialized data in Data property + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + X509CertificateCollection to be sent with request + + + + + Proxy to use for requests made by this client instance. + Passed on to underlying WebRequest if set. + + + + + The cache policy to use for requests initiated by this client instance. + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Provides implementation for type conversion operations. Classes derived from the class can override this method to specify dynamic behavior for operations that convert an object from one type to another. + + Provides information about the conversion operation. The binder.Type property provides the type to which the object must be converted. For example, for the statement (String)sampleObject in C# (CType(sampleObject, Type) in Visual Basic), where sampleObject is an instance of the class derived from the class, binder.Type returns the type. The binder.Explicit property provides information about the kind of conversion that occurs. It returns true for explicit conversion and false for implicit conversion. + The result of the type conversion operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that delete an object member. This method is not intended for use in C# or Visual Basic. + + Provides information about the deletion. + + Alwasy returns true. + + + + + Provides the implementation for operations that get a value by index. Classes derived from the class can override this method to specify dynamic behavior for indexing operations. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] operation in C# (sampleObject(3) in Visual Basic), where sampleObject is derived from the DynamicObject class, is equal to 3. + The result of the index operation. + + Alwasy returns true. + + + + + Provides the implementation for operations that get member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as getting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member on which the dynamic operation is performed. For example, for the Console.WriteLine(sampleObject.SampleProperty) statement, where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The result of the get operation. For example, if the method is called for a property, you can assign the property value to . + + Alwasy returns true. + + + + + Provides the implementation for operations that set a value by index. Classes derived from the class can override this method to specify dynamic behavior for operations that access objects by a specified index. + + Provides information about the operation. + The indexes that are used in the operation. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 3. + The value to set to the object that has the specified index. For example, for the sampleObject[3] = 10 operation in C# (sampleObject(3) = 10 in Visual Basic), where sampleObject is derived from the class, is equal to 10. + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown. + + + + + Provides the implementation for operations that set member values. Classes derived from the class can override this method to specify dynamic behavior for operations such as setting a value for a property. + + Provides information about the object that called the dynamic operation. The binder.Name property provides the name of the member to which the value is being assigned. For example, for the statement sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, binder.Name returns "SampleProperty". The binder.IgnoreCase property specifies whether the member name is case-sensitive. + The value to set to the member. For example, for sampleObject.SampleProperty = "Test", where sampleObject is an instance of the class derived from the class, the is "Test". + + true if the operation is successful; otherwise, false. If this method returns false, the run-time binder of the language determines the behavior. (In most cases, a language-specific run-time exception is thrown.) + + + + + Returns the enumeration of all dynamic member names. + + + A sequence that contains dynamic member names. + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + diff --git a/packages/RestSharp.105.2.3/lib/sl5/RestSharp.dll b/packages/RestSharp.105.2.3/lib/sl5/RestSharp.dll new file mode 100644 index 000000000..9b07a2d48 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/sl5/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/sl5/RestSharp.xml b/packages/RestSharp.105.2.3/lib/sl5/RestSharp.xml new file mode 100644 index 000000000..0fdfe6cc4 --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/sl5/RestSharp.xml @@ -0,0 +1,2649 @@ + + + + RestSharp + + + + + JSON WEB TOKEN (JWT) Authenticator class. + https://tools.ietf.org/html/draft-ietf-oauth-json-web-token + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Save a byte array to a file + + Bytes to save + Full path to save file to + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + diff --git a/packages/RestSharp.105.2.3/lib/windowsphone8/RestSharp.dll b/packages/RestSharp.105.2.3/lib/windowsphone8/RestSharp.dll new file mode 100644 index 000000000..e7289c244 Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/windowsphone8/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/windowsphone8/RestSharp.xml b/packages/RestSharp.105.2.3/lib/windowsphone8/RestSharp.xml new file mode 100644 index 000000000..83f9ce605 --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/windowsphone8/RestSharp.xml @@ -0,0 +1,3866 @@ + + + + RestSharp + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Calculates a 32bit Cyclic Redundancy Checksum (CRC) using the same polynomial + used by Zip. This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip archive + files. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a computation + defined by PKzip. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + indicates the total number of bytes read on the CRC stream. + This is used when writing the ZipDirEntry when compressing files. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + Instances returned from this constructor will leave the underlying stream + open upon Close(). + + The underlying stream + + + + The constructor allows the caller to specify how to handle the underlying + stream at close. + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + A constructor allowing the specification of the length of the stream to read. + + + Instances returned from this constructor will leave the underlying stream open + upon Close(). + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream to + read, as well as whether to keep the underlying stream open upon Close(). + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Flush the stream. + + + + + Not implemented. + + N/A + N/A + N/A + + + + Not implemented. + + N/A + + + + Closes the stream. + + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of bytes + written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + + Indicates whether the stream supports writing. + + + + + Not implemented. + + + + + Not implemented. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a . It adds GZIP compression or decompression to any stream. + + + Like the Compression.GZipStream in the .NET Base + Class Library, the Ionic.Zlib.GZipStream can compress while writing, or decompress + while reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC 1952, + "GZIP file format specification version 4.3". + + A GZipStream can be used to decompress data (through Read()) or to compress + data (through Write()), but not both. + + If you wish to use the GZipStream to compress data, you must wrap it around a + write-able stream. As you call Write() on the GZipStream, the data will be + compressed into the GZIP format. If you want to decompress data, you must wrap the + GZipStream around a readable stream that contains an IETF RFC 1952-compliant stream. + The data will be decompressed as you call Read() on the GZipStream. + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + This class is similar to and . + ZlibStream handles RFC1950-compliant streams. + handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. + + + + + + + + + + Create a GZipStream using the specified CompressionMode and the specified CompressionLevel, + and explicitly specify whether the stream should be left open after Deflation or Inflation. + + + + This constructor allows the application to request that the captive stream remain open after + the deflation or inflation occurs. By default, after Close() is called on the stream, the + captive stream is also closed. In some cases this is not desired, for example if the stream + is a memory stream that will be re-read after compressed data has been written to it. Specify true for the + leaveOpen parameter to leave the stream open. + + + As noted in the class documentation, + the CompressionMode (Compress or Decompress) also establishes the "direction" of the stream. + A GZipStream with CompressionMode.Compress works only through Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + This example shows how to use a DeflateStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the ctor's with leaveOpen parameters for more information. + + + + + Flush the stream. + + + + + Read and decompress data from the source stream. + + + With a GZipStream, decompression is done through reading. + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a NotImplementedException. + + irrelevant; this method will always throw! + + + + The Comment on the GZIP stream. + + + + The GZIP format allows for each file to optionally have an associated comment stored with the + file. The comment is encoded with the ISO-8859-1 code page. To include a comment in + a GZIP stream you create, set this property before calling Write() for the first time + on the GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property after the first + call to Read(). If no comment has been set in the GZIP bytestream, the Comment + property will return null (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + The GZIP format optionally allows each file to have an associated filename. When + compressing data (through Write()), set this FileName before calling Write() the first + time on the GZipStream. The actual filename is encoded into the GZIP bytestream with + the ISO-8859-1 code page, according to RFC 1952. It is the application's responsibility to + insure that the FileName can be encoded and decoded correctly with this code page. + + + When decompressing (through Read()), you can retrieve this value any time after the + first Read(). In the case where there was no filename encoded into the GZIP + bytestream, the property will return null (Nothing in VB). + + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index. + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + The number of characters read. The number will be less than or equal to count depending on the data available in the source TextReader. Returns -1 if the end of the stream is reached. + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + Create a ZlibCodec that decompresses. + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_NO_FLUSH); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_FINISH); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. + + + + + The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read and Write operations. Either compresssion or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to , except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the constructors that have a leaveOpen parameter for more information. + + + + + Flush the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, you can create a + ZlibStream with CompressionMode.Compress, providing an uncompressed data stream. Then + call Read() on that ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create a ZlibStream with + CompressionMode.Decompress, providing a readable compressed data stream. Then call + Read() on that ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + + + + Calling this method always throws a NotImplementedException. + + + + + Calling this method always throws a NotImplementedException. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, you can create a + ZlibStream with CompressionMode.Compress, and a writable output stream. Then call + Write() on that ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you wish to use + the ZlibStream to decompress data while writing, you can create a ZlibStream with + CompressionMode.Decompress, and a writable output stream. Then call Write() on that + stream, providing previously compressed data. The data sent to the output stream will + be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Uncompress a byte array into a single string. + + + + A buffer containing ZLIB-compressed data. + + + + + Uncompress a byte array into a byte array. + + + + + A buffer containing ZLIB-compressed data. + + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + diff --git a/packages/RestSharp.105.2.3/lib/windowsphone81/RestSharp.dll b/packages/RestSharp.105.2.3/lib/windowsphone81/RestSharp.dll new file mode 100644 index 000000000..66e79802b Binary files /dev/null and b/packages/RestSharp.105.2.3/lib/windowsphone81/RestSharp.dll differ diff --git a/packages/RestSharp.105.2.3/lib/windowsphone81/RestSharp.xml b/packages/RestSharp.105.2.3/lib/windowsphone81/RestSharp.xml new file mode 100644 index 000000000..83f9ce605 --- /dev/null +++ b/packages/RestSharp.105.2.3/lib/windowsphone81/RestSharp.xml @@ -0,0 +1,3866 @@ + + + + RestSharp + + + + + + + + Base class for OAuth 2 Authenticators. + + + Since there are many ways to authenticate in OAuth2, + this is used as a base class to differentiate between + other authenticators. + + Any other OAuth2 authenticators must derive from this + abstract class. + + + + + Access token to be used when authenticating. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Gets the access token. + + + + + The OAuth 2 authenticator using URI query parameter. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.2 + + + + + Initializes a new instance of the class. + + + The access token. + + + + + The OAuth 2 authenticator using the authorization request header field. + + + Based on http://tools.ietf.org/html/draft-ietf-oauth-v2-10#section-5.1.1 + + + + + Stores the Authorization header value as "[tokenType] accessToken". used for performance. + + + + + Initializes a new instance of the class. + + + The access token. + + + + + Initializes a new instance of the class. + + + The access token. + + + The token type. + + + + + All text parameters are UTF-8 encoded (per section 5.1). + + + + + + Generates a random 16-byte lowercase alphanumeric string. + + + + + + + Generates a timestamp based on the current elapsed seconds since '01/01/1970 0000 GMT" + + + + + + + Generates a timestamp based on the elapsed seconds of a given time since '01/01/1970 0000 GMT" + + + A specified point in time. + + + + + The set of characters that are unreserved in RFC 2396 but are NOT unreserved in RFC 3986. + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + The value to escape. + The escaped value. + + The method is supposed to take on + RFC 3986 behavior if certain elements are present in a .config file. Even if this + actually worked (which in my experiments it doesn't), we can't rely on every + host actually having this configuration element present. + + + + + + + URL encodes a string based on section 5.1 of the OAuth spec. + Namely, percent encoding with [RFC3986], avoiding unreserved characters, + upper-casing hexadecimal characters, and UTF-8 encoding for text value pairs. + + + + + + + Sorts a collection of key-value pairs by name, and then value if equal, + concatenating them into a single string. This string should be encoded + prior to, or after normalization is run. + + + + + + + + Sorts a by name, and then value if equal. + + A collection of parameters to sort + A sorted parameter collection + + + + Creates a request URL suitable for making OAuth requests. + Resulting URLs must exclude port 80 or port 443 when accompanied by HTTP and HTTPS, respectively. + Resulting URLs must be lower case. + + + The original request URL + + + + + Creates a request elements concatentation value to send with a request. + This is also known as the signature base. + + + + The request's HTTP method type + The request URL + The request's parameters + A signature base string + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret. + This method is used when the token secret is currently unknown. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer key + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The signature base + The consumer secret + The token secret + + + + + Creates a signature value given a signature base and the consumer secret and a known token secret. + + + The hashing method + The treatment to use on a signature value + The signature base + The consumer secret + The token secret + + + + + A class to encapsulate OAuth authentication flow. + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + + + + + + Generates a instance to pass to an + for the purpose of requesting an + unauthorized request token. + + The HTTP method for the intended request + Any existing, non-OAuth query parameters desired in the request + + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + + + + Generates a instance to pass to an + for the purpose of exchanging a request token + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + Generates a instance to pass to an + for the purpose of exchanging user credentials + for an access token authorized by the user at the Service Provider site. + + The HTTP method for the intended request + + Any existing, non-OAuth query parameters desired in the request + + + + + + + + + + + + + Calculates a 32bit Cyclic Redundancy Checksum (CRC) using the same polynomial + used by Zip. This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip archive + files. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a computation + defined by PKzip. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + indicates the total number of bytes read on the CRC stream. + This is used when writing the ZipDirEntry when compressing files. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + Instances returned from this constructor will leave the underlying stream + open upon Close(). + + The underlying stream + + + + The constructor allows the caller to specify how to handle the underlying + stream at close. + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + A constructor allowing the specification of the length of the stream to read. + + + Instances returned from this constructor will leave the underlying stream open + upon Close(). + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream to + read, as well as whether to keep the underlying stream open upon Close(). + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream.; false otherwise. + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Flush the stream. + + + + + Not implemented. + + N/A + N/A + N/A + + + + Not implemented. + + N/A + + + + Closes the stream. + + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of bytes + written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + + Indicates whether the stream supports writing. + + + + + Not implemented. + + + + + Not implemented. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a . It adds GZIP compression or decompression to any stream. + + + Like the Compression.GZipStream in the .NET Base + Class Library, the Ionic.Zlib.GZipStream can compress while writing, or decompress + while reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC 1952, + "GZIP file format specification version 4.3". + + A GZipStream can be used to decompress data (through Read()) or to compress + data (through Write()), but not both. + + If you wish to use the GZipStream to compress data, you must wrap it around a + write-able stream. As you call Write() on the GZipStream, the data will be + compressed into the GZIP format. If you want to decompress data, you must wrap the + GZipStream around a readable stream that contains an IETF RFC 1952-compliant stream. + The data will be decompressed as you call Read() on the GZipStream. + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + This class is similar to and . + ZlibStream handles RFC1950-compliant streams. + handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. + + + + + + + + + + Create a GZipStream using the specified CompressionMode and the specified CompressionLevel, + and explicitly specify whether the stream should be left open after Deflation or Inflation. + + + + This constructor allows the application to request that the captive stream remain open after + the deflation or inflation occurs. By default, after Close() is called on the stream, the + captive stream is also closed. In some cases this is not desired, for example if the stream + is a memory stream that will be re-read after compressed data has been written to it. Specify true for the + leaveOpen parameter to leave the stream open. + + + As noted in the class documentation, + the CompressionMode (Compress or Decompress) also establishes the "direction" of the stream. + A GZipStream with CompressionMode.Compress works only through Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + This example shows how to use a DeflateStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the ctor's with leaveOpen parameters for more information. + + + + + Flush the stream. + + + + + Read and decompress data from the source stream. + + + With a GZipStream, decompression is done through reading. + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a NotImplementedException. + + irrelevant; this method will always throw! + + + + The Comment on the GZIP stream. + + + + The GZIP format allows for each file to optionally have an associated comment stored with the + file. The comment is encoded with the ISO-8859-1 code page. To include a comment in + a GZIP stream you create, set this property before calling Write() for the first time + on the GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property after the first + call to Read(). If no comment has been set in the GZIP bytestream, the Comment + property will return null (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + The GZIP format optionally allows each file to have an associated filename. When + compressing data (through Write()), set this FileName before calling Write() the first + time on the GZipStream. The actual filename is encoded into the GZIP bytestream with + the ISO-8859-1 code page, according to RFC 1952. It is the application's responsibility to + insure that the FileName can be encoded and decoded correctly with this code page. + + + When decompressing (through Read()), you can retrieve this value any time after the + first Read(). In the case where there was no filename encoded into the GZIP + bytestream, the property will return null (Nothing in VB). + + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + Reads a number of characters from the current source TextReader and writes the data to the target array at the specified index. + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + The number of characters read. The number will be less than or equal to count depending on the data available in the source TextReader. Returns -1 if the end of the stream is reached. + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + Create a ZlibCodec that decompresses. + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_NO_FLUSH); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(ZlibConstants.Z_FINISH); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. + + + + + The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read and Write operations. Either compresssion or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to , except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + + Dispose the stream. + + + This may or may not result in a Close() call on the captive stream. + See the constructors that have a leaveOpen parameter for more information. + + + + + Flush the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, you can create a + ZlibStream with CompressionMode.Compress, providing an uncompressed data stream. Then + call Read() on that ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create a ZlibStream with + CompressionMode.Decompress, providing a readable compressed data stream. Then call + Read() on that ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + + + + Calling this method always throws a NotImplementedException. + + + + + Calling this method always throws a NotImplementedException. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, you can create a + ZlibStream with CompressionMode.Compress, and a writable output stream. Then call + Write() on that ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you wish to use + the ZlibStream to decompress data while writing, you can create a ZlibStream with + CompressionMode.Decompress, and a writable output stream. Then call Write() on that + stream, providing previously compressed data. The data sent to the output stream will + be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Uncompress a byte array into a single string. + + + + A buffer containing ZLIB-compressed data. + + + + + Uncompress a byte array into a byte array. + + + + + A buffer containing ZLIB-compressed data. + + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is 1024 bytes. + The minimum size is 128 bytes. You may get better performance with a larger buffer. + Then again, you might not. You would have to test it. + + + + Set this before the first call to Read() or Write() on the stream. If you try to set it + afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a NotImplementedException. + + + + + The position of the stream pointer. + + + Writing this property always throws a NotImplementedException. Reading will + return the total bytes written out, if used in writing, or the total bytes + read in, if used in reading. The count may refer to compressed bytes or + uncompressed bytes, depending on how you've used the stream. + + + + + Allows control how class and property names and values are deserialized by XmlAttributeDeserializer + + + + + The name to use for the serialized element + + + + + Sets if the property to Deserialize is an Attribute or Element (Default: false) + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Types of parameters that can be added to requests + + + + + Data formats + + + + + HTTP method to use when making requests + + + + + Format strings for commonly-used date formats + + + + + .NET format string for ISO 8601 date format + + + + + .NET format string for roundtrip date format + + + + + Status for responses (surprised?) + + + + + Extension method overload! + + + + + Read a stream into a byte array + + Stream to read + byte[] + + + + Copies bytes from one stream to another + + The input stream. + The output stream. + + + + Converts a byte array to a string, using its byte order mark to convert it to the right encoding. + http://www.shrinkrays.net/code-snippets/csharp/an-extension-method-for-converting-a-byte-array-to-a-string.aspx + + An array of bytes to convert + The byte as a string. + + + + Reflection extensions + + + + + Retrieve an attribute from a member (property) + + Type of attribute to retrieve + Member to retrieve attribute from + + + + + Retrieve an attribute from a type + + Type of attribute to retrieve + Type to retrieve attribute from + + + + + Checks a type to see if it derives from a raw generic (e.g. List[[]]) + + + + + + + + Find a value from a System.Enum by trying several possible variants + of the string value of the enum. + + Type of enum + Value for which to search + The culture used to calculate the name variants + + + + + Convert a to a instance. + + The response status. + + responseStatus + + + + Uses Uri.EscapeDataString() based on recommendations on MSDN + http://blogs.msdn.com/b/yangxind/archive/2006/11/09/don-t-use-net-system-uri-unescapedatastring-in-url-decoding.aspx + + + + + Check that a string is not null or empty + + String to check + bool + + + + Remove underscores from a string + + String to process + string + + + + Parses most common JSON date formats + + JSON value to parse + + DateTime + + + + Remove leading and trailing " from a string + + String to parse + String + + + + Checks a string to see if it matches a regex + + String to check + Pattern to match + bool + + + + Converts a string to pascal case + + String to convert + + string + + + + Converts a string to pascal case with the option to remove underscores + + String to convert + Option to remove underscores + + + + + + Converts a string to camel case + + String to convert + + String + + + + Convert the first letter of a string to lower case + + String to convert + string + + + + Checks to see if a string is all uppper case + + String to check + bool + + + + Add underscores to a pascal-cased string + + String to convert + string + + + + Add dashes to a pascal-cased string + + String to convert + string + + + + Add an undescore prefix to a pascasl-cased string + + + + + + + Add spaces to a pascal-cased string + + String to convert + string + + + + Return possible variants of a name for name matching. + + String to convert + The culture to use for conversion + IEnumerable<string> + + + + XML Extension Methods + + + + + Returns the name of an element with the namespace if specified + + Element name + XML Namespace + + + + + Container for files to be uploaded with requests + + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The content type to use in the request. + The + + + + Creates a file parameter from an array of bytes. + + The parameter name to use in the request. + The data to use as the file's contents. + The filename to use in the request. + The using the default content type. + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + HttpWebRequest wrapper (async methods) + + + HttpWebRequest wrapper + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + Execute an async POST-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Execute an async GET-style request with the specified HTTP Method. + + + The HTTP method to execute. + + + + + Creates an IHttp + + + + + + Default constructor + + + + + True if this HTTP request has any HTTP parameters + + + + + True if this HTTP request has any HTTP cookies + + + + + True if a request body has been specified + + + + + True if files have been set to be uploaded + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + UserAgent to be sent with request + + + + + Timeout in milliseconds to be used for the request + + + + + The number of milliseconds before the writing or reading times out. + + + + + System.Net.ICredentials to be sent with request + + + + + The System.Net.CookieContainer to be used for the request + + + + + The method to use to write the response instead of reading into RawBytes + + + + + Collection of files to be sent with request + + + + + Whether or not HTTP 3xx response redirects should be automatically followed + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. + + + + + HTTP headers to be sent with request + + + + + HTTP parameters (QueryString or Form values) to be sent with request + + + + + HTTP cookies to be sent with request + + + + + Request body to be sent with request + + + + + Content type of the request body. + + + + + An alternative to RequestBody, for when the caller already has the byte array. + + + + + URL to call for this request + + + + + Flag to send authorisation header with the HttpWebRequest + + + + + Representation of an HTTP cookie + + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + + Container for HTTP file + + + + + The length of data to be sent + + + + + Provides raw data for file + + + + + Name of the file to use when uploading + + + + + MIME content type of file + + + + + Name of the parameter + + + + + Representation of an HTTP header + + + + + Name of the header + + + + + Value of the header + + + + + Representation of an HTTP parameter (QueryString or Form value) + + + + + Name of the parameter + + + + + Value of the parameter + + + + + Content-Type of the parameter + + + + + HTTP response data + + + + + HTTP response data + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Default constructor + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + Lazy-loaded string representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Headers returned by server with the response + + + + + Cookies returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exception thrown when error is encountered. + + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are five types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - Cookie: Adds the name/value pair to the HTTP request's Cookies collection + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container for data sent back from API + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + Exceptions thrown during the request, if any. + + Will contain only network transport or framework exceptions thrown during the request. + HTTP protocol errors are handled by RestSharp and will not appear here. + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Parameter container for REST requests + + + + + Return a human-readable representation of this parameter + + String + + + + Name of the parameter + + + + + Value of the parameter + + + + + Type of the parameter + + + + + MIME content type of the parameter + + + + + Client to translate RestRequests into Http requests and process response result + + + + + Executes the request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Request to be executed + Callback function to be executed upon completion providing access to the async handle. + The HTTP method to execute + + + + Executes the request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + + + + Executes a GET-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a POST-style request and callback asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + Callback function to be executed upon completion + The HTTP method to execute + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a GET-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes a POST-style request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + + + + Executes the request asynchronously, authenticating if needed + + Target deserialization type + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a GET-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + + + + Executes a POST-style asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Executes the request asynchronously, authenticating if needed + + Request to be executed + The cancellation token + + + + Default constructor that registers default content handlers + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Sets the BaseUrl property for requests made by this client instance + + + + + + Registers a content handler to process response content + + MIME content type of the response content + Deserializer to use to process content + + + + Remove a content handler for the specified MIME content type + + MIME content type to remove + + + + Remove all content handlers + + + + + Retrieve the handler for the specified MIME content type + + MIME content type to retrieve + IDeserializer instance + + + + Assembles URL to call based on parameters, method and resource + + RestRequest to execute + Assembled System.Uri + + + + Maximum number of redirects to follow if FollowRedirects is true + + + + + Default is true. Determine whether or not requests that result in + HTTP status codes of 3xx should follow returned redirect + + + + + The CookieContainer used for requests made by this client instance + + + + + UserAgent to use for requests made by this client instance + + + + + Timeout in milliseconds to use for requests made by this client instance + + + + + The number of milliseconds before the writing or reading times out. + + + + + Whether to invoke async callbacks using the SynchronizationContext.Current captured when invoked + + + + + Authenticator to use for requests made by this client instance + + + + + Combined with Request.Resource to construct URL for request + Should include scheme and domain without trailing slash. + + + client.BaseUrl = new Uri("http://example.com"); + + + + + Parameters included with every request made with this instance of RestClient + If specified in both client and request, the request wins + + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Request to be executed + Callback function to be executed upon completion + + + + Executes the request and callback asynchronously, authenticating if needed + + The IRestClient this method extends + Target deserialization type + Request to be executed + Callback function to be executed upon completion providing access to the async handle + + + + Add a parameter to use on every request made with this client instance + + The IRestClient instance + Parameter to add + + + + + Removes a parameter from the default parameters that are used on every request made with this client instance + + The IRestClient instance + The name of the parameter that needs to be removed + + + + + Adds a HTTP parameter (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + Used on every request made by this client instance + + The IRestClient instance + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + The IRestClient instance + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Shortcut to AddDefaultParameter(name, value, HttpHeader) overload + + The IRestClient instance + Name of the header to add + Value of the header to add + + + + + Shortcut to AddDefaultParameter(name, value, UrlSegment) overload + + The IRestClient instance + Name of the segment to add + Value of the segment to add + + + + + Container for data used to make requests + + + + + Default constructor + + + + + Sets Method property to value of method + + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Sets Resource property + + Resource to use for this request + + + + Sets Resource and Method properties + + Resource to use for this request + Method to use for this request + + + + Adds a file to the Files collection to be included with a POST or PUT request + (other methods do not support file uploads). + + The parameter name to use in the request + Full path to file to upload + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name + + The parameter name to use in the request + The file data + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Adds the bytes to the Files collection with the specified file name and content type + + The parameter name to use in the request + A function that writes directly to the stream. Should NOT close the stream. + The file name to use for the uploaded file + The MIME type of the file to upload + This request + + + + Add bytes to the Files collection as if it was a file of specific type + + A form parameter name + The file data + The file name to use for the uploaded file + Specific content type. Es: application/x-gzip + + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Serializes obj to data format specified by RequestFormat and adds it to the request body. + The default format is XML. Change RequestFormat if you wish to use a different serialization format. + + The object to serialize + This request + + + + Serializes obj to JSON format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to XML format and adds it to the request body. + + The object to serialize + This request + + + + Serializes obj to format specified by RequestFormat, but passes xmlNamespace if using the default XmlSerializer + Serializes obj to XML format and passes xmlNamespace then adds it to the request body. + + The object to serialize + The XML namespace to use when serializing + This request + + + + Calls AddParameter() for all public, readable properties specified in the includedProperties list + + + request.AddObject(product, "ProductId", "Price", ...); + + The object with properties to add as parameters + The names of the properties to include + This request + + + + Calls AddParameter() for all public, readable properties of obj + + The object with properties to add as parameters + This request + + + + Add the parameter to the request + + Parameter to add + + + + + Adds a HTTP parameter to the request (QueryString for GET, DELETE, OPTIONS and HEAD; Encoded form for POST and PUT) + + Name of the parameter + Value of the parameter + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + The type of parameter to add + This request + + + + Adds a parameter to the request. There are four types of parameters: + - GetOrPost: Either a QueryString value or encoded form value based on method + - HttpHeader: Adds the name/value pair to the HTTP request's Headers collection + - UrlSegment: Inserted into URL if there is a matching url token e.g. {AccountId} + - RequestBody: Used by AddBody() (not recommended to use directly) + + Name of the parameter + Value of the parameter + Content-Type of the parameter + The type of parameter to add + This request + + + + Shortcut to AddParameter(name, value, HttpHeader) overload + + Name of the header to add + Value of the header to add + + + + + Shortcut to AddParameter(name, value, Cookie) overload + + Name of the cookie to add + Value of the cookie to add + + + + + Shortcut to AddParameter(name, value, UrlSegment) overload + + Name of the segment to add + Value of the segment to add + + + + + Shortcut to AddParameter(name, value, QueryString) overload + + Name of the parameter to add + Value of the parameter to add + + + + + Internal Method so that RestClient can increase the number of attempts + + + + + Always send a multipart/form-data request - even when no Files are present. + + + + + Serializer to use when writing JSON request bodies. Used if RequestFormat is Json. + By default the included JsonSerializer is used (currently using JSON.NET default serialization). + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default the included XmlSerializer is used. + + + + + Set this to write response to Stream rather than reading into memory. + + + + + Determine whether or not the "default credentials" (e.g. the user account under which the current process is running) + will be sent along to the server. The default is false. + + + + + Container of all HTTP parameters to be passed with the request. + See AddParameter() for explanation of the types of parameters that can be passed + + + + + Container of all the files to be uploaded with the request. + + + + + Determines what HTTP method to use for this request. Supported methods: GET, POST, PUT, DELETE, HEAD, OPTIONS + Default is GET + + + + + The Resource URL to make the request against. + Tokens are substituted with UrlSegment parameters and match by name. + Should not include the scheme or domain. Do not include leading slash. + Combined with RestClient.BaseUrl to assemble final URL: + {BaseUrl}/{Resource} (BaseUrl is scheme + domain, e.g. http://example.com) + + + // example for url token replacement + request.Resource = "Products/{ProductId}"; + request.AddParameter("ProductId", 123, ParameterType.UrlSegment); + + + + + Serializer to use when writing XML request bodies. Used if RequestFormat is Xml. + By default XmlSerializer is used. + + + + + Used by the default deserializers to determine where to start deserializing from. + Can be used to skip container or root elements that do not have corresponding deserialzation targets. + + + + + A function to run prior to deserializing starting (e.g. change settings if error encountered) + + + + + Used by the default deserializers to explicitly set which date format string to use when parsing dates. + + + + + Used by XmlDeserializer. If not specified, XmlDeserializer will flatten response by removing namespaces from element names. + + + + + In general you would not need to set this directly. Used by the NtlmAuthenticator. + + + + + Gets or sets a user-defined state object that contains information about a request and which can be later + retrieved when the request completes. + + + + + Timeout in milliseconds to be used for the request. This timeout value overrides a timeout set on the RestClient. + + + + + The number of milliseconds before the writing or reading times out. This timeout value overrides a timeout set on the RestClient. + + + + + How many attempts were made to send this Request? + + + This Number is incremented each time the RestClient sends the request. + Useful when using Asynchronous Execution with Callbacks + + + + + Base class for common properties shared by RestResponse and RestResponse[[T]] + + + + + Default constructor + + + + + Assists with debugging responses by displaying in the debugger output + + + + + + The RestRequest that was made to get this RestResponse + + + Mainly for debugging if ResponseStatus is not OK + + + + + MIME content type of response + + + + + Length in bytes of the response content + + + + + Encoding of the response content + + + + + String representation of response content + + + + + HTTP response status code + + + + + Description of HTTP status returned + + + + + Response content + + + + + The URL that actually responded to the content (different from request if redirected) + + + + + HttpWebResponse.Server + + + + + Cookies returned by server with the response + + + + + Headers returned by server with the response + + + + + Status of the request. Will return Error for transport errors. + HTTP errors will still return ResponseStatus.Completed, check StatusCode instead + + + + + Transport or other non-HTTP error generated while attempting request + + + + + The exception thrown during the request, if any + + + + + Container for data sent back from API including deserialized data + + Type of data to deserialize to + + + + Deserialized entity data + + + + + Container for data sent back from API + + + + + Wrapper for System.Xml.Serialization.XmlSerializer. + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Encoding for serialized content + + + + + Need to subclass StringWriter in order to override Encoding + + + + + Default JSON serializer for request bodies + Doesn't currently use the SerializeAs attribute, defers to Newtonsoft's attributes + + + + + Default serializer + + + + + Serialize the object as JSON + + Object to serialize + JSON as String + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Unused for JSON Serialization + + + + + Content type for serialized content + + + + + Allows control how class and property names and values are serialized by XmlSerializer + Currently not supported with the JsonSerializer + When specified at the property level the class-level specification is overridden + + + + + Called by the attribute when NameStyle is speficied + + The string to transform + String + + + + The name to use for the serialized element + + + + + Sets the value to be serialized as an Attribute instead of an Element + + + + + The culture to use when serializing + + + + + Transforms the casing of the name based on the selected value. + + + + + The order to serialize the element. Default is int.MaxValue. + + + + + Options for transforming casing of element names + + + + + Default XML Serializer + + + + + Default constructor, does not specify namespace + + + + + Specify the namespaced to be used when serializing + + XML namespace + + + + Serialize the object as XML + + Object to serialize + XML as string + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Name of the root element to use when serializing + + + + + XML namespace to use when serializing + + + + + Format string to use when serializing dates + + + + + Content type for serialized content + + + + + Represents the json array. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The capacity of the json array. + + + + The json representation of the array. + + The json representation of the array. + + + + Represents the json object. + + + + + The internal member dictionary. + + + + + Initializes a new instance of . + + + + + Initializes a new instance of . + + The implementation to use when comparing keys, or null to use the default for the type of the key. + + + + Adds the specified key. + + The key. + The value. + + + + Determines whether the specified key contains key. + + The key. + + true if the specified key contains key; otherwise, false. + + + + + Removes the specified key. + + The key. + + + + + Tries the get value. + + The key. + The value. + + + + + Adds the specified item. + + The item. + + + + Clears this instance. + + + + + Determines whether [contains] [the specified item]. + + The item. + + true if [contains] [the specified item]; otherwise, false. + + + + + Copies to. + + The array. + Index of the array. + + + + Removes the specified item. + + The item. + + + + + Gets the enumerator. + + + + + + Returns an enumerator that iterates through a collection. + + + An object that can be used to iterate through the collection. + + + + + Returns a json that represents the current . + + + A json that represents the current . + + + + + Gets the at the specified index. + + + + + + Gets the keys. + + The keys. + + + + Gets the values. + + The values. + + + + Gets or sets the with the specified key. + + + + + + Gets the count. + + The count. + + + + Gets a value indicating whether this instance is read only. + + + true if this instance is read only; otherwise, false. + + + + + This class encodes and decodes JSON strings. + Spec. details, see http://www.json.org/ + + JSON uses Arrays and Objects. These correspond here to the datatypes JsonArray(IList<object>) and JsonObject(IDictionary<string,object>). + All numbers are parsed to doubles. + + + + + Parses the string json into a value + + A JSON string. + An IList<object>, a IDictionary<string,object>, a double, a string, null, true, or false + + + + Try parsing the json string into a value. + + + A JSON string. + + + The object. + + + Returns true if successfull otherwise false. + + + + + Converts a IDictionary<string,object> / IList<object> object into a JSON string + + A IDictionary<string,object> / IList<object> + Serializer strategy to use + A JSON encoded string, or null if object 'json' is not serializable + + + + Determines if a given object is numeric in any way + (can be integer, double, null, etc). + + + + + Helper methods for validating required values + + + + + Require a parameter to not be null + + Name of the parameter + Value of the parameter + + + + Helper methods for validating values + + + + + Validate an integer value is between the specified values (exclusive of min/max) + + Value to validate + Exclusive minimum value + Exclusive maximum value + + + + Validate a string length + + String to be validated + Maximum length of the string + + + + Comment of the cookie + + + + + Comment of the cookie + + + + + Indicates whether the cookie should be discarded at the end of the session + + + + + Domain of the cookie + + + + + Indicates whether the cookie is expired + + + + + Date and time that the cookie expires + + + + + Indicates that this cookie should only be accessed by the server + + + + + Name of the cookie + + + + + Path of the cookie + + + + + Port of the cookie + + + + + Indicates that the cookie should only be sent over secure channels + + + + + Date and time the cookie was created + + + + + Value of the cookie + + + + + Version of the cookie + + + + diff --git a/packages/RestSharp.105.2.3/readme.txt b/packages/RestSharp.105.2.3/readme.txt new file mode 100644 index 000000000..89a5bded1 --- /dev/null +++ b/packages/RestSharp.105.2.3/readme.txt @@ -0,0 +1,20 @@ +*** IMPORTANT CHANGE IN RESTSHARP VERSION 103 *** + +In 103.0, JSON.NET was removed as a dependency. + +If this is still installed in your project and no other libraries depend on +it you may remove it from your installed packages. + +There is one breaking change: the default Json*Serializer* is no longer +compatible with Json.NET. To use Json.NET for serialization, copy the code +from https://github.com/restsharp/RestSharp/blob/86b31f9adf049d7fb821de8279154f41a17b36f7/RestSharp/Serializers/JsonSerializer.cs +and register it with your client: + +var client = new RestClient(); +client.JsonSerializer = new YourCustomSerializer(); + +The default Json*Deserializer* is mostly compatible, but it does not support +all features which Json.NET has (like the ability to support a custom [JsonConverter] +by decorating a certain property with an attribute). If you need these features, you +must take care of the deserialization yourself to get it working. + diff --git a/packages/repositories.config b/packages/repositories.config index 636ed8f41..2bfcd809d 100644 --- a/packages/repositories.config +++ b/packages/repositories.config @@ -1,4 +1,6 @@  + + \ No newline at end of file