]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.simple/src/main/java/org/argeo/slc/lib/vbox/VBoxManager.java
Improve RPM Factory
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.simple / src / main / java / org / argeo / slc / lib / vbox / VBoxManager.java
index ecc1e649b7bc77dd946bdfaf99465a87b372001d..34e8993f84b142af412e2f4c9074c204d178a7a7 100644 (file)
@@ -1,3 +1,18 @@
+/*
+ * Copyright (C) 2007-2012 Argeo GmbH
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *         http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package org.argeo.slc.lib.vbox;
 
 import java.io.IOException;
@@ -39,6 +54,10 @@ public class VBoxManager {
                startVm("gui");
        }
 
+       public void startVmHeadless() {
+               startVm("vrdp");
+       }
+
        public void startVm(String type) {
                List<Object> cmd = new ArrayList<Object>();
                cmd.add(executable);
@@ -54,16 +73,48 @@ public class VBoxManager {
                for (VBoxNat vBoxNat : nats) {
                        for (String id : vBoxNat.getMappings().keySet()) {
                                VBoxPortMapping mapping = vBoxNat.getMappings().get(id);
-                               new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
-                                               "Protocol", mapping.getProtocol(), script)).run();
-                               script.append('\n');
-                               new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
-                                               "GuestPort", mapping.getGuest(), script)).run();
-                               script.append('\n');
-                               new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
-                                               "HostPort", mapping.getHost(), script)).run();
-                               script.append('\n');
-                               script.append('\n');
+
+                               // Try to delete rule first
+                               try {
+                                       StringBuffer delCmd = new StringBuffer(
+                                                       "VBoxManage modifyvm");
+                                       delCmd.append(" \"").append(vm.getName()).append("\"");
+                                       delCmd.append(" --natpf").append(vBoxNat.getDevice())
+                                                       .append(" ");
+                                       delCmd.append(" delete ");
+                                       delCmd.append("\"").append(id).append("\"");
+                                       new SystemCall(delCmd.toString()).run();
+                                       script.append(delCmd).append("\n");
+                               } catch (Exception e) {
+                                       // silent
+                               }
+
+                               StringBuffer cmd = new StringBuffer("VBoxManage modifyvm");
+                               cmd.append(" \"").append(vm.getName()).append("\"");
+                               cmd.append(" --natpf").append(vBoxNat.getDevice()).append(" ");
+                               cmd.append("\"");
+                               cmd.append(id).append(",");
+                               cmd.append(mapping.getProtocol()).append(",");
+                               cmd.append(",");
+                               cmd.append(mapping.getHostPort()).append(",");
+                               cmd.append(vBoxNat.getGuestIp()).append(",");
+                               cmd.append(mapping.getGuestPort());
+                               cmd.append("\"");
+
+                               new SystemCall(cmd.toString()).run();
+                               script.append(cmd).append("\n");
+
+                               // Older VirtualBox
+                               // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
+                               // "Protocol", mapping.getProtocol(), script)).run();
+                               // script.append('\n');
+                               // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
+                               // "GuestPort", mapping.getGuest(), script)).run();
+                               // script.append('\n');
+                               // new SystemCall(createNatCommand(id, vBoxNat.getDevice(),
+                               // "HostPort", mapping.getHost(), script)).run();
+                               // script.append('\n');
+                               // script.append('\n');
                        }
                        script.append('\n');
                }