VirtualBox

source: vbox/trunk/src/VBox/Main/glue/tests/TestVBoxNATEngine.java@ 76553

Last change on this file since 76553 was 76553, checked in by vboxsync, 6 years ago

scm --update-copyright-year

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 6.5 KB
Line 
1/* $Id: TestVBoxNATEngine.java 76553 2019-01-01 01:45:53Z vboxsync $ */
2/*!file
3 * Small sample/testcase which demonstrates that the same source code can
4 * be used to connect to the webservice and (XP)COM APIs.
5 */
6
7/*
8 * Copyright (C) 2013-2019 Oracle Corporation
9 *
10 * This file is part of VirtualBox Open Source Edition (OSE), as
11 * available from http://www.virtualbox.org. This file is free software;
12 * you can redistribute it and/or modify it under the terms of the GNU
13 * General Public License (GPL) as published by the Free Software
14 * Foundation, in version 2 as it comes in the "COPYING" file of the
15 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
16 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
17 */
18
19import org.virtualbox_5_0.*;
20import java.util.List;
21import java.util.Arrays;
22import java.util.Iterator;
23import java.math.BigInteger;
24
25public class TestVBoxNATEngine
26{
27 void testEnumeration(VirtualBoxManager mgr, IVirtualBox vbox, IMachine vm)
28 {
29 String name;
30 boolean inaccessible = false;
31 /* different chipsets might have different number of attachments */
32 ChipsetType chipsetType = vm.getChipsetType();
33 INetworkAdapter adapters[] =
34 new INetworkAdapter[
35 vbox.getSystemProperties().getMaxNetworkAdapters(chipsetType).intValue()];
36
37 try
38 {
39 name = vm.getName();
40 /*
41 * Dump adapters and if it's got NAT attachment
42 * dump it settings
43 */
44
45 for (int nidx = 0; nidx < adapters.length; ++nidx)
46 {
47 /* select available and NATs only. */
48 adapters[nidx] = vm.getNetworkAdapter(new Long(nidx));
49 INetworkAdapter n = adapters[nidx];
50
51 if (n == null)
52 continue;
53 NetworkAttachmentType attachmentType = n.getAttachmentType();
54 if (attachmentType.equals(NetworkAttachmentType.NAT))
55 {
56 INATEngine nat = n.getNATEngine();
57 List<String> portForward = nat.getRedirects();
58 String pf = null;
59 Iterator<String> itPortForward = portForward.iterator();
60 for (;itPortForward.hasNext();)
61 {
62 pf = itPortForward.next();
63 System.out.println(name + ":NIC" + n.getSlot() /* name:NIC<slot number>*/
64 + " pf: " + pf); /* port-forward rule */
65 }
66 if (pf != null)
67 {
68 String pfAttributes[] = pf.split(",");
69 /* name,proto,hostip,host,hostport,guestip,guestport */
70 nat.removeRedirect(pfAttributes[0]);
71 nat.addRedirect("",
72 NATProtocol.fromValue(new Integer(pfAttributes[1]).longValue()),
73 pfAttributes[2],
74 new Integer(
75 new Integer(pfAttributes[3]).intValue() + 1),
76 pfAttributes[4],
77 new Integer(pfAttributes[5]));
78 }
79
80 }
81 }
82
83 }
84 catch (VBoxException e)
85 {
86 name = "<inaccessible>";
87 inaccessible = true;
88 }
89
90 // process system event queue
91 mgr.waitForEvents(0);
92 }
93
94 static void testStart(VirtualBoxManager mgr, IVirtualBox vbox, IMachine vm)
95 {
96 System.out.println("\nAttempting to start VM '" + vm.getName() + "'");
97 mgr.startVm(vm.getName(), null, 7000);
98 // process system event queue
99 mgr.waitForEvents(0);
100 }
101
102 public TestVBoxNATEngine(String[] args)
103 {
104 VirtualBoxManager mgr = VirtualBoxManager.createInstance(null);
105
106 boolean ws = false;
107 String url = null;
108 String user = null;
109 String passwd = null;
110 String vmname = null;
111 IMachine vm = null;
112
113 for (int i = 0; i<args.length; i++)
114 {
115 if ("-w".equals(args[i]))
116 ws = true;
117 else if ("-url".equals(args[i]))
118 url = args[++i];
119 else if ("-user".equals(args[i]))
120 user = args[++i];
121 else if ("-passwd".equals(args[i]))
122 passwd = args[++i];
123 else if ("-vm".equals(args[i]))
124 vmname = args[++i];
125 }
126
127 if (ws)
128 {
129 try {
130 mgr.connect(url, user, passwd);
131 } catch (VBoxException e) {
132 e.printStackTrace();
133 System.out.println("Cannot connect, start webserver first!");
134 }
135 }
136
137 try
138 {
139 IVirtualBox vbox = mgr.getVBox();
140 if (vbox != null)
141 {
142 if (vmname != null)
143 {
144 for (IMachine m:vbox.getMachines())
145 {
146 if (m.getName().equals(vmname))
147 {
148 vm = m;
149 break;
150 }
151 }
152
153 }
154 else
155 vm = vbox.getMachines().get(0);
156 System.out.println("VirtualBox version: " + vbox.getVersion() + "\n");
157 if (vm != null)
158 {
159 testEnumeration(mgr, vbox, vm);
160 testStart(mgr, vbox, vm);
161 }
162 System.out.println("done, press Enter...");
163 int ch = System.in.read();
164 }
165 }
166 catch (VBoxException e)
167 {
168 System.out.println("VBox error: "+e.getMessage()+" original="+e.getWrapped());
169 e.printStackTrace();
170 }
171 catch (java.io.IOException e)
172 {
173 e.printStackTrace();
174 }
175
176 // process system event queue
177 mgr.waitForEvents(0);
178
179 if (ws)
180 {
181 try {
182 mgr.disconnect();
183 } catch (VBoxException e) {
184 e.printStackTrace();
185 }
186 }
187 /* cleanup do the disconnect */
188 mgr.cleanup();
189
190 }
191 public static void main(String[] args)
192 {
193 new TestVBoxNATEngine(args);
194 }
195
196}
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette