package ma_lib;

#******************************************************************************
#ma_lib.pl
#
#modified  	:2002/04/28
#Copyright 	:The Room
#E-Mail		:dream@lib.net
#URL		:http://dream.lib.net/room/
#
#これはフリー素材です。
#転載・商用目的の利用の際には、メールをお願いします。
#*あまり汎用性は考えて作られていません。
#******************************************************************************
#
# 使い方 require 'ma_lib.pl';
#        @result = &ma_lib::terminal_check;
#
# 返り値 $user_agent,$terminal,$t_sy,$t_name,$t_color,$t_mime
#
#
# user_agent 環境変数 HTTP_USER_AGENT 
#
# terminal   機種ごとの番号
#            0 i-mode
#            1 J-Skyweb
#            2 EZweb
#            3 ドットi
#            4 H"
#            5 PCその他
#
# t_sy       機種ごとの略称
#            i-mode   -> i
#            J-Skyweb -> J
#            EZweb    -> E
#            ドットi  -> D
#            H"       -> H
#            PCその他 -> (返り値なし)
#
# t_name     端末名
#            ただしH"は H"/PDX または feelH" のいずれかの世代を返す。
#            J-Skywebについてはロット番号を削除して返す。
#            PCその他の場合は返り値なし。
#
# t_color    発色数
#            0 ->不明
#            1 ->白黒
#            2 ->白黒4階調
#            3 ->16色
#            4 ->256色
#            5 ->256色以上
#
# t_mime     機種ごとに対応しているMIMEタイプ
#            i-mode   -> text/html
#            J-Skyweb -> text/html
#            EZweb    -> text/x-hdml
#            ドットi  -> text/html
#            H"       -> text/plain
#            PCその他 -> text/html
#
#******************************************************************************

#i-mode

# USER_AGENT
#  DoCoMo/1.0/F502i/c10
#  DoCoMo/1.0/F502i
#  機種名は3番目の値。

#機種別発色数情報
%imode_color = (
	'D501i','1',
	'F501i','1',
	'N501i','1',
	'P501i','1',

	'D502i','4',
	'F502i','4',
	'N502i','2',
	'P502i','2',
	'NM502i','1',
	'SO502i','2',
	'F502it','4',
	'N502it','4',
	'SO502iWM','4',

	'F503i','4',
	'P503i','4',
	'N503i','5',
	'D503i','5',
	'SO503i','5',

	'F503iS','5',
	'P503iS','4',
	'N503iS','5',
	'D503iS','5',
	'SO503iS','5',

	'D209i','4',
	'F209i','4',
	'N209i','2',
	'P209i','2',
	'R209i','2',
	'KO209i','4',
	'ER209i','1',
	'P209iS','4',

	'D210i','4',
	'F210i','4',
	'N210i','4',
	'P210i','4',
	'KO210i','4',
	'SO210i','4',

	'D211i','5',
	'F211i','5',
	'N211i','5',
	'P211i','5',
	'SO211i','5',
	'R211i','5',


	'SH601em','1',
	'P651ps','1',
	'F671i','5',
	'R691i','2',

	'ex_navi_1.0','0',
	'ex_navi_2.0','0',

	'P821i','2',
	'N821i','2',
	'SH821i','4',

	'633S','5',
	'641P','4',
	'641S','4',
	'641Sf','4',
	'641Ss','4',
	'642S','5',

	'SH712m','4',

	'PD555S','1',

	'N2001','5',
	'N2002','5',
	'P2101V','5',
	'D2101V','5',
	'N2401','0',
	'F2611','0'
	);

#******************************************************************************
#J-Skyweb

# HTTP_USER_AGENT
#  J-PHONE/2.0/J-DN02
#  J-PHONE/2.0/J-DN02_a
#  ロット番号も含まれる場合がある。
# が、旧機種はデータを吐かない可能性がある(?)ため、
#  HTTP_X_JPHONE_MSNAME 
#  HTTP_X_JPHONE_SOUND
#  HTTP_X_JPHONE_DISPLAY
#  HTTP_X_JPHONE_COLOR
# で検出を行う。
#  MSNAMEは、やはりロットを含む場合がある。
#
#******************************************************************************
#EZweb
#
# HTTP_USER_AGENT
#  UP.Browser/3.03-HI11 UP.Link/3.2.2.7c
#  UP.Browser/3.04-HI12 UP.Link/3.2.2.7c
#  KDDI-HI21 UP.Browser/6.0.2.254(GUI) MMP/1.1 (cdmaOne3000,5000シリーズ)

#EZweb機種データ
# 'デバイスID','端末名'

%ez_terminal=(
	'TS21','C5001T',

	'CA21','C3012CA',
	'SA21','C3011SA',

	'MA21','C3003P',
	'KC21','C3002K',
	'HI21','C3001H',

	'KC14','A1012K',
	'ST13','A1011ST',

	'SN17','C1002S',
	'SY15','C1001SA',

	'CA11','C303CA',
	'CA12','C311CA',
	'CA13','C409CA',
	'CA14','C452CA',

	'DN01','C202DE',
	'DN11','C402DE',

	'HI01','C201H',
	'HI02','C201H',
	'HI11','C302H',
	'HI12','C309H',
	'HI13','C407H',
	'HI14','C451H',

	'KC11','C307K',
	'KC12','C313K',
	'KC13','C414K',
	'KCC1','D303K',
	'KCC2','D304K',

	'KCI1','702G',
	'KCI2','703G',
	'KCT1','TK01',
	'KCT2','TK02',
	'KCT3','TK02',
	'KCT4','TK03',
	'KCT5','TK04',
	'KCT6','TK05',
	'KCT7','TK11',
	'KCT8','TK12',

	'MA11','C308P',
	'MA12','C308P',
	'MA13','C408P',
	'MAC1','D305P',
	'MAC2','D305P',
	'MAI1','704G',
	'MAI2','704G',
	'MAT1','TP01',
	'MAT2','TP01',
	'MAT3','TP11',
	'MIT1','TD11',

	'SN11','C305S',
	'SN12','C404S',
	'SN13','C406S',
	'SN14','C404S',
	'SN15','C413S',
	'SN16','C413S',

	'SNC1','D306S',
	'SNI1','705G',

	'ST11','C403ST',
	'ST12','C411ST',
	'SY11','C304SA',
	'SY12','C401SA',
	'SY13','C405SA',
	'SY14','C412SA',


	'SYC1','D301SA',
	'SYT1','TS01',
	'SYT2','TS02',
	'SYT3','TS11',

	'TS11','C301T',
	'TS12','C310T',
	'TS13','C410T',
	'TS14','C415T',
	'TSC1','D302T',
	'TSI1','701G',

	'TST1','TT01',
	'TST2','TT02',
	'TST3','TT03',
	'TST4','TT11',
	'TST5','TT21',

	'D2','D2',
	'NT95','UP.SDK',
	'P-PAT','P-PAT',
	'SP01','UP.SDK',
	'UPG1','UP.SDK'
	);

#******************************************************************************
#ドットi
#
# HTTP_USER_AGENT
#  ASTEL/1.0/J-0511.00/c10/smel
# AJ-51 Ver1.00を示す。
# 今のところ、AJ-51しか無い。

#ドットi機種別発色数
%doti_color = (
	'AJ-51','2'
	);
#******************************************************************************
#H"
#
# HTTP_USER_AGENT
#  PDXGW/1.0(TX=8;TY=4;GX=96;GY=65;C=G2;G=B2;GI=0)
# C の値が発色数。値が無い場合は白黒2階調。
# G2 白黒2階調 / C4 カラー4色(白黒4階調として集計)
# C256 カラー256色 / CF フルカラー(65536色以上として集計)
# 端末名が判断不可能な為、代わりに世代識別を行う。
# GI=0/1 H"/PﾒｰﾙDX / GI=2 feelH"
#******************************************************************************

sub terminal_check{

my $user_agent=$ENV{'HTTP_USER_AGENT'};
my $jsky1=$ENV{'HTTP_X_JPHONE_COLOR'};
my $jsky2=$ENV{'HTTP_X_JPHONE_DISPLAY'};
my $jsky3=$ENV{'HTTP_X_JPHONE_MSNAME'};
my $jsky4=$ENV{'HTTP_X_JPHONE_SOUND'};
my ($terminal,$t_name,$t_color,$t_sy,$t_mime,$t_temp);

#デバッグ用

# $user_agent="DoCoMo/1.0/F501i"; #i-mode白黒
# $user_agent="DoCoMo/1.0/F502i"; #i-modeカラー
# $user_agent="DoCoMo/1.0/ex_navi_2.0_AA1234"; #自動車電話
# $user_agent="DoCoMo/2.0 P2101V(c100)"; #FOMA
# $user_agent="J-PHONE/2.0/J-DN02";$jsky1="G2";#J-Sky白黒
# $user_agent="J-PHONE/2.0/J-DN02";$jsky1="C256";#J-Skyカラー
# $user_agent="UP.Browser/3.03-HI11 UP.Link/3.2.2.7c";#EZ白黒
# $user_agent="UP.Browser/3.04-HI12 UP.Link/3.2.2.7c";#EZカラー
# $user_agent="KDDI-HI21 UP.Browser/6.0.2.254(GUI) MMP/1.1";#EZ 300x/500x系
# $user_agent="ASTEL/1.0/J-0511.00/c10/smel";#ドットi白黒
# $user_agent="PDXGW/1.0(TX=8;TY=4;GX=96;GY=65;C=G2;G=B2;GI=0)";#H"白黒

if (($user_agent =~ /^DoCoMo\/\d+\.\d+\/([^\/]*)/i) || ($user_agent =~ /^DoCoMo\/2\.0 ([^\(]*)/i)){
	#i-mode
	$terminal = 0;
	$t_name = $1;
	if ($t_name =~ /(ex_navi_\d\.\d)/){
		$t_name = $1;
	}
	$t_color = $imode_color{$t_name};
	$t_color = 0 if $t_color eq "";
	$t_sy = "i";
	$t_mime = "text/html";
	}
elsif ($jsky1 ne "" || $jsky2 ne "" || $jsky3 ne "" || $jsky4 ne "" || $user_agent =~ /^J-PHONE/){
	#J-Skyweb
	$terminal = 1;
	$jsky3 = $1 if $jsky3 =~ /(.*)_/;
	$t_name = $jsky3;
	$t_name = "Unknown" if $jsky3 eq "";
	if ($jsky1 eq "G2"){$t_color=1;}
	elsif ($jsky1 eq "G4"){$t_color=2;}
	elsif ($jsky1 eq "C16"){$t_color=3;}
	elsif ($jsky1 eq "C256"){$t_color=4;}
	elsif ($jsky1 eq "C4096"){$t_color=5;}
	elsif ($jsky1 eq "C65536"){$t_color=5;}

	else{$t_color=0;}
	$t_sy = "J";
	$t_mime = "text/html";
	}
elsif ($user_agent =~ /^UP\.Browser[^-]*-(\w*) /i || $user_agent =~ /^KDDI-([^ ]*) /i){
	#EZweb
	$terminal = 2;
	$t_temp = $1;
	$t_name = $ez_terminal{$t_temp};
	$t_color = (split(/,/,$ENV{'HTTP_X_UP_DEVCAP_SCREENDEPTH'}))[0];
	if ($t_color > 256){$t_color = 5;}
	elsif ($t_color > 16){$t_color = 4;}
	elsif ($t_color > 2){$t_color = 3;}
	elsif ($t_color == 2){$t_color = 2;}
	elsif ($t_color == 1){$t_color = 1;}
	else{$t_color = 0;}
	$t_name = "Unknown" if $t_name eq "";
	$t_color = 0 if $t_color eq "";
	$t_sy = "E";
	$t_mime = "text/x-hdml";
	}
elsif ($user_agent =~ /^ASTEL\//){
	#ドットi
	$terminal = 3;
	$t_name = $1 if $user_agent =~ /ASTEL\/\d+\.\d+\/(.*)\d\.\d+/;
	$t_color = 2;
	$t_sy = "D";
	$t_mime = "text/html";
	}
elsif ($user_agent =~ /^PDXGW\/\d\.\d/i){
	# H"
	$terminal = 4;
	$t_temp=$1 if $user_agent =~ /C=(\w*);/;
	if ($t_temp eq "C4"){$t_color=2;}
	elsif ($t_temp eq "C256"){$t_color=4;}
	elsif ($t_temp eq "CF"){$t_color=5;}
	else{$t_color=1;}
	$t_temp=$1 if $user_agent =~ /GI=(\d)/;
	if ($t_temp == 2){$t_name="feelH\"";}
	else{$t_name="H\"/PDX";}
	$t_sy = "H";
	$t_mime = "text/plain";
	}else{
	#その他の媒体
	$terminal = 5;
	$t_name = "PCその他";
	$t_color = $t_sy = "";
	$t_mime = "text/html";
	}

return ($user_agent,$terminal,$t_sy,$t_name,$t_color,$t_mime);
}

1;

