OSDN Git Service

Client detection minor cleanup.
[keitairc/keitairc.git] / lib / Keitairc / ClientInfo.pm
1 # -*-perl-*-
2 # Keitairc::ClientInfo
3 # $Id: ClientInfo.pm,v 1.3 2008-05-08 14:23:16 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_mobile{
67         my $me = shift;
68         $me->is_ezweb() + $me->is_docomo() + $me->is_softbank();
69 }
70
71 ################################################################
72 sub softbank_serial{
73         my $me = shift;
74         if($me->is_softbank()){
75                 if($me->{header}->{user_agent} =~ m|/(SN[0-9A-Z]+)|){
76                         return $1;
77                 }
78         }
79 }
80
81 ################################################################
82 sub docomo_foma_icc{
83         my $me = shift;
84         if($me->is_docomo()){
85                 # NTT DoCoMo¤ÎFOMAüËöÀ½Â¤ÈÖ¹æ (15·å¤Î¥æ¥Ë¡¼¥¯¤Ê±Ñ¿ô»ú) ¤ª¤è¤Ó
86                 # FOMA¥«¡¼¥ÉÀ½Â¤ÈÖ¹æ (20·å¤Î¥æ¥Ë¡¼¥¯¤Ê±Ñ¿ô»ú)
87                 # http://www.nttdocomo.co.jp/service/imode/make/content/html/tag/utn.html
88                 # ¼ÂºÝ¤Ë¤Ïlower case¤â»È¤ï¤ì¤Æ¤¤¤ë¤è¤¦¤Ê¤Î¤ÇÃí°Õ
89                 # DoCoMo/2.0 P703imyu(c100;TB;W30H15)
90                 # DoCoMo/2.0 P703imyu(c100;TB;W30H15;ser12345ABCDE12345;icc12345ABCDE12345abcde)
91                 if($me->{header}->{user_agent} =~ /;(icc[0-9a-zA-Z]{20})/){
92                         return $1;
93                 }
94         }
95 }
96
97 ################################################################
98 sub subscribe_id{
99         my $me = shift;
100         $me->{header}->{x_up_subno};
101 }
102
103 ################################################################
104 sub serial_key{
105         my $me = shift;
106         if($me->is_softbank()){
107                 return $me->softbank_serial();
108         }
109         if($me->is_ezweb()){
110                 return $me->subscribe_id();
111         }
112 }
113
114 ################################################################
115 # Cookie¤ò°·¤¨¤ë¤«¤É¤¦¤«
116 # ¤È¤ê¤¢¤¨¤º Cookie ¤ò³Î¼Â¤Ë°·¤¨¤Ê¤¤ DoCoMo ¤òȽÄꤷ¤Æ¤ë¤À¤±
117 sub cookie_available{
118         my $me = shift;
119         unless($me->is_docomo()){
120                 return 1;
121         }
122 }
123
124 1;