#!/usr/local/bin/perl

require "jcode.pl";

$logfile = "log.txt";
$datafile = "ibbs.txt";
$agent = $ENV{'HTTP_USER_AGENT'};

%query=&get_query();

#if(index($agent,"DoCoMo")!=-1){

	# log
	open(FP,">>$logfile");
	&lock($logfile);
	print FP (&getTime).":".$agent."\n";
	&unlock($logfile);
	close(FP);

	open(FP,$datafile);
	&lock($datafile);
	@lines = <FP>;
	&unlock($datafile);
	close(FP);

	# bbsˆ—
	if(defined($query{'title'})){
		# write
		$title = $query{'title'};
		$title =~s/\\//g;
		$message = $query{'message'};
		$message =~s/\r\n//g;
		$message =~s/\n//g;
		$message =~s/\r//g;
		if(@lines>=5){
			shift(@lines);
		}
		push(@lines,$title.'@@'.$message."%%\n");

		# save
		open(FP,">$datafile");
		&lock($datafile);
		print FP join('',@lines);
		&unlock($datafile);
		close(FP);
	}

	$buf = join('',@lines);

	print "Content-type: text/plain\n\n";
	print $buf."end";

#}else{
#	print "Content-type: text/html\n\n";
#	print "<html><body>Error</body></html>";
#}

exit;

sub getTime {
	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
	$mon = ($mon + 1);
	if ($sec < 10) { $sec = "0$sec"; }
	if ($min < 10) { $min = "0$min"; }
	if ($hour < 10) { $hour = "0$hour"; }
	if ($mday < 10) { $mday = "0$mday"; }
	if ($mon < 10) { $mon = "0$mon"; }
	if ($year < 90) { $year = "20$year"; }else{$year+=1900;}

	return sprintf("%04d/%02d/%02d %02d:%02d:%02d",$year,$mon,$mday,$hour,$min,$sec);
}
sub lock {
	local($dev ,$ino ,$mode ,$nlink,$uid  ,$gid);
	local($rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks);
	local($lockfile);
	$lockfile=$_[0].".lock";
	while (-e $lockfile) {
		($dev ,$ino ,$mode ,$nlink,$uid  ,$gid,
		 $rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)=stat($lockfile);
		if (time()-$ctime>$_[1]) { last; }
		sleep(1);
	}
	open(LOCK,">".$lockfile);
	close(LOCK);
}
sub unlock {
	unlink $_[0].".lock";
}
sub get_query {
	local(@pairs,$pair,$key,$value,$data);
	
	if ($ENV{"REQUEST_METHOD"} eq "POST") {
		read(STDIN,$data,$ENV{"CONTENT_LENGTH"});
	}else{
		$data=$ENV{"QUERY_STRING"};
	}
	
	@pairs=(split(/&/,$data),split(/&/,join("&",@ARGV)));
	%query=();
	foreach $pair (@pairs) {
		($key,$value)=split(/=/,$pair);
		$value=~tr/+/ /;
		$value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
		$value=~s/</&lt;/g;
		$value=~s/>/&gt;/g;
		if ($value eq ()) { $value=""; }
		&jcode'h2z_sjis(*value);
		&jcode'convert(*value,"sjis");
		$query{$key}=$value;
	}
	%query;
}