OSDN Git Service

First cut of emobile support. Closes #12453.
[keitairc/keitairc.git] / lib / Keitairc / ClientInfo.pm
1 # -*-perl-*-
2 # Keitairc::ClientInfo
3 # $Id: ClientInfo.pm,v 1.4 2008-05-13 02:53:31 matusita Exp $
4 # $Source: /home/ishikawa/work/keitairc/tmp/keitairc/lib/Keitairc/ClientInfo.pm,v $
5 #
6 # Copyright (c) 2008 Jun Morimoto <morimoto@mrmt.net>
7 # This program is covered by the GNU General Public License 2
8
9 package Keitairc::ClientInfo;
10 use strict;
11
12 ################################################################
13 sub new{
14         my $proto = shift;
15         my $arg = shift;
16         my $me = {};
17
18         for my $key (keys %{$arg->{_headers}}){
19                 my $ukey = $key;
20                 $ukey =~ s/-/_/g;
21                 $me->{header}->{$ukey} = $arg->{_headers}->{$key};
22         }
23
24         for my $set (split(/; */, $me->{header}->{Cookie})){
25                 my ($name, $value) = split(/=/, $set);
26                 $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('C', hex($1))/eg;
27                 $me->{cookie}->{$name} = $value;
28         }
29
30         bless $me;
31         $me->{serial_key} = $me->serial_key();
32         $me;
33 }
34
35 ################################################################
36 sub user_agent{
37         my $me = shift;
38         $me->{header}->{user_agent};
39 }
40
41 ################################################################
42 sub is_ezweb{
43         my $me = shift;
44         $me->{header}->{user_agent} =~ /^KDDI-/;
45 }
46
47 ################################################################
48 sub is_docomo{
49         my $me = shift;
50         $me->{header}->{user_agent} =~ /^DoCoMo/;
51 }
52
53 ################################################################
54 sub is_ipod{
55         my $me = shift;
56         $me->{header}->{user_agent} =~ /(iPod|iPhone)/;
57 }
58
59 ################################################################
60 sub is_softbank{
61         my $me = shift;
62         $me->{header}->{user_agent} =~ /^(SoftBank|Vodafone|J-PHONE|MOT-)/;
63 }
64
65 ################################################################
66 sub is_emobile{
67         my $me = shift;
68         $me->is_emobile_mobilebrowser() + $me->is_emobile_openbrowser();
69 }
70
71 ################################################################
72 sub is_emobile_mobilebrowser{
73         my $me = shift;
74         $me->{header}->{user_agent} =~ /^emobile/;
75 }
76
77 ################################################################
78 sub is_emobile_openbrowser{
79         my $me = shift;
80         # http://developer.emnet.ne.jp/useragent.html
81         $me->{header}->{user_agent} =~ /(H11T; like Gecko|\) S11HT$)/;
82 }
83
84 ################################################################
85 sub is_mobile{
86         my $me = shift;
87         $me->is_ezweb() + $me->is_docomo()
88                 + $me->is_softbank() + $me->is_emobile_mobilebrowser();
89 }
90
91 ################################################################
92 sub softbank_serial{
93         my $me = shift;
94         if($me->is_softbank()){
95                 if($me->{header}->{user_agent} =~ m|/(SN[0-9A-Z]+)|){
96                         return $1;
97                 }
98         }
99 }
100
101 ################################################################
102 sub docomo_foma_icc{
103         my $me = shift;
104         if($me->is_docomo()){
105                 # NTT DoCoMo¤ÎFOMAüËöÀ½Â¤ÈÖ¹æ (15·å¤Î¥æ¥Ë¡¼¥¯¤Ê±Ñ¿ô»ú) ¤ª¤è¤Ó
106                 # FOMA¥«¡¼¥ÉÀ½Â¤ÈÖ¹æ (20·å¤Î¥æ¥Ë¡¼¥¯¤Ê±Ñ¿ô»ú)
107                 # http://www.nttdocomo.co.jp/service/imode/make/content/html/tag/utn.html
108                 # ¼ÂºÝ¤Ë¤Ïlower case¤â»È¤ï¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¤Î¤ÇÃí°Õ
109                 # DoCoMo/2.0 P703imyu(c100;TB;W30H15)
110                 # DoCoMo/2.0 P703imyu(c100;TB;W30H15;ser12345ABCDE12345;icc12345ABCDE12345abcde)
111                 if($me->{header}->{user_agent} =~ /;(icc[0-9a-zA-Z]{20})/){
112                         return $1;
113                 }
114         }
115 }
116
117 ################################################################
118 sub subscribe_id{
119         my $me = shift;
120         $me->{header}->{x_up_subno};
121 }
122
123 ################################################################
124 sub userid{
125         my $me = shift;
126         $me->{header}->{x_em_uid};
127 }
128
129 ################################################################
130 sub serial_key{
131         my $me = shift;
132         if($me->is_softbank()){
133                 return $me->softbank_serial();
134         }
135         if($me->is_ezweb()){
136                 return $me->subscribe_id();
137         }
138         if($me->is_emobile()){
139                 return $me->userid();
140         }
141 }
142
143 ################################################################
144 # Cookie¤ò°·¤¨¤ë¤«¤É¤¦¤«
145 # ¤È¤ê¤¢¤¨¤º Cookie ¤ò³Î¼Â¤Ë°·¤¨¤Ê¤¤ DoCoMo ¤òȽÄꤷ¤Æ¤ë¤À¤±
146 sub cookie_available{
147         my $me = shift;
148         unless($me->is_docomo()){
149                 return 1;
150         }
151 }
152
153 1;