]> git.netwichtig.de Git - user/henk/code/inspircd.git/blob - .inspircd.inc
Fixed weird bug where on mass join/part flood, the channel would be
[user/henk/code/inspircd.git] / .inspircd.inc
1 #!/usr/bin/perl
2 #       +------------------------------------+
3 #       | Inspire Internet Relay Chat Daemon |
4 #       +------------------------------------+
5 #
6 #  Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
7 #                       E-mail:
8 #                <brain@chatspike.net>
9 #                <Craig@chatspike.net>
10 #
11 # Written by Craig Edwards, Craig McLure, and others.
12 # This program is free but copyrighted software; see
13 #            the file COPYING for details.
14 #
15 #               I HATE PERL.. kthxbye
16 # ---------------------------------------------------
17
18 my $conffile = "@CONFIG_DIR@/inspircd.conf";
19 my $binpath = "@BINARY_DIR@";
20 my $libpath = "@LIBRARY_DIR@";
21
22 $ENV{"LD_LIBRARY_PATH"} = $ENV{"LD_LIBRARY_PATH"} . ":/usr/local/lib/mysql:/usr/lib/mysql:$libpath";
23
24 # Lets see what they want to do.. Set the variable (Cause i'm a lazy coder)
25 my $arg = $ARGV[0];
26 getpidfile();
27
28 if ($arg eq "start") { start(); exit(); }
29 if ($arg eq "debug") { debug(); exit(); }
30 if ($arg eq "stop") { stop(); exit(); }
31 if ($arg eq "status") {
32         if (getstatus() == 1) { 
33                 my $pid = getprocessid();
34                 print "InspIRCd is running (PID: $pid)\n";
35                 exit();
36         } else {
37                 print "InspIRCd is not running. (Or PID File not found)\n";
38                 exit();
39         }
40 }
41 if ($arg eq "rehash") {
42         if (getstatus() == 1) {
43                 my $pid = getprocessid();
44                 system("kill -HUP $pid >/dev/null 2>&1");
45                 print "InspIRCd rehashed.\n";
46                 exit();
47         } else {
48                 print "InspIRCd is not running. (Or PID File not found)\n";
49                 exit();
50         }
51 }
52
53 if ($arg eq "cron") {
54         if (getstatus() == 0) { start(); }
55         exit();
56 }
57
58 if ($arg eq "restart") {
59         stop();
60         start();
61         # kthxbye();
62         exit();
63 }
64
65 if ($arg eq "Cheese-Sandwich") {
66         print "Creating Cheese Sandwich..\n";
67         print "Done.\n";
68         exit();
69 }
70
71 ###
72 # If we get here.. bad / no parameters.
73 ###
74 print "Invalid Argument: $arg\n";
75 print "Usage: inspircd (start|stop|restart|rehash|status|cron)\n";
76 exit();
77
78 ###
79 # Generic Helper Functions.
80 ###
81
82 sub start {
83         # Check to see its not 'running' already.
84         if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; }
85         # If we are still alive here.. Try starting the IRCd..
86         system("$binpath/inspircd");
87         sleep 1;
88         if (getstatus() == 0) {
89                 print "InspIRCd Seemingly not started, Log follows:\n";
90                 system("tail $binpath/ircd.log");
91         } else {
92                 # We're good!
93                 return 1;
94         }
95 }
96
97 sub debug {
98         # Check to see its not 'running' already.
99         if (getstatus() == 1) { print "InspIRCd is already running.\n"; return 0; }
100         # If we are still alive here.. Try starting the IRCd..
101         system("gdb --args $binpath/inspircd -nofork -debug");
102 }
103
104
105 sub stop {
106         if (getstatus() == 0) { print "InspIRCd is not running. (Or PID File not found)\n"; return 0; }
107         # Get to here, we have something to kill.
108         my $pid = getprocessid();
109         print "Stopping InspIRCd...\n";
110         system("kill -TERM $pid >/dev/null 2>&1");
111         sleep 2;
112         if (getstatus() == 1)
113         {
114                 print "InspIRCd not dying Quietly -- Forcing Kill\n";
115                 system("kill -9 $pid >/dev/null 2>&1");
116         }
117         print "InspIRCd Stopped.\n";
118 }
119
120
121 sub getpidfile {
122         open INFILE, "<  $conffile" or die "Couldn't open $conffile\n";
123         my(@lines) = <INFILE>;
124         close INFILE;
125         chomp(@lines);
126
127         foreach $i (@lines) {
128             $i =~ s/[^=]+=\s(.*)/\1/;
129         }
130
131         my $tmp = join("",@lines);
132         $tmp =~ /<pid file=\"(\S+)\">/i;
133
134         $pidfile = $1;
135 }
136
137 sub getstatus {
138         my $pid = getprocessid();
139         if ($pid == 0) { return 0; }
140         $status = system("kill -0 $pid >/dev/null 2>&1") / 256;
141         if ($status == 0) { return 1; }
142         else { return 0; }
143 }
144
145
146 sub getprocessid {
147         my $pid;
148         open PIDFILE, "< $pidfile" or return 0;
149         while($i = <PIDFILE>)
150         {
151                 $pid = $i;
152         }
153         close PIDFILE;
154         return $pid;
155 }