#!/usr/bin/perl -I./lib

use strict;
use util_ipv6;

## MAIN --------------------------------------------------------------------

my $url6 = "http://metric6.inetcore.com/46checker/ip6addr.cgi";
my $url4 = "http://metric4.inetcore.com/46checker/ip4addr.cgi";
my $url46 = "http://metric624.inetcore.com/46checker/ip6addr.cgi";
my $url64 = "http://metric624.inetcore.com/46checker/ip4addr.cgi";

my $ipv6 = 0;
$ipv6 = 1 if ($ENV{'REMOTE_ADDR'} =~ /:/);
my $type = checkAddrType($ENV{'REMOTE_ADDR'});

my $mac = 0;
$mac = 1 if ($ENV{'HTTP_USER_AGENT'} =~ /Mac/);

my $id = 0;
my $lang = "e";
my @query_pair = split('&', $ENV{'QUERY_STRING'});
my $pair;
foreach $pair (@query_pair) {
  my ($name, $value) = split('=', $pair);
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  if ($name eq 'i') {
    $id = $value;
  } elsif ($name eq 'l') {
    $lang = $value;
  }
}

print "Content-type: text/html\n";
print "\n";

printHtmlHead();

if ($id == 0) {
  printInitData();
} else {
  my $str = sprintf ("?i=%d", $id);
  $url6 .= $str;
  $url4 .= $str;
  $url46 .= $str;
  $url64 .= $str;
  printUpdateData();
}
printHtmlTail();

exit 0;

# --------------------------------------------------------------------------
sub printHtmlHead {
  print << "END";
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="expires" content="Thu, 1 Jan 2009 00:00:00 GMT">
<head>
<title>IPv4/IPv6 checker</title>
<style type="text/css">
<!--
body {
  margin: 0;
  padding: 0;
  width: 350px;
  height: 150px;
  background-image: url(./images/background.png);
  background-repeat: no-repeat;
  font-family: meiryo,"segoe ui";
}
#ip {
  position: absolute;
  width: 310px;
  height: 20px;
  padding-top: 4px;
  padding-left: 2px;
  color: #a0a0a0;
  border: 2px solid #a0a0a0;
  font-size: 10px;
  font-weight: bold;
}
#pr {
  position: absolute;
  width: 20px;
  height: 20px;
  padding-top: 4px;
  padding-left: 2px;
  color: #ffff99;
  border: 0;
  font-size: 14px;
  font-weight: bold;
}
iframe {
  width: 308px;
  height: 16px;
}
input {
  position: absolute;
  top: 10px;
  left: 220px;
  width: 60px;
  height: 20px;
  font-size: 10px;
}
-->
</style>
</head>
<body>
END
}

# --------------------------------------------------------------------------
sub printHtmlTail {
  print << "END";
</body>
</html>
END
}

# --------------------------------------------------------------------------
sub printFormData($) {
  my $id = shift;
  print "<form method=\"GET\" action=\"http://metric.inetcore.com/46checker/getaddr.cgi\">\n";
  printf ("<input type=\"hidden\" name=\"i\" value=\"%s\">\n", $id);
  printf ("<input type=\"hidden\" name=\"l\" value=\"%s\">\n", $lang);
  if ($lang eq "j") {
    print "<input type=\"submit\" value=\"チェック\">\n";
  } else {
    print "<input type=\"submit\" value=\"CHECK\">\n";
  }
  print "</form>\n";
}

# --------------------------------------------------------------------------
sub printInitData {
  my $id = int(rand(100000000));
  printFormData($id);
  print "<div id=\"ip\" style=\"top:48px; left:16px;\">";
  print "XXX.XXX.XXX.XXX</div>\n";
  print "<div id=\"ip\" style=\"top:94px; left:16px;\">";
  print "XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX</div>\n";
}

# --------------------------------------------------------------------------
sub printUpdateData {
  my $id = int(rand(100000000));
  printFormData($id);
  my $str_iframe = "<iframe frameborder=\"0\" scrolling=\"no\" allowtransparency=\"true\"";
  my ($str_ip4, $str_ip6);

  if ($ipv6) {
    if ($mac || $type eq "6to4" || $type eq "Teredo") {#mac: until the mac OS implement RFC3484.
      $str_ip4 = sprintf ("%s src=\"%s\"></iframe>", $str_iframe, $url4);
    } else {
      $str_ip4 = sprintf ("%s src=\"%s\"></iframe>", $str_iframe, $url64);
    }
    $str_ip6 = sprintf ("%s src=\"%s\"></iframe>", $str_iframe, $url6);

    printf ("<div id=\"ip\" style=\"top:48px; left:16px;\">%s</div>\n", $str_ip4);
    printf ("<div id=\"ip\" style=\"top:94px; left:16px;\">%s</div>\n", $str_ip6);
    print "<div id=\"pr\" style=\"top:94px; left:312px;\">&diams;</div>\n";
  } else {
    $str_ip4 = sprintf ("%s src=\"%s\"></iframe>", $str_iframe, $url4);
    $str_ip6 = sprintf ("%s src=\"%s\"></iframe>", $str_iframe, $url46);

    printf ("<div id=\"ip\" style=\"top:48px; left:16px;\">%s</div>\n", $str_ip4);
    printf ("<div id=\"ip\" style=\"top:94px; left:16px;\">%s</div>\n", $str_ip6);
    print "<div id=\"pr\" style=\"top:48px; left:312px;\">&diams;</div>\n";
  }
}
