r1170 The first ever working switchvlans gateway for the real world, readonly, of...
authorDenis Ovsienko <infrastation@yandex.ru>
Tue, 9 Oct 2007 17:12:30 +0000 (17:12 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Tue, 9 Oct 2007 17:12:30 +0000 (17:12 +0000)
inc/gateways.php
inc/interface.php
inc/ophandlers.php

index 1a81da7be80d5b1d0669ca40b6b78377be5276c9..6ee1365b17565cf10f2c850e43aaa1aae05dca37 100644 (file)
 // finishes prematurely or exits with non-zero return code,
 // a single-item array is returned with the only "ERR" record,
 // which explains the reason.
-function queryGateway ($gwname, $arguments, $questions)
+function queryGateway ($gwname, $questions)
 {
        $execpath = "./gateways/{$gwname}/main";
-       $argline = implode (' ', $arguments);
        $dspec = array
        (
                0 => array ("pipe", "r"),
@@ -33,7 +32,7 @@ function queryGateway ($gwname, $arguments, $questions)
                2 => array ("file", "/dev/null", "a")
        );
        $pipes = array();
-       $gateway = proc_open ("${execpath} ${argline}", $dspec, $pipes);
+       $gateway = proc_open ($execpath, $dspec, $pipes);
        if (!is_resource ($gateway))
                return array ('ERR proc_open() failed in queryGateway()');
 
@@ -43,7 +42,7 @@ function queryGateway ($gwname, $arguments, $questions)
        fclose ($pipes[0]);
 
 // Fetch replies.
-       $answers = array ('OK!');
+       $answers = array ();
        while (!feof($pipes[1]))
        {
                $a = fgets ($pipes[1]);
index c1c8c1157365419809ab30b90fa26b0f2f1a52a4..8f9ecfac28857f065245427b65749ef0e082da13 100644 (file)
@@ -2810,20 +2810,32 @@ function renderVLANMembership ($object_id = 0)
        else
        {
                // FIXME: find actual HW and SW data and pass to the gateway.
+               $hwtype = $swtype = 'unknown';
+               foreach (getAttrValues ($object_id) as $record)
+               {
+                       if ($record['name'] == 'SW type' && !empty ($record['value']))
+                               $swtype = str_replace (' ', '+', $record['value']);
+                       if ($record['name'] == 'HW type' && !empty ($record['value']))
+                               $hwtype = str_replace (' ', '+', $record['value']);
+               }
                $data = queryGateway
                (
                        $tabno,
-                       array ($endpoints[0], 'hwtype', 'swtype', $remote_username),
-                       array ('listvlans', 'listports')
+                       array ("connect ${endpoints[0]} $hwtype $swtype ${remote_username}", 'listvlans', 'listports')
                );
                if ($data == NULL)
                {
                        showError ('Failed to get any response from queryGateway() or the gateway returned');
                        return;
                }
-               if ($data[0] != 'OK!')
+               if (strpos ($data[0], 'OK!') !== 0)
+               {
+                       showError ("Gateway failure: returned code ${data[0]}.");
+                       return;
+               }
+               if (count ($data) != 3)
                {
-                       showError ("Gateway failure: ${data[0]}");
+                       showError ("Gateway failure: mailformed reply.");
                        return;
                }
                // Now we have VLAN list in $data[1] and port list in $data[2]. Let's sort this out.
index 226e096ac2c58d18bb66da6b80ff896e29b9928d..f3aa7c6098c047d61d1ef72ab4a585639f278c09 100644 (file)
@@ -842,7 +842,7 @@ function updateVLANMembership ()
                        urlencode ('More than one IP address is assigned to this object, please configure FQDN attribute.');
 
 // Just convert the input and feed it into the gateway.
-       $questions = array();
+       $questions = array("connect ${endpoints[0]} hwtype swtype ${remote_username}");
        for ($i = 0; $i < $portcount; $i++)
        {
                if (!isset ($_REQUEST["portname_${i}"]))
@@ -856,7 +856,6 @@ function updateVLANMembership ()
        $data = queryGateway
        (
                $tabno,
-               array ($endpoints[0], 'hwtype', 'swtype', $remote_username),
                $questions
        );
        $error_count = $success_count = 0;