├── .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 | 
28 |
--------------------------------------------------------------------------------
/boop2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/miltoncandelero/Boop/55372cda5bfebf9ec86d76e03510f4c442d0f069/boop2.png
--------------------------------------------------------------------------------