1 # -*- mode: perl; coding: utf-8 -*-
4 # Copyright (c) 2008 Jun Morimoto <morimoto@mrmt.net>
5 # This program is covered by the GNU General Public License 2
7 package Keitairc::ClientInfo;
11 ################################################################
17 for my $key (keys %{$arg->{_headers}}){
20 $me->{header}->{$ukey} = $arg->{_headers}->{$key};
23 if(defined $me->{header}->{cookie}){
24 for my $set (split(/; */, $me->{header}->{cookie})){
25 my ($name, $value) = split(/=/, $set);
26 $value =~ s/%([0-9A-Fa-f]{2})/pack('C', hex($1))/eg;
27 $me->{cookie}->{$name} = $value if !defined $me->{cookie}->{$name};
32 $me->{serial_key} = $me->serial_key();
36 ################################################################
39 $me->{header}->{user_agent};
42 ################################################################
45 # old au phones (WAP1.0 era) does not match with this regexp,
47 defined $me->{header}->{user_agent} && $me->{header}->{user_agent} =~ /^KDDI-/;
50 ################################################################
53 defined $me->{header}->{user_agent} && $me->{header}->{user_agent} =~ /^DoCoMo/;
56 ################################################################
60 return $ENV{IS_WEBKIT} if (defined $ENV{IS_WEBKIT});
62 # Detect Apple Webkit based Mobile browser
63 defined $me->{header}->{user_agent} && $me->{header}->{user_agent} =~ /AppleWebKit.* Mobile/;
66 ################################################################
69 defined $me->{header}->{user_agent} && $me->{header}->{user_agent} =~ /^(SoftBank|Vodafone|J-PHONE|MOT-)/;
72 ################################################################
75 $me->is_emobile_mobilebrowser() || $me->is_emobile_openbrowser();
78 ################################################################
79 sub is_emobile_mobilebrowser{
81 defined $me->{header}->{user_agent} && $me->{header}->{user_agent} =~ /^emobile/;
84 ################################################################
85 sub is_emobile_openbrowser{
87 # http://developer.emnet.ne.jp/useragent.html
88 defined $me->{header}->{user_agent} && $me->{header}->{user_agent} =~ /(H11T; like Gecko|\) S11HT$)/;
91 ################################################################
94 $me->is_ezweb() || $me->is_docomo() ||
95 $me->is_softbank() || $me->is_emobile_mobilebrowser();
98 ################################################################
101 if($me->is_softbank()){
102 if($me->{header}->{user_agent} =~ m|/(SN[0-9A-Z]+)|){
109 ################################################################
112 if($me->is_docomo()){
113 # NTT DoCoMoのFOMA端末製造番号 (15桁のユニークな英数字) および
114 # FOMAカード製造番号 (20桁のユニークな英数字)
115 # http://www.nttdocomo.co.jp/service/imode/make/content/html/tag/utn.html
116 # 実際にはlower caseも使われているようなので注意
117 # DoCoMo/2.0 P703imyu(c100;TB;W30H15)
118 # DoCoMo/2.0 P703imyu(c100;TB;W30H15;ser12345ABCDE12345;icc12345ABCDE12345abcde)
119 if($me->{header}->{user_agent} =~ /;(icc[0-9a-zA-Z]{20})/){
126 ################################################################
127 # http://www.nttdocomo.co.jp/service/imode/make/content/ip/#imodeid
130 $me->{header}->{x_dcmguid};
133 ################################################################
134 sub au_subscriber_id{
136 $me->{header}->{x_up_subno};
139 ################################################################
142 $me->{header}->{x_em_uid};
145 ################################################################
146 # we don't treat imodeid nor ser/icc of NTT DoCoMo,
147 # as they only send us them when they are forced to do it
150 if($me->is_softbank()){
151 return $me->softbank_serial();
154 return $me->au_subscriber_id();
156 if($me->is_emobile()){
157 return $me->emobile_userid();
162 ################################################################
164 # とりあえず Cookie を確実に扱えない DoCoMo を判定してるだけ
165 sub cookie_available{
167 unless($me->is_docomo()){