| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
# $File: //depot/libOurNet/OurNet.pm $ $Author: autrijus $ |
|
2
|
|
|
|
|
|
|
# $Revision: #10 $ $Change: 2112 $ $DateTime: 2001/10/17 05:42:55 $ |
|
3
|
|
|
|
|
|
|
|
|
4
|
|
|
|
|
|
|
package OurNet; |
|
5
|
1
|
|
|
1
|
|
833
|
use 5.005; |
|
|
1
|
|
|
|
|
5
|
|
|
|
1
|
|
|
|
|
52
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
$OurNet::VERSION = '1.60'; |
|
8
|
|
|
|
|
|
|
|
|
9
|
1
|
|
|
1
|
|
6
|
use strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
284
|
|
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
=head1 NAME |
|
12
|
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
OurNet - Interface to BBS-based groupware platforms |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
=head1 SYNOPSIS |
|
16
|
|
|
|
|
|
|
|
|
17
|
|
|
|
|
|
|
# import modules automatically |
|
18
|
|
|
|
|
|
|
use OurNet qw/FuzzyIndex BBS BBSApp/; |
|
19
|
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
# the rest of code... |
|
21
|
|
|
|
|
|
|
my $BBS = OurNet::BBS->new(@ARGV); # etc |
|
22
|
|
|
|
|
|
|
|
|
23
|
|
|
|
|
|
|
=head1 MODULES |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
The B line is currently split into two distinct projects: |
|
26
|
|
|
|
|
|
|
the I and I suites, represented by the B |
|
27
|
|
|
|
|
|
|
and B on CPAN, respectively. |
|
28
|
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
Note that the old B interface is I as |
|
30
|
|
|
|
|
|
|
of OurNet v1.6. We'll work on a set of equivalent module that |
|
31
|
|
|
|
|
|
|
could work on the 1.6 series. |
|
32
|
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
Here are a run-down of distributions offered by these two bundles: |
|
34
|
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
In I distribution: |
|
36
|
|
|
|
|
|
|
|
|
37
|
|
|
|
|
|
|
BBS RmpO Component Object Model for BBS systems |
|
38
|
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
In I distribution: |
|
40
|
|
|
|
|
|
|
|
|
41
|
|
|
|
|
|
|
Sync RmpO Sync between BBS article groups |
|
42
|
|
|
|
|
|
|
|
|
43
|
|
|
|
|
|
|
In I distribution: |
|
44
|
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
BBSAgent RmpO Scriptable telnet-based virtual users |
|
46
|
|
|
|
|
|
|
|
|
47
|
|
|
|
|
|
|
In I distribution: |
|
48
|
|
|
|
|
|
|
|
|
49
|
|
|
|
|
|
|
FuzzyIndex RmcO Inverted index for double-byte charsets |
|
50
|
|
|
|
|
|
|
ChatBot RmpO Context-free interactive Q&A engine |
|
51
|
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
In I distribution: |
|
53
|
|
|
|
|
|
|
|
|
54
|
|
|
|
|
|
|
Query RmpO Perform scriptable queries via LWP |
|
55
|
|
|
|
|
|
|
Site RmpO Extract web pages via templates |
|
56
|
|
|
|
|
|
|
Template ampO Template extraction and generation |
|
57
|
|
|
|
|
|
|
WebBuilder bmpO HTML rendering for BBS-based services |
|
58
|
|
|
|
|
|
|
|
|
59
|
|
|
|
|
|
|
=head1 SCRIPTS |
|
60
|
|
|
|
|
|
|
|
|
61
|
|
|
|
|
|
|
bbsboard Internet to BBS email-post handler # BBS |
|
62
|
|
|
|
|
|
|
bbsboard Internet to BBS email-gateway handler # BBS |
|
63
|
|
|
|
|
|
|
bbscomd OurNet BBS remote access daemon # BBS |
|
64
|
|
|
|
|
|
|
ebx Elixir BBS Exchange Suite # BBSApp::Sync |
|
65
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
|
fianjmo Chat with a virtual personality # FuzzyIndex |
|
67
|
|
|
|
|
|
|
fzindex FuzzyIndex index utility # FuzzyIndex |
|
68
|
|
|
|
|
|
|
fzquery FuzzyIndex query utility # FuzzyIndex |
|
69
|
|
|
|
|
|
|
sitequery Metaseach multiple sites # Query |
|
70
|
|
|
|
|
|
|
|
|
71
|
|
|
|
|
|
|
=head1 DESCRIPTION |
|
72
|
|
|
|
|
|
|
|
|
73
|
|
|
|
|
|
|
The OurNet:* modules are interfaces to I-based groupware |
|
74
|
|
|
|
|
|
|
projects, whose platform was used in Hong Kong, China and Taiwan by |
|
75
|
|
|
|
|
|
|
est. 1 million users. Used collaboratively, they glue BBSes together |
|
76
|
|
|
|
|
|
|
to form a distributed service network, called B. |
|
77
|
|
|
|
|
|
|
|
|
78
|
|
|
|
|
|
|
This module is merely a bundle over the seperated distributions on |
|
79
|
|
|
|
|
|
|
CPAN, so please refer to each individual modules and scripts' |
|
80
|
|
|
|
|
|
|
documentation for detailed information. |
|
81
|
|
|
|
|
|
|
|
|
82
|
|
|
|
|
|
|
Please see L for further references, and |
|
83
|
|
|
|
|
|
|
binary releases for Win32 and other platforms. |
|
84
|
|
|
|
|
|
|
|
|
85
|
|
|
|
|
|
|
=head1 WHAT IS THIS TELNET-BBS THING? |
|
86
|
|
|
|
|
|
|
|
|
87
|
|
|
|
|
|
|
Below is an excerpt from Autrijus Tang's lightning talk session in |
|
88
|
|
|
|
|
|
|
TPC5, which gives a context of the OurNet development. |
|
89
|
|
|
|
|
|
|
|
|
90
|
|
|
|
|
|
|
=head2 The BBS Culture of Zh-* region |
|
91
|
|
|
|
|
|
|
|
|
92
|
|
|
|
|
|
|
I |
|
93
|
|
|
|
|
|
|
|
|
94
|
|
|
|
|
|
|
OurNet is a cross-protocol distributed network built on top of |
|
95
|
|
|
|
|
|
|
telnet-based BBS systems, which is used exclusively in the Chinese |
|
96
|
|
|
|
|
|
|
speaking world, as they never got translated back. The server code |
|
97
|
|
|
|
|
|
|
is 'the' major GPL project in these regions, and was under heavy |
|
98
|
|
|
|
|
|
|
hacking for 8+ years. |
|
99
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
I |
|
101
|
|
|
|
|
|
|
|
|
102
|
|
|
|
|
|
|
There are est. 2-3 million regular users on thousands of sites, |
|
103
|
|
|
|
|
|
|
and many of them doesn't use browser as often; some doesn't use |
|
104
|
|
|
|
|
|
|
web at all. Lots of university departments, dorms, organizations |
|
105
|
|
|
|
|
|
|
are running their own BBS sites. |
|
106
|
|
|
|
|
|
|
|
|
107
|
|
|
|
|
|
|
I |
|
108
|
|
|
|
|
|
|
|
|
109
|
|
|
|
|
|
|
So for the users, the BBS is "the Unix shell for the rest of us". It |
|
110
|
|
|
|
|
|
|
provides public access to services resembling mutt, pine, irsii, talk, |
|
111
|
|
|
|
|
|
|
write, finger, lynx (and MUD), but organized in a consistent text-based |
|
112
|
|
|
|
|
|
|
interface. |
|
113
|
|
|
|
|
|
|
|
|
114
|
|
|
|
|
|
|
People love it because it's real-time, and it perserved the 'community' |
|
115
|
|
|
|
|
|
|
flavor of the dial-up BBS era where you feel you're interacting with |
|
116
|
|
|
|
|
|
|
real people, instead of abstracted URLs and e-mails. You'll probably |
|
117
|
|
|
|
|
|
|
understand it better if you came from a dial-up BBS culture. |
|
118
|
|
|
|
|
|
|
|
|
119
|
|
|
|
|
|
|
=head2 Challanges of The Current Model |
|
120
|
|
|
|
|
|
|
|
|
121
|
|
|
|
|
|
|
I |
|
122
|
|
|
|
|
|
|
|
|
123
|
|
|
|
|
|
|
The BBS daemon code in C is comparable in size with the perl5 core, |
|
124
|
|
|
|
|
|
|
and has no clean plug-in interfaces, so things like Tamaguchi gets |
|
125
|
|
|
|
|
|
|
implemented like 20 times across 10 different forked versions. Also, |
|
126
|
|
|
|
|
|
|
there's no offline browsing, so you only gets to access your mail |
|
127
|
|
|
|
|
|
|
and usenet news when you're online. |
|
128
|
|
|
|
|
|
|
|
|
129
|
|
|
|
|
|
|
I |
|
130
|
|
|
|
|
|
|
|
|
131
|
|
|
|
|
|
|
The lack of Jabber-like presence and federated authentication presents |
|
132
|
|
|
|
|
|
|
another problem -- people have to remember twenty sets of passwords |
|
133
|
|
|
|
|
|
|
for different BBS sites, and instant message between these sites are all |
|
134
|
|
|
|
|
|
|
but impossible. Also, the only communication between BBS sites are |
|
135
|
|
|
|
|
|
|
limited to NNTP and Gopher; there's no frames, RSS, or hyperlinks at |
|
136
|
|
|
|
|
|
|
all. |
|
137
|
|
|
|
|
|
|
|
|
138
|
|
|
|
|
|
|
I |
|
139
|
|
|
|
|
|
|
|
|
140
|
|
|
|
|
|
|
Of course, sending your password over through a telnet connection |
|
141
|
|
|
|
|
|
|
is terrible, as is storing all your private mail and profiles |
|
142
|
|
|
|
|
|
|
unencrypted on server. but the real shock is because of this, |
|
143
|
|
|
|
|
|
|
governments actualy get to pass laws to say all BBS servers |
|
144
|
|
|
|
|
|
|
have to obtain real name, social security id and phone numbers |
|
145
|
|
|
|
|
|
|
for all users, and keep logs of their activities. |
|
146
|
|
|
|
|
|
|
|
|
147
|
|
|
|
|
|
|
=head2 Perl Comes to Rescue |
|
148
|
|
|
|
|
|
|
|
|
149
|
|
|
|
|
|
|
I |
|
150
|
|
|
|
|
|
|
|
|
151
|
|
|
|
|
|
|
So, about one year ago I gathered the Taipei.pm people working on |
|
152
|
|
|
|
|
|
|
gluing these isolated nodes together. One thing we tackled is |
|
153
|
|
|
|
|
|
|
the authentication model, in which your identity is just the |
|
154
|
|
|
|
|
|
|
GPG or PGP key ID, so we can get all mails one-way encrypted, |
|
155
|
|
|
|
|
|
|
etc. |
|
156
|
|
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
It couldn't rely on any keyservers since the government could |
|
158
|
|
|
|
|
|
|
monitor them, so I'm going to implement "transient mini CA" objects |
|
159
|
|
|
|
|
|
|
that basically get store-and-forwarded in FreeNet and OurNet nodes, |
|
160
|
|
|
|
|
|
|
and each server could alias those keyID into their local usernames. |
|
161
|
|
|
|
|
|
|
|
|
162
|
|
|
|
|
|
|
I |
|
163
|
|
|
|
|
|
|
|
|
164
|
|
|
|
|
|
|
So the new model is that every user installs a transient BBS server |
|
165
|
|
|
|
|
|
|
at home, which comes with a unified rendering and object model that |
|
166
|
|
|
|
|
|
|
renders queries from freenet, napster, mailbox, usenet, rss or |
|
167
|
|
|
|
|
|
|
even livejournal. We've also done a locale-enabled full-text |
|
168
|
|
|
|
|
|
|
inverted index engine that could work on all those services. |
|
169
|
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
I |
|
171
|
|
|
|
|
|
|
|
|
172
|
|
|
|
|
|
|
There's a couple CPAN modules I've developed over the past year |
|
173
|
|
|
|
|
|
|
that helped making wrappers around existing services. There's |
|
174
|
|
|
|
|
|
|
OurNet::Template, which is a subclass of the Template Toolkit, |
|
175
|
|
|
|
|
|
|
but instead of calling process() with a template file and a |
|
176
|
|
|
|
|
|
|
hash reference of parameters to produce a HTML, you can call |
|
177
|
|
|
|
|
|
|
extract() with a HTML file and template and get the parameter |
|
178
|
|
|
|
|
|
|
hash back! |
|
179
|
|
|
|
|
|
|
|
|
180
|
|
|
|
|
|
|
We're working on the much more magical generate() function, |
|
181
|
|
|
|
|
|
|
which should take a HTML file and hashref to produce the |
|
182
|
|
|
|
|
|
|
appropriate template. There are also wrappers around telnet |
|
183
|
|
|
|
|
|
|
sessions (OurNet::BBSAgent), slashcode (Slash::OurNet) and |
|
184
|
|
|
|
|
|
|
other plugins that could render syndicated data back and |
|
185
|
|
|
|
|
|
|
forth in an improved, more secure PlRPC protocol that works |
|
186
|
|
|
|
|
|
|
with tied variables. |
|
187
|
|
|
|
|
|
|
|
|
188
|
|
|
|
|
|
|
=head2 What We're Doing Next |
|
189
|
|
|
|
|
|
|
|
|
190
|
|
|
|
|
|
|
I |
|
191
|
|
|
|
|
|
|
|
|
192
|
|
|
|
|
|
|
Since it is now possible to develop bbs components in perl, |
|
193
|
|
|
|
|
|
|
we're working on a system that lets the author sign it and |
|
194
|
|
|
|
|
|
|
distribute it across OurNet, so each node could look at the |
|
195
|
|
|
|
|
|
|
source code, run it in a Safe compartment, and if they like |
|
196
|
|
|
|
|
|
|
it, they could sign it to vouch for its integrity. |
|
197
|
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
There should also be ircbot-like agents which could deserialize |
|
199
|
|
|
|
|
|
|
and walk through nodes, and do things like translating requests |
|
200
|
|
|
|
|
|
|
across heterogenous services. |
|
201
|
|
|
|
|
|
|
|
|
202
|
|
|
|
|
|
|
I |
|
203
|
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
We're contemplating about how people could use it to form |
|
205
|
|
|
|
|
|
|
trust-ring-based economy system like Mojo Nations and Advocado. |
|
206
|
|
|
|
|
|
|
Also, we have a reasonable chance to solve the Slash => NNTP |
|
207
|
|
|
|
|
|
|
problem now. |
|
208
|
|
|
|
|
|
|
|
|
209
|
|
|
|
|
|
|
I |
|
210
|
|
|
|
|
|
|
|
|
211
|
|
|
|
|
|
|
Currently we're doing i18n support and translating messages to |
|
212
|
|
|
|
|
|
|
English, and our company is sponsoring people to write related |
|
213
|
|
|
|
|
|
|
OSS packages, and users seem to like it, too. |
|
214
|
|
|
|
|
|
|
|
|
215
|
|
|
|
|
|
|
At the very least, this OurNet thing got my mom started advocating |
|
216
|
|
|
|
|
|
|
on strong crypto and online privacy, so I think it's kind of cool. |
|
217
|
|
|
|
|
|
|
|
|
218
|
|
|
|
|
|
|
=head1 CAVEATS |
|
219
|
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
The HOWTO documentation and BBSCOM API is still lacking; we'll be |
|
221
|
|
|
|
|
|
|
very grateful if anybody from the telnet BBS circle could contribute |
|
222
|
|
|
|
|
|
|
to it. |
|
223
|
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
=cut |
|
225
|
|
|
|
|
|
|
|
|
226
|
|
|
|
|
|
|
sub import { |
|
227
|
1
|
|
|
1
|
|
8
|
my $self = shift; |
|
228
|
1
|
|
|
|
|
2
|
my $package = (caller())[0]; |
|
229
|
|
|
|
|
|
|
|
|
230
|
1
|
|
|
|
|
3
|
my @failed; |
|
231
|
|
|
|
|
|
|
|
|
232
|
1
|
|
|
|
|
2
|
foreach my $module (@_) { |
|
233
|
0
|
|
|
|
|
0
|
eval("package $package; use OurNet::$module;"); |
|
234
|
|
|
|
|
|
|
|
|
235
|
0
|
0
|
|
|
|
0
|
if ($@) { |
|
236
|
0
|
|
|
|
|
0
|
warn $@; |
|
237
|
0
|
|
|
|
|
0
|
push(@failed, $module); |
|
238
|
|
|
|
|
|
|
} |
|
239
|
|
|
|
|
|
|
} |
|
240
|
|
|
|
|
|
|
|
|
241
|
1
|
50
|
|
|
|
11
|
die "could not import qw(" . join(' ', @failed) . ")" if @failed; |
|
242
|
|
|
|
|
|
|
} |
|
243
|
|
|
|
|
|
|
|
|
244
|
|
|
|
|
|
|
sub new { |
|
245
|
0
|
|
|
0
|
0
|
|
my $package = join('::', splice(@_, 0, 2)); |
|
246
|
|
|
|
|
|
|
|
|
247
|
0
|
|
|
|
|
|
eval "use $package"; |
|
248
|
0
|
0
|
|
|
|
|
die $@ if $@; |
|
249
|
|
|
|
|
|
|
|
|
250
|
0
|
|
|
|
|
|
return $package->new(@_); |
|
251
|
|
|
|
|
|
|
} |
|
252
|
|
|
|
|
|
|
|
|
253
|
|
|
|
|
|
|
=head1 AUTHORS |
|
254
|
|
|
|
|
|
|
|
|
255
|
|
|
|
|
|
|
Autrijus Tang Eautrijus@autrijus.org>, |
|
256
|
|
|
|
|
|
|
Chia-Liang Kao Eclkao@clkao.org>. |
|
257
|
|
|
|
|
|
|
|
|
258
|
|
|
|
|
|
|
=head1 COPYRIGHT |
|
259
|
|
|
|
|
|
|
|
|
260
|
|
|
|
|
|
|
Copyright 2001 by Autrijus Tang Eautrijus@autrijus.org>, |
|
261
|
|
|
|
|
|
|
Chia-Liang Kao Eclkao@clkao.org>. |
|
262
|
|
|
|
|
|
|
|
|
263
|
|
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
264
|
|
|
|
|
|
|
modify it under the same terms as Perl itself. |
|
265
|
|
|
|
|
|
|
|
|
266
|
|
|
|
|
|
|
See L |
|
267
|
|
|
|
|
|
|
|
|
268
|
|
|
|
|
|
|
=cut |