diff options
author | Ermal <eri@pfsense.org> | 2010-08-18 19:28:57 +0000 |
---|---|---|
committer | Ermal <eri@pfsense.org> | 2010-08-18 19:28:57 +0000 |
commit | 9401767007a1bf03f02129fbe2c0d9d4d3621524 (patch) | |
tree | 35119f51959896c5b4d5680bdfb7516e29b15e93 | |
parent | b01406759249bee22fd81b0258338473df18601a (diff) | |
download | pfsense-9401767007a1bf03f02129fbe2c0d9d4d3621524.zip pfsense-9401767007a1bf03f02129fbe2c0d9d4d3621524.tar.gz |
Resolves #732. Make the wizard behave better and _actually_ work by correcting typos in code. Make it faster by not using HTTP redirection for showing errors. Try to make it more user friendly, though some more work is needed.
-rwxr-xr-x | usr/local/www/wizard.php | 11 | ||||
-rw-r--r-- | usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc | 425 | ||||
-rw-r--r-- | usr/local/www/wizards/traffic_shaper_wizard_multi_lan.xml | 5 |
3 files changed, 225 insertions, 216 deletions
diff --git a/usr/local/www/wizard.php b/usr/local/www/wizard.php index ff6ded1..d4a2b02 100755 --- a/usr/local/www/wizard.php +++ b/usr/local/www/wizard.php @@ -173,8 +173,8 @@ include("head.inc"); ?> <body link="#0000CC" vlink="#0000CC" alink="#0000CC" > - <?php + if(file_exists("/usr/local/www/themes/{$g['theme']}/wizard.css")) echo "<link rel=\"stylesheet\" href=\"/themes/{$g['theme']}/wizard.css\" media=\"all\" />\n"; else @@ -321,10 +321,6 @@ function showchange() { <img border="0" src="./themes/<?= $g['theme']; ?>/images/logo.gif"></a> <p> <div style="width:800px;background-color:#ffffff" id="roundme"> -<table bgcolor="#ffffff" width="95%" border="0" cellspacing="0" cellpadding="2"> - <!-- wizard goes here --> - <tr><td> </td></tr> - <tr><td colspan='2'> <?php if ($savemsg) print_info_box($savemsg); @@ -332,7 +328,10 @@ function showchange() { print_info_box(htmlspecialchars($_GET['message'])); if ($_POST['message'] != "") print_info_box(htmlspecialchars($_POST['message'])); -?></td></tr> +?> +<table bgcolor="#ffffff" width="95%" border="0" cellspacing="0" cellpadding="2"> + <!-- wizard goes here --> + <tr><td> </td></tr> <tr> <td class="tabcont"> <table width="100%" border="0" cellpadding="6" cellspacing="0"> diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc b/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc index 5306c8c..19528c8 100644 --- a/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc +++ b/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.inc @@ -32,158 +32,167 @@ */ function step1_submitphpaction() { - if (!isset($_POST['numberofconnections'])) { - $message=gettext("You need to specify the number of local interfaces connected."); - header("Location:wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=0&message={$message}"); - exit; - } - if (intval($_POST['numberofconnections']) > 100 || intval($_POST['numberofconnections']) < 1) { - $message=gettext("The number of local interfaces supported is between 1 and 100."); - header("Location:wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=0&message={$message}"); - exit; - } + global $stepid, $savemsg; + + if (!isset($_POST['numberofconnections'])) { + $savemsg=gettext("You need to specify the number of local interfaces connected."); + $stepid--; + } + if (intval($_POST['numberofconnections']) < 1) { + $savemsg=gettext("The number of local connection needs to be greater than 1."); + $stepid--; + } } function step2_stepbeforeformdisplay() { - global $config, $pkg; - - $numberofinterfaces = 0; - $iflist = array(); - $iflisttmp = get_configured_interface_with_descr(); - foreach ($iflisttmp as $if => $ifdesc) { - if (!is_altq_capable(get_real_interface($if))) - continue; - $numberofinterfaces++; - $iflist[$if] = $ifdesc; - } - $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']); - if ($numberofconnections > $numberofinterfaces) { - $message=gettext("You do not have {$numberofconnections} of local interfaces!"); - header("Location:wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=0&message={$message}"); - exit; - } - - $fields =& $pkg['step'][1]['fields']['field']; - - /* - unset($config['ezshaper']['step2']); - $config['ezshaper']['step2'] = array(); - write_config(); - */ - $fields = array(); + global $config, $pkg; + global $stepid, $savemsg; + + $numberofinterfaces = 0; + $iflist = array(); + $iflisttmp = get_configured_interface_with_descr(); + foreach ($iflisttmp as $if => $ifdesc) { + if (!is_altq_capable(get_real_interface($if))) + continue; + $numberofinterfaces++; + $iflist[$if] = $ifdesc; + } + $numberofconnections = intval($config['ezshaper']['step1']['numberofconnections']); + if ($numberofconnections > $numberofinterfaces) { + $savemsg=gettext("You do not have {$numberofconnections} of local interfaces!"); + $stepid--; + return; + } - $field = array(); - $field['name'] = "Setup WAN scheduler"; - $field['type'] = "listtopic"; - $fields[] = $field; - $field = array(); - $field['name'] = "Upload Scheduler"; - $field['type'] = "select"; - $field['typehint'] = "Queueing discipline to apply on the upload of this connection."; - $field['options']['option'] = array(); - $opts = array(); - $opts['name'] = "HFSC"; - $opts['value'] = "HFSC"; - $field['options']['option'][] = $opts; - $opts = array(); - $opts['name'] = "CBQ"; - $opts['value'] = "CBQ"; - $field['options']['option'][] = $opts; - $opts = array(); - $opts['name'] = "PRIQ"; - $opts['value'] = "PRIQ"; - $field['options']['option'][] = $opts; - $field['bindstofield'] = "ezshaper->step2->uploadscheduler"; - $fields[] = $field; + $fields =& $pkg['step'][1]['fields']['field']; + + /* + unset($config['ezshaper']['step2']); + $config['ezshaper']['step2'] = array(); + write_config(); + */ + $fields = array(); + + $field = array(); + $field['name'] = "Setup WAN(upload) scheduler"; + $field['type'] = "listtopic"; + $fields[] = $field; + $field = array(); + $field['name'] = "Upload Scheduler"; + $field['type'] = "select"; + $field['typehint'] = "Queueing discipline to apply on the upload of this link."; + $field['options']['option'] = array(); + $opts = array(); + $opts['name'] = "HFSC"; + $opts['value'] = "HFSC"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "CBQ"; + $opts['value'] = "CBQ"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['name'] = "PRIQ"; + $opts['value'] = "PRIQ"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->uploadscheduler"; + $fields[] = $field; + + $field = array(); + $field['name'] = "Setup link speed details"; + $field['type'] = "listtopic"; + $fields[] = $field; + $field = array(); + $field['name'] = "connupload"; + $field['displayname'] = "Link Upload"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step2->connupload"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "connuploadspeed"; + $field['typehint'] = "Upload bandwidth on this connection."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->connuploadspeed"; + $fields[] = $field; + + $field = array(); + $field['name'] = "conndownload"; + $field['displayname'] = "Link Download"; + $field['type'] = "input"; + $field['bindstofield'] = "ezshaper->step2->conndownload"; + $field['combinefieldsbegin'] = "true"; + $fields[] = $field; + + $field = array(); + $field['combinefieldsend'] = "true"; + $field['dontdisplayname'] = "true"; + $field['dontcombinecells'] = "true"; + $field['name'] = "conndownloadspeed"; + $field['typehint'] = "Download bandwidth on this connection."; + $field['type'] = "select"; + $field['options']['option'] = array(); + $opts = array(); + $opts['value'] = "Kb"; + $opts['name'] = "Kbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Mb"; + $opts['name'] = "Mbit/s"; + $field['options']['option'][] = $opts; + $opts = array(); + $opts['value'] = "Gb"; + $opts['name'] = "Gbit/s"; + $field['options']['option'][] = $opts; + $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed"; + $fields[] = $field; + + for ($i = 0; $i < $numberofconnections; $i++) { $field = array(); - $field['name'] = "Setup connection speeds"; + $interface_friendly = $i+1; + $field['name'] = "Setup connection speed and scheduler information for LAN interface #{$interface_friendly}"; $field['type'] = "listtopic"; $fields[] = $field; - $field = array(); - $field['name'] = "connupload"; - $field['type'] = "input"; - $field['bindstofield'] = "ezshaper->step2->connupload"; - $field['combinefieldsbegin'] = "true"; - $fields[] = $field; - - $field = array(); - $field['combinefieldsend'] = "true"; - $field['dontdisplayname'] = "true"; - $field['dontcombinecells'] = "true"; - $field['name'] = "connuploadspeed"; - $field['typehint'] = "Upload bandwidth on this connection."; - $field['type'] = "select"; - $field['options']['option'] = array(); - $opts = array(); - $opts['value'] = "Kb"; - $opts['name'] = "Kbit/s"; - $field['options']['option'][] = $opts; - $opts = array(); - $opts['value'] = "Mb"; - $opts['name'] = "Mbit/s"; - $field['options']['option'][] = $opts; - $opts = array(); - $opts['value'] = "Gb"; - $opts['name'] = "Gbit/s"; - $field['options']['option'][] = $opts; - $field['bindstofield'] = "ezshaper->step2->connuploadspeed"; - $fields[] = $field; - - $field = array(); - $field['name'] = "conndownload"; - $field['type'] = "input"; - $field['bindstofield'] = "ezshaper->step2->conndownload"; - $field['combinefieldsbegin'] = "true"; - $fields[] = $field; - - $field = array(); - $field['combinefieldsend'] = "true"; - $field['dontdisplayname'] = "true"; - $field['dontcombinecells'] = "true"; - $field['name'] = "conndownloadspeed"; - $field['typehint'] = "Download bandwidth on this connection."; - $field['type'] = "select"; - $field['options']['option'] = array(); - $opts = array(); - $opts['value'] = "Kb"; - $opts['name'] = "Kbit/s"; - $field['options']['option'][] = $opts; - $opts = array(); - $opts['value'] = "Mb"; - $opts['name'] = "Mbit/s"; - $field['options']['option'][] = $opts; - $opts = array(); - $opts['value'] = "Gb"; - $opts['name'] = "Gbit/s"; - $field['options']['option'][] = $opts; - $field['bindstofield'] = "ezshaper->step2->conn{$i}downloadspeed"; - $fields[] = $field; - - for ($i = 0; $i < $numberofconnections; $i++) { - - $field = array(); - $interface_friendly = $i+1; - $field['name'] = "Setup connection speed and scheduler information for interface #{$interface_friendly}"; - $field['type'] = "listtopic"; - $fields[] = $field; $field = array(); $field['name'] = "conn{$i}interface"; + $field['displayname'] = "LAN interface"; $field['type'] = "select"; $field['typehint'] = "Interface of this connection."; $field['options']['option'] = array(); + $ifselect = 0; foreach ($iflist as $ifname => $ifdescr) { + if ($ifselect > 0 && $ifselect == ($i + 1)) + $field['value'] = $ifname; $opts = array(); $opts['displayname'] = $ifdescr; $opts['name'] = $ifname; $opts['value'] = $ifname; $field['options']['option'][] = $opts; + $ifselect++; } $field['bindstofield'] = "ezshaper->step2->conn{$i}interface"; $fields[] = $field; $field['name'] = "conn{$i}downloadscheduler"; + $field['displayname'] = "LAN Scheduler"; $field['type'] = "select"; $field['typehint'] = "Queueing discipline to apply on the upload of this connection."; $field['options']['option'] = array(); @@ -208,50 +217,50 @@ function step2_stepbeforeformdisplay() { $field['name'] = "Next"; $field['type'] = "submit"; $fields[] = $field; - } function step2_stepsubmitphpaction() { global $config; + global $stepid, $savemsg; $sumdownloads = 0; /* Input Validation */ - $steps = intval($config['ezshaper']['step1']['enternumberoflantypeconnections']); + $steps = intval($config['ezshaper']['step1']['numberofconnections']); for ($i = 0; $i < $steps; $i++) { for ($j = $j; $j < $steps; $j++) { if ($_POST["conn{$i}interface"] == $_POST["conn{$j}interface"]) { - $message=gettext("You cannot select the same interface for connections {$i} and {$j}."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=1&message={$message}"); - exit; + $savemsg=gettext("You cannot select the same interface for different LAN #{$i} and LAN #{$j}."); + $stepid--; + return; } } } if (!is_numeric($_POST["connupload"])) { - $message = gettext("Upload bandwidth of connection is not valid."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=1&message={$message}"); - exit; + $savemsg= gettext("Upload bandwidth of connection is not valid."); + $stepid--; + return; } if (!is_numeric($_POST["conndownload"])) { - $message = gettext("Download bandwidth of connection is not valid."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=1&message={$message}"); - exit; + $savemsg= gettext("Download bandwidth of connection is not valid."); + $stepid--; + return; } $upbw = floatval($_POST["connupload"]); $downbw = floatval($_POST["conndownload"]); - if ($upbw == 0 || $downbw = 0) { - $message = gettext("You cannot specify 0 bandwidth!"); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=1&message={$message}"); - exit; + if ($upbw < 1 || $downbw < 1) { + $savemsg = gettext("You cannot specify bandwidth less than 1!"); + $stepid--; + return; } if (intval($upbw) < 128 && $_POST["connuploadspeed"] == "Kb" && trim($_POST["connscheduler"]) == "CBQ") { - $message=gettext("We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=1&message={$message}"); - exit; + $savemsg=gettext("We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler."); + $stepid--; + return; } if ($downbw < 128 && $_POST["conndownloadspeed"] == "Kb" && trim($_POST["downloadscheduler"]) == "CBQ") { - $message=gettext("We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=1&message={$message}"); - exit; + $savemsg=gettext("We do not support Bandwidths smaller than 128Kbit/s for CBQ scheduler."); + $stepid--; + return; } /* This is necessary since the wizard expects pecnefined fields. */ @@ -268,22 +277,18 @@ function step2_stepsubmitphpaction() { $config['ezshaper']['step2']["conn{$i}downloadscheduler"] = $_POST["conn{$i}downloadscheduler"]; $config['ezshaper']['step2']["conn${i}interface"] = $_POST["conn{$i}interface"]; } - - /* Not needed, called by wizard.php */ -// write_config(); } function step3_stepsubmitphpaction() { global $config; + global $stepid, $savemsg; if($_POST['address']) { - if(!is_ipaddr($_POST['address'])) { - if(!is_alias($_POST['address'])) { - /* item is not an ip or alias. error out */ - $message=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=2&message={$message}"); - exit; - } + if(!is_ipaddroralias($_POST['address'])) { + /* item is not an ip or alias. error out */ + $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); + $stepid--; + return; } } @@ -291,81 +296,85 @@ function step3_stepsubmitphpaction() { for ($i = 0; $i < $steps; $i++) { if ($_POST["connupload"]) { if (!is_numeric($_POST["connupload"])) { - $message = gettext("Upload bandwidth of connection {$i} is not valid."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=2&message={$message}"); - exit; - } + $savemsg = gettext("Upload bandwidth of connection {$i} is not valid."); + $stepid--; + return; + } $factor = wizard_get_bandwidthtype_scale($config['ezshaper']['step2']["conn{$i}uploadspeed"]); $ifbw = $factor * floatval($config['ezshaper']['step2']["conn{$i}upload"]); $factor = wizard_get_bandwidthtype_scale($_POST["conn{$i}uploadspeed"]); $input_bw = $factor * floatval($_POST["conn{$i}upload"]); if ((0.8 * $ifbw) < $input_bw) { - $message=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=2&message={$message}"); - exit; + $savemsg=gettext("You cannot set the VoIP upload bandwidth on connection {$i} higher than 80% of the connection."); + $stepid--; + return; } } } } function step4_stepsubmitphpaction() { - global $config; - - if ( $_POST['enable'] ) { - if(!$_POST['bandwidth']) { - $message="You need to specify a value for bandwidth!"; - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=3&message={$message}"); - exit; - } - if(!is_numeric($_POST['bandwidth'])) { - $message="The posted value is not a valid bandwidth."; - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=3&message={$message}"); - exit; - } + global $config; + global $stepid, $savemsg; - if ($_POST['bandwidthspeed'] <> "%") { - $message = gettext("Only percentage bandwidth specification is allowed."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=3&message={$message}"); - exit; - } - $bw = $_POST['bandwidth']; - if($bw > 15 && $bw < 2) { - $message="Values should be between 2% and 15%!"; - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=3&message={$message}"); - exit; - } + if ( $_POST['enable'] ) { + if(!$_POST['bandwidth']) { + $savemsg="You need to specify a value for bandwidth!"; + $stepid--; + return; + } + if(!is_numeric($_POST['bandwidth'])) { + $savemsg="The posted value is not a valid bandwidth."; + $stepid--; + return; + } - if($_POST['address'] <> "" && !is_ipaddr($_POST['address'])) { - if(!is_alias($_POST['address'])) { - /* item is not an ip or alias. error out */ - $message=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=3&message={$message}"); - } - } + if ($_POST['bandwidthspeed'] <> "%") { + $savemsg = gettext("Only percentage bandwidth specification is allowed."); + $stepid--; + return; + } + $bw = $_POST['bandwidth']; + if($bw > 15 && $bw < 2) { + $savemsg="Values should be between 2% and 15%!"; + $stepid--; + return; } + if($_POST['address']) { + if(!is_ipaddroralias($_POST['address'])) { + /* item is not an ip or alias. error out */ + $savemsg=gettext("Address must be a valid IP address or Firewall Alias. Please correct this value to continue."); + $stepid--; + return; + } + } + } } function step5_stepsubmitphpaction() { + global $stepid, $savemsg; + if ( $_POST['enable'] ) { if (isset($_POST['bandwidth']) && $_POST['bandwidth'] <> "") { if(!is_numeric($_POST['bandwidth'])) { - $message="Posted value is not a valid bandwidth."; - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=4&message={$message}"); + $savemsg="Posted value is not a valid bandwidth."; + $stepid--; + return; } if ($_POST['bandwidthspeed'] <> "%") { - $message = gettext("Only percentage bandwidth specification is allowed."); - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=4&message={$message}"); - exit; + $savemsg = gettext("Only percentage bandwidth specification is allowed."); + $stepid--; + return; } $bw = $_POST['bandwidth']; if($bw > 15 && $bw < 2) { - $message="Values should be between 2% and 15%!"; - header("Location: wizard.php?xml=traffic_shaper_wizard_multi_lan.xml&stepid=3&message={$message}"); - exit; + $savemsg="Values should be between 2% and 15%!"; + $stepid--; + return; } - } + } } } @@ -718,9 +727,9 @@ function apply_all_choosen_items() { * Doing it here makes sense since we can wipe the previous config only after * the user decides to do so, finishing the wizard. */ - if(isset($config['shaper']['queue'])) + if (isset($config['shaper']['queue'])) unset($config['shaper']['queue']); - /* XXX: This is ecnundant, because this should be handled by converter at startup. */ + /* XXX: This is redundant, because this should be handled by converter at startup. */ if(isset($config['shaper']['rule'])) unset($config['shaper']['rule']); foreach ($config['filter']['rule'] as $key => $rule) @@ -731,7 +740,7 @@ function apply_all_choosen_items() { unset($altq_list_queues); $altq_list_queues = array(); - $steps = floatval($config['ezshaper']['step1']['enternumberoflantypeconnections']); + $steps = floatval($config['ezshaper']['step1']['numberofconnections']); for ($i = 0; $i < $steps; $i++) { $tmppath = array(); diff --git a/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.xml b/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.xml index 0b0a6be..c766507 100644 --- a/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.xml +++ b/usr/local/www/wizards/traffic_shaper_wizard_multi_lan.xml @@ -80,6 +80,7 @@ <typehint>Prioritize Voice over IP traffic</typehint> <description>This will raise the priority of VOIP traffic above all other traffic.</description> <bindstofield>ezshaper->step3->enable</bindstofield> + <enablefields>provider,address,downloadspeed,downloadspeedunit,uploadspeed,uploadspeedunit</enablefields> </field> <field> <name>Next</name> @@ -208,7 +209,7 @@ <type>checkbox</type> <typehint>Penalize IP or Alias</typehint> <description>This will lower the priority of traffic from this IP or alias.</description> - <enablefields>Address,Bandwidth</enablefields> + <enablefields>address,bandwidth,bandwidthspeed</enablefields> <bindstofield>ezshaper->step4->enable</bindstofield> </field> <field> @@ -221,7 +222,7 @@ </field> <field> <name>Address</name> - <type>input</type> + <type>inputalias</type> <description>This allows you to just provide the IP address of the computer(s) to penalize. NOTE: You can also use a Firewall Alias in this location.</description> <bindstofield>ezshaper->step4->address</bindstofield> <message>IP Address field is non-blank and doesn't look like an IP address.</message> |