From: morimoto Date: Thu, 27 Sep 2007 22:20:01 +0000 (+0000) Subject: keitairc 1.31 X-Git-Tag: release_1_33~5 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=e0f4de4148c8ac70f51fb81c992fb3670e2984d1;p=keitairc%2Fkeitairc.git keitairc 1.31 --- diff --git a/AUTHORS b/AUTHORS index eba3ffa..d3a7d69 100644 --- a/AUTHORS +++ b/AUTHORS @@ -1,6 +1,8 @@ Jun Morimoto -thanks goes to +Thanks goes to Ichiro FUKUHARA -ISHIKAWA Mutsumi +ISHIKAWA Mutsumi Akira Tagoh +Jun Hichisato +matsui diff --git a/ChangeLog b/ChangeLog index eb43420..0f9ee32 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-09-27 Jun Morimoto + + * keitairc 1.31: $B?7$7$$(BPOE$B$N5/F0%a%=%C%I$KBP1~(B + irc$B%5!<%P$+$i@ZCG$5$l$?:]$K:F@\B3$9$k$h$&$K$7$?(B + Jcode$B%Q%C%1!<%8$NMxMQ$r$d$a!"(BUnicode::Japanese$B$K@Z$jBX$((B + daemon$B2=$7$F5/F0$5$;$k%*%W%7%g%s$rDI2C!#(BProc::Daemon$B$rMxMQ(B + $B%G%U%)%k%H$N@_Dj%U%!%$%k$,B8:_$7$J$$;~%o!<%K%s%0$r=P$5$J$$$h$&$K$7$?(B + $B%9%i%C%7%e$G=*$o$C$F$$$k(BURL$B$K@5$7$/%j%s%/$9$k$h$&$K$7$?(B + $B0lHL%V%i%&%68~$1(BURL$B$K!V%]%1%C%H$O$F$J!W$r2p$7$F%"%/%;%9$9$k%j%s%/$r(B + $BIU$1$k$h$&$K$7$?(B + Google Wireless Transcoder$B$r2p$7$F%"%/%;%9$9$k%j%s%/$OGQ;_$7$?(B + 2006-08-03 Jun Morimoto * keitairc 1.30: Google Wireless Transcoder $B$r2p$7$?%j%s%/$rDI2C(B diff --git a/doc/changes.html b/doc/changes.html index 1f3bfa2..a19c93b 100644 --- a/doc/changes.html +++ b/doc/changes.html @@ -1,152 +1,217 @@ - -keitairc: Êѹ¹ÍúÎò - - - - - -

keitairc: Êѹ¹ÍúÎò

- -

- ¥È¥Ã¥×¥Ú¡¼¥¸ | - ¥é¥¤¥»¥ó¥¹ | - Æ°ºî´Ä¶­ | - ¥¤¥ó¥¹¥È¡¼¥ë | - »È¤¤Êý | - ³«È¯ | - ¥»¥­¥å¥ê¥Æ¥£ | - FAQ | - Êѹ¹ÍúÎò -

- -
- -
1.30 -
³°ÉôURL¤Ø¤Î¥ê¥ó¥¯¤Ë¡¢Google Wireless Transcoder ¤ò²ð¤·¤¿¥ê¥ó¥¯¤òÄɲÃ
-³°ÉôURL¤Ø¤Î¥ê¥ó¥¯¤Ë¡¢au·ÈÂӤΡÖPC¥µ¥¤¥È¥Ó¥å¡¼¥¢¡¼¡×¤ò²ð¤·¤¿¥ê¥ó¥¯¤òÄɲà -(thanks to ¤¤¤·¤«¤ï¤à¤Ä¤ß»á) - -
1.29 -
topic°ìÍ÷Äɲà - -
1.28 -
AirH" Phone¤Ê¤ÉCookieÂбþüËö¤Î¤¿¤á¤Ë¡¢CookieÂбþ¤·¤Þ¤·¤¿¡£ -°ìÅ٥桼¥¶Ì¾¡¢¥Ñ¥¹¥ï¡¼¥Éǧ¾Ú¤ò¹Ô¤Ê¤¨¤Ð¡¢Cookie¤Ëµ­²±¤µ¤ì¤ë¤Î¤Ç¡¢ -¼¡¤«¤é¤Ï¥æ¡¼¥¶Ì¾¡¢¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤»¤ó¡£ -~/.keitairc¤Ëuse_cookie = yes¤ÎÄɲä¬É¬ÍפǤ¹¡£ -(thanks to -http://naimune.com/keitairc/: -¤Ò¤Á¤µ¤È¤¸¤å¤ó»á) - -
1.27 -
̤ÆɥХåե¡¤Î°·¤¤¤¬¤ª¤«¤·¤«¤Ã¤¿ - -
1.26 -
¤Þ¤È¤áÆɤߤ«¤é¡¢ÆüËܸì¤äÂçʸ»ú±Ñʸ»ú¤ÎÆþ¤Ã¤¿¥Á¥ã¥Í¥ë̾¤Ë°ÜÆ°¤·¤Æȯ¸À¤¹¤ë¤È¡¢ -¾¿Í¤â´¬¤­¹þ¤ó¤Ç¤ª¤«¤·¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¤Î¤ò½¤Àµ
-̤ÆɹԿôɽ¼¨¤¬¤ª¤«¤·¤«¤Ã¤¿¤Î¤ò½¤Àµ - -
1.25 -
Á´¥Á¥ã¥Í¥ë¤Î̤ÆɤޤȤáÆɤßÄɲà - -
1.23 -
¥Á¥ã¥Í¥ë̾¤ÎÆâÉô½èÍý¤Ï¾®Ê¸»ú¤ËÀµµ¬²½¤·¤Æ°·¤¦ (thanks to Akira Yamada) - -
1.22 -
ezweb üËö¤Î subscriber ID ¤òÍøÍѤ·¤¿Ç§¾Ú¤ËÂбþ (thanks to Takuo KITAME) - -
1.21 -
CTCP ACTION ¤ËÂбþ (thanks to Akira Tagoh)
- Ϣ³¤·¤¿ HTML ¥¨¥¹¥±¡¼¥×¤¬¤Ç¤­¤Æ¤¤¤Ê¤«¤Ã¤¿¤Î¤ò½¤Àµ - -
1.20 -
madoka ¤Ë¤Ä¤Ê¤¤¤Ç»È¤¦¤È¡¢Ã¯¤«¤¬ JOIN ¤¹¤ë¤È - channel ¤¬Áý¤¨¤¿¤è¤¦¤Ë¸«¤¨¤ë¸½¾Ý¤ò²óÈò
- (thanks to ¾¾°æ¤µ¤ó <matsui at iij-mc.co.jp>) - -
1.19 -
¥Á¥ã¥Í¥ë¥ê¥¹¥È¤Îȯ¸À¿ôɽ¼¨¤¬¤ª¤«¤·¤¤¤³¤È¤¬¤¢¤Ã¤¿
- foo@bar ·Á¼°¤ò mailto ¥ê¥ó¥¯¤Ë¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿
- https:// ·Á¼°¤â¥ê¥ó¥¯¤Ë
- 狼¤¬ channel ¤«¤éÈ´¤±¤¿¤È¤­¤Î¥á¥Ã¥»¡¼¥¸¤ò½ñ¼°Êѹ¹
- 狼¤¬ channel ¤Ë join ¤·¤Æ¤­¤¿¤È¤­¤Ë¥á¥Ã¥»¡¼¥¸¤òÄɲà - -
1.18 -
jis ¤Î¥Á¥ã¥Í¥ë̾¤ò uri escape ¤·¤Æ°ú¿ô¤ËÅϤ¹¤È WAP ¥²¡¼¥È¥¦¥§¥¤¤¬ - ¾¡¼ê¤Ë unescape ¤·¤Æ¤·¤Þ¤¤¡¢xhtml üËö¤Ç¥Á¥ã¥Í¥ë̾¤Î¼õ¤±ÅϤ·¤¬¤ª¤« - ¤·¤¯¤Ê¤ë¤Î¤Ç¡¢¤¤¤Á¤¤¤Á uri_unescape() ¤·¤¿¤â¤Î¤ò uri_escape() ¤¹¤ë - ¤è¤¦¤ËÊѹ¹(ISHIKAWA) - -
1.17 -
ȯ¸À¸å¤Î¥Ç¥£¥Õ¥©¥ë¥È¤ÎµóÆ°¤ò¥ª¥ê¥¸¥Ê¥ë¤ÎÁ´È¯¸Àɽ¼¨¤ËÌ᤹¡£ - ̤ÆɤΤߤÎɽ¼¨¤Ë¤·¤¿¤¤»þ¤Ï .keitairc ¤Ë show_newmsgonly ¤òÀßÄê - ¤·¤Æ¤¯¤À¤µ¤¤(ISHIKAWA) - -
1.16 -
ÁêÂХѥ¹¤Ç¤Î¥ê¥ó¥¯¤¬xhtmlüËö¤Ç¤¦¤Þ¤¯µ¡Ç½¤·¤Ê¤¤¤Î - ÀäÂХѥ¹¤ËÊѹ¹ (ISHIKAWA) - -
1.15 -
xhtmlüËö¤Ç¤Î¥­¥ã¥Ã¥·¥åÍÞÀ© (ISHIKAWA) - -
1.14 -
</head>¤¬È´¤±¤Æ¤¤¤¿¤È¤³¤¬¤¢¤Ã¤¿¤Î¤ÇÁÞÆþ - (ISHIKAWA) - -
1.13 -
ºÙ¤«¤¤½¤Àµ - -
1.12 -
¾¤Î¥æ¡¼¥¶¤¬ channel ¤ò part ¤·¤¿¤È¤­¤Ë keitairc ¤Î¥Á¥ã¥Í¥ë¥ê¥¹¥È¤«¤é + + keitairc: Êѹ¹ÍúÎò + + + + + +

keitairc: Êѹ¹ÍúÎò

+ +

+ ¥È¥Ã¥×¥Ú¡¼¥¸ | + ¥é¥¤¥»¥ó¥¹ | + Æ°ºî´Ä¶­ | + ¥¤¥ó¥¹¥È¡¼¥ë | + »È¤¤Êý | + ³«È¯ | + ¥»¥­¥å¥ê¥Æ¥£ | + FAQ | + Êѹ¹ÍúÎò +

+ +
+ +
1.31
+
+ ¿·¤·¤¤POE¤Îµ¯Æ°¥á¥½¥Ã¥É¤ËÂбþ
+ irc¥µ¡¼¥Ð¤«¤éÀÚÃǤµ¤ì¤¿ºÝ¤ËºÆÀܳ¤¹¤ë¤è¤¦¤Ë¤·¤¿
+ Jcode¥Ñ¥Ã¥±¡¼¥¸¤ÎÍøÍѤò¤ä¤á¡¢Unicode::Japanese¤ËÀÚ¤êÂؤ¨
+ daemon²½¤·¤Æµ¯Æ°¤µ¤»¤ë¥ª¥×¥·¥ç¥ó¤òÄɲá£Proc::Daemon¤òÍøÍÑ
+ ¥Ç¥Õ¥©¥ë¥È¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤»þ¥ï¡¼¥Ë¥ó¥°¤ò½Ð¤µ¤Ê¤¤¤è¤¦¤Ë¤·¤¿
+ ¥¹¥é¥Ã¥·¥å¤Ç½ª¤ï¤Ã¤Æ¤¤¤ëURL¤ËÀµ¤·¤¯¥ê¥ó¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿
+ °ìÈ̥֥饦¥¶¸þ¤±URL¤Ë¡Ö¥Ý¥±¥Ã¥È¤Ï¤Æ¤Ê¡×¤ò²ð¤·¤Æ¥¢¥¯¥»¥¹¤¹¤ë¥ê¥ó¥¯¤òÉÕ¤±¤ë¤è¤¦¤Ë¤·¤¿ (Google Wireless Transcoder¤ò²ð¤·¤Æ¥¢¥¯¥»¥¹¤¹¤ë¥ê¥ó¥¯¤ÏÇÑ»ß) +
+ +
1.30
+
+ ³°ÉôURL¤Ø¤Î¥ê¥ó¥¯¤Ë¡¢Google Wireless Transcoder ¤ò²ð¤·¤¿¥ê¥ó¥¯¤òÄɲÃ
+ ³°ÉôURL¤Ø¤Î¥ê¥ó¥¯¤Ë¡¢au·ÈÂӤΡÖPC¥µ¥¤¥È¥Ó¥å¡¼¥¢¡¼¡×¤ò²ð¤·¤¿¥ê¥ó¥¯¤òÄɲà + (thanks to ¤¤¤·¤«¤ï¤à¤Ä¤ß»á) +
+ +
1.29
+
+ topic°ìÍ÷Äɲà +
+ +
1.28
+
+ AIR-EDGE Phone¤Ê¤ÉCookieÂбþüËö¤Î¤¿¤á¤Ë¡¢CookieÂбþ¤·¤Þ¤·¤¿¡£ + °ìÅ٥桼¥¶Ì¾¡¢¥Ñ¥¹¥ï¡¼¥Éǧ¾Ú¤ò¹Ô¤Ê¤¨¤Ð¡¢Cookie¤Ëµ­²±¤µ¤ì¤ë¤Î¤Ç¡¢ + ¼¡¤«¤é¤Ï¥æ¡¼¥¶Ì¾¡¢¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ¹¤ëɬÍפ¬¤¢¤ê¤Þ¤»¤ó¡£ + ~/.keitairc¤Ëuse_cookie = yes¤ÎÄɲä¬É¬ÍפǤ¹¡£ + (thanks to + http://naimune.com/keitairc/: + ¤Ò¤Á¤µ¤È¤¸¤å¤ó»á) +
+ +
1.27
+
+ ̤ÆɥХåե¡¤Î°·¤¤¤¬¤ª¤«¤·¤«¤Ã¤¿ +
+ +
1.26
+
+ ¤Þ¤È¤áÆɤߤ«¤é¡¢ÆüËܸì¤äÂçʸ»ú±Ñʸ»ú¤ÎÆþ¤Ã¤¿¥Á¥ã¥Í¥ë̾¤Ë°ÜÆ°¤·¤Æȯ¸À¤¹¤ë¤È¡¢ + ¾¿Í¤â´¬¤­¹þ¤ó¤Ç¤ª¤«¤·¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¤Î¤ò½¤Àµ
+ ̤ÆɹԿôɽ¼¨¤¬¤ª¤«¤·¤«¤Ã¤¿¤Î¤ò½¤Àµ +
+ +
1.25
+
+ Á´¥Á¥ã¥Í¥ë¤Î̤ÆɤޤȤáÆɤßÄɲà +
+ +
1.23
+
+ ¥Á¥ã¥Í¥ë̾¤ÎÆâÉô½èÍý¤Ï¾®Ê¸»ú¤ËÀµµ¬²½¤·¤Æ°·¤¦ (thanks to Akira Yamada) +
+ +
1.22
+
+ EZweb üËö¤Î subscriber ID ¤òÍøÍѤ·¤¿Ç§¾Ú¤ËÂбþ (thanks to Takuo KITAME) +
+ +
1.21
+
+ CTCP ACTION ¤ËÂбþ (thanks to Akira Tagoh)
+ Ϣ³¤·¤¿ HTML ¥¨¥¹¥±¡¼¥×¤¬¤Ç¤­¤Æ¤¤¤Ê¤«¤Ã¤¿¤Î¤ò½¤Àµ +
+ +
1.20
+
+ madoka ¤Ë¤Ä¤Ê¤¤¤Ç»È¤¦¤È¡¢Ã¯¤«¤¬ JOIN ¤¹¤ë¤È + channel ¤¬Áý¤¨¤¿¤è¤¦¤Ë¸«¤¨¤ë¸½¾Ý¤ò²óÈò
+ (thanks to ¾¾°æ¤µ¤ó <matsui at iij-mc.co.jp>) +
+ +
1.19
+
+ ¥Á¥ã¥Í¥ë¥ê¥¹¥È¤Îȯ¸À¿ôɽ¼¨¤¬¤ª¤«¤·¤¤¤³¤È¤¬¤¢¤Ã¤¿
+ foo@bar ·Á¼°¤ò mailto ¥ê¥ó¥¯¤Ë¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿
+ https:// ·Á¼°¤â¥ê¥ó¥¯¤Ë
+ 狼¤¬ channel ¤«¤éÈ´¤±¤¿¤È¤­¤Î¥á¥Ã¥»¡¼¥¸¤ò½ñ¼°Êѹ¹
+ 狼¤¬ channel ¤Ë join ¤·¤Æ¤­¤¿¤È¤­¤Ë¥á¥Ã¥»¡¼¥¸¤òÄɲà +
+ +
1.18
+
+ jis ¤Î¥Á¥ã¥Í¥ë̾¤ò uri escape ¤·¤Æ°ú¿ô¤ËÅϤ¹¤È WAP ¥²¡¼¥È¥¦¥§¥¤¤¬ + ¾¡¼ê¤Ë unescape ¤·¤Æ¤·¤Þ¤¤¡¢xhtml üËö¤Ç¥Á¥ã¥Í¥ë̾¤Î¼õ¤±ÅϤ·¤¬¤ª¤« + ¤·¤¯¤Ê¤ë¤Î¤Ç¡¢¤¤¤Á¤¤¤Á uri_unescape() ¤·¤¿¤â¤Î¤ò uri_escape() ¤¹¤ë + ¤è¤¦¤ËÊѹ¹(ISHIKAWA) +
+ +
1.17
+
+ ȯ¸À¸å¤Î¥Ç¥£¥Õ¥©¥ë¥È¤ÎµóÆ°¤ò¥ª¥ê¥¸¥Ê¥ë¤ÎÁ´È¯¸Àɽ¼¨¤ËÌ᤹¡£ + ̤ÆɤΤߤÎɽ¼¨¤Ë¤·¤¿¤¤»þ¤Ï .keitairc ¤Ë show_newmsgonly ¤òÀßÄê + ¤·¤Æ¤¯¤À¤µ¤¤(ISHIKAWA) +
+ +
1.16
+
+ ÁêÂХѥ¹¤Ç¤Î¥ê¥ó¥¯¤¬xhtmlüËö¤Ç¤¦¤Þ¤¯µ¡Ç½¤·¤Ê¤¤¤Î + ÀäÂХѥ¹¤ËÊѹ¹ (ISHIKAWA) +
+ +
1.15
+
+ xhtmlüËö¤Ç¤Î¥­¥ã¥Ã¥·¥åÍÞÀ© (ISHIKAWA) +
+ +
1.14
+
+ </head>¤¬È´¤±¤Æ¤¤¤¿¤È¤³¤¬¤¢¤Ã¤¿¤Î¤ÇÁÞÆþ + (ISHIKAWA) +
+ +
1.13
+
+ ºÙ¤«¤¤½¤Àµ +
+ +
1.12
+
+ ¾¤Î¥æ¡¼¥¶¤¬ channel ¤ò part ¤·¤¿¤È¤­¤Ë keitairc ¤Î¥Á¥ã¥Í¥ë¥ê¥¹¥È¤«¤é ¤½¤Î¥Á¥ã¥Í¥ë¤¬¾Ã¤¨¤Æ¤·¤Þ¤¦·ï¤ò½¤Àµ¡£¤É¤Î¥æ¡¼¥¶¤¬È´¤±¤¿¤«¤âɽ¼¨¡£ (thanks to Ichiro FUKUHARA <ichiro at ichiro.org>) +
-
1.11 -
̤ÆɹԿô¤ò¼¨¤¹¥ê¥ó¥¯¤ò¿·Àß(̤ÆɤΤߤòÆɤळ¤È¤¬¤Ç¤­¤ë¡£ +
1.11
+
+ ̤ÆɹԿô¤ò¼¨¤¹¥ê¥ó¥¯¤ò¿·Àß(̤ÆɤΤߤòÆɤळ¤È¤¬¤Ç¤­¤ë¡£ (̤ÆɤΤߤΥڡ¼¥¸¤«¤é¥¢¥¯¥»¥¹¥­¡¼ [5] ¤Ç¤¹¤Ù¤Æ¤òɽ¼¨) (thanks to Ichiro FUKUHARA <ichiro at ichiro.org>) +
-
1.9 -
̤ÆɹԿô¤òɽ¼¨¡£¤Þ¤Àȯ¸À¤Î¤Ê¤¤¥Á¥ã¥Í¥ë¤ËÂФ·¤Æ¤âȯ¸À²Äǽ¤Ë +
1.9
+
+ ̤ÆɹԿô¤òɽ¼¨¡£¤Þ¤Àȯ¸À¤Î¤Ê¤¤¥Á¥ã¥Í¥ë¤ËÂФ·¤Æ¤âȯ¸À²Äǽ¤Ë (thanks to Ichiro FUKUHARA <ichiro at ichiro.org>) +
-
1.8 -
10¸Ä¤á°Ê¹ß¤Î¥Á¥ã¥Í¥ë¤Ø¤Î¥ê¥ó¥¯¤¬¤ª¤«¤·¤«¤Ã¤¿
+
1.8
+
+ 10¸Ä¤á°Ê¹ß¤Î¥Á¥ã¥Í¥ë¤Ø¤Î¥ê¥ó¥¯¤¬¤ª¤«¤·¤«¤Ã¤¿
(thanks to Akira Tagoh) +
-
1.7 -
</head>¤ò½ÐÎϤ¹¤ë¤Î¤ò˺¤ì¤Æ¤¤¤Þ¤·¤¿ +
1.7
+
+ </head>¤ò½ÐÎϤ¹¤ë¤Î¤ò˺¤ì¤Æ¤¤¤Þ¤·¤¿ (thanks to ishikawa[@]netvillage.co.jp) - -
1.6 -
¥Á¥ã¥Í¥ë¤ò¸«¤Æ¤¤¤ë¾õÂ֤Υڡ¼¥¸¥¿¥¤¥È¥ë¤¬¤ª¤«¤·¤«¤Ã¤¿
- ¥½¡¼¥¹Ê¸»úÎó¤ò jis ¤Ë·è¤á¤¦¤Á¤·¤Æʸ»ú²½¤±¸º¾¯
- ProxyPass ÍÑ¤Ë web_root ¥ª¥×¥·¥ç¥óÄɲÃ
- i-mode ³¨Ê¸»ú¤Ï»È¤ï¤Ê¤¤¤³¤È¤Ë¤·¤¿ - -
1.5 -
keitairc ¤«¤é¤Îȯ¸ÀÆâÍƤ¬¼«Ê¬¤«¤é¤Ï - (keitairc ¤«¤é¤Ï) ʸ»ú²½¤±¤·¤Æ¤ß¤¨¤ë¤³¤È¤¬¤¢¤Ã¤¿¤Î¤ò½¤Àµ - -
1.4 -
join ¤·¤Æ¤¤¤¿¥Á¥ã¥Í¥ë¤ò part ¤·¤¿¤È¤­¤Ë - ¥×¥í¥°¥é¥à¤¬Ää»ß¤·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤¿¤Î¤ò½¤Àµ
- ȯ¸ÀÆâÍƤ¬¿·¤·¤¤¥Á¥ã¥Í¥ë¤«¤é¥ê¥¹¥È¥¢¥Ã¥×¤¹¤ë¤è¤¦½¤Àµ - -
1.3 -
Ⱦ³Ñ¥¹¥Ú¡¼¥¹¤¬+¤ËÊÑ´¹¤µ¤ì¤Æ¤¤¤¿¤Î¤ò½¤Àµ -
1.1 -
¸ø³« -
- - -

- -SourceForge.jp -

- - - +
+ +
1.6
+
+ ¥Á¥ã¥Í¥ë¤ò¸«¤Æ¤¤¤ë¾õÂ֤Υڡ¼¥¸¥¿¥¤¥È¥ë¤¬¤ª¤«¤·¤«¤Ã¤¿
+ ¥½¡¼¥¹Ê¸»úÎó¤ò jis ¤Ë·è¤á¤¦¤Á¤·¤Æʸ»ú²½¤±¸º¾¯
+ ProxyPass ÍÑ¤Ë web_root ¥ª¥×¥·¥ç¥óÄɲÃ
+ i¥â¡¼¥É³¨Ê¸»ú¤Ï»È¤ï¤Ê¤¤¤³¤È¤Ë¤·¤¿ +
+ +
1.5
+
+ keitairc ¤«¤é¤Îȯ¸ÀÆâÍƤ¬¼«Ê¬¤«¤é¤Ï + (keitairc ¤«¤é¤Ï) ʸ»ú²½¤±¤·¤Æ¤ß¤¨¤ë¤³¤È¤¬¤¢¤Ã¤¿¤Î¤ò½¤Àµ +
+ +
1.4
+
+ join ¤·¤Æ¤¤¤¿¥Á¥ã¥Í¥ë¤ò part ¤·¤¿¤È¤­¤Ë + ¥×¥í¥°¥é¥à¤¬Ää»ß¤·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤¿¤Î¤ò½¤Àµ
+ ȯ¸ÀÆâÍƤ¬¿·¤·¤¤¥Á¥ã¥Í¥ë¤«¤é¥ê¥¹¥È¥¢¥Ã¥×¤¹¤ë¤è¤¦½¤Àµ +
+ +
1.3
+
+ Ⱦ³Ñ¥¹¥Ú¡¼¥¹¤¬+¤ËÊÑ´¹¤µ¤ì¤Æ¤¤¤¿¤Î¤ò½¤Àµ +
+ +
1.1
+
+ ¸ø³« +
+
+ +

+ + SourceForge.jp +

+ + + diff --git a/doc/faq.html b/doc/faq.html index ae884fb..194ae24 100644 --- a/doc/faq.html +++ b/doc/faq.html @@ -1,74 +1,93 @@ - -keitairc: FAQ - - - - - -

keitairc: FAQ

- -

- ¥È¥Ã¥×¥Ú¡¼¥¸ | - ¥é¥¤¥»¥ó¥¹ | - Æ°ºî´Ä¶­ | - ¥¤¥ó¥¹¥È¡¼¥ë | - »È¤¤Êý | - ³«È¯ | - ¥»¥­¥å¥ê¥Æ¥£ | - FAQ | - Êѹ¹ÍúÎò -

- -
- -
keitairc ñÂÎ¤Ç irc server ¤ËľÀܤĤʤ¤¤Ç¤â»È¤¨¤ë¤è¤¦ - µ¡Ç½¤òÁý¤ä¤·¤Æ¤¯¤À¤µ¤¤ - -
¤½¤ì¤Ï¤ª¤½¤é¤¯»ä¤Ï¤·¤Þ¤»¤ó¡£Áê¼ê¤¬¥Ñ¥±¥Ã¥ÈÂå¤Î¤«¤«¤ë·ÈÂÓüËö¤Ê¤Î¤Ç¡¢ - µ¡Ç½¤ÏºÇ¾®¸Â¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¡£
- ¤Þ¤¿¡¢¤Þ¤È¤â¤Ë irc ¤ò¤Ä¤«¤¦¿Í¤Ê¤é plum ¤Ê¤É¤Î - pirc ¤Ïɬ¤º»È¤Ã¤Æ¤¤¤ë¤³¤È¤Ç¤·¤ç¤¦¡£
- ¤Þ¤¿¡¢keitairc ¤ò¤¤¤¯¤é³ÈÄ¥¤·¤¿¤È¤·¤Æ¤â¥Õ¥ë¥¹¥Ú¥Ã¥¯¤Ê irc ¥¯¥é¥¤¥¢¥ó¥È - ƱÅù¤Ë¤Ï·è¤·¤Æ¤Ê¤é¤Ê¤¤¤Ç¤¹¤·¡¢¤½¤¦¤¤¤¦ irc ¥¯¥é¥¤¥¢¥ó¥È¡Ö¤À¤±¡×¤Ç - irc ¥µ¡¼¥Ð¤Ë¤Ä¤Ê¤¤¤Ç¾¡É餹¤ë¤Î¤Ï¡¢¥³¥ß¥å¥Ë¥±¡¼¥·¥ç¥ó¥ß¥¹¤òʻȯ¤¹¤ë - ¤À¤±¤Ê¤ó¤¸¤ã¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ - -
Vodafone live! (J-Phone) ¤Ç»È¤¨¤ë? -
¹©Éפ¹¤ì¤Ð»È¤¨¤Þ¤¹¡£
-Vodafone live! (J-Phone) ¤Ï http://host:port/ ½ñ¼°¤¬¤Ä¤«¤¨¤Þ¤»¤ó¡£¤Ä¤Þ¤ê URL ¤Ç http port ¤ò -»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£http ¤Ï port 80 ¤ËÂФ¹¤ë¥¢¥¯¥»¥¹¤·¤«¤Ç¤­¤Þ¤»¤ó¡£ -¤«¤È¤¤¤Ã¤Æ¡¢¤¢¤ë¥Û¥¹¥È¤Î port 80 ¤ò keitairc ¤Î¤¿¤á¤Ë¶õ¤±¤Æ¤ª¤¯¡¢ -¤Ä¤Þ¤ê keitairc ÀìÍѤ˥ۥ¹¥È¤äip address¤ò1¤Ä»È¤¦¤Î¤â¤â¤Ã¤¿¤¤¤Ê¤¤¤Ç¤·¤ç¤¦¡£ -apache ¤Î mod_proxy ¤ò»È¤Ã¤Æ¡¢host:port ¤ò apache ¤¬´ÉÍý¤·¤Æ¤¤¤ë -port 80 ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤È¤³¤í¤Î web -¥³¥ó¥Æ¥ó¥Ä¥Ä¥ê¡¼¤Î¤É¤Ã¤«¤Ë°ÌÃÖ¤¹¤ë¤è¤¦¤Ë¸«¤»¤«¤±¤ë¤È¤¤¤¤¤Ç¤·¤ç¤¦¡£ -¤³¤Î¾ì¹ç¤Ï web_root ¥ª¥×¥·¥ç¥ó¤âÍøÍѤ·¤Æ¤¯¤À¤µ¤¤¡£ -ÀßÄꥵ¥ó¥×¥ë¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ - -
EZweb üËö¤Ç»È¤¨¤ë? -
ºÇ¶á¤Î xhtml ÂбþüËö¤Ê¤é»È¤¨¤Þ¤¹¡£hdml¤Î¤ßÂбþ¤ÎüËö¤Ç¤Ï¸·¤·¤¤¤Ç¤¹¡£ -keitairc 1.22 °Ê¹ß¤Ç¤Ï¡¢EZÈÖ¹æ¤Ç¤Îǧ¾Ú¤Ë¤âÂбþ¤·¤Æ¤¤¤Þ¤¹¡£
-EZÈÖ¹æ(µì¾Îsubscriber ID)¤È¤Ï¡¢EZwebüËö¤«¤éÁ÷¿®¤µ¤ì¤ë¡¢Ã¼Ëö¸ÇÍ­¤ÎID¤Ç¤¹¡£ -¡ÖEZ¥È¥Ã¥×¥á¥Ë¥å¡¼¡×¤«¤é¡ÖÎÁ¶â¡¦¿½¹þ¡¦¥¤¥ó¥Õ¥©¡×¢ª¡ÖÀßÄê¾ðÊó¡×¢ª¡ÖEZÈÖ¹æÄÌÃÎÀßÄê¡×¤«¤é¿Ê¤ó¤Ç¤¤¤¯¤È³Îǧ¤Ç¤­¤Þ¤¹¡£¤³¤ÎID¤òkeitaircÀßÄê¥Õ¥¡¥¤¥ë¤Î -au_subscriber_id¤Ë»ØÄꤷ¤Þ¤¹¡£ÅöÁ³¡¢EZÈÖ¹æÄÌÃÎÀßÄê¤Ï¡ÖÄÌÃΤ¹¤ë¡×¤Ë -ÀßÄꤷ¤Æ¤¤¤Ê¤¤¤È¤Ê¤ê¤Þ¤»¤ó¡£ -ÀßÄꥵ¥ó¥×¥ë¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ - -
UNIX¥Û¥¹¥È¤Çkeitairc¤òµ¯Æ°¤·¤¿¤Î¤Ç¤¹¤¬¡¢ -¤½¤³¤«¤é¥í¥°¥¢¥¦¥È¤¹¤ë¤Èkeitairc¤¬½ªÎ»¤·¤Æ¤·¤Þ¤¤¤Þ¤¹ -
Bourne Shell ·ÏÎó¤Î¥·¥§¥ë (sh, bash, zsh, ksh¤Ê¤É) ¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢ -¥Ç¥Õ¥©¥ë¥È¤Î¤Õ¤ë¤Þ¤¤¤Ç¤Ï¡¢ + + keitairc: FAQ + + + + + +

keitairc: FAQ

+ +

+ ¥È¥Ã¥×¥Ú¡¼¥¸ | + ¥é¥¤¥»¥ó¥¹ | + Æ°ºî´Ä¶­ | + ¥¤¥ó¥¹¥È¡¼¥ë | + »È¤¤Êý | + ³«È¯ | + ¥»¥­¥å¥ê¥Æ¥£ | + FAQ | + Êѹ¹ÍúÎò +

+ +
+ +
+ keitairc ñÂÎ¤Ç irc server ¤ËľÀܤĤʤ¤¤Ç¤â»È¤¨¤ë¤è¤¦ + µ¡Ç½¤òÁý¤ä¤·¤Æ¤¯¤À¤µ¤¤ +
+ +
+ ¤½¤ì¤Ï¤ª¤½¤é¤¯»ä¤Ï¤·¤Þ¤»¤ó¡£Áê¼ê¤¬¥Ñ¥±¥Ã¥ÈÂå¤Î¤«¤«¤ë·ÈÂÓüËö¤Ê¤Î¤Ç¡¢ + µ¡Ç½¤ÏºÇ¾®¸Â¤Ë¤·¤¿¤¤¤Î¤Ç¤¹¡£
+ ¤Þ¤¿¡¢¤Þ¤È¤â¤Ë irc ¤ò¤Ä¤«¤¦¿Í¤Ê¤é plum ¤Ê¤É¤Î + pirc ¤Ïɬ¤º»È¤Ã¤Æ¤¤¤ë¤³¤È¤Ç¤·¤ç¤¦¡£
+ ¤Þ¤¿¡¢keitairc ¤ò¤¤¤¯¤é³ÈÄ¥¤·¤¿¤È¤·¤Æ¤â¥Õ¥ë¥¹¥Ú¥Ã¥¯¤Ê irc ¥¯¥é¥¤¥¢¥ó¥È + ƱÅù¤Ë¤Ï·è¤·¤Æ¤Ê¤é¤Ê¤¤¤Ç¤¹¤·¡¢¤½¤¦¤¤¤¦ irc ¥¯¥é¥¤¥¢¥ó¥È¡Ö¤À¤±¡×¤Ç + irc ¥µ¡¼¥Ð¤Ë¤Ä¤Ê¤¤¤Ç¾¡É餹¤ë¤Î¤Ï¡¢¥³¥ß¥å¥Ë¥±¡¼¥·¥ç¥ó¥ß¥¹¤òʻȯ¤¹¤ë + ¤À¤±¤Ê¤ó¤¸¤ã¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ +
+ +
+ Softbank ·ÈÂÓ (Vodafone live!, J-Phone) ¤Ç»È¤¨¤ë? +
+ +
+ ¹©Éפ¹¤ì¤Ð»È¤¨¤Þ¤¹¡£
+ Softbank·ÈÂÓ (Vodafone live!, J-Phone) ¤ÏÄ̾ï + http://host:port/ ½ñ¼°¤¬¤Ä¤«¤¨¤Þ¤»¤ó¡£¤Ä¤Þ¤ê URL ¤Ç http port ¤ò + »ØÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£http ¤Ï port 80 ¤ËÂФ¹¤ë¥¢¥¯¥»¥¹¤·¤«¤Ç¤­¤Þ¤»¤ó¡£ + ¤«¤È¤¤¤Ã¤Æ¡¢¤¢¤ë¥Û¥¹¥È¤Î port 80 ¤ò keitairc ¤Î¤¿¤á¤Ë¶õ¤±¤Æ¤ª¤¯¡¢ + ¤Ä¤Þ¤ê keitairc ÀìÍѤ˥ۥ¹¥È¤äip address¤ò1¤Ä»È¤¦¤Î¤â¤â¤Ã¤¿¤¤¤Ê¤¤¤Ç¤·¤ç¤¦¡£ + apache ¤Î mod_proxy ¤ò»È¤Ã¤Æ¡¢host:port ¤ò apache ¤¬´ÉÍý¤·¤Æ¤¤¤ë + port 80 ¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¤È¤³¤í¤Î web + ¥³¥ó¥Æ¥ó¥Ä¥Ä¥ê¡¼¤Î¤É¤Ã¤«¤Ë°ÌÃÖ¤¹¤ë¤è¤¦¤Ë¸«¤»¤«¤±¤ë¤È¤¤¤¤¤Ç¤·¤ç¤¦¡£ + ¤³¤Î¾ì¹ç¤Ï web_root ¥ª¥×¥·¥ç¥ó¤âÍøÍѤ·¤Æ¤¯¤À¤µ¤¤¡£ + ÀßÄꥵ¥ó¥×¥ë¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ +
+ +
+ EZweb üËö¤Ç»È¤¨¤ë? +
+
+ ºÇ¶á¤Î xhtml ÂбþüËö¤Ê¤é»È¤¨¤Þ¤¹¡£HDML¤Î¤ßÂбþ¤ÎüËö¤Ç¤â¡¢ + ºÇ¶á¤ÏEZweb Gateway¤¬ + HTML¤«¤éHDML¤Ø¤ÎÊÑ´¹¤ò¤·¤Æ¤¯¤ì¤ë¤Î¤ÇÂç¾æÉפǤ·¤ç¤¦¡£
+ keitairc 1.22 °Ê¹ß¤Ç¤Ï¡¢EZÈÖ¹æ¤Ç¤Îǧ¾Ú¤Ë¤âÂбþ¤·¤Æ¤¤¤Þ¤¹¡£
+ EZÈÖ¹æ(µì¾Îsubscriber ID)¤È¤Ï¡¢EZwebüËö¤«¤éÁ÷¿®¤µ¤ì¤ë¡¢Ã¼Ëö¸ÇÍ­¤ÎID¤Ç¤¹¡£ + ¡ÖEZ¥È¥Ã¥×¥á¥Ë¥å¡¼¡×¤«¤é¡ÖÎÁ¶â¡¦¿½¹þ¡¦¥¤¥ó¥Õ¥©¡×¢ª¡ÖÀßÄê¾ðÊó¡×¢ª¡ÖEZÈÖ¹æÄÌÃÎÀßÄê¡×¤«¤é¿Ê¤ó¤Ç¤¤¤¯¤È³Îǧ¤Ç¤­¤Þ¤¹¡£¤³¤ÎID¤òkeitaircÀßÄê¥Õ¥¡¥¤¥ë¤Î + au_subscriber_id¤Ë»ØÄꤷ¤Þ¤¹¡£ÅöÁ³¡¢EZÈÖ¹æÄÌÃÎÀßÄê¤Ï¡ÖÄÌÃΤ¹¤ë¡×¤Ë + ÀßÄꤷ¤Æ¤¤¤Ê¤¤¤È¤Ê¤ê¤Þ¤»¤ó¡£ + ÀßÄꥵ¥ó¥×¥ë¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ +
+ +
+ UNIX¥Û¥¹¥È¤Çkeitairc¤òµ¯Æ°¤·¤¿¤Î¤Ç¤¹¤¬¡¢ + ¤½¤³¤«¤é¥í¥°¥¢¥¦¥È¤¹¤ë¤Èkeitairc¤¬½ªÎ»¤·¤Æ¤·¤Þ¤¤¤Þ¤¹ +
+
+ Bourne Shell ·ÏÎó¤Î¥·¥§¥ë (sh, bash, zsh, ksh¤Ê¤É) ¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢ + ¥Ç¥Õ¥©¥ë¥È¤Î¤Õ¤ë¤Þ¤¤¤Ç¤Ï¡¢
 $ ./keitairc
 
-¤È¤·¤Ækeitairc¤òµ¯Æ°¤·¡¢¤½¤Î¤Þ¤Þlogout¤·¤Æ¤·¤Þ¤¦¤È¡¢ -keitairc¤âƻϢ¤ì¤Ë½ªÎ»¤µ¤»¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£logout¸å¤âkeitairc¤òÆ°¤«¤·¤Ä¤Å¤±¤ë¤Ë¤Ï¡¢ -logout¤¹¤ëÁ°¤Ë¥·¥§¥ë¤«¤ékeitairc¥×¥í¥»¥¹¤òÀÚ¤êÎ¥¤·¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ - -

-¤â¤Ã¤È¤âÈÆÍÑÀ­¤¬¤¢¤ëÊýË¡¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ënohup¥³¥Þ¥ó¥É¤ò»È¤Ã¤Ækeitairc¤òµ¯Æ°¤¹¤ëÊýË¡¤Ç¤¹¡£ -keitairc¤Î½ÐÎϤϤ¹¤Ù¤Ænohup.out¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ËÊݸ¤µ¤ì¤Æ¤¤¤­¤Þ¤¹¡£ + ¤È¤·¤Ækeitairc¤òµ¯Æ°¤·¡¢¤½¤Î¤Þ¤Þlogout¤·¤Æ¤·¤Þ¤¦¤È¡¢ + keitairc¤âƻϢ¤ì¤Ë½ªÎ»¤µ¤»¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ + logout¸å¤âkeitairc¤òÆ°¤«¤·¤Ä¤Å¤±¤ë¤Ë¤Ï¡¢ + logout¤¹¤ëÁ°¤Ë¥·¥§¥ë¤«¤ékeitairc¥×¥í¥»¥¹¤òÀÚ¤êÎ¥¤·¤Æ¤ª¤«¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ +

+ ¤â¤Ã¤È¤âÈÆÍÑÀ­¤¬¤¢¤ëÊýË¡¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ënohup¥³¥Þ¥ó¥É¤ò»È¤Ã¤Ækeitairc¤òµ¯Æ°¤¹¤ëÊýË¡¤Ç¤¹¡£ + keitairc¤Î½ÐÎϤϤ¹¤Ù¤Ænohup.out¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ËÊݸ¤µ¤ì¤Æ¤¤¤­¤Þ¤¹¡£

 $ nohup ./keitairc
 nohup: appending output to `nohup.out'
@@ -92,9 +111,11 @@ $
 
 
¾¤Ë»È¤¨¤ëüËö¤Ï?
¿¦¶ÈÊÁ¤¢¤é¤æ¤ë¥­¥ã¥ê¥¢¤Î¤¢¤é¤æ¤ëüËö¤ò¥Æ¥¹¥È¤·¤Þ¤¹¤¬¡¢ -hdml¤·¤«°·¤¨¤Ê¤¤EZweb/EZaccessüËö¤È¤«¡¢ H" LINKüËö¤È¤¤¤Ã¤¿¤â¤Î¤ò½ü¤±¤Ð¡¢ -¤¿¤¤¤¬¤¤¤Î¥Ö¥é¥¦¥¶¥Õ¥©¥ó¤ÇÆ°¤¯¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤ï¤ì¤Þ¤¹¡£ +¤¿¤¤¤¬¤¤¤Î¥Ö¥é¥¦¥¶¥Õ¥©¥ó¤ÇÆ°¤¯¤Î¤Ç¤Ï¤Ê¤¤¤«¤È»×¤ï¤ì¤Þ¤¹¡£
+HDMLÀ¤Âå¤ÎEZweb/EZaccessüËö¤Ç¤â¡¢2006ǯ°Ê¹ß¤°¤é¤¤¤ÏEZweb Gateway¤¬HTML +¥³¥ó¥Æ¥ó¥Ä¤Ç¤â¤è¤·¤Ê¤ËÊÑ´¹¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ç¡¢ +»È¤¨¤ë¤Î¤Ç¤Ï¤Ê¤¤¤«¤È¤ª¤â¤¤¤Þ¤¹¡£
¿·µ¬¥Á¥ã¥Í¥ë¤Ë join ¤Ç¤­¤Þ¤»¤ó
keitairc ¤Ë¤Ï¿·µ¬¥Á¥ã¥Í¥ë¤Ë join ¤¹¤ëµ¡Ç½¤Ï¤¢¤ê¤Þ¤»¤ó¡£ diff --git a/doc/index.html b/doc/index.html index 3411978..42093bf 100644 --- a/doc/index.html +++ b/doc/index.html @@ -1,165 +1,171 @@ - -keitairc - - - - - - - -

keitairc

- -

-morimoto@mrmt.net
-$Id: index.html,v 1.37 2006-08-26 05:18:10 morimoto Exp $ -

- -
- -

-i-mode, EZweb, vodafone live!, AIR-EDGE Phone ¤Ê¤É¤Î¥Ö¥é¥¦¥¶¥Õ¥©¥ó¤«¤éircÁàºî¤¬¤Ç¤­¤Þ¤¹¡£ -¤â¤Á¤í¤ó¡¢¥Ñ¥½¥³¥ó¤«¤é»È¤Ã¤Æ¤¤¤¿¤À¤¤¤Æ¤âÊ̤˹½¤¤¤Þ¤»¤ó¡£ -plum ¤Ê¤É¤Î pirc (irc ¥×¥í¥­¥·) ¤ËÀܳ¤·¤Æ»È¤ï¤ì¤ë¤³¤È¤òÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£ -

- -
    -
  • ¥¢¥¯¥»¥¹¥­¡¼¤Ç·Ú²÷¤ËÁàºî
    -
  • ȯ¸ÀÃæ¤ÎÅÅÏÃÈֹ桢URL ¤Ë¤Ï¾¡¼ê¤Ë¥ê¥ó¥¯¡£
    -ÅÅÏÃÈÖ¹æ¤Ï²¡¤»¤ÐÅÅÏäǤ­¤Þ¤¹¡£
    -URL¥ê¥ó¥¯¤Ï¡¢Google Wireless Transcoder ¤ò²ð¤·¤¿±ÜÍ÷¥ê¥ó¥¯¡¢ -PC¥µ¥¤¥È¥Ó¥å¡¼¥¢¡¼¤ò²ð¤·¤¿±ÜÍ÷¥ê¥ó¥¯(au¤ÎÂбþüËö¤Î¤ß)¤âÂбþ¡£ -
  • plum ¤Î multicast.plm ¤ò»È¤Ã¤Æ¤¤¤Æ¤âÂç¾æÉס£ -
  • ¥Ñ¥¹¥ï¡¼¥Éǧ¾ÚÂбþ¡£EZwebüËö¤Ç¤ÏEZÈÖ¹æǧ¾ÚÂбþ¡£ -AIR-EDGE Phone¤Ê¤É¤Ç¤ÏCookieǧ¾Ú¤Ë¤âÂбþ¡£ -
- - -

- ¥é¥¤¥»¥ó¥¹ | - Æ°ºî´Ä¶­ | - ¥¤¥ó¥¹¥È¡¼¥ë | - »È¤¤Êý | - ³«È¯ | - ¥»¥­¥å¥ê¥Æ¥£ | - FAQ | - Êѹ¹ÍúÎò -

- -

- -SourceForge.jp -

- -
- -

¥é¥¤¥»¥ó¥¹

- -

-Copyright (c) 2003 Jun Morimoto <morimoto@mrmt.net>
-This program is covered by the GNU General Public License 2. -

- -

ºÇ¿·¥Ð¡¼¥¸¥ç¥ó

-

-keitairc 1.30¤Ç¤¹¡£
-¤è¤±¤ì¤Ð 1.31beta ¤â¤ª¤¿¤á¤·¤¯¤À¤µ¤¤¡£
-¤Á¤Ê¤ß¤Ë¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Ï¡¢Ã±¤Ë keitairc ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Î CVS rcsid ¤ò¼è¤Ã¤Æ¤¤¤ë¤À¤±¤Ç¤¹¡£ -

- -

Æ°ºî´Ä¶­

- -

-Perl 5.6 °Ê¹ß¤È¡¢°Ê²¼¤Ë¼¨¤¹ Perl ¥é¥¤¥Ö¥é¥ê¤¬Æ°ºî¤¹¤ë¥Û¥¹¥È¡£
-¤¹¤Ç¤Ë plum ¤Ê¤É¤Î pirc ¤ò»È¤Ã¤Æ¤¤¤ë¥æ¡¼¥¶¤ÎÍøÍѤò¿ä¾©¤·¤Þ¤¹¡£ -

- -

¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È

- - - - - -
¥Á¥ã¥Í¥ë°ìÍ÷ -¥Á¥ã¥Í¥ëȯ¸ÀÆâÍÆ -recent (ºÇ¶á¤Îȯ¸À¤Î¤Þ¤È¤á) -
- - -
- -

»È¤¤Êý

- -

-keitairc ¤òµ¯Æ°¤·¤Æ·ÈÂÓ¤«¤é¥¢¥¯¥»¥¹¤¹¤ë¤È¡¢ -web_username ¤È web_password ¤Ç»ØÄꤷ¤¿¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤Çǧ¾Ú¤ò¹Ô¤Ê¤Ã¤¿¤Î¤Á¡¢ -¤¤¤Þ»²²Ã¤·¤Æ¤¤¤ëÁ´¤Æ¤Î¥Á¥ã¥Í¥ë°ìÍ÷¤¬½Ð¤Þ¤¹¡£ -ȯ¸ÀÆâÍƤ¬¿·¤·¤¤¥Á¥ã¥Í¥ë¤«¤é½ç¤ËʤӤޤ¹¡£ -¥Á¥ã¥Í¥ë°ìÍ÷¤ÏÅÅÏõ¡¤Î 0 ¤ò²¡¤¹¤È¹¹¿·¤Ç¤­¤Þ¤¹¡£
-AIR-EDGE Phone¤Ê¤ÉCookieÂбþµ¡¼ï¤Ç¤Ï¡¢ -use_cookie = yes »ØÄê¤ò¤¹¤ì¤Ð¡¢Ç§¾ÚÆâÍƤò¥¯¥Ã¥­¡¼¤Ëµ­Ï¿¤¹¤ë¤³¤È¤Ç¡¢ -°Ê¹ß¤Î¥æ¡¼¥¶Ì¾¡¦¥Ñ¥¹¥ï¡¼¥Éǧ¾Ú¤ò¾Êά¤Ç¤­¤Þ¤¹¡£¥¯¥Ã¥­¡¼¤ÎÀ¸Â¸»þ´Ö¤Ï3Æü´Ö¤Ç¤¹¡£ -

- -

-¥Á¥ã¥Í¥ë¤òÁªÂò¤¹¤ë¤È¤½¤Î¥Á¥ã¥Í¥ë¤Îȯ¸ÀÆâÍƤòÆɤá¤Þ¤¹¡£ -Á°²ó keitairc ¤Ç¸«¤¿¤È¤­¤è¤ê¤â¿·¤·¤¤È¯¸À¤¬¤¿¤Þ¤Ã¤Æ¤¤¤ë¥Á¥ã¥Í¥ë¡¢ -¤Ä¤Þ¤ê̤ÆÉÆâÍƤΤ¢¤ë¥Á¥ã¥Í¥ë¤Ë¤Ï̾Á°¤Î¸å¤í¤Ë̤ÆɹԿô¥ê¥ó¥¯¤¬¤Ä¤­¤Þ¤¹¡£ -̤ÆɹԿô¥ê¥ó¥¯¤òÁªÂò¤¹¤ë¤È¡¢Ì¤ÆÉÉôʬ¤À¤±¤òÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹¡£ -̤ÆÉÉôʬ¤À¤±¤òÆɤó¤Ç¤¤¤Æ¡¢´ûÆÉÉôʬ¤â¸«¤¿¤¤¾ì¹ç¤Ï¡¢...more[5] -¤òÁªÂò¤¹¤ë¤È´ûÆÉÉôʬ¤â¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -

-¤Þ¤¿¡¢Ì¤ÆÉÆâÍƤΤ¢¤ë¥Á¥ã¥Í¥ë¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ë¾ì¹ç¤Ï¡¢ -¥Á¥ã¥Í¥ë¤Î¥ê¥¹¥È¤Ë recent ¥ê¥ó¥¯¤¬¤Ä¤­¤Þ¤¹¡£ -recent ¥ê¥ó¥¯¤Ï¡¢Ã¼Ëö¤Ë¤è¤Ã¤Æ¤Ï * ¥­¡¼¤ò²¡¤¹¤À¤±¤Ç¤â¹Ô¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ -recent ¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢Á´¥Á¥ã¥Í¥ë¤Î̤Æɤò¤Þ¤È¤áÆɤߤǤ­¤Þ¤¹¡£
-¥Á¥ã¥Í¥ë¤Î¥ê¥¹¥È¤Î topics ¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢Á´¥Á¥ã¥Í¥ë¤Î¥È¥Ô¥Ã¥¯¤ò°ìÍ÷¤Ç¤­¤Þ¤¹¡£ -topics ¥ê¥ó¥¯¤Ï¡¢Ã¼Ëö¤Ë¤è¤Ã¤Æ¤Ï * ¥­¡¼¤ò²¡¤¹¤À¤±¤Ç¤â¹Ô¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ - -

-¥Á¥ã¥Í¥ë¤Îȯ¸ÀÆâÍƤòÆɤó¤Ç¤¤¤Æ¡¢ -ȯ¸À¤·¤¿¤¤¾ì¹ç¤Ï¥Ú¡¼¥¸¤Î¤Æ¤Ã¤Ú¤ó¤Ë¤¢¤ë¥Æ¥­¥¹¥È¥¨¥ê¥¢¤Ëµ­Æþ¤·¡¢ -OK ¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ -OK ¥Ü¥¿¥ó¤Î¤«¤ï¤ê¤ËüËö¤Î 1 ¤Ç¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£ -

- -

-²¿¤â½ñ¤«¤Ê¤¤¤Ç OK ¤Þ¤¿¤Ï 1 ¤ò²¡¤¹¤È²èÌ̹¹¿·¤Ë¤Ê¤ê¤Þ¤¹¡£ -

- -

-üËö¤Î 7 ¤ò²¡¤¹¤È¥Ú¡¼¥¸ÀèƬ¤Ø¡¢ -üËö¤Î 8 ¤ò²¡¤¹¤È¥Á¥ã¥Í¥ë¤Î¥ê¥¹¥È¤Ø¡¢ -üËö¤Î 9 ¤ò²¡¤¹¤È¥Ú¡¼¥¸ËöÈø¤ËÈô¤Ó¤Þ¤¹¡£ -

- -

-¤µ¤é¤Ë¾Ü¤·¤¤µ¡Ç½¤Î»È¤¤Êý¤Ï -¥¤¥ó¥¹¥È¡¼¥ë -¤â¤´Í÷¤¯¤À¤µ¤¤¡£ -

- -

³«È¯

- -

-http://sourceforge.jp/projects/keitairc/ -¤Ë cvs ¥ê¥Ý¥¸¥È¥ê, BTS ¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£ -

- -

¥»¥­¥å¥ê¥Æ¥£

-
    -
  • use_cookie = yes ¤ÇüËö¤ËÊݸ¤µ¤ì¤ë¥¯¥Ã¥­¡¼¤ÎÆâÍÆ¤Ï -°Å¹æ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢¥¯¥Ã¥­¡¼ÆâÍƤ¬Ï³±Ì¤¹¤ë¤È¥æ¡¼¥¶Ì¾¥Ñ¥¹¥ï¡¼¥É¤âϳ±Ì¤·¤Þ¤¹¡£ -
  • ¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤Ï keitairc ¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤Ëʿʸ¤Çµ­½Ò¤µ¤ì¤Þ¤¹¡£ -
  • ¤½¤â¤½¤â¤³¤³¤ÇÁ÷¼õ¿®¤µ¤ì¤ë¥æ¡¼¥¶Ì¾¤ä¥Ñ¥¹¥ï¡¼¥É¤Ï¡¢http basic ǧ¾Ú¤Ê¤Î¤Ç¡¢ -ÄÌ¿®Ï©¤òʿʸ¤Çή¤ì¤Þ¤¹¡£ -
  • auüËö¤Ê¤É¤Ïhttp referrer¤âÁ÷¿®¤·¤Þ¤¹¤Î¤Ç¡¢keitairc¤¬É½¼¨¤¹¤ë³°Éô¥ê¥ó¥¯¤ò -¤¦¤«¤Ä¤Ë¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢¥¢¥¯¥»¥¹Âоݥµ¥¤¥È¤Ë¤Ï¤¢¤Ê¤¿¤Îkeitairc¤ÎURL¤¬¤ï¤«¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ -
- - - + + keitairc + + + + + + + +

keitairc

+ +

+ morimoto@mrmt.net
+ $Id: index.html,v 1.38 2007-09-27 22:20:01 morimoto Exp $ +

+ +
+ +

+ ¤ª¤â¤Ë·ÈÂÓüËö¤«¤é¤Î»È¤¦¤¿¤á¤Î¡¢web¥Ù¡¼¥¹¤Îirc¥¯¥é¥¤¥¢¥ó¥È¤Ç¤¹¡£
+ i¥â¡¼¥É, EZweb, Softbank, AIR-EDGE Phone ¤Ê¤É¤Î¥Ö¥é¥¦¥¶¥Õ¥©¥ó¤«¤éircÁàºî¤¬¤Ç¤­¤Þ¤¹¡£ + ¤â¤Á¤í¤ó¡¢¥Ñ¥½¥³¥ó¤«¤é»È¤Ã¤Æ¤¤¤¿¤À¤¤¤Æ¤âÊ̤˹½¤¤¤Þ¤»¤ó¡£ + plum ¤Ê¤É¤Î pirc (irc ¥×¥í¥­¥·) ¤ËÀܳ¤·¤Æ»È¤ï¤ì¤ë¤³¤È¤òÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£ +

+ +
    +
  • ¥¢¥¯¥»¥¹¥­¡¼¤Ç·Ú²÷¤ËÁàºî
    +
  • ȯ¸ÀÃæ¤ÎÅÅÏÃÈֹ桢URL ¤Ë¤Ï¾¡¼ê¤Ë¥ê¥ó¥¯¡£
    + ÅÅÏÃÈÖ¹æ¤Ï²¡¤»¤ÐÅÅÏäǤ­¤Þ¤¹¡£
    + URL¥ê¥ó¥¯¤Ï¡¢¥Ý¥±¥Ã¥È¤Ï¤Æ¤Ê¤ò²ð¤·¤¿±ÜÍ÷¥ê¥ó¥¯¡¢ + PC¥µ¥¤¥È¥Ó¥å¡¼¥¢¡¼¤ò²ð¤·¤¿±ÜÍ÷¥ê¥ó¥¯(au¤ÎÂбþüËö¤Î¤ß)¤âÂбþ¡£ +
  • plum ¤Î multicast.plm ¤ò»È¤Ã¤Æ¤¤¤Æ¤âÂç¾æÉס£ +
  • irc¥µ¡¼¥ÐºÆÀܳÂбþ¡£ +
  • ¥Ñ¥¹¥ï¡¼¥Éǧ¾ÚÂбþ¡£EZwebüËö¤Ç¤ÏEZÈÖ¹æǧ¾ÚÂбþ¡£ + AIR-EDGE Phone¤Ê¤É¤Ç¤ÏCookieǧ¾Ú¤Ë¤âÂбþ¡£ +
+ +

+ ¥é¥¤¥»¥ó¥¹ | + Æ°ºî´Ä¶­ | + ¥¤¥ó¥¹¥È¡¼¥ë | + »È¤¤Êý | + ³«È¯ | + ¥»¥­¥å¥ê¥Æ¥£ | + FAQ | + Êѹ¹ÍúÎò +

+ +

+ + SourceForge.jp +

+ +
+ +

¥é¥¤¥»¥ó¥¹

+ +

+ Copyright (c) 2003-2007 Jun Morimoto <morimoto@mrmt.net>
+ This program is covered by the GNU General Public License 2. +

+ +

ºÇ¿·¥Ð¡¼¥¸¥ç¥ó

+

+ keitairc 1.31 + (2007/9/28 ¥ê¥ê¡¼¥¹) + ¤Ç¤¹¡£
+ ¤Á¤Ê¤ß¤Ë¥Ð¡¼¥¸¥ç¥óÈÖ¹æ¤Ï¡¢Ã±¤Ë keitairc ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Î CVS rcsid ¤ò¼è¤Ã¤Æ¤¤¤ë¤À¤±¤Ç¤¹¡£ +

+ +

Æ°ºî´Ä¶­

+ +

+ ¤ª¤½¤é¤¯ Perl 5.8 °Ê¹ß¤È¡¢°Ê²¼¤Ë¼¨¤¹ Perl ¥é¥¤¥Ö¥é¥ê¤¬Æ°ºî¤¹¤ë¥Û¥¹¥È¡£
+ ¤¹¤Ç¤Ë plum ¤Ê¤É¤Î pirc ¤ò»È¤Ã¤Æ¤¤¤ë¥æ¡¼¥¶¤ÎÍøÍѤò¿ä¾©¤·¤Þ¤¹¡£ +

+ +

¥¹¥¯¥ê¡¼¥ó¥·¥ç¥Ã¥È

+ + + + + + + + + + + + +
¥Á¥ã¥Í¥ë°ìÍ÷¥Á¥ã¥Í¥ëȯ¸ÀÆâÍÆrecent (ºÇ¶á¤Îȯ¸À¤Î¤Þ¤È¤á)
+ +

»È¤¤Êý

+ +

+ keitairc ¤òµ¯Æ°¤·¤Æ·ÈÂÓ¤«¤é¥¢¥¯¥»¥¹¤¹¤ë¤È¡¢ + web_username ¤È web_password ¤Ç»ØÄꤷ¤¿¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤Çǧ¾Ú¤ò¹Ô¤Ê¤Ã¤¿¤Î¤Á¡¢ + ¤¤¤Þ»²²Ã¤·¤Æ¤¤¤ëÁ´¤Æ¤Î¥Á¥ã¥Í¥ë°ìÍ÷¤¬½Ð¤Þ¤¹¡£ + ȯ¸ÀÆâÍƤ¬¿·¤·¤¤¥Á¥ã¥Í¥ë¤«¤é½ç¤ËʤӤޤ¹¡£ + ¥Á¥ã¥Í¥ë°ìÍ÷¤ÏÅÅÏõ¡¤Î 0 ¤ò²¡¤¹¤È¹¹¿·¤Ç¤­¤Þ¤¹¡£
+ AIR-EDGE Phone¤Ê¤ÉCookieÂбþµ¡¼ï¤Ç¤Ï¡¢ + use_cookie = yes »ØÄê¤ò¤¹¤ì¤Ð¡¢Ç§¾ÚÆâÍƤò¥¯¥Ã¥­¡¼¤Ëµ­Ï¿¤¹¤ë¤³¤È¤Ç¡¢ + °Ê¹ß¤Î¥æ¡¼¥¶Ì¾¡¦¥Ñ¥¹¥ï¡¼¥Éǧ¾Ú¤ò¾Êά¤Ç¤­¤Þ¤¹¡£¥¯¥Ã¥­¡¼¤ÎÀ¸Â¸»þ´Ö¤Ï3Æü´Ö¤Ç¤¹¡£ +

+ +

+ ¥Á¥ã¥Í¥ë¤òÁªÂò¤¹¤ë¤È¤½¤Î¥Á¥ã¥Í¥ë¤Îȯ¸ÀÆâÍƤòÆɤá¤Þ¤¹¡£ + Á°²ó keitairc ¤Ç¸«¤¿¤È¤­¤è¤ê¤â¿·¤·¤¤È¯¸À¤¬¤¿¤Þ¤Ã¤Æ¤¤¤ë¥Á¥ã¥Í¥ë¡¢ + ¤Ä¤Þ¤ê̤ÆÉÆâÍƤΤ¢¤ë¥Á¥ã¥Í¥ë¤Ë¤Ï̾Á°¤Î¸å¤í¤Ë̤ÆɹԿô¥ê¥ó¥¯¤¬¤Ä¤­¤Þ¤¹¡£ + ̤ÆɹԿô¥ê¥ó¥¯¤òÁªÂò¤¹¤ë¤È¡¢Ì¤ÆÉÉôʬ¤À¤±¤òÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹¡£ + ̤ÆÉÉôʬ¤À¤±¤òÆɤó¤Ç¤¤¤Æ¡¢´ûÆÉÉôʬ¤â¸«¤¿¤¤¾ì¹ç¤Ï¡¢...more[5] + ¤òÁªÂò¤¹¤ë¤È´ûÆÉÉôʬ¤â¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

+ +

+ ¤Þ¤¿¡¢Ì¤ÆÉÆâÍƤΤ¢¤ë¥Á¥ã¥Í¥ë¤¬¤Ò¤È¤Ä¤Ç¤â¤¢¤ë¾ì¹ç¤Ï¡¢ + ¥Á¥ã¥Í¥ë¤Î¥ê¥¹¥È¤Ë recent ¥ê¥ó¥¯¤¬¤Ä¤­¤Þ¤¹¡£ + recent ¥ê¥ó¥¯¤Ï¡¢Ã¼Ëö¤Ë¤è¤Ã¤Æ¤Ï * ¥­¡¼¤ò²¡¤¹¤À¤±¤Ç¤â¹Ô¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + recent ¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢Á´¥Á¥ã¥Í¥ë¤Î̤Æɤò¤Þ¤È¤áÆɤߤǤ­¤Þ¤¹¡£
+ ¥Á¥ã¥Í¥ë¤Î¥ê¥¹¥È¤Î topics ¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢Á´¥Á¥ã¥Í¥ë¤Î¥È¥Ô¥Ã¥¯¤ò°ìÍ÷¤Ç¤­¤Þ¤¹¡£ + topics ¥ê¥ó¥¯¤Ï¡¢Ã¼Ëö¤Ë¤è¤Ã¤Æ¤Ï * ¥­¡¼¤ò²¡¤¹¤À¤±¤Ç¤â¹Ô¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

+ +

+ ¥Á¥ã¥Í¥ë¤Îȯ¸ÀÆâÍƤòÆɤó¤Ç¤¤¤Æ¡¢ + ȯ¸À¤·¤¿¤¤¾ì¹ç¤Ï¥Ú¡¼¥¸¤Î¤Æ¤Ã¤Ú¤ó¤Ë¤¢¤ë¥Æ¥­¥¹¥È¥¨¥ê¥¢¤Ëµ­Æþ¤·¡¢ + OK ¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ + OK ¥Ü¥¿¥ó¤Î¤«¤ï¤ê¤ËüËö¤Î 1 ¤Ç¤â¤«¤Þ¤¤¤Þ¤»¤ó¡£ +

+ +

+ ²¿¤â½ñ¤«¤Ê¤¤¤Ç OK ¤Þ¤¿¤Ï 1 ¤ò²¡¤¹¤È²èÌ̹¹¿·¤Ç¤¹¡£ +

+ +

+ üËö¤Î 7 ¤ò²¡¤¹¤È¥Ú¡¼¥¸ÀèƬ¤Ø¡¢ + üËö¤Î 8 ¤ò²¡¤¹¤È¥Á¥ã¥Í¥ë¤Î¥ê¥¹¥È¤Ø¡¢ + üËö¤Î 9 ¤ò²¡¤¹¤È¥Ú¡¼¥¸ËöÈø¤ËÈô¤Ó¤Þ¤¹¡£ +

+ +

+ ¤µ¤é¤Ë¾Ü¤·¤¤µ¡Ç½¤Î»È¤¤Êý¤Ï + ¥¤¥ó¥¹¥È¡¼¥ë + ¤â¤´Í÷¤¯¤À¤µ¤¤¡£ +

+ +

³«È¯

+ +

+ http://sourceforge.jp/projects/keitairc/ + ¤Ë cvs ¥ê¥Ý¥¸¥È¥ê, BTS ¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£ +

+ +

¥»¥­¥å¥ê¥Æ¥£

+
    +
  • use_cookie = yes ¤ÇüËö¤ËÊݸ¤µ¤ì¤ë¥¯¥Ã¥­¡¼¤ÎÆâÍÆ¤Ï + °Å¹æ²½¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¡¢¥¯¥Ã¥­¡¼ÆâÍƤ¬Ï³±Ì¤¹¤ë¤È¥æ¡¼¥¶Ì¾¥Ñ¥¹¥ï¡¼¥É¤âϳ±Ì¤·¤Þ¤¹¡£ +
  • ¥æ¡¼¥¶Ì¾¤È¥Ñ¥¹¥ï¡¼¥É¤Ï keitairc ¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤Ëʿʸ¤Çµ­½Ò¤µ¤ì¤Þ¤¹¡£ +
  • ¤½¤â¤½¤â¤³¤³¤ÇÁ÷¼õ¿®¤µ¤ì¤ë¥æ¡¼¥¶Ì¾¤ä¥Ñ¥¹¥ï¡¼¥É¤Ï¡¢http basic ǧ¾Ú¤Ê¤Î¤Ç¡¢ + ÄÌ¿®Ï©¤òʿʸ¤Çή¤ì¤Þ¤¹¡£ +
  • auüËö, ºÇ¶á¤ÎSoftbanküËö¤Ê¤É¤Ïhttp referrer¤âÁ÷¿®¤·¤Þ¤¹¤Î¤Ç¡¢ + keitairc¤¬É½¼¨¤¹¤ë³°Éô¥ê¥ó¥¯¤ò¤¦¤«¤Ä¤Ë¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢ + ¥¢¥¯¥»¥¹Âоݥµ¥¤¥È¤Ë¤Ï¤¢¤Ê¤¿¤Îkeitairc¤ÎURL¤¬¤ï¤«¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ +
+ + + diff --git a/doc/install.html b/doc/install.html index 4cd9ebc..a2327f5 100644 --- a/doc/install.html +++ b/doc/install.html @@ -1,45 +1,45 @@ - -keitairc: ¥¤¥ó¥¹¥È¡¼¥ë¤ÈÀßÄê - - - - - -

keitairc: ¥¤¥ó¥¹¥È¡¼¥ë¤ÈÀßÄê

- -

- ¥È¥Ã¥×¥Ú¡¼¥¸ | - ¥é¥¤¥»¥ó¥¹ | - Æ°ºî´Ä¶­ | - ¥¤¥ó¥¹¥È¡¼¥ë | - »È¤¤Êý | - ³«È¯ | - ¥»¥­¥å¥ê¥Æ¥£ | - FAQ | - Êѹ¹ÍúÎò -

- -
    -
  1. ɬÍפʥ饤¥Ö¥é¥ê¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£
    -Debian GNU/Linux 3.0 `woody' °Ê¹ß¤Ê¤é -
    apt-get install libjcode-pm-perl libpoe-component-irc-perl liburi-perl libwww-perl libappconfig-perl
    -¤Û¤«¤Î OS ¤Ê¤é¡¢Å¬µ¹¤½¤ì¤ÈƱ¤¸¤â¤Î¤òŬµ¹¥¤¥ó¥¹¥È¡¼¥ë¡£ -
  2. keitairc ¤ò¤É¤Ã¤«¤ËÃÖ¤¯¡£ -
  3. dot.keitairc ¤òÀßÄꤷ¤Æ - ~/.keitairc ¤È¤·¤ÆÃÖ¤¯¡£
    -
- -

.keitairc ¤ÎÀßÄê

- -

-°Ê²¼¤Ë¡¢keitairc ¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£ -irc.example.com ¤È¤¤¤¦ irc server ¤Ë¡¢port 6667, ¥Ñ¥¹¥ï¡¼¥É javel ¤Ç -Àܳ¤·¡¢¤½¤ÎÍͻҤò¡¢keitairc Æ°ºî¥Û¥¹¥È¤Î port 1234, -¤Ä¤Þ¤ê http://¤½¤Î¥Û¥¹¥È:1234/ ¤ËÀܳ¤·¤Æ¸«¤¿¤ê½ñ¤¤¤¿¤ê¤Ç¤­¤ë¡¢¤È¤¤¤¦ÀßÄêÎã¤Ç¤¹¡£ -·ÈÂÓüËö¤Ê¤É¤«¤é http://¤½¤Î¥Û¥¹¥È:1234/ ¤ËÀܳ¤¹¤ëºÝ¤Ë¡¢ -¥æ¡¼¥¶ID¡Öandre¡×¡¢¥Ñ¥¹¥ï¡¼¥É¡Ö2055¡×¤Ç¥¢¥¯¥»¥¹Ç§¾Ú¤·¤Þ¤¹¡£ -

+ + keitairc: ¥¤¥ó¥¹¥È¡¼¥ë¤ÈÀßÄê + + + + + +

keitairc: ¥¤¥ó¥¹¥È¡¼¥ë¤ÈÀßÄê

+ +

+ ¥È¥Ã¥×¥Ú¡¼¥¸ | + ¥é¥¤¥»¥ó¥¹ | + Æ°ºî´Ä¶­ | + ¥¤¥ó¥¹¥È¡¼¥ë | + »È¤¤Êý | + ³«È¯ | + ¥»¥­¥å¥ê¥Æ¥£ | + FAQ | + Êѹ¹ÍúÎò +

+ +
    +
  1. ɬÍפʥ饤¥Ö¥é¥ê¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£
    + Debian GNU/Linux 4.0 etch ¤Ê¤é +
    apt-get install libunicode-japanese-perl libproc-daemon-perl libpoe-component-irc-perl liburi-perl libwww-perl libappconfig-perl
    + ¤Û¤«¤Î OS ¤Ê¤é¡¢Å¬µ¹¤½¤ì¤ÈƱ¤¸¤â¤Î¤òŬµ¹¥¤¥ó¥¹¥È¡¼¥ë¡£ +
  2. keitairc ¤ò¤É¤Ã¤«¤ËÃÖ¤¯¡£ +
  3. dot.keitairc ¤òÀßÄꤷ¤Æ + ~/.keitairc ¤È¤·¤ÆÃÖ¤¯¡£
    +
+ +

.keitairc ¤ÎÀßÄê

+ +

+ °Ê²¼¤Ë¡¢keitairc ¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤ÎÎã¤ò¼¨¤·¤Þ¤¹¡£ + irc.example.com ¤È¤¤¤¦ irc server ¤Ë¡¢port 6667, ¥Ñ¥¹¥ï¡¼¥É javel ¤Ç + Àܳ¤·¡¢¤½¤ÎÍͻҤò¡¢keitairc Æ°ºî¥Û¥¹¥È¤Î port 1234, + ¤Ä¤Þ¤ê http://¤½¤Î¥Û¥¹¥È:1234/ ¤ËÀܳ¤·¤Æ¸«¤¿¤ê½ñ¤¤¤¿¤ê¤Ç¤­¤ë¡¢¤È¤¤¤¦ÀßÄêÎã¤Ç¤¹¡£ + ·ÈÂÓüËö¤Ê¤É¤«¤é http://¤½¤Î¥Û¥¹¥È:1234/ ¤ËÀܳ¤¹¤ëºÝ¤Ë¡¢ + ¥æ¡¼¥¶ID¡Öandre¡×¡¢¥Ñ¥¹¥ï¡¼¥É¡Ö2055¡×¤Ç¥¢¥¯¥»¥¹Ç§¾Ú¤·¤Þ¤¹¡£ +

 # sample ~/.keitairc
@@ -86,6 +86,16 @@ web_lines = 20
 web_username = andre
 web_password = 2055
 
+# µ¯Æ°¤·¤¿¤éfork¤·¤Ædaemon¤Ë¤Ê¤Ã¤Æ¤Û¤·¤¤
+# daemonize = yes
+# daemon²½¤·¤¿¾ì¹çpid file¤òÊݸ¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê
+# pid_dir = /var/run/
+
+# irc¥µ¡¼¥Ð¤«¤éÀÚÃǤµ¤ì¤¿¾ì¹ç¡¢ºÆÀܳ¥Á¥§¥Ã¥¯¤¹¤ë´Ö³ÖÉÿô
+# ping_delay = 30
+# irc¥µ¡¼¥Ð¤«¤éÀÚÃǤµ¤ì¤¿¾ì¹ç¡¢ºÆÀܳ¤ò»î¤ß¤ë¤Þ¤Ç¤ÎÂÔ¤ÁÉÿô
+# reconnect_delay = 10
+
 ################################################################
 # options for AIR-EDGE Phone
 ################################################################
@@ -101,14 +111,14 @@ web_password = 2055
 # au_subscriber_id = 050999999999999_mb.ezweb.ne.jp
 #
 # PC¥µ¥¤¥È¥Ó¥å¡¼¥¢¡¼¤ò²ð¤·¤¿URL¥ê¥ó¥¯¤âɽ¼¨¤·¤Þ¤¹(Âбþµ¡¼ï¤Î¤ß)
-# au_pcsv = 1
+# au_pcsv = yes
 
 ################################################################
-# options for Vodafone live!
+# options for Softbank Mobile
 ################################################################
-# ¤â¤· Vodafone live! (J-Phone) ¤Ê¤É¤Î http port ¤ò»ØÄê¤Ç¤­¤Ê¤¤Ã¼Ëö¤Ç¡¢port 80 ¤ò
-# ÀêÍ­¤»¤º keitairc ¤ò»È¤¤¤¿¤¤¤Ê¤é¡¢¤¿¤È¤¨¤Ð keitairc ¤ò port 8765 ¤Ç
-# Ω¤Á¤¢¤²¡¢apache ¤Î httpd.conf ¤Î
+# ¤â¤· Softbank (Vodafone live!, J-Phone) ¤Ê¤É¤Î http port ¤ò»ØÄê¤Ç¤­¤Ê
+# ¤¤Ã¼Ëö¤Ç¡¢port 80 ¤ò# ÀêÍ­¤»¤º keitairc ¤ò»È¤¤¤¿¤¤¤Ê¤é¡¢¤¿¤È¤¨¤Ð
+# keitairc ¤ò port 8765 ¤ÇΩ¤Á¤¢¤²¡¢apache ¤Î httpd.conf ¤Î
 #   ProxyPass /irc/ http://your.host.com:8765/
 # ¤È¤·¡¢
 #   http://your.host.com/irc/
@@ -126,12 +136,12 @@ web_password = 2055
   ~/.keitairc ¤ÎÀßÄêÆâÍƤè¤ê¤âµ¯Æ°»þ¥ª¥×¥·¥ç¥ó¤ÎÀßÄêÆâÍƤ¬Í¥À褵¤ì¤Þ¤¹¡£
 

-

- -SourceForge.jp -

+

+ + SourceForge.jp +

- - + + diff --git a/keitairc b/keitairc index d51379d..85e67c0 100755 --- a/keitairc +++ b/keitairc @@ -1,328 +1,423 @@ #!/usr/bin/perl # keitairc -# $Id: keitairc,v 1.30 2006-08-03 07:19:47 morimoto Exp $ +# $Id: keitairc,v 1.31 2007-09-27 22:20:01 morimoto Exp $ # -# Copyright (c) Jun Morimoto +# Copyright (c) 2003-2007 Jun Morimoto # This program is covered by the GNU General Public License 2 # -# Depends: libjcode-pm-perl, libpoe-component-irc-perl, -# liburi-perl, libwww-perl, libappconfig-perl +# Depends: libunicode-japanese-perl, libpoe-component-irc-perl, +# liburi-perl, libwww-perl, libappconfig-perl, libproc-daemon-perl -my $rcsid = q$Id: keitairc,v 1.30 2006-08-03 07:19:47 morimoto Exp $; +my $rcsid = q$Id: keitairc,v 1.31 2007-09-27 22:20:01 morimoto Exp $; my ($version) = $rcsid =~ m#,v ([0-9.]+)#; use strict; -use Jcode; +use Unicode::Japanese; use POE; use POE::Component::Server::TCP; use POE::Filter::HTTPD; use POE::Component::IRC; use URI::Escape; use HTTP::Response; +use Proc::Daemon; use AppConfig qw(:argcount); use constant true => 1; use constant false => 0; -use constant cookie_ttl => 86400*3; # 3 days +use constant cookie_ttl => 86400 * 3; # 3 days + +our $config = AppConfig->new( + { + CASE => 1, + GLOBAL => { + ARGCOUNT => ARGCOUNT_ONE, + } + }, + qw(irc_nick irc_username irc_desc + irc_server irc_port irc_password + au_subscriber_id au_pcsv use_cookie + web_port web_title web_lines web_root + web_username web_password show_newmsgonly + ping_delay reconnect_delay + daemonize pid_dir) +); + +$config->ping_delay(30); +$config->reconnect_delay(10); + +if(defined $ARGV[0] && -e $ARGV[0]){ + try_config($ARGV[0]); + shift(@ARGV); +}else{ + try_config('/etc/keitairc'); + try_config($ENV{HOME} . '/.keitairc'); +} -my $config = AppConfig->new( - { - CASE => 1, - GLOBAL => { - ARGCOUNT => ARGCOUNT_ONE, - } - }, - qw(irc_nick irc_username irc_desc - irc_server irc_port irc_password - au_subscriber_id au_pcsv use_cookie - web_port web_title web_lines web_root - web_username web_password show_newmsgonly) - ); - -$config->file('/etc/keitairc'); -$config->file($ENV{'HOME'} . '/.keitairc'); $config->args; -my $docroot = '/'; +if(defined $config->daemonize){ + Proc::Daemon::Init; + if (defined $config->pid_dir) { + if (open(PID, '> ' . $config->pid_dir . '/keitairc.pid')) { + print PID $$, "\n"; + close(PID); + } + } +} + +our $docroot = '/'; if(defined $config->web_root){ - $docroot = $config->web_root; + $docroot = $config->web_root; } # join $B$7$F$$$k%A%c%M%k$NL>>N$r5-O?$9$k%O%C%7%e(B -my %channel_name; +# $BJ8;zNs$O(Bjis$B$GJ]B8$5$l$F$$$k$N$GCm0U(B +our %channel_name; # join $B$7$F$$$k%A%c%M%k$NL>>N$r5-O?$9$k%O%C%7%e(B -my %topic; +# $BJ8;zNs$O(Bjis$B$GJ]B8$5$l$F$$$k$N$GCm0U(B +our %channel_topic; # $B%A%c%M%k$N2qOCFbMF$r5-O?$9$k%O%C%7%e(B -my (%channel_buffer, %channel_recent); +# $BJ8;zNs$O(Beuc$B$GJ]B8$5$l$F$$$k$N$GCm0U(B +our (%channel_buffer, %channel_recent); # $B3F%A%c%M%k$N:G=*%"%/%;%9;~9o!":G?7H/8@;~9o(B -my %mtime; +our %channel_mtime; # unread lines -my %unread_lines; +# $BJ8;zNs$O(Beuc$B$GJ]B8$5$l$F$$$k$N$GCm0U(B +our %unread_lines; # chk -my ($message_added); +our $message_added; +our $connected = false, # irc component -POE::Component::IRC->new('keitairc'); -POE::Session->new( - _start => \&on_irc_start, - irc_join => \&on_irc_join, - irc_part => \&on_irc_part, - irc_public => \&on_irc_public, - irc_notice => \&on_irc_notice, - irc_topic => \&on_irc_topic, - irc_332 => \&on_irc_topicraw, - irc_ctcp_action => \&on_irc_ctcp_action, - ); +our $irc = POE::Component::IRC->spawn( + Alias => 'keitairc_irc', + Nick => $config->irc_nick, + Username => $config->irc_username, + Ircname => $config->irc_desc, + Server => $config->irc_server, + Port => $config->irc_port, + Password => $config->irc_password); +POE::Session->create( + heap => { + seen_traffic => false, + disconnect_msg => true, + }, + inline_states => { + _start => \&on_irc_start, + irc_001 => \&on_irc_001, + irc_join => \&on_irc_join, + irc_part => \&on_irc_part, + irc_public => \&on_irc_public, + irc_notice => \&on_irc_notice, + irc_topic => \&on_irc_topic, + irc_332 => \&on_irc_topicraw, + irc_ctcp_action => \&on_irc_ctcp_action, + autoping => \&do_autoping, + connect => \&do_connect, + irc_disconnected => \&on_irc_reconnect, + irc_error => \&on_irc_reconnect, + irc_socketerr => \&on_irc_reconnect + }); # web server component POE::Component::Server::TCP->new( - Alias => 'keitairc', - Port => $config->web_port, - ClientFilter => 'POE::Filter::HTTPD', - ClientInput => \&on_web_request - ); + Alias => 'keitairc', + Port => $config->web_port, + ClientFilter => 'POE::Filter::HTTPD', + ClientInput => \&on_web_request); $poe_kernel->run(); exit 0; ################################################################ +sub try_config{ + my $file = shift; + if(-e $file){ + $config->file($file); + } +} + +################################################################ sub on_irc_start{ - my $kernel = $_[KERNEL]; - $kernel->post('keitairc' => 'register' => 'all'); - $kernel->post('keitairc' => 'connect' => { - Nick => $config->irc_nick, - Username => $config->irc_username, - Ircname => $config->irc_desc, - Server => $config->irc_server, - Port => $config->irc_port, - Password => $config->irc_password - }); + $irc->yield(register => 'all'); + $irc->yield(connect => {}); +} + +################################################################ +sub on_irc_001{ + my ($kernel,$heap, $sender) = @_[KERNEL, HEAP, SENDER]; + for my $channel (sort keys %channel_name){ + &add_message($channel, undef, 'Connected to irc server!'); + } + $heap->{disconnect_msg} = true; + %channel_name = (); + $kernel->delay(autoping => $config->ping_delay); } ################################################################ sub on_irc_join{ - my ($kernel, $who, $channel) = @_[KERNEL, ARG0, ARG1]; - $who =~ s/!.*//; + my ($kernel, $heap, $who, $channel) = @_[KERNEL, HEAP, ARG0, ARG1]; + $who =~ s/!.*//; - # chop off after the gap (bug workaround of madoka) - $channel =~ s/ .*//; - my $canon_channel = &canon_name($channel); + # chop off after the gap (bug workaround of madoka) + $channel =~ s/ .*//; + my $canon_channel = canon_name($channel); - $channel_name{$canon_channel} = $channel; - unless ($who eq $config->irc_nick) { - &add_message($channel, undef, "$who joined"); - } + $channel_name{$canon_channel} = $channel; + unless ($who eq $config->irc_nick) { + add_message($channel, undef, "$who joined"); + } + $heap->{seen_traffic} = true; + $heap->{disconnect_msg} = true; + $connected = true; } ################################################################ sub on_irc_part{ - my ($kernel, $who, $channel) = @_[KERNEL, ARG0, ARG1]; - $who =~ s/!.*//; - - # chop off after the gap (bug workaround of POE::Filter::IRC) - $channel =~ s/ .*//; - my $canon_channel = &canon_name($channel); - - if ($who eq $config->irc_nick) { - delete $channel_name{$canon_channel}; - } else { - &add_message($channel, undef, "$who leaves"); - } + my ($kernel, $heap, $who, $channel) = @_[KERNEL, HEAP, ARG0, ARG1]; + $who =~ s/!.*//; + + # chop off after the gap (bug workaround of POE::Filter::IRC) + $channel =~ s/ .*//; + my $canon_channel = canon_name($channel); + + if ($who eq $config->irc_nick) { + delete $channel_name{$canon_channel}; + } else { + add_message($channel, undef, "$who leaves"); + } + $heap->{seen_traffic} = true; + $heap->{disconnect_msg} = true; } ################################################################ sub on_irc_public{ - my ($kernel, $who, $channel, $msg) = @_[KERNEL, ARG0 .. ARG2]; - $who =~ s/!.*//; - $channel = $channel->[0]; - $msg = Jcode->new($msg, 'jis')->euc; - &add_message($channel, $who, $msg); + my ($kernel, $heap, $who, $channel, $msg) = @_[KERNEL, HEAP, ARG0 .. ARG2]; + $who =~ s/!.*//; + $channel = $channel->[0]; + $msg = Unicode::Japanese->new($msg, 'jis')->euc; + add_message($channel, $who, $msg); + $heap->{seen_traffic} = true; + $heap->{disconnect_msg} = true; } ################################################################ sub on_irc_notice{ - my ($kernel, $who, $channel, $msg) = @_[KERNEL, ARG0 .. ARG2]; - $who =~ s/!.*//; - $channel = $channel->[0]; - $msg = Jcode->new($msg, 'jis')->euc; - &add_message($channel, $who, $msg); + my ($kernel, $heap, $who, $channel, $msg) = @_[KERNEL, HEAP, ARG0 .. ARG2]; + $who =~ s/!.*//; + $channel = $channel->[0]; + $msg = Unicode::Japanese->new($msg, 'jis')->euc; + add_message($channel, $who, $msg); + $heap->{seen_traffic} = true; + $heap->{disconnect_msg} = true; } ################################################################ sub on_irc_topic{ - my ($kernel, $who, $channel, $topic) = @_[KERNEL, ARG0 .. ARG2]; - $who =~ s/!.*//; - $topic = Jcode->new($topic, 'jis')->euc; - &add_message($channel, undef, "$who set topic: $topic"); - $topic{&canon_name($channel)} = $topic; + my ($kernel, $heap, $who, $channel, $topic) = @_[KERNEL, HEAP, ARG0 .. ARG2]; + $who =~ s/!.*//; + $topic = Unicode::Japanese->new($topic, 'jis')->euc; + add_message($channel, undef, "$who set topic: $topic"); + $channel_topic{canon_name($channel)} = $topic; + $heap->{seen_traffic} = true; + $heap->{disconnect_msg} = true; } ################################################################ sub on_irc_topicraw{ - my ($kernel, $raw) = @_[KERNEL, ARG1]; - my ($channel, $topic) = split(/ :/, $raw, 2); - $topic{&canon_name($channel)} = $topic; + my ($kernel, $heap, $raw) = @_[KERNEL, HEAP, ARG1]; + my ($channel, $topic) = split(/ :/, $raw, 2); + $channel_topic{canon_name($channel)} = $topic; + $heap->{seen_traffic} = true; + $heap->{disconnect_msg} = true; } ################################################################ sub on_irc_ctcp_action{ - my ($kernel, $who, $channel, $msg) = @_[KERNEL, ARG0 .. ARG2]; - $who =~ s/!.*//; - $channel = $channel->[0]; - $msg = sprintf('* %s %s', $who, Jcode->new($msg, 'jis')->euc); - &add_message($channel, '', $msg); + my ($kernel, $heap, $who, $channel, $msg) = @_[KERNEL, HEAP, ARG0 .. ARG2]; + $who =~ s/!.*//; + $channel = $channel->[0]; + $msg = sprintf('* %s %s', $who, Unicode::Japanese->new($msg, 'jis')->euc); + add_message($channel, '', $msg); + $heap->{seen_traffic} = true; + $heap->{disconnect_msg} = true; +} + +################################################################ +sub do_connect{ + my ($kernel, $heap) = @_[KERNEL, HEAP]; + $kernel->post(keitairc_irc => connect => {}); +} + +################################################################ +sub do_autoping{ + my ($kernel, $heap) = @_[KERNEL, HEAP]; + $kernel->post(keitairc_irc => time) unless $heap->{seen_traffic}; + $heap->{seen_traffic} = false; + $kernel->delay(autoping => $config->ping_delay); +} + +################################################################ +sub on_irc_reconnect{ + my ($kernel, $heap) = @_[KERNEL, HEAP]; + if ($heap->{disconnect_msg}) { + for my $channel (sort keys %channel_name){ + add_message($channel, undef, 'Disconnected from irc server, trying to reconnect...'); + } + } + $heap->{disconnect_msg} = false; + $connected = false; + $kernel->delay(connect => $config->reconnect_delay); } ################################################################ # $msg $B$O(B EUC $B$K$J$C$F$$$k$O$:(B # $channel $B$O(B jis $B$G$-$F$k$>(B sub add_message{ - my($channel, $who, $msg) = @_; - - my $message; - if(length $who){ - $message = sprintf('%s %s> %s', &now, $who, $msg); - }else{ - $message = sprintf('%s %s', &now, $msg); - } - - my $canon_channel = &canon_name($channel); - my @tmp = split("\n", $channel_buffer{$canon_channel}); - push @tmp, $message; - - my @tmp2 = split("\n", $channel_recent{$canon_channel}); - push @tmp2, $message; - - if(@tmp > $config->web_lines){ - $channel_buffer{$canon_channel} = - join("\n", splice(@tmp, -$config->web_lines)); - }else{ - $channel_buffer{$canon_channel} = join("\n", @tmp); - } - - if(@tmp2 > $config->web_lines){ - $channel_recent{$canon_channel} = - join("\n", @tmp2[1 .. $config->web_lines]); - }else{ - $channel_recent{$canon_channel} = join("\n", @tmp2); - } - - $mtime{$canon_channel} = time; - - # unread lines - $unread_lines{$canon_channel} = scalar(@tmp2); - - if($unread_lines{$canon_channel} > $config->web_lines){ - $unread_lines{$canon_channel} = $config->web_lines; - } + my($channel, $who, $msg) = @_; + + my $message; + if(length $who){ + $message = sprintf('%s %s> %s', now(), $who, $msg); + }else{ + $message = sprintf('%s %s', now(), $msg); + } + + my $canon_channel = canon_name($channel); + my @tmp = split("\n", $channel_buffer{$canon_channel}); + push @tmp, $message; + + my @tmp2 = split("\n", $channel_recent{$canon_channel}); + push @tmp2, $message; + + if(@tmp > $config->web_lines){ + $channel_buffer{$canon_channel} = + join("\n", splice(@tmp, -$config->web_lines)); + }else{ + $channel_buffer{$canon_channel} = join("\n", @tmp); + } + + if(@tmp2 > $config->web_lines){ + $channel_recent{$canon_channel} = + join("\n", @tmp2[1 .. $config->web_lines]); + }else{ + $channel_recent{$canon_channel} = join("\n", @tmp2); + } + + $channel_mtime{$canon_channel} = time; + + # unread lines + $unread_lines{$canon_channel} = scalar(@tmp2); + + if($unread_lines{$canon_channel} > $config->web_lines){ + $unread_lines{$canon_channel} = $config->web_lines; + } } ################################################################ sub now{ - my ($sec,$min,$hour) = localtime(time); - sprintf('%02d:%02d', $hour, $min); + my ($sec, $min, $hour) = localtime(time); + sprintf('%02d:%02d', $hour, $min); } ################################################################ sub escape{ - local($_) = shift; - s/&/&/g; - s/>/>/g; - s//>/g; + s/ $mtime{$a}; - }(keys(%channel_name))){ - $channel = $channel_name{$canon_channel}; + my $buf; + my $accesskey = 1; + my $channel; + + for my $canon_channel (sort { + $channel_mtime{$b} <=> $channel_mtime{$a}; + }(keys(%channel_name))){ + $channel = $channel_name{$canon_channel}; + + $buf .= label($accesskey); + + if($accesskey < 10){ + $buf .= sprintf('%s', + $accesskey, + $docroot, + uri_escape($channel), + compact_channel_name($channel)); + }else{ + $buf .= sprintf('%s', + $docroot, + uri_escape($channel), + compact_channel_name($channel)); + } - $buf .= &label($accesskey); + $accesskey++; - if($accesskey < 10){ - $buf .= sprintf('%s', - $accesskey, - $docroot, - uri_escape($channel), - &compact_channel_name($channel)); - }else{ - $buf .= sprintf('%s', - $docroot, - uri_escape($channel), - &compact_channel_name($channel)); + # $BL$FI9T?t(B + if($unread_lines{$canon_channel}){ + $buf .= sprintf(' %s', + $docroot, + uri_escape($channel), + $unread_lines{$canon_channel}); + } + $buf .= '
'; } - $accesskey++; + $buf .= qq(0 refresh list
); - # $BL$FI9T?t(B - if($unread_lines{$canon_channel}){ - $buf .= sprintf(' %s', - $docroot, - uri_escape($channel), - $unread_lines{$canon_channel}); + if(grep($unread_lines{$_}, keys %unread_lines)){ + $buf .= qq(* recent
); } - $buf .= '
'; - } - $buf .= qq(0 refresh list
); - - if(grep($unread_lines{$_}, keys %unread_lines)){ - $buf .= qq(* recent
); - } - - if(keys %topic){ - $buf .= qq(# topics
); - } + if(keys %channel_topic){ + $buf .= qq(# topics
); + } - $buf .= qq( - keitairc $version); - $buf; + $buf .= qq( - keitairc $version); + $buf; } ################################################################ # $B%A%c%M%kL>>N$rC;$+$/$9$k(B sub compact_channel_name{ - local($_) = shift; + local($_) = shift; - # #name:*.jp $B$r(B %name $B$K(B - if(s/:\*\.jp$//){ - s/^#/%/; - } + # #name:*.jp $B$r(B %name $B$K(B + if(s/:\*\.jp$//){ + s/^#/%/; + } - # $BKvHx$NC1FH$N(B @ $B$Onew($_, 'jis')->euc; } ################################################################ sub canon_name{ - local($_) = shift; - - tr/A-Z[\\]^/a-z{|}~/; - - $_; + local($_) = shift; + tr/A-Z[\\]^/a-z{|}~/; + $_; } ################################################################ @@ -333,252 +428,250 @@ sub link_url{ if(defined $config->au_pcsv && $ENV{HTTP_USER_AGENT} =~ /^KDDI-/){ push @buf, sprintf('[PCSV]', $url); } - push @buf, sprintf('[GWT]', uri_escape($url)); + push @buf, sprintf('[ph]', uri_escape($url)); join(' ', @buf); } ################################################################ sub render{ - local($_); - my @buf; + local($_); + my @buf; - my @src = (reverse(split("\n", shift)))[0 .. $config->web_lines]; + my @src = (reverse(split("\n", shift)))[0 .. $config->web_lines]; - for (@src){ - next unless defined; - next unless length; + for (@src){ + next unless defined; + next unless length; - $_ = &escape($_); + $_ = escape($_); - unless(s|\b(https?://[!-;=-\177]+)\b|link_url($1)|eg){ - unless(s|\b(www\.[!-\177]+)\b|link_url($1)|eg){ - # phone to - unless(s|\b(0\d{1,3})([-(]?)(\d{2,4})([-)]?)(\d{4})\b|$1$2$3$4$5|g){ - s|\b(\w[\w.+=-]+\@[\w.-]+[\w]\.[\w]{2,4})\b|$1|g; + unless(s|\b(https?://[/!-;=-\177]+)|link_url($1)|eg){ + unless(s|\b(www\.[/!-\177]+)|link_url($1)|eg){ + # phone to + unless(s|\b(0\d{1,3})([-(]?)(\d{2,4})([-)]?)(\d{4})\b|$1$2$3$4$5|g){ + s|\b(\w[\w.+=-]+\@[\w.-]+[\w]\.[\w]{2,4})\b|$1|g; + } + } } - } - } - s/\s+$//; - s/\s+/ /g; - push @buf, $_; - } + s/\s+$//; + s/\s+/ /g; + push @buf, $_; + } - '
' . join("\n", @buf) . '
'; + '
' . join("\n", @buf) . '
'; } ################################################################ sub on_web_request{ - my ($kernel, $heap, $request) = @_[KERNEL, HEAP, ARG0]; - - # Filter::HTTPD sometimes generates HTTP::Response objects. - # They indicate (and contain the response for) errors that occur - # while parsing the client's HTTP request. It's easiest to send - # the responses as they are and finish up. - if($request->isa('HTTP::Response')){ - $heap->{client}->put($request); - $kernel->yield('shutdown'); - return; - } - - # cookie - my $cookie_authorized; - if($config->use_cookie){ - my %cookie; - for(split(/; */, $request->header('Cookie'))){ - my ($name, $value) = split(/=/); - $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('C', hex($1))/eg; - $cookie{$name} = $value; - } - - if($cookie{username} eq $config->web_username && - $cookie{passwd} eq $config->web_password){ - $cookie_authorized = true; - } - } - - # authorization - unless($cookie_authorized){ - unless(defined($config->au_subscriber_id) && - $request->header('x-up-subno') eq $config->au_subscriber_id){ - if(defined($config->web_username)){ - unless($request->headers->authorization_basic eq - $config->web_username . ':' . $config->web_password){ - my $response = HTTP::Response->new(401); - $response->push_header(WWW_Authenticate => - qq(Basic Realm="keitairc")); - $heap->{client}->put($response); - $kernel->yield('shutdown'); - return; - } + my ($kernel, $heap, $request) = @_[KERNEL, HEAP, ARG0]; + + # Filter::HTTPD sometimes generates HTTP::Response objects. + # They indicate (and contain the response for) errors that occur + # while parsing the client's HTTP request. It's easiest to send + # the responses as they are and finish up. + if($request->isa('HTTP::Response')){ + $heap->{client}->put($request); + $kernel->yield('shutdown'); + return; + } + + # cookie + my $cookie_authorized; + if($config->use_cookie){ + my %cookie; + for(split(/; */, $request->header('Cookie'))){ + my ($name, $value) = split(/=/); + $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('C', hex($1))/eg; + $cookie{$name} = $value; + } + + if($cookie{username} eq $config->web_username && + $cookie{passwd} eq $config->web_password){ + $cookie_authorized = true; + } } - } - } - - my $uri = $request->uri; - my $content = ''; - $content .= ''; - - # POST $B$5$l$F$-$?$b$N$OH/8@(B - if($request->method =~ /POST/i){ - my $message = $request->content; - $message =~ s/^m=//; - $message =~ s/\+/ /g; - $message = uri_unescape($message); - - if(length($message)){ - $uri =~ s|^/||; - my $channel = uri_unescape($uri); - $poe_kernel->post('keitairc', - 'privmsg', - Jcode->new($channel)->jis, - Jcode->new($message)->jis); - &add_message($channel, $config->irc_nick, - Jcode->new($message)->euc); - $message_added = true; + + # authorization + unless($cookie_authorized){ + unless(defined($config->au_subscriber_id) && + $request->header('x-up-subno') eq $config->au_subscriber_id){ + if(defined($config->web_username)){ + unless($request->headers->authorization_basic eq + $config->web_username . ':' . $config->web_password){ + my $response = HTTP::Response->new(401); + $response->push_header(WWW_Authenticate => + qq(Basic Realm="keitairc")); + $heap->{client}->put($response); + $kernel->yield('shutdown'); + return; + } + } + } } - } - - # store and remove attached options from uri - my %option; - { - my @opts = split(',', $uri); - shift @opts; - grep($option{$_} = $_, @opts); - $uri =~ s/,.*//; - } - - if($uri eq '/'){ - $content .= '' . $config->web_title . ''; - $content .= ''; - $content .= ''; - - if($option{recent}){ - # recent messages on every channel - for my $canon_channel (sort keys %channel_name){ - my $channel = $channel_name{$canon_channel}; - if(length($channel) && - length($channel_recent{$canon_channel})){ - $content .= '' . Jcode->new($channel_name{$canon_channel})->euc . ''; - $content .= sprintf(' more..
', - $docroot, uri_escape($channel)); - $content .= &render($channel_recent{$canon_channel}); - $unread_lines{$canon_channel} = 0; - $channel_recent{$canon_channel} = ''; - $content .= '
'; - } + + my $uri = $request->uri; + my $content = ''; + $content .= ''; + $content .= ''; + + # POST $B$5$l$F$-$?$b$N$OH/8@(B + if($request->method =~ /POST/i){ + my $message = $request->content; + $message =~ s/^m=//; + $message =~ s/\+/ /g; + $message = uri_unescape($message); + + if(length($message)){ + $uri =~ s|^/||; + my $channel = uri_unescape($uri); + $irc->yield(privmsg => $channel => Unicode::Japanese->new($message, 'sjis')->jis); + add_message($channel, $config->irc_nick, + Unicode::Japanese->new($message, 'jis')->euc); + $message_added = true; + } } - $content .= qq(ch list[8]); - }elsif($option{topics}){ - # topic on every channel - for my $canon_channel (sort keys %channel_name){ - my $channel = $channel_name{$canon_channel}; - if(length $channel){ - $content .= sprintf(' %s
', - $docroot, uri_escape($channel), - Jcode->new($channel_name{$canon_channel})->euc); - $content .= &escape(Jcode->new($topic{$canon_channel})->euc); - $content .= '
'; - } + + # store and remove attached options from uri + my %option; + { + my @opts = split(',', $uri); + shift @opts; + grep($option{$_} = $_, @opts); + $uri =~ s/,.*//; } - $content .= qq(
ch list[8]); - }else{ - # channel list - $content .= &index_page; - } - }else{ - # channel conversation - $uri =~ s|^/||; - - # RFC 2811: - # Apart from the the requirement that the first character - # being either '&', '#', '+' or '!' (hereafter called "channel - # prefix"). The only restriction on a channel name is that it - # SHALL NOT contain any spaces (' '), a control G (^G or ASCII - # 7), a comma (',' which is used as a list item separator by - # the protocol). Also, a colon (':') is used as a delimiter - # for the channel mask. The exact syntax of a channel name is - # defined in "IRC Server Protocol" [IRC-SERVER]. - # - # so we use white space as separator character of channel name - # and command argument. - - my $channel = uri_unescape($uri); - - $content .= '' . $config->web_title . ": $channel"; - $content .= ''; - $content .= ''; - - $content .= ''; - $content .= ''; - - $content .= sprintf('
', - $docroot, uri_escape($channel)); - $content .= ''; - $content .= ''; - $content .= qq(ch list[8]
); - $content .= '
'; - - my $canon_channel = &canon_name($channel); - if(defined($channel_name{$canon_channel})){ - if(defined($channel_buffer{$canon_channel}) && - length($channel_buffer{$canon_channel})){ - $content .= ''; - if($option{recent} || - (defined($config->show_newmsgonly) && $message_added)){ - $content .= &render($channel_recent{$canon_channel}); - $content .= sprintf('more[5]', - $docroot, uri_escape($channel)); - } else { - $content .= &render($channel_buffer{$canon_channel}); + + if($uri eq '/'){ + $content .= '' . $config->web_title . ''; + $content .= ''; + $content .= ''; + + if($option{recent}){ + # recent messages on every channel + for my $canon_channel (sort keys %channel_name){ + my $channel = $channel_name{$canon_channel}; + if(length($channel) && + length($channel_recent{$canon_channel})){ + $content .= '' . Unicode::Japanese->new($channel_name{$canon_channel}, 'jis')->euc . ''; + $content .= sprintf(' more..
', + $docroot, uri_escape($channel)); + $content .= render($channel_recent{$canon_channel}); + $unread_lines{$canon_channel} = 0; + $channel_recent{$canon_channel} = ''; + $content .= '
'; + } + } + $content .= qq(ch list[8]); + }elsif($option{topics}){ + # topic on every channel + for my $canon_channel (sort keys %channel_name){ + my $channel = $channel_name{$canon_channel}; + if(length $channel){ + $content .= sprintf(' %s
', + $docroot, uri_escape($channel), + Unicode::Japanese->new($channel_name{$canon_channel}, 'jis')->euc); + $content .= escape(Unicode::Japanese->new($channel_topic{$canon_channel}, 'jis')->euc); + $content .= '
'; + } + } + $content .= qq(
ch list[8]); + }else{ + # channel list + $content .= index_page(); } - $content .= ''; - $content .= ''; - }else{ - $content .= 'no message here yet'; - } }else{ - $content .= 'no such channel'; + # channel conversation + $uri =~ s|^/||; + + # RFC 2811: + # Apart from the the requirement that the first character + # being either '&', '#', '+' or '!' (hereafter called "channel + # prefix"). The only restriction on a channel name is that it + # SHALL NOT contain any spaces (' '), a control G (^G or ASCII + # 7), a comma (',' which is used as a list item separator by + # the protocol). Also, a colon (':') is used as a delimiter + # for the channel mask. The exact syntax of a channel name is + # defined in "IRC Server Protocol" [IRC-SERVER]. + # + # so we use white space as separator character of channel name + # and command argument. + + my $channel = uri_unescape($uri); + + $content .= sprintf('%s: %s', $config->web_title, compact_channel_name($channel)); + $content .= ''; + $content .= ''; + + $content .= ''; + $content .= ''; + + $content .= sprintf('
', + $docroot, uri_escape($channel)); + $content .= ''; + $content .= ''; + $content .= qq(ch list[8]
); + $content .= '
'; + + my $canon_channel = canon_name($channel); + if(defined($channel_name{$canon_channel})){ + if(defined($channel_buffer{$canon_channel}) && + length($channel_buffer{$canon_channel})){ + $content .= ''; + if($option{recent} || + (defined($config->show_newmsgonly) && $message_added)){ + $content .= render($channel_recent{$canon_channel}); + $content .= sprintf('more[5]', + $docroot, uri_escape($channel)); + } else { + $content .= render($channel_buffer{$canon_channel}); + } + $content .= ''; + $content .= ''; + }else{ + $content .= 'no message here yet'; + } + }else{ + $content .= 'no such channel'; + } + + # clear check flags + $message_added = false; + + # clear unread counter + $unread_lines{$canon_channel} = 0; + + # clear recent messages buffer + $channel_recent{$canon_channel} = ''; } - # clear check flags - $message_added = false; - - # clear unread counter - $unread_lines{$canon_channel} = 0; - - # clear recent messages buffer - $channel_recent{$canon_channel} = ''; - } - - $content .= ''; - - my $response = HTTP::Response->new(200); - - if($config->use_cookie){ - my ($sec, $min, $hour, $mday, $mon, $year, $wday) = - localtime(time + cookie_ttl); - my $expiration = - sprintf('%.3s, %.2d-%.3s-%.4s %.2d:%.2d:%.2d', - qw(Sun Mon Tue Wed Thu Fri Sat)[$wday], - $mday, - qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[$mon], - $year + 1900, - $hour, - $min, - $sec); - $response->push_header('Set-Cookie', - sprintf("username=%s; expires=%s; \n", - $config->web_username, $expiration)); - $response->push_header('Set-Cookie', - sprintf("passwd=%s; expires=%s; \n", - $config->web_password, $expiration)); - } - - $response->push_header('Content-type', 'text/html; charset=Shift_JIS'); - $response->content(Jcode->new($content)->sjis); - $heap->{client}->put($response); - $kernel->yield('shutdown'); + $content .= ''; + + my $response = HTTP::Response->new(200); + + if($config->use_cookie){ + my ($sec, $min, $hour, $mday, $mon, $year, $wday) = + localtime(time + cookie_ttl); + my $expiration = + sprintf('%.3s, %.2d-%.3s-%.4s %.2d:%.2d:%.2d', + qw(Sun Mon Tue Wed Thu Fri Sat)[$wday], + $mday, + qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)[$mon], + $year + 1900, + $hour, + $min, + $sec); + $response->push_header('Set-Cookie', + sprintf("username=%s; expires=%s; \n", + $config->web_username, $expiration)); + $response->push_header('Set-Cookie', + sprintf("passwd=%s; expires=%s; \n", + $config->web_password, $expiration)); + } + + $response->push_header('Content-type', 'text/html; charset=Shift_JIS'); + $response->content(Unicode::Japanese->new($content, 'euc')->sjis); + $heap->{client}->put($response); + $kernel->yield('shutdown'); } __END__