Add initial files from envbot v0.1-beta1

This commit is contained in:
Márcio Silva
2017-06-02 15:44:54 -03:00
commit b4830e97ae
81 changed files with 12852 additions and 0 deletions

17
doc/ConfigChanges.txt Normal file
View File

@@ -0,0 +1,17 @@
Any configuration file changes and how to update should be listed here.
Config version 17
-----------------
* Added config_log_colors
Config version 16
-----------------
* Added config_commands_private_always
* Renamed config_listenregex to config_commands_listenregex
* Renamed config_unknown_commands to config_feedback_unknown_commands.
Config version 15
-----------------
This file was added at this point. To convert from older versions to this
one, please read example config and add what is missing.

View File

@@ -0,0 +1,296 @@
#!/bin/bash
# -*- coding: utf-8 -*-
###########################################################################
# #
# envbot - an IRC bot in bash #
# Copyright (C) 2007-2008 Arvid Norlander #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
###########################################################################
# Variables marked with (*) will take effect at a rehash as well.
# What version this config is at. This is used to check
# if your config needs updating.
config_version=17
####################
# General settings #
####################
# Nick to use
config_firstnick="BOTNICK"
# Nick if first is in use
config_secondnick="BOTNICK_"
# Nick if second is in use
config_thirdnick="BOTNICK__"
config_ident='rfc3092'
config_gecos='ietf.org/rfc/rfc3092'
###################
# Server settings #
###################
# Server to use
config_server='irc.kuonet-ng.org'
# What port to use. Normally 6667 works for non SSL connections.
config_server_port='6667'
# If 1 use SSL, not all transport modules support this.
config_server_ssl=0
# Accept invalid server certificates?
# Note that some SSL modules (openssl for example) just
# print any errors and continues anyway
config_server_ssl_accept_invalid=1
# Be verbose when connecting?
# Not all SSL modules support it. The ones that doesn't
# support it will just ignore it.
# Be aware that this is mainly for debugging of SSL transport
# modules as it is possible the verbose output may confuse the bot!
config_server_ssl_verbose=0
# If not empty try to bind to this IP when connecting, useful
# to select vhost. Not all transport modules support this.
config_server_bind=""
# If this is empty don't use a server password.
config_server_passwd=""
##################
# Access control #
##################
# (*) Access regexes
# Without at least one set, the bot won't start
# "owner" is a special capab that grants all other access.
# The first access entry must be an owner.
#
# Scope is a regular expression of channels where access is effective.
# A /msg (like say to a non channel) will get the scope MSG
# Anything affecting global state will have the scope "GLOBAL"
#
# There can be several access masks matching same host (to allow
# for different scope/capab combinations).
#config_access_mask[1]='^The!owner@shellhost\.net$'
#config_access_capab[1]='owner'
#config_access_scope[1]='.*'
# Some more access examples:
#config_access_mask[2]='^Someone!whatever@customer-1234\.isp\.com$'
#config_access_capab[2]='say kick'
#config_access_scope[2]='#channel'
#config_access_mask[3]='^Someone!whatever@customer-1234\.isp\.com$'
#config_access_capab[3]='facoid_admin'
#config_access_scope[3]='GLOBAL'
############
# Commands #
############
# (*) A regular expression of prefixes we should listen to.
config_commands_listenregex="(;|${config_firstnick}[:,] )"
# (*) Should we treat any message in /msg as a command even
# if it doesn't have the the listen prefix?
config_commands_private_always=0
############
# Feedback #
############
# (*) How to treat unknown commands:
# Valid values:
# 0 = Ignore them (drop command, do nothing).
# 1 = Return error to sender.
# 2 = Pass them on to modules that may handle "generic" PRIVMSG.
# Note that non-commands always get passed on to "generic" PRIVMSG handling modules.
config_feedback_unknown_commands=1
###########
# Logging #
###########
# Directory for log files
config_log_dir="@@logdir@@"
# (*) Should we log raw data or not?
# Can be 1 (log) or 0 (don't log)
config_log_raw=0
# (*) Should we always log to STDOUT as well?
# Note that this doesn't mean it will not log at all if set to 0.
# It will still log errors and other important log messages to STDOUT.
# This is the same as --verbose.
# Can be 1 (log) or 0 (don't log)
config_log_stdout=0
# (*) When logging to STDOUT should we use colors?
config_log_colors=1
#############
# Transport #
#############
# Transport module. You should select exactly one.
# The recommended non-SSL module is dev-tcp.
# The recommended SSL module is gnutls.
config_transport='dev-tcp'
#config_transport='netcat' # Not well tested, for Debian users and other
# with broken distros.
#config_transport='gnutls'
#config_transport='socat' # Not well tested
#config_transport='openssl' # Not well tested
# netcat options
# MAKE SURE THEY ARE CORRECT if you use netcat.
#config_transport_netcat_path='/usr/bin/netcat'
# socat options
# MAKE SURE THEY ARE CORRECT if you use socat.
#
# This tells if to use IPv6 or IPv4 to connect.
# socat doesn't support automatic choice of this.
# Note that socat versions below 1.5 does not
# support using IPv6 and SSL at the same time.
# This can be either "ipv4" or "ipv6".
#config_transport_socat_protocol_family=ipv4
# Where are transports stored, this can be a relative path from the
# main script of the bot, or an absolute path.
config_transport_dir="@@transportdir@@"
###########
# Modules #
###########
# What modules to load on startup, space separated list
# For a list of modules see the modules dir.
# Note that the order of the modules may be important
#
# The list should normally start with "modules rehash services umodes autojoin"
# Some modules should be placed last. "factoids" and "karma are such modules.
config_modules="modules rehash services umodes autojoin ctcp"
# Where are modules stored, this can be a relative path from the
# main script of the bot, or an absolute path.
config_modules_dir="@@moddir@@"
############################
# Module specific settings #
############################
#####################################################################
# Services module
#
# (*) NickServ password
config_module_services_nickserv_passwd='nickserv password here'
# (*) Name of NickServ
# Normally this is correct.
config_module_services_nickserv_name='NickServ'
# (*) Service style. Supported are: generic, atheme
# For the default server (irc.kuonet-ng.org) use atheme
# Otherwise try generic, that will work with atheme too but
# some features will be disabled.
config_module_services_style='atheme'
# (*) Use server side aliases
# Try 1 first, if the bot fails to identify try 0
config_module_services_server_alias=1
#####################################################################
# FAQ module
#
# (*) Location of FAQ items.
#config_module_faq_file='@@datadir@@/faq.txt'
####################################################################
# Quote module
#
# (*) Location of quotes file
#config_module_quotes_file='@@datadir@@/quotes.txt'
#####################################################################
# AutoJoin module.
#
# Channels to autojoin on connect
config_module_autojoin_channels[1]='#channel'
# A channel can have a key as showed in the example below
config_module_autojoin_channels[2]='#otherchannel channelkey'
#####################################################################
# Umodes module.
#
# (*) Default umodes to set on connect. Also set these at a rehash.
config_module_umodes_default_umodes="+isB-w"
#####################################################################
# CTCP module
#
# (*) What to reply to VERSION requests.
config_module_ctcp_version_reply="envbot $envbot_version"
#####################################################################
# SQLite3 module
#
# (*) Location of SQLite3 database file
#config_module_sqlite3_database='@@datadir@@/envbot.db'
#####################################################################
# Factoids module
#
# (*) Table name for factoids in SQLite3 database
#config_module_factoids_table='factoids'
#####################################################################
# Karma module
#
# (*) Table name for karma data in SQLite3 database
#config_module_karma_table='karma'
#####################################################################
# Seen module
#
# (*) Table name for seen data in SQLite3 database
#config_module_seen_table='seen'
#####################################################################
# Vote module.
#
# (*) The channel where vote mode will work.
# Note that this is a regular expression that will be
# surronded by ^ and $ when matching.
#config_module_vote_channel='#mychannel'
# (*) How long a vote is open before it is closed (in seconds).
#config_module_vote_timeout='900'
#####################################################################
# For contrib modules please see the contrib module in question
# for information on what variables it uses.

100
doc/coding-standards.txt Normal file
View File

@@ -0,0 +1,100 @@
Coding standards
================
This document describe the coding standards used in envbot.
Indention
---------
Indention is done with tabs, one tab char for each indention level.
Do adjust the code with spaces if you need to break a long line.
Example:
thisFunctionGotLotsOfParameters foo bar quux loooooooooooooooooooooooooooongParameter
some more parameters
That is, first indent with tabs to base indention level, then use spaces
to adjust.
Spaces
------
Trailing spaces
Forbidden.
Spaces around operators:
Depend on situation.
Examples:
myvar="this is a value"
if [[ "$myvar" = "something" ]]; then
As you can see it depends on where it is used.
Generally it should be used everywhere except assignment like
"=" and "=+".
Newlines
--------
There should not be newlines before a { or other block separator.
For example this is correct:
if [[ $a = $b ]]; then
runStuff
fi
But this is incorrect:
if [[ $a = $b ]]
then
runStuff
fi
Trailing newlines: There should be a single
ending newline at the end of the file, no
trailing newlines.
Functions
---------
Functions should be declared without the function keyword
and with the () following the name of the function, without
space between the function name and the (). After the () there
should be one space and then the opening bracket.
Example:
myNiceFunction() {
runStuff
}
Functions: Returning values
---------------------------
Return values using "printf -v" construct. Avoid subshells (for
performance reasons). One exception to this is the case of the
function only calling an external program, then just subshell
the function let the external programs output go to STDOUT of the
function.
Example of printf -v construct (first parameter for this function
is the name of the variable to return in):
myfunction() {
printf -v "$1" '%s' "something we computed"
}
Using return code should only be used when returned value is
an error code. Example:
otherfunction() {
if [[ "$1" = "foo" ]]; then
# Success!
return 0
else
# Fail
return 1
fi
}
Comments
--------
Comments are free form inside function, function comment should
be coded in bashdoc style.
(TODO: add description of that or link to that)
Comments should be indented to same level as surrounding code,
unless the comment is commented out code. Commented out code
should be avoided in committed code, but if it is needed, the
comment should be at the start of the line.
if
--
When testing in if use the [[ ]] construct. Do NOT under ANY
circumstances use the [ ] construct.

52
doc/envbot.1 Normal file
View File

@@ -0,0 +1,52 @@
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.36.
.TH ENVBOT "1" "July 2008" "envbot" "User Commands"
.SH NAME
envbot \- An advanced modular IRC bot in bash
.SH SYNOPSIS
.B envbot
[\fIOPTION\fR]...
.SH DESCRIPTION
envbot is an advanced modular IRC bot coded in bash.
.SH OPTIONS
.TP
\fB\-c\fR, \fB\-\-config\fR file
Use file instead of the default as config file.
.TP
\fB\-l\fR, \fB\-\-libdir\fR directory
Use directory instead of the default as library directory.
.TP
\fB\-v\fR, \fB\-\-verbose\fR
Force verbose output even if config_log_stdout is 0.
.TP
\fB\-d\fR, \fB\-\-debug\fR
Enable debugging code. Most likely pointless to anyone
except envbot developers or module developers.
.TP
\fB\-h\fR, \fB\-\-help\fR
Display this help and exit
.TP
\fB\-V\fR, \fB\-\-version\fR
Output version information and exit
.PP
Note that envbot can't handle short versions of options being written together like
\fB\-vv\fR currently.
.PP
Exit status is 0 if OK, 1 if minor problems, 2 if serious trouble.
.SH EXAMPLES
.TP
envbot
Runs envbot with default options.
.TP
envbot \fB\-c\fR bot.config
Runs envbot with the config bot.config.
.SH AUTHOR
Written by Arvid Norlander and EmErgE.
.SH "REPORTING BUGS"
Report bugs to http://envbot.org/trac/simpleticket
.SH COPYRIGHT
Copyright \(co 2007-2008 Arvid Norlander
.br
Copyright \(co 2007-2008 EmErgE
.br
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

15
doc/factoids.sql Normal file
View File

@@ -0,0 +1,15 @@
/*
* This is how to create a factoid database
* Use this file like this:
* sqlite3 -batch data/envbot.db < doc/factoids.sql
*
* If you use another table name, change below in
* both places
*/
DROP TABLE IF EXISTS factoids;
CREATE TABLE factoids (
name TEXT UNIQUE NOT NULL PRIMARY KEY,
value TEXT NOT NULL,
who TEXT NOT NULL,
is_locked INTEGER NOT NULL DEFAULT 0
);

14
doc/karma.sql Normal file
View File

@@ -0,0 +1,14 @@
/*
* This is how to create a factoid database
* Use this file like this:
* sqlite3 -batch data/envbot.db < doc/karma.sql
*
* If you use another table name, change below in
* both places
*/
DROP TABLE IF EXISTS karma;
CREATE TABLE karma (
target TEXT UNIQUE NOT NULL PRIMARY KEY,
rating INTEGER NOT NULL,
is_locked INTEGER NOT NULL DEFAULT 0
);

383
doc/module_api2.txt Normal file
View File

@@ -0,0 +1,383 @@
Module API
==========
This file contains info needed to write a module.
File name
---------
There are two ways to store modules: single file and directory.
Single file:
The module is a single file.
The file name should follow this pattern:
m_modulename.sh
Example:
m_faq.sh
Directory:
The module is a directory that contains several files.
The directory name should follow this pattern:
m_modulename
Example:
m_faq
This directory should contain a file called __main__.sh
that the bot will load when loading the module. This file
may then load other files from the directory as needed.
Other than that there are no differences between the two ways to store
modules.
Variables
---------
All bash variables in the module that are global MUST follow the format
module_modulename_variablename to prevent overwriting other modules, or
global bot variables. FAQ module may use: module_faq_last_query for example
as a variable.
Variables that are local to the function (using the local directive) may have
other names. Don't forget variables created in for loops and such
(for foo in bar bash; do echo $foo; done the $foo variable is global here,
do local foo on the line before it)
Functions and hooks
-------------------
Hooks are functions with special names, as listed below in the section "The hooks".
Each function or hook should start with the module_ followed by the module name.
So if the module is faq.sh the modules should start with module_faq_ like module_faq_INIT.
All bash functions in the module MUST follow the format
module_modulename_functionname to prevent overwriting other modules, or
global bot functions.
If not mentioned otherwise the hook is optional.
Functions marked with TODO may change, get renamed or removed and may not work
even in current code.
The hooks
---------
module_modulename_INIT (REQUIRED)
Called directly after loading the module.
Parameters:
$1 = The module name.
None
Exported variables to this function:
MODULE_BASE_PATH
Useful for multifile modules, then it is the path to the base directory of
the module (without ending slash). If the module consists of a single file
it is the path to the module file.
Return status:
If return status isn't 0 the module is considered as failed to load.
Return on in variables (these will get unset after they have been processed):
modinit_HOOKS:
In this variable should be returned a space separated list of the optional functions
that the module implements. FAQ would return "before_connect on_PRIVMSG"
modinit_API:
Return 2 if you follow this module API.
Notes:
Check for dependencies (external commands and other modules) in this function,
as well as register any commands.
module_modulename_UNLOAD (REQUIRED)
Called to make the module unload itself.
In this function it should clean up after itself and unset all
it's functions and variables except the hook functions.
The unload function and other hook functions will be undefined
after unload finished.
The module may or may not get reloaded after this.
Parameters:
None
Return status:
0 = Unloaded correctly
1 = Failed to unload. On this the bot will quit.
Notes:
This function is NOT called when the bot is exiting. To check for that
use the FINALISE hook!
module_modulename_REHASH (REQUIRED)
Called to make the module reparse any config options.
Parameters:
None
Return status:
0 = Rehashed correctly
1 = Non fatal error for the bot itself. The bot will call UNLOAD on the module.
2 = Fatal error of some kind. On this the bot will quit.
module_modulename_FINALISE
Called directly before the bot quits. The bot has already closed
the connection to the IRC server at this point. This is for saving
stuff.
Parameters:
None
Return status:
Not checked.
module_modulename_after_load
Called after all the hooks are added for the module.
Parameters:
None
Return status:
0 = Unloaded correctly
1 = Failed. On this the bot will call unload on the module.
Notes:
This is useful for stuff that needs to echo log messages
as that can't be done in modulename_INIT.
module_modulename_before_connect
Called before the bot connected.
Parameters:
None
Return status:
Not checked.
module_modulename_on_connect
Called for each line that the bot
receives from the server during connecting.
Parameters:
$1 = Raw line.
Return status:
Not checked.
module_modulename_after_connect
Called after the bot connected.
Parameters:
None
Return status:
Not checked.
module_modulename_on_module_UNLOAD
Called when *ANOTHER* module is got unloaded.
This is meant for a provider module that must unregister some entry
at unload. For example m_help.sh would be such a module.
Parameters:
$1 = The module that got unloaded.
Return code:
Not checked.
module_modulename_on_PRIVMSG
Called when bot gets a PRIVMSG
Parameters:
$1 = From who (n!u@h)
$2 = To who (channel or botnick)
$3 = The message
Return code:
0 = pass it on to next module
1 = I have taken care of this, and don't
consult other modules about this.
module_modulename_on_NOTICE
Called when bot gets a NOTICE
Parameters:
$1 = From who (n!u@h)
$2 = To who (channel or botnick)
$3 = The message
Return code:
0 = pass it on to next module
1 = I have taken care of this, and don't
consult other modules about this.
module_modulename_on_INVITE (new in 0.0.1-beta5)
Called when bot gets an INVITE
Parameters:
$1 = From who (n!u@h)
$2 = Target nick (probably our own nick).
$3 = Target channel.
Return code:
Not checked.
module_modulename_on_NICK
Called when someone changes nick in a channel the bot is in
Parameters:
$1 = From who (n!u@h)
$2 = New nick
Return status:
Not checked.
Reason: A module with a list of users could get desynced if it didn't
get the nick change.
module_modulename_on_JOIN
Called when someone joins a channel the bot is in
Parameters:
$1 = Who did it (n!u@h)
$2 = What channel
Return status:
Not checked.
Reason: A module with a list of users could get desynced if it didn't
get the join.
module_modulename_on_PART
Called when someone parts a channel the bot is in
Parameters:
$1 = Who did it (n!u@h)
$2 = What channel
$3 = A reason if one exists.
Return status:
Not checked.
Reason: A module with a list of users could get desynced if it didn't
get the part.
module_modulename_on_KICK
Called when someone parts a channel the bot is in
Parameters:
$1 = Who did it (n!u@h).
$2 = What channel.
$3 = Who got kicked.
$4 = A reason if one exists.
Return status:
Not checked.
Reason: A module with a list of users could get desynced if it didn't
get the kick.
module_modulename_on_QUIT
Called when someone quits
Parameters:
$1 = Who did it (n!u@h).
$2 = A reason if one exists.
Return status:
Not checked.
Reason: A module with a list of users could get desynced if it didn't
get the quit.
module_modulename_on_TOPIC
Called when a topic is set or on channel join
Parameters:
$1 = Who did it (n!u@h).
$2 = What channel.
$3 = New topic.
Return status:
Not checked.
Reason: We don't want to get desynced modules.
module_modulename_on_channel_MODE
Called when someone changes a mode in the channel
Parameters:
$1 = Who did it (n!u@h).
$2 = On what channel.
$3 = The mode change with it's parameters.
Return status:
Not checked.
Reason: A module with a list of users could get desynced if it didn't
get the mode change.
module_modulename_on_user_MODE (new in 0.0.1-beta4)
Called when someone changes a user mode (most likely on ourself)
Parameters:
$1 = Who did it (n!u@h).
$2 = What target (nick).
$3 = The mode change with it's parameters.
Return status:
Not checked.
Reason: There is no point in checking this.
module_modulename_on_numeric
Called on any numeric after connect.
Parameters:
$1 = The numeric.
$2 = It's data.
Return status:
0 = pass it on to next module
1 = I have taken care of this, and don't
consult other modules about this.
Notes:
In most cases you DON'T want to return 1 for this. If you do be very very careful.
module_modulename_on_PONG
Called when bot receives a PONG from server
Parameters:
$1 = Sender
$2 = Second server.
$3 = The data.
Return status:
Not checked.
module_modulename_on_server_ERROR
# ERROR :Closing link (rfc3092@1.2.3.4) [Killed (AnMaster (testing a kill on inspircd))]
# ERROR :Closing Link: [1.2.3.4] (Throttled: Reconnecting too fast) -Email staff@example.com for more information.
# ERROR :Closing Link: envbot[host.name.se] Brain ([hurricane.KuoNET.org] Local kill by Brain (testing kill on unrealircd))
# ERROR :Closing Link: envbot[host.name.se] hurricane.KuoNET.org (Killed (Brain (testing kill on unrealircd, remote one)))
Called when the bot get an ERROR from the server.
Parameters:
$1 = The ERROR message.
Return status:
Not checked.
Reason: There isn't much point in swallowing this.
module_modulename_on_KILL
Called when the bot get a KILL message from the server.
Parameters:
$1 = The sender of the kill.
$2 = The target of the kill.
$3 = The KILL path.
$4 = The reason.
Return status:
Not checked.
Reason: Risk for desync of modules.
module_modulename_before_disconnect
Called when the bot is about to disconnect from server.
The bot may or may not reconnect after this depending on what caused this.
the disconnect.
Parameters:
None
Return status:
Not checked.
Notes:
This won't be called if the disconnect wasn't planned, like
a ping timeout, getting killed, and so on.
module_modulename_after_disconnect
Called when the bot gets disconnected from server.
The bot may or may not reconnect after this depending on what caused
the disconnect.
Parameters:
None
Return status:
Not checked.
Reason: A module may need clean up, don't let it desync.
module_modulename_on_RAW
Called when the bot gets *ANY* line from the server after the initial connect.
With this a module can hook onto something not supported by a more specific hook.
The downsides:
* Potentially speed as it has to be called for any message.
* You have to parse more on your own.
* You can desync other modules! Imagine a module that keep a list of
users in the channel. If you swallow a message about a join, part,
quit, nickchange, or other ones it may get desynced!
* Even worse, you can desync the bot itself if you swallow NICK, JOIN
PART, KICK or possibly others. Or make it ping out by swallowing PING.
Parameters:
$1 = The raw line
Return status:
0 = pass it on to next module
1 = I have taken care of this, and don't
consult other modules about this.
For raw this means no normal hooks
will be called on the line either.

15
doc/seen.sql Normal file
View File

@@ -0,0 +1,15 @@
/*
* This is how to create a factoid database
* Use this file like this:
* sqlite3 -batch data/envbot.db < doc/seen.sql
*
* If you use another table name, change below in
* both places
*/
DROP TABLE IF EXISTS seen;
CREATE TABLE seen (
nick TEXT UNIQUE NOT NULL PRIMARY KEY,
channel TEXT NOT NULL,
timestamp TEXT NOT NULL,
message TEXT NOT NULL
);

101
doc/transports_api.txt Normal file
View File

@@ -0,0 +1,101 @@
Transport modules
=================
Transport modules is a feature that allows different ways to connect to the server.
They may support different systems and/or different features.
File descriptors
================
If a module need to use a file descriptor it should use FD 3 and 4.
If more than two are needed, the module can try higher but that may be used
for other things in the future.
Configuration
=============
Additional configuration variables for a module should follow this naming scheme:
config_transport_transportname_variablename
Example:
config_transport_stunnel_path
Variables
=========
The module defines a variable called $transport_supports
It is a space separated list of supported features. Current ones:
* ipv4 - Supports IPv4
* ipv6 - Supports IPv6
* nossl - Supports making non-SSL connections
* ssl - Supports SSL
* bind - Supports using a specific IP when connecting
This variable only needs to be set after transport_check_support has run
Functions
=========
The function names below should not be unique for the module like with
normal modules. You can only use one transport module at a time.
transport_check_support()
Check if all the stuff needed to use this transport is available
on this system.
Return status:
0 = Yes
1 = No
transport_connect()
Try to connect
Return status:
0 = Connection successful
1 = Connection failed
Parameters:
$1 = Hostname/IP
$2 = Port
$3 = If 1 use SSL. If the module does not support it, just ignore it.
$3 = IP to bind to if any and if supported
If the module does not support it, just ignore it.
transport_disconnect()
Called to close connection
Parameters:
None
Return status:
Not checked.
Notes:
The module must handle this getting called even when not connected or when
partly connected (it should clean up any program the module is running in
the background on a ping time out for example).
transport_alive()
Called to check if connection is still alive.
Return status
0 If connection is still alive.
1 If it isn't alive.
Notes:
This function should be low overhead, it gets called quite often.
transport_read_line()
Return a line in the variable $line.
Return status:
0 = Success
1 = Connection has failed (timeout or whatever)
Notes:
The transport module should remove any trailing \r and/or \n (CR and/or LF)
from the string before it returns it.
transport_write_line()
Send a line
Parameters:
$* = send this
Return status:
Not checked.
Notes:
The transport module should add a \n (LF) to the end of the data it get.