├── .gitignore ├── Boop.sln ├── Boop ├── AboutBox1.Designer.cs ├── AboutBox1.cs ├── AboutBox1.resx ├── App.config ├── Boop.csproj ├── Boop.csproj.user ├── Form1.Designer.cs ├── Form1.cs ├── Form1.resx ├── InfoBox.Designer.cs ├── InfoBox.cs ├── InfoBox.resx ├── NetUtil.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Resources │ ├── 3ds.png │ ├── Boop1.png │ ├── IP.png │ ├── generic.png │ ├── github.png │ ├── info.png │ ├── snek2icon.png │ ├── snekicon.png │ └── switch.png ├── Utils.cs ├── app.manifest ├── bin │ ├── Debug │ │ ├── Boop.vshost.exe │ │ └── Boop.vshost.exe.config │ └── Release │ │ ├── Boop.vshost.exe │ │ └── Boop.vshost.exe.config ├── obj │ ├── Debug │ │ ├── DesignTimeResolveAssemblyReferences.cache │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache │ │ └── TempPE │ │ │ └── Properties.Resources.Designer.cs.dll │ └── Release │ │ ├── DesignTimeResolveAssemblyReferences.cache │ │ ├── DesignTimeResolveAssemblyReferencesInput.cache │ │ └── TempPE │ │ └── Properties.Resources.Designer.cs.dll ├── packages.config ├── snek2icon.ico └── snekicon.ico ├── LICENSE ├── README.md └── boop2.png /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | *.vcxproj.filters 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | # Visual Studio 2015 cache/options directory 29 | .vs/ 30 | # Uncomment if you have tasks that create the project's static files in wwwroot 31 | #wwwroot/ 32 | 33 | # MSTest test Results 34 | [Tt]est[Rr]esult*/ 35 | [Bb]uild[Ll]og.* 36 | 37 | # NUNIT 38 | *.VisualState.xml 39 | TestResult.xml 40 | 41 | # Build Results of an ATL Project 42 | [Dd]ebugPS/ 43 | [Rr]eleasePS/ 44 | dlldata.c 45 | 46 | # .NET Core 47 | project.lock.json 48 | project.fragment.lock.json 49 | artifacts/ 50 | **/Properties/launchSettings.json 51 | 52 | *_i.c 53 | *_p.c 54 | *_i.h 55 | *.ilk 56 | *.meta 57 | *.obj 58 | *.pch 59 | *.pdb 60 | *.pgc 61 | *.pgd 62 | *.rsp 63 | *.sbr 64 | *.tlb 65 | *.tli 66 | *.tlh 67 | *.tmp 68 | *.tmp_proj 69 | *.log 70 | *.vspscc 71 | *.vssscc 72 | .builds 73 | *.pidb 74 | *.svclog 75 | *.scc 76 | 77 | # Chutzpah Test files 78 | _Chutzpah* 79 | 80 | # Visual C++ cache files 81 | ipch/ 82 | *.aps 83 | *.ncb 84 | *.opendb 85 | *.opensdf 86 | *.sdf 87 | *.cachefile 88 | *.VC.db 89 | *.VC.VC.opendb 90 | 91 | # Visual Studio profiler 92 | *.psess 93 | *.vsp 94 | *.vspx 95 | *.sap 96 | 97 | # TFS 2012 Local Workspace 98 | $tf/ 99 | 100 | # Guidance Automation Toolkit 101 | *.gpState 102 | 103 | # ReSharper is a .NET coding add-in 104 | _ReSharper*/ 105 | *.[Rr]e[Ss]harper 106 | *.DotSettings.user 107 | 108 | # JustCode is a .NET coding add-in 109 | .JustCode 110 | 111 | # TeamCity is a build add-in 112 | _TeamCity* 113 | 114 | # DotCover is a Code Coverage Tool 115 | *.dotCover 116 | 117 | # Visual Studio code coverage results 118 | *.coverage 119 | *.coveragexml 120 | 121 | # NCrunch 122 | _NCrunch_* 123 | .*crunch*.local.xml 124 | nCrunchTemp_* 125 | 126 | # MightyMoose 127 | *.mm.* 128 | AutoTest.Net/ 129 | 130 | # Web workbench (sass) 131 | .sass-cache/ 132 | 133 | # Installshield output folder 134 | [Ee]xpress/ 135 | 136 | # DocProject is a documentation generator add-in 137 | DocProject/buildhelp/ 138 | DocProject/Help/*.HxT 139 | DocProject/Help/*.HxC 140 | DocProject/Help/*.hhc 141 | DocProject/Help/*.hhk 142 | DocProject/Help/*.hhp 143 | DocProject/Help/Html2 144 | DocProject/Help/html 145 | 146 | # Click-Once directory 147 | publish/ 148 | 149 | # Publish Web Output 150 | *.[Pp]ublish.xml 151 | *.azurePubxml 152 | # TODO: Comment the next line if you want to checkin your web deploy settings 153 | # but database connection strings (with potential passwords) will be unencrypted 154 | *.pubxml 155 | *.publishproj 156 | 157 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 158 | # checkin your Azure Web App publish settings, but sensitive information contained 159 | # in these scripts will be unencrypted 160 | PublishScripts/ 161 | 162 | # NuGet Packages 163 | *.nupkg 164 | # The packages folder can be ignored because of Package Restore 165 | **/packages/* 166 | # except build/, which is used as an MSBuild target. 167 | !**/packages/build/ 168 | # Uncomment if necessary however generally it will be regenerated when needed 169 | #!**/packages/repositories.config 170 | # NuGet v3's project.json files produces more ignoreable files 171 | *.nuget.props 172 | *.nuget.targets 173 | 174 | # Microsoft Azure Build Output 175 | csx/ 176 | *.build.csdef 177 | 178 | # Microsoft Azure Emulator 179 | ecf/ 180 | rcf/ 181 | 182 | # Windows Store app package directories and files 183 | AppPackages/ 184 | BundleArtifacts/ 185 | Package.StoreAssociation.xml 186 | _pkginfo.txt 187 | 188 | # Visual Studio cache files 189 | # files ending in .cache can be ignored 190 | *.[Cc]ache 191 | # but keep track of directories ending in .cache 192 | !*.[Cc]ache/ 193 | 194 | # Others 195 | ClientBin/ 196 | ~$* 197 | *~ 198 | *.dbmdl 199 | *.dbproj.schemaview 200 | *.jfm 201 | *.pfx 202 | *.publishsettings 203 | node_modules/ 204 | orleans.codegen.cs 205 | 206 | # Since there are multiple workflows, uncomment next line to ignore bower_components 207 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 208 | #bower_components/ 209 | 210 | # RIA/Silverlight projects 211 | Generated_Code/ 212 | 213 | # Backup & report files from converting an old project file 214 | # to a newer Visual Studio version. Backup files are not needed, 215 | # because we have git ;-) 216 | _UpgradeReport_Files/ 217 | Backup*/ 218 | UpgradeLog*.XML 219 | UpgradeLog*.htm 220 | 221 | # SQL Server files 222 | *.mdf 223 | *.ldf 224 | 225 | # Business Intelligence projects 226 | *.rdl.data 227 | *.bim.layout 228 | *.bim_*.settings 229 | 230 | # Microsoft Fakes 231 | FakesAssemblies/ 232 | 233 | # GhostDoc plugin setting file 234 | *.GhostDoc.xml 235 | 236 | # Node.js Tools for Visual Studio 237 | .ntvs_analysis.dat 238 | 239 | # Visual Studio 6 build log 240 | *.plg 241 | 242 | # Visual Studio 6 workspace options file 243 | *.opt 244 | 245 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 246 | *.vbw 247 | 248 | # Visual Studio LightSwitch build output 249 | **/*.HTMLClient/GeneratedArtifacts 250 | **/*.DesktopClient/GeneratedArtifacts 251 | **/*.DesktopClient/ModelManifest.xml 252 | **/*.Server/GeneratedArtifacts 253 | **/*.Server/ModelManifest.xml 254 | _Pvt_Extensions 255 | 256 | # Paket dependency manager 257 | .paket/paket.exe 258 | paket-files/ 259 | 260 | # FAKE - F# Make 261 | .fake/ 262 | 263 | # JetBrains Rider 264 | .idea/ 265 | *.sln.iml 266 | 267 | # CodeRush 268 | .cr/ 269 | 270 | # Python Tools for Visual Studio (PTVS) 271 | __pycache__/ 272 | *.pyc 273 | 274 | # Cake - Uncomment if you are using it 275 | # tools/ -------------------------------------------------------------------------------- /Boop.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25123.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Boop", "Boop\Boop.csproj", "{3005A7C9-0F16-4FC5-8CD4-AB9B9F68CAF6}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {3005A7C9-0F16-4FC5-8CD4-AB9B9F68CAF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {3005A7C9-0F16-4FC5-8CD4-AB9B9F68CAF6}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {3005A7C9-0F16-4FC5-8CD4-AB9B9F68CAF6}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {3005A7C9-0F16-4FC5-8CD4-AB9B9F68CAF6}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /Boop/AboutBox1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Boop 2 | { 3 | partial class AboutBox1 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | protected override void Dispose(bool disposing) 14 | { 15 | if (disposing && (components != null)) 16 | { 17 | components.Dispose(); 18 | } 19 | base.Dispose(disposing); 20 | } 21 | 22 | #region Windows Form Designer generated code 23 | 24 | /// 25 | /// Required method for Designer support - do not modify 26 | /// the contents of this method with the code editor. 27 | /// 28 | private void InitializeComponent() 29 | { 30 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutBox1)); 31 | this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); 32 | this.logoPictureBox = new System.Windows.Forms.PictureBox(); 33 | this.labelProductName = new System.Windows.Forms.Label(); 34 | this.labelVersion = new System.Windows.Forms.Label(); 35 | this.labelCopyright = new System.Windows.Forms.Label(); 36 | this.labelCompanyName = new System.Windows.Forms.Label(); 37 | this.textBoxDescription = new System.Windows.Forms.TextBox(); 38 | this.okButton = new System.Windows.Forms.Button(); 39 | this.tableLayoutPanel.SuspendLayout(); 40 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); 41 | this.SuspendLayout(); 42 | // 43 | // tableLayoutPanel 44 | // 45 | this.tableLayoutPanel.ColumnCount = 2; 46 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); 47 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); 48 | this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); 49 | this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); 50 | this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); 51 | this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); 52 | this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3); 53 | this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); 54 | this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); 55 | this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; 56 | this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9); 57 | this.tableLayoutPanel.Name = "tableLayoutPanel"; 58 | this.tableLayoutPanel.RowCount = 6; 59 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 60 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 61 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 62 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 63 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); 64 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 65 | this.tableLayoutPanel.Size = new System.Drawing.Size(417, 265); 66 | this.tableLayoutPanel.TabIndex = 0; 67 | // 68 | // logoPictureBox 69 | // 70 | this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; 71 | this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); 72 | this.logoPictureBox.Location = new System.Drawing.Point(3, 3); 73 | this.logoPictureBox.Name = "logoPictureBox"; 74 | this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); 75 | this.logoPictureBox.Size = new System.Drawing.Size(131, 259); 76 | this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 77 | this.logoPictureBox.TabIndex = 12; 78 | this.logoPictureBox.TabStop = false; 79 | // 80 | // labelProductName 81 | // 82 | this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; 83 | this.labelProductName.Location = new System.Drawing.Point(143, 0); 84 | this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 85 | this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); 86 | this.labelProductName.Name = "labelProductName"; 87 | this.labelProductName.Size = new System.Drawing.Size(271, 17); 88 | this.labelProductName.TabIndex = 19; 89 | this.labelProductName.Text = "Product Name"; 90 | this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 91 | // 92 | // labelVersion 93 | // 94 | this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; 95 | this.labelVersion.Location = new System.Drawing.Point(143, 26); 96 | this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 97 | this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); 98 | this.labelVersion.Name = "labelVersion"; 99 | this.labelVersion.Size = new System.Drawing.Size(271, 17); 100 | this.labelVersion.TabIndex = 0; 101 | this.labelVersion.Text = "Version"; 102 | this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 103 | // 104 | // labelCopyright 105 | // 106 | this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; 107 | this.labelCopyright.Location = new System.Drawing.Point(143, 52); 108 | this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 109 | this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); 110 | this.labelCopyright.Name = "labelCopyright"; 111 | this.labelCopyright.Size = new System.Drawing.Size(271, 17); 112 | this.labelCopyright.TabIndex = 21; 113 | this.labelCopyright.Text = "Copyright"; 114 | this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 115 | // 116 | // labelCompanyName 117 | // 118 | this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill; 119 | this.labelCompanyName.Location = new System.Drawing.Point(143, 78); 120 | this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 121 | this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); 122 | this.labelCompanyName.Name = "labelCompanyName"; 123 | this.labelCompanyName.Size = new System.Drawing.Size(271, 17); 124 | this.labelCompanyName.TabIndex = 22; 125 | this.labelCompanyName.Text = "Company Name"; 126 | this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 127 | // 128 | // textBoxDescription 129 | // 130 | this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; 131 | this.textBoxDescription.Location = new System.Drawing.Point(143, 107); 132 | this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); 133 | this.textBoxDescription.Multiline = true; 134 | this.textBoxDescription.Name = "textBoxDescription"; 135 | this.textBoxDescription.ReadOnly = true; 136 | this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; 137 | this.textBoxDescription.Size = new System.Drawing.Size(271, 126); 138 | this.textBoxDescription.TabIndex = 23; 139 | this.textBoxDescription.TabStop = false; 140 | this.textBoxDescription.Text = "Description"; 141 | // 142 | // okButton 143 | // 144 | this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 145 | this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 146 | this.okButton.Location = new System.Drawing.Point(339, 239); 147 | this.okButton.Name = "okButton"; 148 | this.okButton.Size = new System.Drawing.Size(75, 23); 149 | this.okButton.TabIndex = 24; 150 | this.okButton.Text = "&OK"; 151 | // 152 | // AboutBox1 153 | // 154 | this.AcceptButton = this.okButton; 155 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 156 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 157 | this.ClientSize = new System.Drawing.Size(435, 283); 158 | this.Controls.Add(this.tableLayoutPanel); 159 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 160 | this.MaximizeBox = false; 161 | this.MinimizeBox = false; 162 | this.Name = "AboutBox1"; 163 | this.Padding = new System.Windows.Forms.Padding(9); 164 | this.ShowIcon = false; 165 | this.ShowInTaskbar = false; 166 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 167 | this.Text = "AboutBox1"; 168 | this.tableLayoutPanel.ResumeLayout(false); 169 | this.tableLayoutPanel.PerformLayout(); 170 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); 171 | this.ResumeLayout(false); 172 | 173 | } 174 | 175 | #endregion 176 | 177 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; 178 | private System.Windows.Forms.PictureBox logoPictureBox; 179 | private System.Windows.Forms.Label labelProductName; 180 | private System.Windows.Forms.Label labelVersion; 181 | private System.Windows.Forms.Label labelCopyright; 182 | private System.Windows.Forms.Label labelCompanyName; 183 | private System.Windows.Forms.TextBox textBoxDescription; 184 | private System.Windows.Forms.Button okButton; 185 | } 186 | } 187 | -------------------------------------------------------------------------------- /Boop/AboutBox1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Drawing; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Threading.Tasks; 8 | using System.Windows.Forms; 9 | 10 | namespace Boop 11 | { 12 | partial class AboutBox1 : Form 13 | { 14 | public AboutBox1() 15 | { 16 | InitializeComponent(); 17 | this.Text = String.Format("About {0}", AssemblyTitle); 18 | this.labelProductName.Text = AssemblyProduct; 19 | this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); 20 | this.labelCopyright.Text = AssemblyCopyright; 21 | this.labelCompanyName.Text = AssemblyCompany; 22 | this.textBoxDescription.Text = AssemblyDescription; 23 | } 24 | 25 | #region Assembly Attribute Accessors 26 | 27 | public string AssemblyTitle 28 | { 29 | get 30 | { 31 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 32 | if (attributes.Length > 0) 33 | { 34 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 35 | if (titleAttribute.Title != "") 36 | { 37 | return titleAttribute.Title; 38 | } 39 | } 40 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 41 | } 42 | } 43 | 44 | public string AssemblyVersion 45 | { 46 | get 47 | { 48 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 49 | } 50 | } 51 | 52 | public string AssemblyDescription 53 | { 54 | get 55 | { 56 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 57 | if (attributes.Length == 0) 58 | { 59 | return ""; 60 | } 61 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 62 | } 63 | } 64 | 65 | public string AssemblyProduct 66 | { 67 | get 68 | { 69 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 70 | if (attributes.Length == 0) 71 | { 72 | return ""; 73 | } 74 | return ((AssemblyProductAttribute)attributes[0]).Product; 75 | } 76 | } 77 | 78 | public string AssemblyCopyright 79 | { 80 | get 81 | { 82 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 83 | if (attributes.Length == 0) 84 | { 85 | return ""; 86 | } 87 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 88 | } 89 | } 90 | 91 | public string AssemblyCompany 92 | { 93 | get 94 | { 95 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 96 | if (attributes.Length == 0) 97 | { 98 | return ""; 99 | } 100 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 101 | } 102 | } 103 | #endregion 104 | } 105 | } 106 | -------------------------------------------------------------------------------- /Boop/AboutBox1.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /Boop/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 192.168.1.1 15 | 16 | 17 | 8080 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Boop/Boop.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {3005A7C9-0F16-4FC5-8CD4-AB9B9F68CAF6} 8 | WinExe 9 | Properties 10 | Boop 11 | Boop 12 | v4.7.2 13 | 512 14 | true 15 | false 16 | 17 | publish\ 18 | true 19 | Disk 20 | false 21 | Foreground 22 | 7 23 | Days 24 | false 25 | false 26 | true 27 | true 28 | 0 29 | 2.0.0.0 30 | false 31 | true 32 | true 33 | 34 | 35 | 36 | 37 | AnyCPU 38 | true 39 | full 40 | false 41 | bin\Debug\ 42 | DEBUG;TRACE 43 | prompt 44 | 4 45 | 46 | 47 | AnyCPU 48 | pdbonly 49 | true 50 | bin\Release\ 51 | TRACE 52 | prompt 53 | 4 54 | 55 | 56 | app.manifest 57 | 58 | 59 | snek2icon.ico 60 | 61 | 62 | LocalIntranet 63 | 64 | 65 | true 66 | 67 | 68 | BAACFA82F2A87E86CD927D07ECC4FD8AF8D0A7AB 69 | 70 | 71 | Boop_TemporaryKey.pfx 72 | 73 | 74 | true 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | ..\packages\EmbedIO.1.9.1\lib\net46\Unosquare.Labs.EmbedIO.dll 92 | True 93 | 94 | 95 | ..\packages\Unosquare.Swan.0.16.0\lib\net452\Unosquare.Swan.dll 96 | True 97 | 98 | 99 | 100 | 101 | Form 102 | 103 | 104 | AboutBox1.cs 105 | 106 | 107 | Form 108 | 109 | 110 | Form1.cs 111 | 112 | 113 | Form 114 | 115 | 116 | InfoBox.cs 117 | 118 | 119 | 120 | 121 | 122 | 123 | Form1.cs 124 | 125 | 126 | InfoBox.cs 127 | 128 | 129 | ResXFileCodeGenerator 130 | Resources.Designer.cs 131 | Designer 132 | 133 | 134 | True 135 | Resources.resx 136 | True 137 | 138 | 139 | 140 | 141 | 142 | SettingsSingleFileGenerator 143 | Settings.Designer.cs 144 | 145 | 146 | True 147 | Settings.settings 148 | True 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | False 170 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29 171 | true 172 | 173 | 174 | False 175 | .NET Framework 3.5 SP1 176 | false 177 | 178 | 179 | 180 | 187 | -------------------------------------------------------------------------------- /Boop/Boop.csproj.user: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | 13 | -------------------------------------------------------------------------------- /Boop/Form1.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Boop 2 | { 3 | partial class Form1 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); 33 | this.lvFileList = new System.Windows.Forms.ListView(); 34 | this.CiaFile = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 35 | this.CiaName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 36 | this.CiaDesc = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); 37 | this.btnBoop = new System.Windows.Forms.Button(); 38 | this.label1 = new System.Windows.Forms.Label(); 39 | this.txtConsole = new System.Windows.Forms.TextBox(); 40 | this.statusStrip1 = new System.Windows.Forms.StatusStrip(); 41 | this.StatusLabel = new System.Windows.Forms.ToolStripStatusLabel(); 42 | this.btnPickFiles = new System.Windows.Forms.Button(); 43 | this.HomeMadeGettoDivider = new System.Windows.Forms.Label(); 44 | this.linkWhat = new System.Windows.Forms.LinkLabel(); 45 | this.lblIPMarker = new System.Windows.Forms.Label(); 46 | this.lblFileMarker = new System.Windows.Forms.Label(); 47 | this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); 48 | this.btnInfo = new System.Windows.Forms.Button(); 49 | this.btnGithub = new System.Windows.Forms.Button(); 50 | this.lblImageVersion = new System.Windows.Forms.Label(); 51 | this.cboLocalIP = new System.Windows.Forms.ComboBox(); 52 | this.label2 = new System.Windows.Forms.Label(); 53 | this.label3 = new System.Windows.Forms.Label(); 54 | this.lblPCIP = new System.Windows.Forms.LinkLabel(); 55 | this.label4 = new System.Windows.Forms.Label(); 56 | this.txtPort = new System.Windows.Forms.TextBox(); 57 | this.lblPortMarker = new System.Windows.Forms.Label(); 58 | this.linkLabel1 = new System.Windows.Forms.LinkLabel(); 59 | this.picSplash = new System.Windows.Forms.PictureBox(); 60 | this.lblMode = new System.Windows.Forms.Label(); 61 | this.statusStrip1.SuspendLayout(); 62 | ((System.ComponentModel.ISupportInitialize)(this.picSplash)).BeginInit(); 63 | this.SuspendLayout(); 64 | // 65 | // lvFileList 66 | // 67 | this.lvFileList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 68 | this.CiaFile, 69 | this.CiaName, 70 | this.CiaDesc}); 71 | this.lvFileList.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 72 | this.lvFileList.FullRowSelect = true; 73 | this.lvFileList.GridLines = true; 74 | this.lvFileList.Location = new System.Drawing.Point(12, 328); 75 | this.lvFileList.Name = "lvFileList"; 76 | this.lvFileList.Size = new System.Drawing.Size(350, 179); 77 | this.lvFileList.TabIndex = 1; 78 | this.lvFileList.UseCompatibleStateImageBehavior = false; 79 | this.lvFileList.View = System.Windows.Forms.View.Details; 80 | this.lvFileList.SelectedIndexChanged += new System.EventHandler(this.lvFileList_SelectedIndexChanged); 81 | // 82 | // CiaFile 83 | // 84 | this.CiaFile.Text = "File"; 85 | this.CiaFile.Width = 150; 86 | // 87 | // CiaName 88 | // 89 | this.CiaName.Text = "Name"; 90 | this.CiaName.Width = 150; 91 | // 92 | // CiaDesc 93 | // 94 | this.CiaDesc.Text = "Description"; 95 | this.CiaDesc.Width = 300; 96 | // 97 | // btnBoop 98 | // 99 | this.btnBoop.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 100 | this.btnBoop.Location = new System.Drawing.Point(12, 513); 101 | this.btnBoop.Name = "btnBoop"; 102 | this.btnBoop.Size = new System.Drawing.Size(350, 42); 103 | this.btnBoop.TabIndex = 2; 104 | this.btnBoop.Text = "BOOP"; 105 | this.btnBoop.UseVisualStyleBackColor = true; 106 | this.btnBoop.Click += new System.EventHandler(this.btnBoop_Click); 107 | // 108 | // label1 109 | // 110 | this.label1.AutoSize = true; 111 | this.label1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 112 | this.label1.Location = new System.Drawing.Point(12, 259); 113 | this.label1.Name = "label1"; 114 | this.label1.Size = new System.Drawing.Size(127, 17); 115 | this.label1.TabIndex = 5; 116 | this.label1.Text = "Console IP address: "; 117 | // 118 | // txtConsole 119 | // 120 | this.txtConsole.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 121 | this.txtConsole.Location = new System.Drawing.Point(144, 256); 122 | this.txtConsole.MaxLength = 15; 123 | this.txtConsole.Name = "txtConsole"; 124 | this.txtConsole.Size = new System.Drawing.Size(104, 25); 125 | this.txtConsole.TabIndex = 6; 126 | this.txtConsole.Text = "192.168.1.1"; 127 | this.txtConsole.TextChanged += new System.EventHandler(this.txt3DS_TextChanged); 128 | this.txtConsole.Leave += new System.EventHandler(this.txt3DS_Leave); 129 | // 130 | // statusStrip1 131 | // 132 | this.statusStrip1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 133 | this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { 134 | this.StatusLabel}); 135 | this.statusStrip1.Location = new System.Drawing.Point(0, 561); 136 | this.statusStrip1.Name = "statusStrip1"; 137 | this.statusStrip1.Size = new System.Drawing.Size(373, 22); 138 | this.statusStrip1.TabIndex = 7; 139 | this.statusStrip1.Text = "statusStrip1"; 140 | // 141 | // StatusLabel 142 | // 143 | this.StatusLabel.Name = "StatusLabel"; 144 | this.StatusLabel.Size = new System.Drawing.Size(44, 17); 145 | this.StatusLabel.Text = "Ready"; 146 | // 147 | // btnPickFiles 148 | // 149 | this.btnPickFiles.AutoSize = true; 150 | this.btnPickFiles.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 151 | this.btnPickFiles.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; 152 | this.btnPickFiles.Location = new System.Drawing.Point(12, 292); 153 | this.btnPickFiles.Name = "btnPickFiles"; 154 | this.btnPickFiles.Size = new System.Drawing.Size(350, 30); 155 | this.btnPickFiles.TabIndex = 0; 156 | this.btnPickFiles.Text = "Pick files"; 157 | this.btnPickFiles.UseVisualStyleBackColor = true; 158 | this.btnPickFiles.Click += new System.EventHandler(this.btnPickFiles_Click); 159 | // 160 | // HomeMadeGettoDivider 161 | // 162 | this.HomeMadeGettoDivider.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; 163 | this.HomeMadeGettoDivider.Location = new System.Drawing.Point(12, 287); 164 | this.HomeMadeGettoDivider.Name = "HomeMadeGettoDivider"; 165 | this.HomeMadeGettoDivider.Size = new System.Drawing.Size(352, 2); 166 | this.HomeMadeGettoDivider.TabIndex = 12; 167 | this.HomeMadeGettoDivider.Text = "label2"; 168 | // 169 | // linkWhat 170 | // 171 | this.linkWhat.AutoSize = true; 172 | this.linkWhat.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 173 | this.linkWhat.Location = new System.Drawing.Point(259, 259); 174 | this.linkWhat.Name = "linkWhat"; 175 | this.linkWhat.Size = new System.Drawing.Size(110, 17); 176 | this.linkWhat.TabIndex = 13; 177 | this.linkWhat.TabStop = true; 178 | this.linkWhat.Text = "What is an my IP?"; 179 | this.linkWhat.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkWhat_LinkClicked); 180 | // 181 | // lblIPMarker 182 | // 183 | this.lblIPMarker.BackColor = System.Drawing.Color.Red; 184 | this.lblIPMarker.Location = new System.Drawing.Point(143, 255); 185 | this.lblIPMarker.Name = "lblIPMarker"; 186 | this.lblIPMarker.Size = new System.Drawing.Size(106, 27); 187 | this.lblIPMarker.TabIndex = 14; 188 | this.lblIPMarker.Visible = false; 189 | // 190 | // lblFileMarker 191 | // 192 | this.lblFileMarker.BackColor = System.Drawing.Color.Red; 193 | this.lblFileMarker.Location = new System.Drawing.Point(11, 291); 194 | this.lblFileMarker.Name = "lblFileMarker"; 195 | this.lblFileMarker.Size = new System.Drawing.Size(352, 32); 196 | this.lblFileMarker.TabIndex = 15; 197 | this.lblFileMarker.Visible = false; 198 | // 199 | // btnInfo 200 | // 201 | this.btnInfo.AutoSize = true; 202 | this.btnInfo.Image = global::Boop.Properties.Resources.info; 203 | this.btnInfo.Location = new System.Drawing.Point(295, 2); 204 | this.btnInfo.Name = "btnInfo"; 205 | this.btnInfo.Size = new System.Drawing.Size(29, 29); 206 | this.btnInfo.TabIndex = 11; 207 | this.toolTip1.SetToolTip(this.btnInfo, "About Boop"); 208 | this.btnInfo.UseVisualStyleBackColor = true; 209 | this.btnInfo.Click += new System.EventHandler(this.btnInfo_Click); 210 | // 211 | // btnGithub 212 | // 213 | this.btnGithub.AutoSize = true; 214 | this.btnGithub.Image = global::Boop.Properties.Resources.github; 215 | this.btnGithub.Location = new System.Drawing.Point(330, 2); 216 | this.btnGithub.Name = "btnGithub"; 217 | this.btnGithub.Size = new System.Drawing.Size(29, 29); 218 | this.btnGithub.TabIndex = 10; 219 | this.toolTip1.SetToolTip(this.btnGithub, "Fork us on GitHub"); 220 | this.btnGithub.UseVisualStyleBackColor = true; 221 | this.btnGithub.Click += new System.EventHandler(this.btnGithub_Click); 222 | // 223 | // lblImageVersion 224 | // 225 | this.lblImageVersion.BackColor = System.Drawing.Color.Transparent; 226 | this.lblImageVersion.Font = new System.Drawing.Font("Segoe UI", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 227 | this.lblImageVersion.ForeColor = System.Drawing.Color.White; 228 | this.lblImageVersion.ImageAlign = System.Drawing.ContentAlignment.BottomRight; 229 | this.lblImageVersion.Location = new System.Drawing.Point(201, 149); 230 | this.lblImageVersion.Name = "lblImageVersion"; 231 | this.lblImageVersion.Size = new System.Drawing.Size(160, 34); 232 | this.lblImageVersion.TabIndex = 18; 233 | this.lblImageVersion.Text = "0.0.0"; 234 | this.lblImageVersion.TextAlign = System.Drawing.ContentAlignment.BottomRight; 235 | // 236 | // cboLocalIP 237 | // 238 | this.cboLocalIP.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 239 | this.cboLocalIP.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 240 | this.cboLocalIP.FormattingEnabled = true; 241 | this.cboLocalIP.Items.AddRange(new object[] { 242 | "666.666.666.666"}); 243 | this.cboLocalIP.Location = new System.Drawing.Point(144, 188); 244 | this.cboLocalIP.Name = "cboLocalIP"; 245 | this.cboLocalIP.Size = new System.Drawing.Size(125, 25); 246 | this.cboLocalIP.TabIndex = 19; 247 | this.cboLocalIP.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); 248 | // 249 | // label2 250 | // 251 | this.label2.AutoSize = true; 252 | this.label2.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 253 | this.label2.Location = new System.Drawing.Point(12, 191); 254 | this.label2.Name = "label2"; 255 | this.label2.Size = new System.Drawing.Size(131, 17); 256 | this.label2.TabIndex = 20; 257 | this.label2.Text = "Computer IP Adress: "; 258 | // 259 | // label3 260 | // 261 | this.label3.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; 262 | this.label3.Location = new System.Drawing.Point(15, 250); 263 | this.label3.Name = "label3"; 264 | this.label3.Size = new System.Drawing.Size(352, 2); 265 | this.label3.TabIndex = 21; 266 | this.label3.Text = "label2"; 267 | // 268 | // lblPCIP 269 | // 270 | this.lblPCIP.AutoEllipsis = true; 271 | this.lblPCIP.AutoSize = true; 272 | this.lblPCIP.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 273 | this.lblPCIP.Location = new System.Drawing.Point(277, 191); 274 | this.lblPCIP.Name = "lblPCIP"; 275 | this.lblPCIP.Size = new System.Drawing.Size(86, 17); 276 | this.lblPCIP.TabIndex = 22; 277 | this.lblPCIP.TabStop = true; 278 | this.lblPCIP.Text = "Computer IP?"; 279 | this.lblPCIP.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lblPCIP_LinkClicked); 280 | // 281 | // label4 282 | // 283 | this.label4.AutoSize = true; 284 | this.label4.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 285 | this.label4.Location = new System.Drawing.Point(12, 222); 286 | this.label4.Name = "label4"; 287 | this.label4.Size = new System.Drawing.Size(101, 17); 288 | this.label4.TabIndex = 23; 289 | this.label4.Text = "Computer Port: "; 290 | // 291 | // txtPort 292 | // 293 | this.txtPort.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 294 | this.txtPort.Location = new System.Drawing.Point(144, 219); 295 | this.txtPort.MaxLength = 15; 296 | this.txtPort.Name = "txtPort"; 297 | this.txtPort.Size = new System.Drawing.Size(44, 25); 298 | this.txtPort.TabIndex = 24; 299 | this.txtPort.Text = "8080"; 300 | this.txtPort.TextChanged += new System.EventHandler(this.txtPort_TextChanged); 301 | // 302 | // lblPortMarker 303 | // 304 | this.lblPortMarker.BackColor = System.Drawing.Color.Red; 305 | this.lblPortMarker.Location = new System.Drawing.Point(143, 218); 306 | this.lblPortMarker.Name = "lblPortMarker"; 307 | this.lblPortMarker.Size = new System.Drawing.Size(46, 27); 308 | this.lblPortMarker.TabIndex = 25; 309 | this.lblPortMarker.Visible = false; 310 | // 311 | // linkLabel1 312 | // 313 | this.linkLabel1.AutoEllipsis = true; 314 | this.linkLabel1.AutoSize = true; 315 | this.linkLabel1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 316 | this.linkLabel1.Location = new System.Drawing.Point(194, 222); 317 | this.linkLabel1.Name = "linkLabel1"; 318 | this.linkLabel1.Size = new System.Drawing.Size(169, 17); 319 | this.linkLabel1.TabIndex = 26; 320 | this.linkLabel1.TabStop = true; 321 | this.linkLabel1.Text = "and now Port? What is this?"; 322 | this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); 323 | // 324 | // picSplash 325 | // 326 | this.picSplash.Image = ((System.Drawing.Image)(resources.GetObject("picSplash.Image"))); 327 | this.picSplash.Location = new System.Drawing.Point(12, 34); 328 | this.picSplash.Name = "picSplash"; 329 | this.picSplash.Size = new System.Drawing.Size(350, 150); 330 | this.picSplash.TabIndex = 4; 331 | this.picSplash.TabStop = false; 332 | // 333 | // lblMode 334 | // 335 | this.lblMode.AutoSize = true; 336 | this.lblMode.Font = new System.Drawing.Font("Segoe UI", 15.75F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 337 | this.lblMode.Location = new System.Drawing.Point(12, 2); 338 | this.lblMode.Name = "lblMode"; 339 | this.lblMode.Size = new System.Drawing.Size(0, 30); 340 | this.lblMode.TabIndex = 27; 341 | // 342 | // Form1 343 | // 344 | this.AllowDrop = true; 345 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 346 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 347 | this.ClientSize = new System.Drawing.Size(373, 583); 348 | this.Controls.Add(this.lblMode); 349 | this.Controls.Add(this.linkLabel1); 350 | this.Controls.Add(this.txtPort); 351 | this.Controls.Add(this.lblPortMarker); 352 | this.Controls.Add(this.label4); 353 | this.Controls.Add(this.lblPCIP); 354 | this.Controls.Add(this.label3); 355 | this.Controls.Add(this.label2); 356 | this.Controls.Add(this.cboLocalIP); 357 | this.Controls.Add(this.lblImageVersion); 358 | this.Controls.Add(this.linkWhat); 359 | this.Controls.Add(this.HomeMadeGettoDivider); 360 | this.Controls.Add(this.btnInfo); 361 | this.Controls.Add(this.btnGithub); 362 | this.Controls.Add(this.statusStrip1); 363 | this.Controls.Add(this.txtConsole); 364 | this.Controls.Add(this.label1); 365 | this.Controls.Add(this.picSplash); 366 | this.Controls.Add(this.btnBoop); 367 | this.Controls.Add(this.lvFileList); 368 | this.Controls.Add(this.btnPickFiles); 369 | this.Controls.Add(this.lblIPMarker); 370 | this.Controls.Add(this.lblFileMarker); 371 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 372 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 373 | this.MaximizeBox = false; 374 | this.Name = "Form1"; 375 | this.Text = "Boop 1.2.0"; 376 | this.Load += new System.EventHandler(this.Form1_Load); 377 | this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); 378 | this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); 379 | this.statusStrip1.ResumeLayout(false); 380 | this.statusStrip1.PerformLayout(); 381 | ((System.ComponentModel.ISupportInitialize)(this.picSplash)).EndInit(); 382 | this.ResumeLayout(false); 383 | this.PerformLayout(); 384 | 385 | } 386 | 387 | #endregion 388 | 389 | private System.Windows.Forms.Button btnPickFiles; 390 | private System.Windows.Forms.ListView lvFileList; 391 | private System.Windows.Forms.Button btnBoop; 392 | private System.Windows.Forms.PictureBox picSplash; 393 | private System.Windows.Forms.Label label1; 394 | private System.Windows.Forms.TextBox txtConsole; 395 | private System.Windows.Forms.ColumnHeader CiaFile; 396 | private System.Windows.Forms.StatusStrip statusStrip1; 397 | private System.Windows.Forms.ToolStripStatusLabel StatusLabel; 398 | private System.Windows.Forms.Button btnGithub; 399 | private System.Windows.Forms.Button btnInfo; 400 | private System.Windows.Forms.Label HomeMadeGettoDivider; 401 | private System.Windows.Forms.LinkLabel linkWhat; 402 | private System.Windows.Forms.Label lblIPMarker; 403 | private System.Windows.Forms.Label lblFileMarker; 404 | private System.Windows.Forms.ToolTip toolTip1; 405 | private System.Windows.Forms.ColumnHeader CiaName; 406 | private System.Windows.Forms.ColumnHeader CiaDesc; 407 | private System.Windows.Forms.Label lblImageVersion; 408 | private System.Windows.Forms.ComboBox cboLocalIP; 409 | private System.Windows.Forms.Label label2; 410 | private System.Windows.Forms.Label label3; 411 | private System.Windows.Forms.LinkLabel lblPCIP; 412 | private System.Windows.Forms.Label label4; 413 | private System.Windows.Forms.TextBox txtPort; 414 | private System.Windows.Forms.Label lblPortMarker; 415 | private System.Windows.Forms.LinkLabel linkLabel1; 416 | private System.Windows.Forms.Label lblMode; 417 | } 418 | } 419 | 420 | -------------------------------------------------------------------------------- /Boop/Form1.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Concurrent; 3 | using System.Collections.Generic; 4 | using System.Diagnostics; 5 | using System.IO; 6 | using System.Linq; 7 | using System.Net; 8 | using System.Net.Sockets; 9 | using System.Text; 10 | using System.Text.RegularExpressions; 11 | using System.Threading.Tasks; 12 | using System.Windows.Forms; 13 | using Unosquare.Labs.EmbedIO; 14 | using Unosquare.Labs.EmbedIO.Modules; 15 | using System.Threading; 16 | 17 | namespace Boop 18 | { 19 | 20 | public partial class Form1 : Form 21 | { 22 | const string SWITCH = "Switch"; 23 | const string N3DS = "3DS"; 24 | const string NONE = "none"; 25 | 26 | Task task; 27 | CancellationTokenSource cts; 28 | WebServer newHTTPServer; 29 | Socket s; //Socket to tell FBI where the server is 30 | string[] FilesToBoop; //Files to be boop'd 31 | string ActiveDir; //Used to mount the server 32 | string _consolemode = "none"; 33 | string ConsoleMode 34 | { 35 | get 36 | { 37 | return _consolemode; 38 | } 39 | set 40 | { 41 | if (value == SWITCH) 42 | { 43 | _consolemode = SWITCH; 44 | picSplash.Image = Properties.Resources._switch; 45 | lblMode.Text = "NINTENDO SWITCH MODE"; 46 | lblMode.ForeColor = System.Drawing.Color.FromArgb(0xe60012); 47 | 48 | //Do other changes. 49 | } 50 | else if (value.ToUpper() == N3DS) 51 | { 52 | _consolemode = N3DS; 53 | picSplash.Image = Properties.Resources._3ds; 54 | lblMode.Text = "NINTENDO 3DS MODE"; 55 | lblMode.ForeColor = System.Drawing.Color.FromArgb(0x48bbff); 56 | 57 | //Do other changes. 58 | } 59 | else 60 | { 61 | _consolemode = NONE; 62 | picSplash.Image = Properties.Resources.generic; 63 | lblMode.Text = ""; 64 | //reset the UI. 65 | } 66 | } 67 | } 68 | 69 | public Form1() 70 | { 71 | InitializeComponent(); 72 | 73 | var pos = this.PointToScreen(lblImageVersion.Location); 74 | pos = picSplash.PointToClient(pos); 75 | lblImageVersion.Parent = picSplash; 76 | lblImageVersion.Location = pos; 77 | 78 | Application.ApplicationExit += new EventHandler(this.OnApplicationExit); 79 | 80 | //Drag and drop support 81 | string[] args = Environment.GetCommandLineArgs(); 82 | if (args != null && args.Length > 0) //If drag and drop 83 | { 84 | List Boops = new List(); //Initialize a temporal list. 85 | foreach (string arg in args) 86 | { 87 | if (System.IO.File.Exists(arg)) //Is it a file? 88 | { 89 | if (Path.GetExtension(arg) == ".cia" || Path.GetExtension(arg) == ".tik" || Path.GetExtension(arg) == ".nsp") //Is it a supported file? 90 | { 91 | Boops.Add(arg); //Add it. 92 | } 93 | } 94 | } 95 | if (Boops.Count > 0) //If we had any supported file 96 | { 97 | FilesToBoop = Boops.ToArray(); //Set them 98 | ProcessFilenames(); //Add them to the list. 99 | } 100 | } 101 | 102 | } 103 | 104 | 105 | private void OnApplicationExit(object sender, EventArgs e) 106 | { 107 | //Individual trycatches to make sure everything is off before leaving. 108 | try 109 | { 110 | //Stop the webServer 111 | cts.Cancel(); 112 | //task.Wait(); 113 | newHTTPServer.Dispose(); 114 | } 115 | catch { } 116 | 117 | try 118 | { 119 | s.Close(); 120 | } 121 | catch { } 122 | 123 | } 124 | 125 | private void btnPickFiles_Click(object sender, EventArgs e) 126 | { 127 | // Create an instance of the open file dialog box. 128 | lblFileMarker.Visible = false; 129 | OpenFileDialog OFD = new OpenFileDialog(); 130 | 131 | // Set filter options and filter index. 132 | OFD.Filter = "Boop compatible files (*.nsp, *.cia, *.tik)|*.nsp;*.cia;*.tik|Tinfoil compatible files (*.nsp)|*.nsp|FBI compatible files (*.cia, *.tik)|*.cia;*.tik"; 133 | 134 | OFD.FilterIndex = 0; 135 | 136 | OFD.Multiselect = true; 137 | 138 | bool? userClickedOK = (OFD.ShowDialog() == DialogResult.OK); 139 | 140 | 141 | // Process input if the user clicked OK. 142 | if (userClickedOK == true) 143 | { 144 | if (OFD.FileNames.Length > 0) 145 | { 146 | lvFileList.Items.Clear(); 147 | FilesToBoop = OFD.FileNames; 148 | ProcessFilenames(); // I splited this button in order to reuse the code for the drag and drop support. 149 | } 150 | 151 | } 152 | } 153 | 154 | /// 155 | /// Processes The Files 156 | /// 157 | private void ProcessFilenames() 158 | { 159 | ConsoleMode = NONE; //FREE FOR ALL! 160 | 161 | ActiveDir = (Path.GetDirectoryName(FilesToBoop[0])); 162 | 163 | foreach (string item in FilesToBoop) 164 | { 165 | if (ActiveDir == Path.GetDirectoryName(item)) 166 | { 167 | if (ConsoleMode == NONE) 168 | { 169 | //GUEEEESS THE TYYYPE! 170 | if (Path.GetExtension(item) == ".cia" || Path.GetExtension(item) == ".tik") ConsoleMode = N3DS; 171 | if (Path.GetExtension(item) == ".nsp") ConsoleMode = SWITCH; 172 | } 173 | 174 | 175 | if (ConsoleMode == N3DS) 176 | { 177 | if (Path.GetExtension(item) == ".cia") 178 | { 179 | byte[] desc = new Byte[256]; 180 | 181 | byte[] tit = new Byte[128]; 182 | 183 | using (BinaryReader b = new BinaryReader(File.Open(item, FileMode.Open))) 184 | { 185 | b.BaseStream.Seek(-14016 + 520, SeekOrigin.End); 186 | tit = b.ReadBytes(128); 187 | 188 | b.BaseStream.Seek(-14016 + 520 + 128, SeekOrigin.End); 189 | desc = b.ReadBytes(256); 190 | } 191 | 192 | string[] tmp = new string[3]; 193 | tmp[0] = Path.GetFileName(item); 194 | tmp[1] = Encoding.Unicode.GetString(tit).Trim(); 195 | tmp[2] = Encoding.Unicode.GetString(desc).Trim(); 196 | 197 | 198 | 199 | lvFileList.Items.Add(new ListViewItem(tmp)); 200 | } 201 | else if (Path.GetExtension(item) == ".tik") 202 | { 203 | lvFileList.Items.Add(Path.GetFileName(item)); 204 | } 205 | } 206 | else if (ConsoleMode == SWITCH) 207 | { 208 | if (Path.GetExtension(item) == ".nsp") 209 | { 210 | lvFileList.Items.Add(Path.GetFileName(item)); 211 | //try to get the filename and description! 212 | /* 213 | string[] tmp = new string[3]; 214 | tmp[0] = Path.GetFileName(item); 215 | tmp[1] = Encoding.Unicode.GetString(tit).Trim(); 216 | tmp[2] = Encoding.Unicode.GetString(desc).Trim(); 217 | */ 218 | } 219 | } 220 | } 221 | else 222 | { 223 | MessageBox.Show("You picked 2 files that are NOT in the same directory" + Environment.NewLine + "Cross-Directory booping would need the entire computer hosted to the network and that doesn't feel safe in my book." + Environment.NewLine + "Maybe in the future I'll find a way to do this.", "Woah there...", MessageBoxButtons.OK, MessageBoxIcon.Error); 224 | } 225 | 226 | } 227 | } 228 | 229 | private void btnBoop_Click(object sender, EventArgs e) 230 | { 231 | //Try catch will go away in the future. Left in case somebody still has trouble with the server. 232 | 233 | //Reset all red markers. 234 | lblFileMarker.Visible = false; 235 | lblIPMarker.Visible = false; 236 | lblPortMarker.Visible = false; 237 | 238 | if (NetUtil.IPv4.iIPIndex == -1) 239 | { 240 | MessageBox.Show("Your computer is not connected to a network!" + Environment.NewLine + "If you connected your computer after opening Boop, please restart Boop", "No local network detected", MessageBoxButtons.OK, MessageBoxIcon.Error); 241 | //Added red boxes to point out the errors. 242 | return; 243 | } 244 | 245 | try 246 | { 247 | //#endif 248 | 249 | //Fastest check first. 250 | if (lvFileList.Items.Count == 0) 251 | { 252 | MessageBox.Show("Add some files first?", "No files to boop", MessageBoxButtons.OK, MessageBoxIcon.Error); 253 | lblFileMarker.Visible = true; //Added red boxes to point out the errors. 254 | return; 255 | } 256 | 257 | if (NetUtil.IPv4.ValidatePort(txtPort.Text) == false) 258 | { 259 | MessageBox.Show("That doesn't look like an port." + Environment.NewLine + "A port looks something like this: 8080", "Error on the Port number", MessageBoxButtons.OK, MessageBoxIcon.Error); 260 | lblPortMarker.Visible = true; //Added red boxes to point out the errors. 261 | setStatusLabel("Ready"); 262 | return; 263 | } 264 | 265 | if (NetUtil.IPv4.Validate(txtConsole.Text) == false) 266 | { 267 | MessageBox.Show("That doesn't look like an IP address." + Environment.NewLine + "An IP address looks something like this: 192.168.1.6" + Environment.NewLine + "(That is: Numbers DOT numbers DOT numbers DOT numbers)", "Error on the IP address", MessageBoxButtons.OK, MessageBoxIcon.Error); 268 | lblIPMarker.Visible = true; //Added red boxes to point out the errors. 269 | setStatusLabel("Ready"); 270 | return; 271 | } 272 | 273 | string sConsoleIP = txtConsole.Text; 274 | int iLocalPort = int.Parse(txtPort.Text); 275 | 276 | int iConsolePort = 5000; 277 | 278 | if (ConsoleMode == SWITCH) iConsolePort = 2000; 279 | if (ConsoleMode == N3DS) iConsolePort = 5000; 280 | 281 | if (NetUtil.IPv4.PortInUse(iLocalPort) || iLocalPort == iConsolePort) 282 | { 283 | MessageBox.Show("That port is already in use." + Environment.NewLine + "", "Error on the Port number", MessageBoxButtons.OK, MessageBoxIcon.Error); 284 | lblPortMarker.Visible = true; //Added red boxes to point out the errors. 285 | setStatusLabel("Ready"); 286 | return; 287 | } 288 | 289 | 290 | setStatusLabel("Opening the new and improved snek server..."); 291 | enableControls(false); 292 | 293 | newHTTPServer = WebServer 294 | .Create("http://"+ NetUtil.IPv4.Local + ":"+iLocalPort+"/") 295 | .WithStaticFolderAt(ActiveDir); 296 | 297 | cts = new CancellationTokenSource(); 298 | task = newHTTPServer.RunAsync(cts.Token); 299 | 300 | Thread.Sleep(100); 301 | 302 | setStatusLabel("Opening socket to send the file list..."); 303 | 304 | s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 305 | 306 | IAsyncResult result = s.BeginConnect(sConsoleIP, iConsolePort, null, null); 307 | 308 | result.AsyncWaitHandle.WaitOne(5000, true); 309 | 310 | if (!s.Connected) 311 | { 312 | s.Close(); 313 | 314 | //Stop the webServer 315 | cts.Cancel(); 316 | //task.Wait(); 317 | newHTTPServer.Dispose(); 318 | 319 | MessageBox.Show("Failed to connect to Console", "Connection failed", MessageBoxButtons.OK, MessageBoxIcon.Error); 320 | lblIPMarker.Visible = true; 321 | setStatusLabel("Ready"); 322 | enableControls(true); 323 | return; 324 | } 325 | 326 | setStatusLabel("Sending the file list..."); 327 | 328 | String message = ""; 329 | 330 | foreach (var file in FilesToBoop) 331 | { 332 | message += NetUtil.IPv4.Local + ":"+txtPort.Text+"/" + Uri.EscapeDataString(Path.GetFileName(file)) + "\n"; 333 | } 334 | 335 | //boop the info to the console... 336 | byte[] Largo = BitConverter.GetBytes((uint)Encoding.ASCII.GetBytes(message).Length); 337 | byte[] Adress = Encoding.ASCII.GetBytes(message); 338 | 339 | Array.Reverse(Largo); //Endian fix 340 | 341 | s.Send(AppendTwoByteArrays(Largo, Adress)); 342 | 343 | setStatusLabel("Booping files... Please wait"); 344 | s.BeginReceive(new byte[1], 0, 1, 0, new AsyncCallback(GotData), null); //Call me back when the 3ds says something. 345 | 346 | //#if DEBUG 347 | } 348 | catch (Exception ex) 349 | { 350 | //Hopefully, some day we can have all the different exceptions handled... One can dream, right? *-* 351 | MessageBox.Show("Something went really wrong: " + Environment.NewLine + Environment.NewLine + "\"" + ex.Message + "\"" + Environment.NewLine + Environment.NewLine + "If this keeps happening, please take a screenshot of this message and post it on our github." + Environment.NewLine + Environment.NewLine + "The program will close now", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); 352 | Application.Exit(); 353 | } 354 | //#endif 355 | } 356 | 357 | private void GotData(IAsyncResult ar) 358 | { 359 | 360 | // now we unlock the controls... 361 | //Spooky "thread safe" way to access UI from ASYNC. 362 | this.Invoke((MethodInvoker)delegate 363 | { 364 | enableControls(true); 365 | setStatusLabel("Booping complete!"); 366 | System.Media.SystemSounds.Beep.Play(); //beep boop son. 367 | //No more annoy message. 368 | //MessageBox.Show("Booping complete!", "Yay!", MessageBoxButtons.OK, MessageBoxIcon.Information); 369 | }); 370 | 371 | s.Close(); 372 | //Stop the webServer 373 | cts.Cancel(); 374 | //task.Wait(); 375 | newHTTPServer.Dispose(); 376 | } 377 | 378 | static byte[] AppendTwoByteArrays(byte[] arrayA, byte[] arrayB) //Aux function to append the 2 byte arrays. 379 | { 380 | byte[] outputBytes = new byte[arrayA.Length + arrayB.Length]; 381 | Buffer.BlockCopy(arrayA, 0, outputBytes, 0, arrayA.Length); 382 | Buffer.BlockCopy(arrayB, 0, outputBytes, arrayA.Length, arrayB.Length); 383 | return outputBytes; 384 | } 385 | 386 | private void Form1_Load(object sender, EventArgs e) 387 | { 388 | cboLocalIP.DataSource = Dns.GetHostEntry(Dns.GetHostName()).AddressList.DefaultIfEmpty(IPAddress.Loopback).Where(ip => ip.AddressFamily == AddressFamily.InterNetwork).Select(ip => ip.ToString()).ToArray(); 389 | 390 | lblImageVersion.Text = Utils.GetCurrentVersion(); 391 | this.Text = "Boop " + Utils.GetCurrentVersion(); 392 | txtConsole.Text = NetUtil.IPv4.GetFirstNintendoIP() == "" ? Properties.Settings.Default["savedIP"].ToString() : NetUtil.IPv4.GetFirstNintendoIP(); 393 | txtPort.Text = Properties.Settings.Default["savedPort"].ToString(); 394 | } 395 | 396 | private void Form1_DragEnter(object sender, DragEventArgs e) 397 | { 398 | if (e.Data.GetDataPresent(DataFormats.FileDrop)) 399 | { 400 | e.Effect = DragDropEffects.Copy; 401 | } 402 | else 403 | { 404 | e.Effect = DragDropEffects.None; 405 | } 406 | } 407 | 408 | 409 | private void Form1_DragDrop(object sender, DragEventArgs e) 410 | { 411 | if (e.Data.GetDataPresent(DataFormats.FileDrop)) 412 | { 413 | 414 | List Boops = new List(); //Initialize a temporal list. 415 | 416 | string[] filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop)); 417 | foreach (string arg in filePaths) 418 | { 419 | 420 | if (System.IO.File.Exists(arg)) //Is it a file? 421 | { 422 | if (Path.GetExtension(arg) == ".cia" || Path.GetExtension(arg) == ".tik") //Is it a supported file? 423 | { 424 | Boops.Add(arg); //Add it. 425 | } 426 | } 427 | 428 | } 429 | 430 | if (Boops.Count > 0) //If we had any supported file 431 | { 432 | lvFileList.Items.Clear(); 433 | FilesToBoop = Boops.ToArray(); //Set them 434 | ProcessFilenames(); //Add them to the list. 435 | } 436 | 437 | } 438 | } 439 | 440 | private void enableControls(bool enabled) 441 | { 442 | btnBoop.Enabled = enabled; 443 | btnPickFiles.Enabled = enabled; 444 | picSplash.Enabled = enabled; 445 | } 446 | 447 | private void setStatusLabel(String text) 448 | { 449 | StatusLabel.Text = text; 450 | //Force-update text to appear. If we still crash from #9 we should get where it crashed. 451 | statusStrip1.Invalidate(); 452 | statusStrip1.Refresh(); 453 | } 454 | 455 | private String saveIPAddress(String newIPAddress) 456 | { 457 | newIPAddress = newIPAddress.Trim(); 458 | if (NetUtil.IPv4.Validate(newIPAddress)) 459 | { 460 | Properties.Settings.Default["savedIP"] = newIPAddress; 461 | Properties.Settings.Default.Save(); 462 | } 463 | return newIPAddress; 464 | } 465 | 466 | private string savePortNumber(String newPortNumber) 467 | { 468 | newPortNumber = newPortNumber.Trim(); 469 | if (NetUtil.IPv4.ValidatePort(newPortNumber)) 470 | { 471 | Properties.Settings.Default["savedPort"] = newPortNumber; 472 | Properties.Settings.Default.Save(); 473 | } 474 | return newPortNumber; 475 | } 476 | 477 | private void txt3DS_Leave(object sender, EventArgs e) 478 | { 479 | txtConsole.Text = saveIPAddress(txtConsole.Text); 480 | } 481 | 482 | private void txt3DS_TextChanged(object sender, EventArgs e) 483 | { 484 | saveIPAddress(txtConsole.Text); 485 | lblIPMarker.Visible = false; 486 | } 487 | 488 | private void txtPort_TextChanged(object sender, EventArgs e) 489 | { 490 | savePortNumber(txtPort.Text); 491 | lblPortMarker.Visible = false; 492 | } 493 | 494 | private void linkWhat_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) //Added help picture to find IP adress. 495 | { 496 | MessageBox.Show("An Internet Protocol address (IP address) is a numerical label assigned to each device connected to a computer network that uses the Internet Protocol for communication." + Environment.NewLine + "You are probably wondering 'What does it look like?'" + Environment.NewLine + "It looks like X.X.X.X where your replace each X for a number between 1 and 255." + Environment.NewLine + "Get your console on the 'Remote Install' screen and it should tell you it's IP adress somewhere.", "Explaining is hard", MessageBoxButtons.OK, MessageBoxIcon.Information); 497 | } 498 | 499 | private void btnGithub_Click(object sender, EventArgs e) //New cooler github button 500 | { 501 | Process.Start(@"https://github.com/miltoncandelero/Boop"); 502 | } 503 | 504 | private void btnInfo_Click(object sender, EventArgs e) //New super cool snek about form 505 | { 506 | InfoBox frmInfo = new InfoBox(); 507 | frmInfo.ShowDialog(); 508 | } 509 | 510 | private void lvFileList_SelectedIndexChanged(object sender, EventArgs e) 511 | { 512 | //Pls no touching the snek list. 513 | lvFileList.SelectedIndices.Clear(); 514 | } 515 | 516 | private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 517 | { 518 | NetUtil.IPv4.iIPIndex = cboLocalIP.SelectedIndex; 519 | } 520 | 521 | private void lblPCIP_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 522 | { 523 | MessageBox.Show("To open the server for ALL networks I needed admin access and since we have to send the console only ONE adress I decieded to open the server only on that adress." + Environment.NewLine + "The picks the first IP and most of the times it grabs the correct one... and sometimes fails miserably." + Environment.NewLine + "If you are connected to more than one network make sure your IP adress is right.", "Do you even network bro?", MessageBoxButtons.OK, MessageBoxIcon.Information); 524 | } 525 | 526 | private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) 527 | { 528 | MessageBox.Show("Pick a port that you know to be empty on your computer." + Environment.NewLine + "Some good examples are 8080, 8008 and 591", "Do you even network bro?", MessageBoxButtons.OK, MessageBoxIcon.Information); 529 | } 530 | } 531 | } 532 | -------------------------------------------------------------------------------- /Boop/InfoBox.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace Boop 2 | { 3 | partial class InfoBox 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | protected override void Dispose(bool disposing) 14 | { 15 | if (disposing && (components != null)) 16 | { 17 | components.Dispose(); 18 | } 19 | base.Dispose(disposing); 20 | } 21 | 22 | #region Windows Form Designer generated code 23 | 24 | /// 25 | /// Required method for Designer support - do not modify 26 | /// the contents of this method with the code editor. 27 | /// 28 | private void InitializeComponent() 29 | { 30 | this.lblTitle = new System.Windows.Forms.Label(); 31 | this.label1 = new System.Windows.Forms.Label(); 32 | this.lblSnekFriendly = new System.Windows.Forms.Label(); 33 | this.pictureBox1 = new System.Windows.Forms.PictureBox(); 34 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); 35 | this.SuspendLayout(); 36 | // 37 | // lblTitle 38 | // 39 | this.lblTitle.AutoSize = true; 40 | this.lblTitle.Font = new System.Drawing.Font("Segoe UI", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 41 | this.lblTitle.Location = new System.Drawing.Point(153, 5); 42 | this.lblTitle.Name = "lblTitle"; 43 | this.lblTitle.Size = new System.Drawing.Size(75, 32); 44 | this.lblTitle.TabIndex = 6; 45 | this.lblTitle.Text = "Boop"; 46 | // 47 | // label1 48 | // 49 | this.label1.AutoSize = true; 50 | this.label1.Font = new System.Drawing.Font("Segoe UI", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 51 | this.label1.Location = new System.Drawing.Point(224, 24); 52 | this.label1.Name = "label1"; 53 | this.label1.Size = new System.Drawing.Size(41, 17); 54 | this.label1.TabIndex = 7; 55 | this.label1.Text = "v1.2.0"; 56 | // 57 | // lblSnekFriendly 58 | // 59 | this.lblSnekFriendly.Font = new System.Drawing.Font("Segoe UI", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 60 | this.lblSnekFriendly.Location = new System.Drawing.Point(132, 41); 61 | this.lblSnekFriendly.Name = "lblSnekFriendly"; 62 | this.lblSnekFriendly.Size = new System.Drawing.Size(163, 83); 63 | this.lblSnekFriendly.TabIndex = 8; 64 | this.lblSnekFriendly.Text = "Boop, the snek friendly network file transfer for Tinfoil (Switch) and FBI (3DS)." + 65 | ""; 66 | // 67 | // pictureBox1 68 | // 69 | this.pictureBox1.Image = global::Boop.Properties.Resources.snek2icon; 70 | this.pictureBox1.Location = new System.Drawing.Point(12, 12); 71 | this.pictureBox1.Name = "pictureBox1"; 72 | this.pictureBox1.Size = new System.Drawing.Size(114, 112); 73 | this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; 74 | this.pictureBox1.TabIndex = 5; 75 | this.pictureBox1.TabStop = false; 76 | // 77 | // InfoBox 78 | // 79 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 80 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 81 | this.ClientSize = new System.Drawing.Size(307, 134); 82 | this.Controls.Add(this.lblSnekFriendly); 83 | this.Controls.Add(this.label1); 84 | this.Controls.Add(this.lblTitle); 85 | this.Controls.Add(this.pictureBox1); 86 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; 87 | this.MaximizeBox = false; 88 | this.MinimizeBox = false; 89 | this.Name = "InfoBox"; 90 | this.Padding = new System.Windows.Forms.Padding(9); 91 | this.ShowIcon = false; 92 | this.ShowInTaskbar = false; 93 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 94 | this.Text = "About Boop 1.2.0"; 95 | this.Load += new System.EventHandler(this.InfoBox_Load); 96 | ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); 97 | this.ResumeLayout(false); 98 | this.PerformLayout(); 99 | 100 | } 101 | 102 | #endregion 103 | private System.Windows.Forms.PictureBox pictureBox1; 104 | private System.Windows.Forms.Label lblTitle; 105 | private System.Windows.Forms.Label label1; 106 | private System.Windows.Forms.Label lblSnekFriendly; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /Boop/InfoBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.IO; 4 | using System.Net; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace Boop 9 | { 10 | partial class InfoBox : Form 11 | { 12 | public InfoBox() 13 | { 14 | InitializeComponent(); 15 | } 16 | 17 | 18 | 19 | private void InfoBox_Load(object sender, EventArgs e) 20 | { 21 | this.Text = "Boop " + Utils.GetCurrentVersion(); 22 | label1.Text = Utils.GetCurrentVersion(); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Boop/InfoBox.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /Boop/NetUtil.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Concurrent; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Net; 6 | using System.Net.NetworkInformation; 7 | using System.Net.Sockets; 8 | using System.Text.RegularExpressions; 9 | using System.Threading.Tasks; 10 | 11 | namespace Boop 12 | { 13 | 14 | namespace NetUtil 15 | { 16 | class IPv4 17 | { 18 | 19 | public static int iIPIndex = -1; 20 | 21 | 22 | //Known Nintendo Mac adresses //Will no longer be supported :| 23 | public static readonly List Nontendo = new List { "0009BF", "001656", "0017AB", "00191D", "0019FD", "001AE9", "001B7A", "001BEA", "001CBE", "001DBC", "001E35", "001EA9", "001F32", "001FC5", "002147", "0021BD", "00224C", "0022AA", "0022D7", "002331", "0023CC", "00241E", "002444", "0024F3", "0025A0", "002659", "002709", "0403D6", "182A7B", "2C10C1", "34AF2C", "40D28A", "40F407", "582F40", "58BDA3", "5C521E", "606BFF", "64B5C6", "78A2A0", "7CBB8A", "8C56C5", "8CCDE8", "98B6E9", "9CE635", "A438CC", "A45C27", "A4C0E1", "B87826", "B88AEC", "B8AE6E", "CC9E00", "CCFB65", "D86BF7", "DC68EB", "E00C7F", "E0E751", "E84ECE", "ECC40D", "E84ECE" }; 24 | 25 | 26 | /// 27 | /// Dups the result of arp -a into a list of a really neat struct. 28 | /// Not the cleanest way but it works for me. 29 | /// 30 | static List GetAllMacAddressesAndIppairs() 31 | { 32 | List mip = new List(); 33 | System.Diagnostics.Process pProcess = new System.Diagnostics.Process(); 34 | pProcess.StartInfo.FileName = "arp"; 35 | pProcess.StartInfo.Arguments = "-a "; 36 | pProcess.StartInfo.UseShellExecute = false; 37 | pProcess.StartInfo.RedirectStandardOutput = true; 38 | pProcess.StartInfo.CreateNoWindow = true; 39 | pProcess.Start(); 40 | string cmdOutput = pProcess.StandardOutput.ReadToEnd(); 41 | string pattern = @"(?([0-9]{1,3}\.?){4})\s*(?([a-f0-9]{2}-?){6})"; 42 | 43 | foreach (Match m in Regex.Matches(cmdOutput, pattern, RegexOptions.IgnoreCase)) 44 | { 45 | mip.Add(new MacIpPair() 46 | { 47 | MacAddress = m.Groups["mac"].Value, 48 | IpAddress = m.Groups["ip"].Value 49 | }); 50 | } 51 | 52 | return mip; 53 | } 54 | public struct MacIpPair 55 | { 56 | public string MacAddress; 57 | public string IpAddress; 58 | } 59 | 60 | /// 61 | /// Returns the first ip adress whose MAC adress matches one from the known nintendo list. 62 | /// 63 | public static string GetFirstNintendoIP() 64 | { 65 | foreach (var item in GetAllMacAddressesAndIppairs()) 66 | { 67 | string MAC = ""; 68 | MAC = item.MacAddress.Replace("-", ""); 69 | MAC = MAC.Substring(0, 6); 70 | MAC = MAC.ToUpper(); 71 | if (Nontendo.Contains(MAC)) 72 | { 73 | return item.IpAddress; 74 | } 75 | } 76 | return ""; //Empty string means "No 3ds in range". To be used by the main thread to inform the user. (should I raise an exception? :S ) 77 | } 78 | 79 | /// 80 | /// Retrieves the local IPv4 Address 81 | /// 82 | /// Returns your computer's Loopback if no Network detected. 83 | public static string Local 84 | { 85 | get { return Dns.GetHostEntry(Dns.GetHostName()).AddressList.DefaultIfEmpty(IPAddress.Loopback).Where(ip => ip.AddressFamily == AddressFamily.InterNetwork).ElementAt(iIPIndex).ToString(); } 86 | } 87 | 88 | 89 | /// 90 | /// Validates if the specified string is an IPv4 Address 91 | /// 92 | /// The string to compare 93 | /// True if the address is valid. 94 | public static bool Validate(string ipString) 95 | { 96 | if (ipString == "0.0.0.0" || ipString == "127.0.0.1") 97 | { 98 | return false; 99 | } 100 | return new Regex(@"^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$").IsMatch(ipString); //Check the octets 101 | } 102 | 103 | /// 104 | /// Validates if the specified string is a port 105 | /// 106 | /// The string to compare 107 | /// True if the port is a number. 108 | public static bool ValidatePort(string portString) 109 | { 110 | return (new Regex(@"[0-9]{1,5}").IsMatch(portString)); //between 1 and 5 digits. 111 | } 112 | 113 | /// 114 | /// TestPort 115 | /// 116 | /// 117 | /// 118 | public static bool PortInUse(int port) 119 | { 120 | bool inUse = false; 121 | IPGlobalProperties ipProperties = IPGlobalProperties.GetIPGlobalProperties(); 122 | IPEndPoint[] ipEndPoints = ipProperties.GetActiveTcpListeners(); 123 | foreach (IPEndPoint endPoint in ipEndPoints) 124 | { 125 | if (endPoint.Port == port) 126 | { 127 | inUse = true; 128 | break; 129 | } 130 | } 131 | return inUse; 132 | } 133 | 134 | } 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /Boop/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Security.Principal; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace Boop 9 | { 10 | static class Program 11 | { 12 | /// 13 | /// The main entry point for the application. 14 | /// 15 | [STAThread] 16 | static void Main() 17 | { 18 | Application.EnableVisualStyles(); 19 | Application.SetCompatibleTextRenderingDefault(false); 20 | 21 | WindowsIdentity identity = WindowsIdentity.GetCurrent(); 22 | WindowsPrincipal principal = new WindowsPrincipal(identity); 23 | 24 | Application.Run(new Form1()); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Boop/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Boop")] 9 | [assembly: AssemblyDescription("Network file server for Nintendo Switch and Nintendo 3DS")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Elemental Code (Milton Candelero)")] 12 | [assembly: AssemblyProduct("Boop")] 13 | [assembly: AssemblyCopyright("This software is under The Unlicence. Please be good.")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("3005a7c9-0f16-4fc5-8cd4-ab9b9f68caf6")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("2.0.0.0")] 36 | [assembly: AssemblyFileVersion("2.0.0.0")] 37 | -------------------------------------------------------------------------------- /Boop/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Boop.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Boop.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap _3ds { 67 | get { 68 | object obj = ResourceManager.GetObject("_3ds", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap _switch { 77 | get { 78 | object obj = ResourceManager.GetObject("_switch", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap generic { 87 | get { 88 | object obj = ResourceManager.GetObject("generic", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// Looks up a localized resource of type System.Drawing.Bitmap. 95 | /// 96 | internal static System.Drawing.Bitmap github { 97 | get { 98 | object obj = ResourceManager.GetObject("github", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | 103 | /// 104 | /// Looks up a localized resource of type System.Drawing.Bitmap. 105 | /// 106 | internal static System.Drawing.Bitmap info { 107 | get { 108 | object obj = ResourceManager.GetObject("info", resourceCulture); 109 | return ((System.Drawing.Bitmap)(obj)); 110 | } 111 | } 112 | 113 | /// 114 | /// Looks up a localized resource of type System.Drawing.Bitmap. 115 | /// 116 | internal static System.Drawing.Bitmap snek2icon { 117 | get { 118 | object obj = ResourceManager.GetObject("snek2icon", resourceCulture); 119 | return ((System.Drawing.Bitmap)(obj)); 120 | } 121 | } 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /Boop/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\generic.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\info.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\3ds.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Resources\github.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | 134 | ..\Resources\switch.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 135 | 136 | 137 | ..\Resources\snek2icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 138 | 139 | -------------------------------------------------------------------------------- /Boop/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace Boop.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("192.168.1.1")] 29 | public string savedIP { 30 | get { 31 | return ((string)(this["savedIP"])); 32 | } 33 | set { 34 | this["savedIP"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("8080")] 41 | public string savedPort { 42 | get { 43 | return ((string)(this["savedPort"])); 44 | } 45 | set { 46 | this["savedPort"] = value; 47 | } 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Boop/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 192.168.1.1 7 | 8 | 9 | 8080 10 | 11 | 12 | -------------------------------------------------------------------------------- /Boop/Resources/3ds.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/3ds.png -------------------------------------------------------------------------------- /Boop/Resources/Boop1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/Boop1.png -------------------------------------------------------------------------------- /Boop/Resources/IP.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/IP.png -------------------------------------------------------------------------------- /Boop/Resources/generic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/generic.png -------------------------------------------------------------------------------- /Boop/Resources/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/github.png -------------------------------------------------------------------------------- /Boop/Resources/info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/info.png -------------------------------------------------------------------------------- /Boop/Resources/snek2icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/snek2icon.png -------------------------------------------------------------------------------- /Boop/Resources/snekicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/snekicon.png -------------------------------------------------------------------------------- /Boop/Resources/switch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/Resources/switch.png -------------------------------------------------------------------------------- /Boop/Utils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using System.Diagnostics; 4 | using System.Net; 5 | using System.IO; 6 | 7 | namespace Boop 8 | { 9 | class Utils 10 | { 11 | public static string GetCurrentVersion() 12 | { 13 | Assembly assembly = Assembly.GetExecutingAssembly(); 14 | FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 15 | return fileVersionInfo.ProductMajorPart.ToString() + "." + fileVersionInfo.ProductMinorPart.ToString() + "." + fileVersionInfo.ProductBuildPart.ToString(); 16 | } 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /Boop/app.manifest: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 48 | 55 | 56 | 70 | -------------------------------------------------------------------------------- /Boop/bin/Debug/Boop.vshost.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/bin/Debug/Boop.vshost.exe -------------------------------------------------------------------------------- /Boop/bin/Debug/Boop.vshost.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 192.168.1.1 15 | 16 | 17 | 8080 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Boop/bin/Release/Boop.vshost.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/bin/Release/Boop.vshost.exe -------------------------------------------------------------------------------- /Boop/bin/Release/Boop.vshost.exe.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 192.168.1.1 15 | 16 | 17 | 8080 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Boop/obj/Debug/DesignTimeResolveAssemblyReferences.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/obj/Debug/DesignTimeResolveAssemblyReferences.cache -------------------------------------------------------------------------------- /Boop/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache -------------------------------------------------------------------------------- /Boop/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/obj/Debug/TempPE/Properties.Resources.Designer.cs.dll -------------------------------------------------------------------------------- /Boop/obj/Release/DesignTimeResolveAssemblyReferences.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/obj/Release/DesignTimeResolveAssemblyReferences.cache -------------------------------------------------------------------------------- /Boop/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/obj/Release/DesignTimeResolveAssemblyReferencesInput.cache -------------------------------------------------------------------------------- /Boop/obj/Release/TempPE/Properties.Resources.Designer.cs.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/obj/Release/TempPE/Properties.Resources.Designer.cs.dll -------------------------------------------------------------------------------- /Boop/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /Boop/snek2icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/snek2icon.ico -------------------------------------------------------------------------------- /Boop/snekicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/Boop/snekicon.ico -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Boop 2 | ***Become a friend of the sneks*** 3 | 4 | **NOW WITH SWITCH SUPPORT!** 5 | 6 | Current release: **2.0.0** 7 | 8 | Boop is a C# implementation of the [servefiles.py from FBI](https://github.com/Steveice10/FBI/tree/2.4.5/servefiles) and [remote_install_pc.py from Tinfoil](https://github.com/Adubbz/Tinfoil/blob/master/tools/remote_install_pc.py) 9 | 10 | Boop is completely rewritten in C# and thus is snek friendly (No python needed). 11 | 12 | Enough talk! Take me to the [download page!](https://github.com/miltoncandelero/Boop/releases/latest) 13 | 14 | ## Features: 15 | 16 | * Switch .nsp and 3DS .cia support! 17 | * Easy to use GUI. 18 | * Full Drag and Drop support. 19 | * Multi-File Booping. 20 | * We host using EmbedIO. (HTTP 2.0 supported!) 21 | * Doesn't require administrator rights. 22 | * Selecting an IP address if you are connected to multiple networks. 23 | * Sneks (one with a top hat) looking after you. 24 | 25 | ## Screenshot: 26 | 27 | ![Snek Screenshot](/boop2.png?raw=true "Boop v2.0.0") 28 | -------------------------------------------------------------------------------- /boop2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/boop2.png --------------------------------------------------------------------------------