Merge branch 'master' of ssh://askele.com/libsntl
commit
23d26fe5b8
@ -1,6 +0,0 @@
|
||||
libsntl for Debian
|
||||
-------------------
|
||||
|
||||
<possible notes regarding this package - if none, delete this file>
|
||||
|
||||
-- Alexander Vdolainen <vdo@daze> Mon, 24 Nov 2014 11:52:48 +0200
|
@ -1,9 +0,0 @@
|
||||
libsntl for Debian
|
||||
-------------------
|
||||
|
||||
<this file describes information about the source package, see Debian policy
|
||||
manual section 4.14. You WILL either need to modify or delete this file>
|
||||
|
||||
|
||||
|
||||
|
@ -0,0 +1 @@
|
||||
7
|
@ -1,38 +1,12 @@
|
||||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: libsntl
|
||||
Source: <url://example.com>
|
||||
Source: <url://askele.com>
|
||||
|
||||
Files: *
|
||||
Copyright: <years> <put author's name and email here>
|
||||
<years> <likewise for another author>
|
||||
License: <special license>
|
||||
<Put the license of the package here indented by 1 space>
|
||||
<This follows the format of Description: lines in control file>
|
||||
Copyright: 2015 Askele Group
|
||||
2014 Askele Oy
|
||||
License: Askele PL
|
||||
Askele Group Proprietary License 1.0
|
||||
Not allow any distrbution without license
|
||||
.
|
||||
<Including paragraphs>
|
||||
|
||||
# If you want to use GPL v2 or later for the /debian/* files use
|
||||
# the following clauses, or change it to suit. Delete these two lines
|
||||
Files: debian/*
|
||||
Copyright: 2014 Alexander Vdolainen <vdo@daze>
|
||||
License: GPL-2+
|
||||
This package 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 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This package 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/>
|
||||
.
|
||||
On Debian systems, the complete text of the GNU General
|
||||
Public License version 2 can be found in "/usr/share/common-licenses/GPL-2".
|
||||
|
||||
# Please also look if there are files or directories which have a
|
||||
# different copyright/license attached and list them here.
|
||||
# Please avoid to pick license terms that are more restrictive than the
|
||||
# packaged work, as it may make Debian's contributions unacceptable upstream.
|
||||
No warrantly
|
||||
|
@ -1,50 +0,0 @@
|
||||
dh_autotools-dev_updateconfig
|
||||
dh_auto_configure
|
||||
dh_auto_build
|
||||
dh_auto_test
|
||||
dh_prep
|
||||
dh_installdirs
|
||||
dh_auto_install
|
||||
dh_install
|
||||
dh_installdocs
|
||||
dh_installchangelogs
|
||||
dh_installexamples
|
||||
dh_installman
|
||||
dh_installcatalogs
|
||||
dh_installcron
|
||||
dh_installdebconf
|
||||
dh_installemacsen
|
||||
dh_installifupdown
|
||||
dh_installinfo
|
||||
dh_pysupport
|
||||
dh_installinit
|
||||
dh_installmenu
|
||||
dh_installmime
|
||||
dh_installmodules
|
||||
dh_installlogcheck
|
||||
dh_installlogrotate
|
||||
dh_installpam
|
||||
dh_installppp
|
||||
dh_installudev
|
||||
dh_installwm
|
||||
dh_installxfonts
|
||||
dh_installgsettings
|
||||
dh_bugfiles
|
||||
dh_ucf
|
||||
dh_lintian
|
||||
dh_gconf
|
||||
dh_icons
|
||||
dh_perl
|
||||
dh_usrlocal
|
||||
dh_link
|
||||
dh_compress
|
||||
dh_fixperms
|
||||
dh_strip
|
||||
dh_makeshlibs
|
||||
dh_shlibdeps
|
||||
dh_installdeb
|
||||
dh_gencontrol
|
||||
dh_md5sums
|
||||
dh_builddeb
|
||||
dh_builddeb
|
||||
dh_builddeb
|
@ -1,4 +1,5 @@
|
||||
usr/lib
|
||||
usr/include
|
||||
usr/include/sntl
|
||||
usr/share/man
|
||||
usr/share/man/man3
|
@ -1,5 +1,5 @@
|
||||
usr/include/*
|
||||
usr/lib/lib*.a
|
||||
usr/lib/lib*.so
|
||||
usr/include/sntl/*.h
|
||||
usr/lib/libsntl*.a
|
||||
usr/lib/libsntl*.la
|
||||
usr/lib/pkgconfig/*
|
||||
usr/share/man/man3/*
|
||||
|
@ -1,10 +1,29 @@
|
||||
man/sxmsg_rreply.3
|
||||
man/connection_close.3
|
||||
man/connection_link.3
|
||||
man/connection_master_link.3
|
||||
man/connections_create.3
|
||||
man/connections_destroy.3
|
||||
man/connections_free.3
|
||||
man/connections_get_priv.3
|
||||
man/connections_init.3
|
||||
man/sntl_init.3
|
||||
man/connections_setsslserts.3
|
||||
man/connections_set_authcheck.3
|
||||
man/connections_set_channelcall.3
|
||||
man/connections_set_ondestroy.3
|
||||
man/connections_set_onpulse.3
|
||||
man/connections_set_priv.3
|
||||
man/connections_get_priv.3
|
||||
man/connections_set_ondestroy.3
|
||||
man/connections_set_rpcvalidator.3
|
||||
man/connections_setsslserts.3
|
||||
man/connections_set_sslvalidate.3
|
||||
man/sntl_finalize.3
|
||||
man/sntl_init.3
|
||||
man/sxchannel_close.3
|
||||
man/sxchannel_open.3
|
||||
man/sxmsg_clean.3
|
||||
man/sxmsg_pulse.3
|
||||
man/sxmsg_reply.3
|
||||
man/sxmsg_reply_pp.3
|
||||
man/sxmsg_return.3
|
||||
man/sxmsg_return_pp.3
|
||||
man/sxmsg_rreply.3
|
||||
man/sxmsg_send.3
|
||||
man/sxmsg_send_pp.3
|
||||
|
@ -1 +1 @@
|
||||
usr/lib/lib*.so.*
|
||||
usr/lib/libsntl.so.*
|
||||
|
@ -1,2 +0,0 @@
|
||||
shlibs:Depends=libc6 (>= 2.2.5), libsexpr, libssl1.0.0 (>= 1.0.1), libtdata, libuuid1 (>= 2.20.1)
|
||||
misc:Depends=
|
@ -1,39 +0,0 @@
|
||||
#!/bin/sh
|
||||
# postinst script for libsntl
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postinst> `configure' <most-recently-configured-version>
|
||||
# * <old-postinst> `abort-upgrade' <new version>
|
||||
# * <conflictor's-postinst> `abort-remove' `in-favour' <package>
|
||||
# <new-version>
|
||||
# * <postinst> `abort-remove'
|
||||
# * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
|
||||
# <failed-install-package> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
configure)
|
||||
;;
|
||||
|
||||
abort-upgrade|abort-remove|abort-deconfigure)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "postinst called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
@ -1,37 +0,0 @@
|
||||
#!/bin/sh
|
||||
# postrm script for libsntl
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postrm> `remove'
|
||||
# * <postrm> `purge'
|
||||
# * <old-postrm> `upgrade' <new-version>
|
||||
# * <new-postrm> `failed-upgrade' <old-version>
|
||||
# * <new-postrm> `abort-install'
|
||||
# * <new-postrm> `abort-install' <old-version>
|
||||
# * <new-postrm> `abort-upgrade' <old-version>
|
||||
# * <disappearer's-postrm> `disappear' <overwriter>
|
||||
# <overwriter-version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "postrm called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
@ -1,35 +0,0 @@
|
||||
#!/bin/sh
|
||||
# preinst script for libsntl
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <new-preinst> `install'
|
||||
# * <new-preinst> `install' <old-version>
|
||||
# * <new-preinst> `upgrade' <old-version>
|
||||
# * <old-preinst> `abort-upgrade' <new-version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
install|upgrade)
|
||||
;;
|
||||
|
||||
abort-upgrade)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "preinst called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
@ -1,38 +0,0 @@
|
||||
#!/bin/sh
|
||||
# prerm script for libsntl
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <prerm> `remove'
|
||||
# * <old-prerm> `upgrade' <new-version>
|
||||
# * <new-prerm> `failed-upgrade' <old-version>
|
||||
# * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
|
||||
# * <deconfigured's-prerm> `deconfigure' `in-favour'
|
||||
# <package-being-installed> <version> `removing'
|
||||
# <conflicting-package> <version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
|
||||
case "$1" in
|
||||
remove|upgrade|deconfigure)
|
||||
;;
|
||||
|
||||
failed-upgrade)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "prerm called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
@ -1,23 +0,0 @@
|
||||
# Example watch control file for uscan
|
||||
# Rename this file to "watch" and then you can run the "uscan" command
|
||||
# to check for upstream updates and more.
|
||||
# See uscan(1) for format
|
||||
|
||||
# Compulsory line, this is a version 3 file
|
||||
version=3
|
||||
|
||||
# Uncomment to examine a Webpage
|
||||
# <Webpage URL> <string match>
|
||||
#http://www.example.com/downloads.php libsntl-(.*)\.tar\.gz
|
||||
|
||||
# Uncomment to examine a Webserver directory
|
||||
#http://www.example.com/pub/libsntl-(.*)\.tar\.gz
|
||||
|
||||
# Uncommment to examine a FTP server
|
||||
#ftp://ftp.example.com/pub/libsntl-(.*)\.tar\.gz debian uupdate
|
||||
|
||||
# Uncomment to find new files on sourceforge, for devscripts >= 2.9
|
||||
# http://sf.net/libsntl/libsntl-(.*)\.tar\.gz
|
||||
|
||||
# Uncomment to find new files on GooglePages
|
||||
# http://example.googlepages.com/foo.html libsntl-(.*)\.tar\.gz
|
@ -1,3 +1,7 @@
|
||||
man_MANS = sxmsg_rreply.3 connections_create.3 connections_init.3 connections_destroy.3 connections_free.3 \
|
||||
sntl_init.3 connections_setsslserts.3 connections_set_priv.3 connections_get_priv.3 \
|
||||
connections_set_ondestroy.3
|
||||
connections_set_ondestroy.3 connections_set_onpulse.3 connections_set_sslvalidate.3 \
|
||||
connections_set_authcheck.3 connections_set_rpcvalidator.3 connections_set_channelcall.3 \
|
||||
connection_master_link.3 connection_link.3 connection_close.3 sxchannel_open.3 \
|
||||
sxchannel_close.3 sxmsg_send.3 sxmsg_send_pp.3 sxmsg_clean.3 sntl_finalize.3 sxmsg_pulse.3 \
|
||||
sxmsg_reply.3 sxmsg_reply_pp.3 sxmsg_return.3 sxmsg_return_pp.3
|
||||
|
@ -0,0 +1 @@
|
||||
connection_master_link.3
|
@ -0,0 +1 @@
|
||||
connection_master_link.3
|
@ -0,0 +1,101 @@
|
||||
.TH CONNECTION_MASTER_LINK 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
connection_master_link \- Create a connection on already accept TCP connection on the master side.
|
||||
.br
|
||||
connection_link \- Create connection to the master.
|
||||
.br
|
||||
connection_close \- Close connection.
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
conn_t *connection_master_link(conn_sys_t *ssys, int sck, struct in_addr *addr);
|
||||
|
||||
conn_t *connection_link(conn_sys_t *ssys, const char *host,
|
||||
int port, const char *SSL_cert, const char *login,
|
||||
const char *passwd);
|
||||
|
||||
int connection_close(conn_t *co);
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
.B connection_master_link
|
||||
will create a connection link based on
|
||||
.B ssys
|
||||
connections set with already accepted socket fd
|
||||
.B sck
|
||||
and set ip address of this connection pointed by
|
||||
.B addr.
|
||||
If
|
||||
.B addr
|
||||
is NULL, peer address will not set.
|
||||
.br
|
||||
.B connection_link
|
||||
will create a connection link to the master side based on
|
||||
.B ssys
|
||||
connections set to the master side pointed via hostname or ip address in nul terminated string
|
||||
.B host
|
||||
running on port number
|
||||
.B port
|
||||
and send a X.509 certificate located on pathname pointed by
|
||||
.B SSL_cert
|
||||
trying to authorizated with username pointed by
|
||||
.B login
|
||||
and password pointed by
|
||||
.B passwd
|
||||
.br
|
||||
.B connection_close
|
||||
will close connection pointed by
|
||||
.B co
|
||||
destroying all allocated structures, including connection link itself.
|
||||
.br
|
||||
.SH RETURN VALUE
|
||||
Upon successful completion, the functions
|
||||
.B connection_master_link
|
||||
and
|
||||
.B connection_link
|
||||
will return a valid pointer to the newly created connection link. Otherwise NULL will be returned and
|
||||
.B errno will be set with appropriate error.
|
||||
.B connection_close
|
||||
will return
|
||||
.B SNE_SUCCESS
|
||||
on successful case, otherwise it will return an error described below.
|
||||
.SH ERRORS
|
||||
.B SNE_FAILED
|
||||
will be returned in case of bad params given.
|
||||
.br
|
||||
.B SNE_ENOMEM
|
||||
will be returned if there are no memory available.
|
||||
.br
|
||||
.B SNE_BADPROTO
|
||||
will be returned if other side has an invalid protocol.
|
||||
.B SNE_EPERM
|
||||
will be returned if permission was denied.
|
||||
.br
|
||||
.B SNE_LINKERROR
|
||||
or
|
||||
.B SNE_LINKBROKEN
|
||||
will be returned if connection link is broken i.e. SSL read or write was failed due to the broken TCP connection.
|
||||
.br
|
||||
.SH BUGS
|
||||
Not known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
None.
|
||||
.SH RATIONALE
|
||||
Using connection_link on master side with initialized connections set for master functionality will cause memory leaks, use different connections set structure if you need this functionality on the masters side.
|
||||
.SH SEE ALSO
|
||||
.BI connections_setsslserts(3)
|
||||
,
|
||||
.BI connections_create(3)
|
||||
,
|
||||
.BI connections_destroy(3)
|
||||
,
|
||||
.BI sntl_init(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1,74 @@
|
||||
.TH CONNECTIONS_SET_AUTHCHECK 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
connections_set_authcheck \- Set callback for the connection links based on the connections set, called to validate user name and password of the peer.
|
||||
.br
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
#define connections_set_authcheck(c, f)
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
This macro should be used if you want to setup callback function fired while connection link initiating, and depending on returning value will establish link or destroy it.
|
||||
.br
|
||||
This macro will set on
|
||||
.B c
|
||||
connections link set callback
|
||||
.B f
|
||||
which is a function pointer of the type:
|
||||
.br
|
||||
.sp
|
||||
.B typedef int (*authcheck_t)(conn_t *);
|
||||
.br
|
||||
.sp
|
||||
It will pass a pointer to the connection link initiating now. Link isn't set fully at this moment and doesn't pass any messages and don't works with channel's operations. To pass initiation to the next stage this function should return
|
||||
.B SNE_SUCCESS.
|
||||
In fail case other code error should be returned. It's a good practice to return
|
||||
.B SNE_EPERM
|
||||
if username and password mismatch.
|
||||
.SH RETURN VALUE
|
||||
None.
|
||||
.SH ERRORS
|
||||
None.
|
||||
.SH BUGS
|
||||
None known yet.
|
||||
.SH EXAMPLE
|
||||
This example shows the code prototype for the simple username and password check:
|
||||
.RS
|
||||
.nf
|
||||
.if t .ft CW
|
||||
int logincheck(conn_t *co)
|
||||
{
|
||||
perm_ctx_t *ctx = connection_getpctx(co);
|
||||
char *login = ctx->login;
|
||||
char *password = ctx->password;
|
||||
|
||||
/* do checks ... */
|
||||
/* your fail case */return SNE_EPERM;
|
||||
return SNE_SUCCESS; /* all is fine */
|
||||
}
|
||||
.SH APPLICATION USAGE
|
||||
This function should be used on the master service, it will not be called on the client application anyway.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE ALSO
|
||||
.BI connections_set_priv(3)
|
||||
,
|
||||
.BI connections_get_priv(3)
|
||||
,
|
||||
.BI connections_set_ondestroy(3)
|
||||
,
|
||||
.BI connections_set_sslvalidate(3)
|
||||
,
|
||||
.BI connection_getpctx(3)
|
||||
,
|
||||
.BI connection_getpriv(3)
|
||||
,
|
||||
.BI connection_setpriv(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1,69 @@
|
||||
.TH CONNECTIONS_SET_CHANNELCALL 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
connections_set_channelcall \- Set callback for the connection links based on the connections set, called during connection link initiation on the client side.
|
||||
.br
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
#define connections_set_channelcall(c, f)
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
This macro should be used if you want to setup callback function fired while connection link initiating, it might be useful to sync your client ability to support masters protocol and/or correctly initialize your application.
|
||||
.br
|
||||
This macro will set on
|
||||
.B c
|
||||
connections link set callback
|
||||
.B f
|
||||
which is a function pointer of the type:
|
||||
.br
|
||||
.sp
|
||||
.B typedef int (*channelcall_t)(conn_t *co, int tid, char *desc);
|
||||
.br
|
||||
.sp
|
||||
It will pass a pointer to the connection link initiating now. Link isn't set fully at this moment and doesn't pass any messages and don't works with channel's operations. To pass initiation to the next stage this function should return
|
||||
.B SNE_SUCCESS.
|
||||
In fail case other code error should be returned. It's a good practice to return
|
||||
.B SNE_IGNORED
|
||||
if your application doesn't support protocol channels or outdated.
|
||||
.br
|
||||
SNTL will push channel type id in
|
||||
.B tid
|
||||
and text description in
|
||||
.B desc
|
||||
.br
|
||||
This call will be invoked on each RPC channel.
|
||||
.SH RETURN VALUE
|
||||
None.
|
||||
.SH ERRORS
|
||||
None.
|
||||
.SH BUGS
|
||||
None known yet.
|
||||
.SH EXAMPLE
|
||||
This example shows the code prototype of such function:
|
||||
.RS
|
||||
.nf
|
||||
.if t .ft CW
|
||||
int rpcchanack(conn_t *co, int tid, char *desc)
|
||||
{
|
||||
fprintf(stdout, "Master side supported RPC channel type: %d '%s'\n", tid, desc);
|
||||
|
||||
return SNE_SUCCESS; /* all is fine */
|
||||
}
|
||||
.SH APPLICATION USAGE
|
||||
This function should be used on the client service, it will not be called on the master side anyway, since master provide RPC channels.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE ALSO
|
||||
.BI connections_set_ondestroy(3)
|
||||
,
|
||||
.BI connection_getpriv(3)
|
||||
,
|
||||
.BI connection_setpriv(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1,49 @@
|
||||
.TH CONNECTIONS_SET_ONPULSE 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
connections_set_onpulse \- Set callback for the connection links based on the connections set, called in case of link pulse message
|
||||
.br
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
#define connections_set_onpulse(c, f)
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
This macro should be used if you want to setup callback function fired while pulse link message came.
|
||||
.br
|
||||
This macro will set on
|
||||
.B c
|
||||
connections link set callback
|
||||
.B f
|
||||
which is a function pointer of the type:
|
||||
.br
|
||||
.sp
|
||||
.B typedef void (*onpulse_t)(conn_t *, sexp_t *);
|
||||
.br
|
||||
.sp
|
||||
This function will be called if connection link will receive pulse message. It will pass a pointer to the connection where pulse message came and prepared S expression. Please note, prepared S expression structure will be destroyed after a function call.
|
||||
.SH RETURN VALUE
|
||||
None.
|
||||
.SH ERRORS
|
||||
None.
|
||||
.SH BUGS
|
||||
None known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
None.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE ALSO
|
||||
.BI connections_set_priv(3)
|
||||
,
|
||||
.BI connections_get_priv(3)
|
||||
,
|
||||
.BI connections_set_ondestroy(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1,72 @@
|
||||
.TH CONNECTIONS_SET_RPCVALIDATOR 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
connections_set_rpcvalidator \- Set callback for the connection links based on the connections set, called to validate and setup RPC channels.
|
||||
.br
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
#define connections_set_rpcvalidator(c, f)
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
This macro should be used if you want to setup callback function fired while connection link initiating, this call shouldn't be ignored since it setups the RPC channels tree structure used within the connection link.
|
||||
.br
|
||||
This macro will set on
|
||||
.B c
|
||||
connections link set callback
|
||||
.B f
|
||||
which is a function pointer of the type:
|
||||
.br
|
||||
.sp
|
||||
.B typedef usrtc_t* (*rpcvalidate_t)(conn_t *);
|
||||
.br
|
||||
.sp
|
||||
It will pass a pointer to the connection link initiating now. Link isn't set fully at this moment and doesn't pass any messages and don't works with channel's operations. To pass initiation to the next stage this function should return
|
||||
a valid pointer to the
|
||||
.B usrtc_t
|
||||
structure, this structure must be created with
|
||||
.B sntl_rpclist_init
|
||||
,
|
||||
.B sntl_rpclist_add
|
||||
,
|
||||
.B sntl_rpclist_add_function
|
||||
series functions.
|
||||
.br
|
||||
The returned value will be not handled by library and you should care about freeing it in your application.
|
||||
.SH RETURN VALUE
|
||||
None.
|
||||
.SH ERRORS
|
||||
None.
|
||||
.SH BUGS
|
||||
None known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
This function should be used on the master service only, the client isn't set any RPC channels yet.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE ALSO
|
||||
.BI connections_set_priv(3)
|
||||
,
|
||||
.BI connections_get_priv(3)
|
||||
,
|
||||
.BI connections_set_sslvalidate(3)
|
||||
,
|
||||
.BI connection_getpctx(3)
|
||||
,
|
||||
.BI connection_getpriv(3)
|
||||
,
|
||||
.BI connection_setpriv(3)
|
||||
,
|
||||
.BI sntl_rpclist_init(3)
|
||||
,
|
||||
.BI sntl_rpclist_add(3)
|
||||
,
|
||||
.BI sntl_rpclist_add_function(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1,69 @@
|
||||
.TH CONNECTIONS_SET_SSLVALIDATE 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
connections_set_sslvalidate \- Set callback for the connection links based on the connections set, called to validate x.509 certificate of peer by serial number.
|
||||
.br
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
#define connections_set_sslvalidate(c, f)
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
This macro should be used if you want to setup callback function fired while connection link initiating, and depending on returning value will establish link or destroy it.
|
||||
.br
|
||||
This macro will set on
|
||||
.B c
|
||||
connections link set callback
|
||||
.B f
|
||||
which is a function pointer of the type:
|
||||
.br
|
||||
.sp
|
||||
.B typedef int (*validate_sslpem_t)(conn_t *);
|
||||
.br
|
||||
.sp
|
||||
It will pass a pointer to the connection link initiating now. Link isn't set fully at this moment and doesn't pass any messages and don't works with channel's operations. To pass initiation to the next stage this function should return
|
||||
.B 0.
|
||||
In fail case other code error should be returned.
|
||||
.SH RETURN VALUE
|
||||
None.
|
||||
.SH ERRORS
|
||||
None.
|
||||
.SH BUGS
|
||||
None known yet.
|
||||
.SH EXAMPLE
|
||||
This example shows the code prototype for the simple check:
|
||||
.RS
|
||||
.nf
|
||||
.if t .ft CW
|
||||
int validatex509(conn_t *co)
|
||||
{
|
||||
perm_ctx_t *ctx = connection_getpctx(co);
|
||||
uint64_t x509serial = ctx->certid;
|
||||
|
||||
/* do checks ... */
|
||||
/* your fail case */return 1;
|
||||
return 0; /* all is fine */
|
||||
}
|
||||
.SH APPLICATION USAGE
|
||||
This function should be used on the master service, currently it's not applicable for client applications, and may cause undefined behavoir.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE ALSO
|
||||
.BI connections_set_priv(3)
|
||||
,
|
||||
.BI connections_get_priv(3)
|
||||
,
|
||||
.BI connections_set_ondestroy(3)
|
||||
,
|
||||
.BI connection_getpctx(3)
|
||||
,
|
||||
.BI connection_getpriv(3)
|
||||
,
|
||||
.BI connection_setpriv(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1 @@
|
||||
sntl_init.3
|
@ -0,0 +1 @@
|
||||
sxchannel_open.3
|
@ -0,0 +1,75 @@
|
||||
.TH SXCHANNEL_OPEN 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
sxchannel_open \- Open RPC channel.
|
||||
.br
|
||||
sxchannel_close \- Close RPC channel
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
chnl_t *sxchannel_open(conn_t *co, int type);
|
||||
|
||||
int sxchannel_close(chnl_t *channel);
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
.B sxchannel_open
|
||||
will open RPC channel using
|
||||
.B co
|
||||
connection link with specified type via
|
||||
.B type
|
||||
that available/permitted to use for current peer.
|
||||
.br
|
||||
.B sxchannel_close
|
||||
will close RPC channel pointed by
|
||||
.B channel
|
||||
destroying all allocated structures, including channel itself.
|
||||
.br
|
||||
.SH RETURN VALUE
|
||||
Upon successful completion, the function
|
||||
.B sxchannel_open
|
||||
will return a valid pointer to the newly opened RPC channel. Or NULL otherwise setting
|
||||
.B errno
|
||||
with error code.
|
||||
.br
|
||||
.B sxchannel_close
|
||||
will return
|
||||
.B SNE_SUCCESS
|
||||
on success, otherwise error will be returned.
|
||||
.SH ERRORS
|
||||
.B SNE_FAILED
|
||||
will be returned in case of bad params given.
|
||||
.br
|
||||
.B SNE_ENOMEM
|
||||
will be returned if there are no memory available.
|
||||
.br
|
||||
.B SNE_BADPROTO
|
||||
will be returned if other side has an invalid protocol.
|
||||
.B SNE_EPERM
|
||||
will be returned if permission was denied.
|
||||
.br
|
||||
.B SNE_LINKERROR
|
||||
or
|
||||
.B SNE_LINKBROKEN
|
||||
will be returned if connection link is broken i.e. SSL read or write was failed due to the broken TCP connection.
|
||||
.br
|
||||
.SH BUGS
|
||||
Not known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
None.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE ALSO
|
||||
.BI connections_set_rpcvalidator(3)
|
||||
,
|
||||
.BI connection_link(3)
|
||||
,
|
||||
.BI connection_close(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1 @@
|
||||
sxmsg_send.3
|
@ -0,0 +1,47 @@
|
||||
.TH SXMSG_PULSE 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
sxmsg_pulse \- Function used to send a pulse
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.sp
|
||||
int sxmsg_pulse(conn_t *co, const char *data, size_t datalen);
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
.B sxmsg_pulse
|
||||
Will send a pulse message to the peer of underlying connection link
|
||||
.B co
|
||||
with given buffer
|
||||
.B data
|
||||
with given length in bytes
|
||||
.B datalen.
|
||||
.br
|
||||
.SH RETURN VALUE
|
||||
Upon successful completion, the function will write a pulse message returning
|
||||
.B SNE_SUCCESS
|
||||
Othrewise other error code will be returned.
|
||||
.SH ERRORS
|
||||
.B SNE_FAILED
|
||||
returns if message has invalid index, channel or message pointer is NULL.
|
||||
.br
|
||||
.B SNE_ESSL
|
||||
returns if write was failed i.e. connection link was broken, or SSL error occurs.
|
||||
.br
|
||||
.B SNE_EBUSY
|
||||
Limit exceed.
|
||||
.B SNE_SUCCESS
|
||||
returns on success.
|
||||
.br
|
||||
.SH BUGS
|
||||
Not known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
This function might be useful to send events to the peer.
|
||||
.SH RATIONALE
|
||||
Calling this function from the client might blocks all operation with callee.
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1,94 @@
|
||||
.TH SXMSG_REPLY 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
sxmsg_reply \- Reply to the message from the peer and wait while confirmation will be received.
|
||||
.br
|
||||
sxmsg_send_pp \- Reply to the message from the peer and wait while confirmation will be received in postponed message send mode.
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.br
|
||||
.sp
|
||||
int sxmsg_reply(sxmsg_t *msg, const char *data, size_t datalen);
|
||||
|
||||
int sxmsg_reply_pp(sxmsg_t *msg, const char *data, size_t datalen);
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
.B sxmsg_reply
|
||||
Will reply to the message pointed by
|
||||
.B msg
|
||||
and awaits for the reply from the peer. It will attach the data pointed by
|
||||
.B data
|
||||
with length in bytes pointed by
|
||||
.B datalen.
|
||||
This message will be sent within context of the calling thread.
|
||||
.br
|
||||
.B sxmsg_reply_pp
|
||||
Will do exactly the same, but message sending will be postponed and sent by one of the thread serving the underlying connection link.
|
||||
.br
|
||||
Both calls will cause a sleep of the calling thread until reply or error will be returned. I.e. this call is blocking one. Also, message is actually atom of the dialog, that means one side sending a first message creates dialog, other side may or may not close this dialog with error code (actual a message without data) or with some data, you should track the message return code to correctly close dialogs.
|
||||
.br
|
||||
If dialogs will be not finished correctly the limit of active messages will be exceeded and you will be not able to create a new dialog while message poll is full with opened dialogs. It's a good practice to avoid long dialog queues in critical operations or operations required to send a lot of data, since each message can take a lot of time (SSL time, network time).
|
||||
.br
|
||||
.SH RETURN VALUE
|
||||
Dialog will be closed in all cases except the following error codes returns:
|
||||
.sp
|
||||
.B SNE_REPLYREQ
|
||||
means other side waiting a reply for this message (i.e. dialog isn't closed).
|
||||
.br
|
||||
Other possible errors:
|
||||
.br
|
||||
.B SNE_SUCCESS
|
||||
will returns if message was processed and dialog is closed.
|
||||
.br
|
||||
.B SNE_FAILED
|
||||
pointed data is invalid.
|
||||
.br
|
||||
.B SNE_ENOMEM
|
||||
not available memory for operation.
|
||||
.br
|
||||
.B SNE_BADPROTO
|
||||
bad protocol.
|
||||
.br
|
||||
.B SNE_ENORPC
|
||||
No RPC call exists i.e. message sent contains an invalid RPC function name.
|
||||
.br
|
||||
.B SNE_TOOLONG
|
||||
Data os too long to be sent with one message.
|
||||
.br
|
||||
.B SNE_NOSUCHCHAN
|
||||
Pointed channel doesn't exists
|
||||
.br
|
||||
.B SNE_ETIMEDOUT
|
||||
Other side timedout with replying to your message.
|
||||
.br
|
||||
.B SNE_LINKBROKEN
|
||||
Connection link is broken during a message send.
|
||||
.br
|
||||
.B SNE_MMESSAGES
|
||||
Limit for the active messages exceeded.
|
||||
.br
|
||||
.SH BUGS
|
||||
Not known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
None.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE_ALSO
|
||||
.BI connection_link(3)
|
||||
,
|
||||
.BI sxchannel_open(3)
|
||||
,
|
||||
.BI sxmsg_rreply(3)
|
||||
,
|
||||
.BI sxmsg_return(3)
|
||||
,
|
||||
.BI sxmsg_send(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1 @@
|
||||
sxmsg_reply.3
|
@ -0,0 +1,76 @@
|
||||
.TH SXMSG_RETURN 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
sxmsg_return \- Return a message with error and close dialog.
|
||||
.br
|
||||
sxmsg_return_pp \- Return a message with error and close dialog in postponed message send mode.
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.br
|
||||
.sp
|
||||
int sxmsg_return(sxmsg_t *msg, int opcode);
|
||||
|
||||
int sxmsg_return_pp(sxmsg_t *msg, int opcode);
|
||||
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
.B sxmsg_return
|
||||
Will return a message with error code
|
||||
.B opcode
|
||||
pointed by
|
||||
.B msg.
|
||||
This message will be sent within context of the calling thread.
|
||||
.br
|
||||
.B sxmsg_reply_pp
|
||||
Will do exactly the same, but message sending will be postponed and sent by one of the thread serving the underlying connection link.
|
||||
.br
|
||||
.SH RETURN VALUE
|
||||
Functions may fail with the following errors:
|
||||
.br
|
||||
.B SNE_SUCCESS
|
||||
will returns if message was processed and dialog is closed.
|
||||
.br
|
||||
.B SNE_FAILED
|
||||
pointed data is invalid.
|
||||
.br
|
||||
.B SNE_ENOMEM
|
||||
not available memory for operation.
|
||||
.br
|
||||
.B SNE_BADPROTO
|
||||
bad protocol.
|
||||
.br
|
||||
.B SNE_NOSUCHCHAN
|
||||
Pointed channel doesn't exists
|
||||
.br
|
||||
.B SNE_ETIMEDOUT
|
||||
Other side timedout with replying to your message.
|
||||
.br
|
||||
.B SNE_LINKBROKEN
|
||||
Connection link is broken during a message send.
|
||||
.br
|
||||
.SH BUGS
|
||||
Not known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
None.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE_ALSO
|
||||
.BI sxchannel_open(3)
|
||||
,
|
||||
.BI sxchannel_close(3)
|
||||
,
|
||||
.BI sxmsg_reply(3)
|
||||
,
|
||||
.BI sxmsg_rreply(3)
|
||||
,
|
||||
.BI sxmsg_return(3)
|
||||
,
|
||||
.BI sxmsg_send(3)
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1 @@
|
||||
sxmsg_return.3
|
@ -0,0 +1,103 @@
|
||||
.TH SXMSG_SEND 3 "20 July 2015" "SNTLLv2" "SNTL Library Manual"
|
||||
.SH NAME
|
||||
sxmsg_send \- Create and send a message within called thread context.
|
||||
.br
|
||||
sxmsg_send_pp \- Create and send a message in postponed mode.
|
||||
.SH SYNOPSIS
|
||||
.B #include <sntl/sntllv2.h>
|
||||
.br
|
||||
.sp
|
||||
int sxmsg_send(chnl_t *channel, const char *data, size_t datalen, sxmsg_t **msg);
|
||||
|
||||
int sxmsg_send_pp(chnl_t *channel, const char *data, size_t datalen, sxmsg_t **msg);
|
||||
|
||||
void sxmsg_clean(sxmsg_t *msg);
|
||||
.br
|
||||
.sp
|
||||
.SH DESCRIPTION
|
||||
.B sxmsg_send
|
||||
Will create and send message using channel pointed by
|
||||
.B channel
|
||||
with data pointed by
|
||||
.B data
|
||||
with length pointed in bytes using
|
||||
.B datalen.
|
||||
If message dialog will continue pointer to the message with reply will be pushed to
|
||||
.B msg.
|
||||
This message will be sent within context of the calling thread.
|
||||
.br
|
||||
.B sxmsg_send_pp
|
||||
Will do exactly the same, but message sending will be postponed and sent by one of the thread serving the underlying connection link.
|
||||
.br
|
||||
Both calls will cause a sleep of the calling thread until reply or error will be returned. I.e. this call is blocking one. Also, message is actually atom of the dialog, that means one side sending a first message creates dialog, other side may or may not close this dialog with error code (actual a message without data) or with some data, you should track the message return code to correctly close dialogs.
|
||||
.br
|
||||
If dialogs will be not finished correctly the limit of active messages will be exceeded and you will be not able to create a new dialog while message poll is full with opened dialogs. It's a good practice to avoid long dialog queues in critical operations or operations required to send a lot of data, since each message can take a lot of time (SSL time, network time).
|
||||
.br
|
||||
.B sxmsg_clean
|
||||
will clean up the data used for closed dialog message, it should be used in case of rapid reply to avoid memory leaks.
|
||||
.SH RETURN VALUE
|
||||
Dialog will be closed in all cases except the following error codes returns:
|
||||
.sp
|
||||
.B SNE_REPLYREQ
|
||||
means other side waiting a reply for this message (i.e. dialog isn't closed).
|
||||
.br
|
||||
In other cases message will not set except
|
||||
.B SNE_RAPIDMSG
|
||||
error code, in this case to avoid memory leaks
|
||||
.B sxmsg_clean
|
||||
must be called after data is processed. In other cases a different and specific error code might be returned, but usual cases listed below:
|
||||
.br
|
||||
.B SNE_SUCCESS
|
||||
will returns if message was processed and dialog is closed.
|
||||
.br
|
||||
.B SNE_FAILED
|
||||
pointed data is invalid.
|
||||
.br
|
||||
.B SNE_ENOMEM
|
||||
not available memory for operation.
|
||||
.br
|
||||
.B SNE_BADPROTO
|
||||
bad protocol.
|
||||
.br
|
||||
.B SNE_ENORPC
|
||||
No RPC call exists i.e. message sent contains an invalid RPC function name.
|
||||
.br
|
||||
.B SNE_TOOLONG
|
||||
Data os too long to be sent with one message.
|
||||
.br
|
||||
.B SNE_NOSUCHCHAN
|
||||
Pointed channel doesn't exists
|
||||
.br
|
||||
.B SNE_ETIMEDOUT
|
||||
Other side timedout with replying to your message.
|
||||
.br
|
||||
.B SNE_LINKBROKEN
|
||||
Connection link is broken during a message send.
|
||||
.br
|
||||
.B SNE_MMESSAGES
|
||||
Limit for the active messages exceeded.
|
||||
.br
|
||||
.SH BUGS
|
||||
Not known yet.
|
||||
.SH EXAMPLE
|
||||
None.
|
||||
.SH APPLICATION USAGE
|
||||
None.
|
||||
.SH RATIONALE
|
||||
None.
|
||||
.SH SEE_ALSO
|
||||
.BI connection_link(3)
|
||||
,
|
||||
.BI sxchannel_open(3)
|
||||
,
|
||||
.BI sxmsg_rreply(3)
|
||||
,
|
||||
.BI sxmsg_return(3)
|
||||
,
|
||||
.BI sxmsg_reply
|
||||
.SH COPYRIGHT
|
||||
This is a proprietary software. See COPYING for further details.
|
||||
.br
|
||||
(c) Askele Group 2013-2015 <http://askele.com>
|
||||
.SH AUTHOR
|
||||
Alexander Vdolainen (vdo@askele.com)
|
@ -0,0 +1 @@
|
||||
sxmsg_send.3
|
Loading…
Reference in New Issue