#! /usr/bin/perl

$version = "1.7 (2000/03/03) onccnv+opennet CGI" ;

#-----------------------------------------------------------------
#	t-saitoh@福井高専さんのongw.cgiを拙作インチキHTML->ONC
#	変換ルーチンを利用するように改変しました。
#	HTMLテキストもhttpを話で自前でサーバからとってきます。
#	(この部分はshinoさんのONC Read CGIを参考にさせて頂きました。)
#
#	参考URL
#		shino's Home PageのONC作成研究所
#			http://www9.big.or.jp/%7Emshinoda/
#
#	    t-saitohさんのPHSとPメールをうまく使おう
#			http://nicole.ei.fukui-nct.ac.jp/%7Et-saitoh/hobby/pdx/
#
#-----------------------------------------------------------------
#	M.Kawakami  mailto:masato@orange.co.jp
#	            http://www.orange.co.jp/~masato/
#	$Id: ongw2.cgi,v 1.7 2000/03/02 15:21:59 masato Exp $
#-----------------------------------------------------------------

#-----------------------------------------------------------------
#	t-saitoh@福井高専さんのオリジナルバージョンのコメント
#-----------------------------------------------------------------
#
#	DDI-pocket の PメールDX機能のための WWW 参照機能である
#	オープンネットコンテンツサービスで HTML ページ参照で
#	リンクをたどる機能を実現する。
#
#	lynx によりページのテキストとリンク情報を抽出し、
#	オープンネットコンテンツのデータ形式に変換する。
#
#	0.9.2 : masato氏によるpatchの吸収。
#			my変数のjcode呼出しが×,微妙な改良,コメントを増やす(^_^;
#	0.9.1 : pdxsubj,pdxdata を参照する機能追加。
#	0.9   : lynx を使った最初のバージョン。たった３時間ででけたぞ!(^_^)
#
#	詳しくは http://www.fukui-nct.ac.jp/~t-saitoh/hobby/pdx/ を
#	参照して下さい。
#	バグ報告や改良パッチを求む。
#-----------------------------------------------------------------

#-----------------------------------------------------------------
#	自分のCGI環境に応じて設定して下さい。

# あなたが CGI として使う時の URL を指定。
$self = "http://osj.net/g/gw2.cgi" ;

# 自分のサイトは '.' によって省略可能(masato)
$apprev = "http://osj.net/g/" ;

# リンク最大数(これ以上のリンクは無視します)
$ref_max = 40 ;

# 番号の丸文字化(サーバでは読めないのでデバック用にフラグ化)
$flag_maru = 0 ;

# 1:NKF.pm使用、0:jcode.pl使用
$use_nkf = 0;

# テストバージョンであることを表明する
$test_version = 1 ;

#-----------------------------------------------------------------

if ($use_nkf) {
	eval q(use NKF);
} else {
	require "./jcode.pl" ;
}
require 'getopts.pl' ;
require './onccnv.pl' ;

do Getopts( 't:' ) ;

if ($use_nkf) {
	$version = nkf('-s', $version) ;
	if (!defined(&main::nkf)) {
		die "NKF.pm not found";
	}
} else {
	jcode::convert( \$version , 'sjis') ;
}

if ( $opt_t ne "" ) {

	# デバック用のオプション引数を使った実行
	#	使用例:	$ ./gw.cgi -t URL=http://www.foo.co.jp/

	($name,$val) = split( /=/ , $opt_t ) ;
	$val =~ s/\+/ /g ;
	$val =~ s/%([0-9a-f][0-9a-f])/pack('C',hex($1))/egi ;
	if ($use_nkf) {
		$val = nkf('-e', $val);
	} else {
		jcode::convert( \$val , 'euc') ;
	}
	$field{$name} = $val ;

} else {

	# CGI パラメータの読み込み
	$buf = $ENV{'QUERY_STRING'} ;

#	if ( $buf eq "" ) {
#		$len = $ENV{'CONTENT_LENGTH'};
#		read( STDIN , $buf , $len ) ;
#	}

	@args = split( /&/ , $buf ) ;
	foreach $arg (@args)
	{
		($name,$val) = split( /=/ , $arg ) ;
		$val =~ s/\+/ /g ;
		$val =~ s/%([0-9a-f][0-9a-f])/pack('C',hex($1))/egi ;
		if ($use_nkf) {
			$val = nkf('-e', $val);
		} else {
			jcode::convert( \$val , 'euc') ;
		}
		$field{$name} = $val ;
	}
}

$url = "" ;

if ( $field{'URL'} ne "" ) {
	$url = $field{'URL'} ;
} elsif ( $field{'U'} ne "" ) {		# 変数の省略形(masato)
	$url = $field{'U'} ;
} elsif ( $field{'pdxdata'} ne "" ) {
	$url = $field{'pdxdata'} ;
} elsif ( $field{'pdxsubj'} ne "" ) {
	$url = $field{'pdxsubj'} ;
} elsif ( $ARGV[0] ne "" ) {
	$url = $ARGV[0];
	$url =~ s/\\~/~/g;	# なぜが~の前に\が付くので除去
}

if ( $url ne "" ) {

	&onc_gateway($url, $self, $ref_max, $flag_maru);

} else {

	# URL が指定されなかった場合は、すぐに切断する。
	#	リンク番号 0 で呼び出される。
	$mess = "" ;
	$mess = "\nこの CGI は暫定公開中です。\n"
		."http://www.orange.co.jp/~masato/onccnv/"
		if ( $test_version ) ;
	$ans = <<"EOF" ;
Content-type: text/plain

X-PmailDX-CTRL: LineDisconnect
From: $self
Subject: 終了(回線切断)
Content-Type: Text/X-PmailDX

御利用ありがとうございました。$mess
ver.$version
EOF
	if ($use_nkf) {
		$ans = nkf('-s', $ans) ;
	} else {
		jcode::convert( \$ans , 'sjis' ) ;
	}
	print $ans ;

}


# 自前でHTMLテキストを得る
sub get_html_text ($) {
	my ($url) = @_;
	my $intext = '';

	return '' if ($url eq '');

	my ($h, $d, $server, $file) = split(/\//, $url, 4);
	my ($server, $port)= split(/\:/, $server);
	$port = 80 if ($port eq '');

	$remote_address = sockaddr_in($port, inet_aton($server));
	$proto = getprotobyname('tcp');
	socket(IN,PF_INET,SOCK_STREAM,$proto)
		|| die "Socket: $!";
	my $c = 0;
	do {
		$result = connect(IN, $remote_address);
		if ($c++ >= 10) { &error; }
		if ($result != 1) { sleep(1); }
	} while ($result != 1);

	select(IN); $|=1;

	print "GET /$file HTTP/1.0\r\n";
	print "Referer: $h\r\n";
	print "Host: $server\r\n";
	print "Accept: */*\r\n";
	print "User-Agent: ONCGW\r\n";
	print "Connection: close\n";
	print "\r\n";

	select(STDOUT); 

	#header 非表示
	while (<IN>) {
		m/^\r\n$/ && last;
	}
	$intext .= $_ while (<IN>);

	close(IN);

	$intext;
}

### Local Variables: ###
### mode: perl ###
### tab-width: 4 ###
### End: ###
