]> jfr.im git - irc/SurrealServices/srsv.git/blame - branches/erry-devel/modules/core.pm
My work on this so far....
[irc/SurrealServices/srsv.git] / branches / erry-devel / modules / core.pm
CommitLineData
5975999e 1# This file is part of SurrealServices.
2#
3# SurrealServices is free software; you can redistribute it and/or modify
4# it under the terms of the GNU General Public License as published by
5# the Free Software Foundation; either version 2 of the License, or
6# (at your option) any later version.
7#
8# SurrealServices is distributed in the hope that it will be useful,
9# but WITHOUT ANY WARRANTY; without even the implied warranty of
10# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11# GNU General Public License for more details.
12#
13# You should have received a copy of the GNU General Public License
14# along with SurrealServices; if not, write to the Free Software
15# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16package core;
17use strict;
18
19#use SrSv::Conf 'main';
20use SrSv::Conf2Consts 'main';
21use SrSv::RunLevel 'main_shutdown';
22use SrSv::IRCd::Event 'addhandler';
23use SrSv::IRCd::IO 'ircsend';
24use SrSv::Timer 'add_timer';
25use SrSv::Time 'time_rel_long_all';
26use SrSv::Agent;
27use SrSv::Process::Init; #FIXME - only needed for ccode
28use SrSv::User::Notice;
29use SrSv::Help;
30
31my $startTime = time();
32
33our %ccode; #FIXME - Split out
34proc_init {
35 open ((my $COUNTRY), main::PREFIX()."/data/country-codes.txt");
36 while(my $x = <$COUNTRY>) {
37 chomp $x;
38 my($code, $country) = split(/ /, $x);
39 $ccode{uc $code} = $country;
40 }
41 close $COUNTRY;
42};
43
44our $rsnick = 'ServServ';
2eef9154 45our $rsUser = { NICK => $rsnick, ID => ircd::getUuid($rsnick) };
5975999e 46addhandler('STATS', undef, undef, 'core::stats');
47sub stats($$) {
48 my ($src, $token) = @_;
49 if($token eq 'u') {
50 ircsend('242 '.$src.' :Server up '.time_rel_long_all($startTime),
51 '219 '.$src.' u :End of /STATS report')
52 }
53}
54
55addhandler('PING', undef, undef, 'ircd::pong', 1);
56
57sub pingtimer($) {
58 ircd::ping();
59 add_timer('perlserv__pingtimer', 60, __PACKAGE__,
60 "core::pingtimer");
61}
62
63agent_connect($rsnick, 'service', undef, '+ABHSNaopqz', 'Services Control Agent');
64agent_join($rsnick, main_conf_diag);
2eef9154 65ircd::setmode($rsUser, main_conf_diag, '+o', $rsUser );
5975999e 66
67addhandler('SEOS', undef, undef, 'core::ev_connect', 1);
68addhandler('ENDBURST', undef, undef, 'core::ev_connect', 1);
69sub ev_connect {
70 add_timer('perlserv__pingtimer', 60, __PACKAGE__,
71 "core::pingtimer");
72}
73
74addhandler('PRIVMSG', undef, 'servserv', 'core::dispatch', 1);
75
76sub dispatch {
77 print "DISPATCH CALLED\n";
78 my ($src, $dst, $msg) = @_;
2eef9154 79 my $user = { NICK => $src, AGENT => $rsnick, ID => getUuid($src) };
5975999e 80 if(!adminserv::is_ircop($user)) {
81 notice($user, 'Access Denied');
82 ircd::globops($rsnick, "\002$src\002 failed access to $rsnick $msg");
83 return;
84 }
85 if($msg =~ /^lsmod/i) {
86 notice($user, main_conf_load);
87 }
88
89 if($msg =~ /^shutdown/i) {
90 if(!adminserv::is_svsop($user, adminserv::S_ADMIN() )) {
91 notice($user, 'You do not have sufficient rank for this command');
92 return;
93 }
94
95 main_shutdown;
96 }
97 if($msg =~ /^raw/i) {
98 if(!adminserv::is_svsop($user, adminserv::S_ROOT() )) {
99 notice($user, 'You do not have sufficient rank for this command');
100 return;
101 }
102 my $cmd = $msg;
103 $cmd =~ s/raw\s+//i;
104 ircsend($cmd);
105 }
106 if($msg =~ /^help$/) {
107 sendhelp($user, lc 'core');
108 return;
109 }
110 if(main::DEBUG and $msg =~ /^eval\s+(.*)/) {
111 my $out = eval($1);
112 notice($user, split(/\n/, $out.$@));
113 }
114}
115
116sub init { }
117sub begin { }
118sub end { }
119sub unload { }
120
1211;