Compare commits
3 Commits
master
...
writev_sup
Author | SHA1 | Date | |
---|---|---|---|
|
d183c7b3dc | ||
|
be098144db | ||
|
71cdf158e4 |
17
.drone.yml
17
.drone.yml
@ -1,17 +0,0 @@
|
|||||||
kind: pipeline
|
|
||||||
name: default
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: docker
|
|
||||||
image: plugins/docker
|
|
||||||
network_mode: bridge
|
|
||||||
settings:
|
|
||||||
repo: sneak/uhub
|
|
||||||
username:
|
|
||||||
from_secret: docker_username
|
|
||||||
password:
|
|
||||||
from_secret: docker_password
|
|
||||||
tags:
|
|
||||||
- ${DRONE_BRANCH//\//-}-${DRONE_COMMIT_SHA:0:8}
|
|
||||||
- ${DRONE_COMMIT_SHA}
|
|
||||||
- ${DRONE_BRANCH/\//-}
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -21,3 +21,5 @@ debian/uhub.postrm.debhelper
|
|||||||
debian/uhub.prerm.debhelper
|
debian/uhub.prerm.debhelper
|
||||||
debian/uhub.substvars
|
debian/uhub.substvars
|
||||||
uhub-passwd
|
uhub-passwd
|
||||||
|
src/version.h
|
||||||
|
src/system.h
|
||||||
|
2
.gitmodules
vendored
2
.gitmodules
vendored
@ -1,3 +1,3 @@
|
|||||||
[submodule "thirdparty/sqlite"]
|
[submodule "thirdparty/sqlite"]
|
||||||
path = thirdparty/sqlite
|
path = thirdparty/sqlite
|
||||||
url = https://github.com/janvidar/sqlite.git
|
url = git://github.com/janvidar/sqlite.git
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
language: cpp
|
language: cpp
|
||||||
dist: xenial
|
|
||||||
compiler:
|
compiler:
|
||||||
- gcc
|
- gcc
|
||||||
- clang
|
- clang
|
||||||
@ -10,5 +9,3 @@ install:
|
|||||||
- autotest/travis/install-build-depends.sh
|
- autotest/travis/install-build-depends.sh
|
||||||
script:
|
script:
|
||||||
- autotest/travis/build-and-test.sh
|
- autotest/travis/build-and-test.sh
|
||||||
dist: xenial
|
|
||||||
|
|
||||||
|
3
BUGS
3
BUGS
@ -1 +1,2 @@
|
|||||||
Bugs are tracked on: https://github.com/janvidar/uhub/issues
|
Bugs are tracked on: http://bugs.extatic.org/
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ enable_language(C)
|
|||||||
|
|
||||||
set (UHUB_VERSION_MAJOR 0)
|
set (UHUB_VERSION_MAJOR 0)
|
||||||
set (UHUB_VERSION_MINOR 5)
|
set (UHUB_VERSION_MINOR 5)
|
||||||
set (UHUB_VERSION_PATCH 1)
|
set (UHUB_VERSION_PATCH 0)
|
||||||
|
|
||||||
set (PROJECT_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src")
|
set (PROJECT_SOURCE_DIR "${CMAKE_SOURCE_DIR}/src")
|
||||||
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/Modules)
|
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/Modules)
|
||||||
@ -27,6 +27,7 @@ find_package(Sqlite3)
|
|||||||
|
|
||||||
include(TestBigEndian)
|
include(TestBigEndian)
|
||||||
include(CheckSymbolExists)
|
include(CheckSymbolExists)
|
||||||
|
include(CheckFunctionExists)
|
||||||
include(CheckIncludeFile)
|
include(CheckIncludeFile)
|
||||||
include(CheckTypeSize)
|
include(CheckTypeSize)
|
||||||
|
|
||||||
@ -54,13 +55,10 @@ if (SSL_SUPPORT)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT SQLITE3_FOUND)
|
|
||||||
message(FATAL_ERROR "SQLite3 is not found!")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if (SYSTEMD_SUPPORT)
|
if (SYSTEMD_SUPPORT)
|
||||||
INCLUDE(FindPkgConfig)
|
INCLUDE(FindPkgConfig)
|
||||||
pkg_search_module(SD REQUIRED libsystemd)
|
pkg_search_module(SD_DAEMON REQUIRED libsystemd-daemon)
|
||||||
|
pkg_search_module(SD_JOURNAL REQUIRED libsystemd-journal)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
@ -72,12 +70,21 @@ check_include_file(sys/types.h HAVE_SYS_TYPES_H)
|
|||||||
if (HAVE_SYS_TYPES_H)
|
if (HAVE_SYS_TYPES_H)
|
||||||
set (CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} "sys/types.h")
|
set (CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} "sys/types.h")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
check_include_file(sys/uio.h HAVE_SYS_UIO_H)
|
||||||
|
if (HAVE_SYS_UIO_H)
|
||||||
|
set (CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} "sys/uio.h")
|
||||||
|
endif()
|
||||||
|
|
||||||
check_type_size(ssize_t SSIZE_T)
|
check_type_size(ssize_t SSIZE_T)
|
||||||
check_symbol_exists(memmem string.h HAVE_MEMMEM)
|
check_symbol_exists(memmem string.h HAVE_MEMMEM)
|
||||||
check_symbol_exists(strndup string.h HAVE_STRNDUP)
|
check_symbol_exists(strndup string.h HAVE_STRNDUP)
|
||||||
|
check_function_exists(writev HAVE_FUNC_WRITEV)
|
||||||
|
check_function_exists(pwritev HAVE_FUNC_PWRITEV)
|
||||||
|
check_function_exists(readv HAVE_FUNC_WRITEV)
|
||||||
|
check_function_exists(preadv HAVE_FUNC_PWRITEV)
|
||||||
|
|
||||||
include_directories("${PROJECT_SOURCE_DIR}")
|
include_directories("${PROJECT_SOURCE_DIR}")
|
||||||
include_directories("${PROJECT_BINARY_DIR}")
|
|
||||||
include_directories(${SQLITE3_INCLUDE_DIRS})
|
include_directories(${SQLITE3_INCLUDE_DIRS})
|
||||||
link_directories(${SQLITE3_LIBRARY_DIRS})
|
link_directories(${SQLITE3_LIBRARY_DIRS})
|
||||||
|
|
||||||
@ -108,7 +115,7 @@ add_dependencies(adc utils)
|
|||||||
add_dependencies(network utils)
|
add_dependencies(network utils)
|
||||||
|
|
||||||
add_executable(uhub ${PROJECT_SOURCE_DIR}/core/main.c ${uhub_SOURCES} )
|
add_executable(uhub ${PROJECT_SOURCE_DIR}/core/main.c ${uhub_SOURCES} )
|
||||||
add_executable(autotest-bin ${CMAKE_SOURCE_DIR}/autotest/test.c ${uhub_SOURCES} )
|
add_executable(test ${CMAKE_SOURCE_DIR}/autotest/test.c ${uhub_SOURCES} )
|
||||||
add_executable(uhub-passwd ${PROJECT_SOURCE_DIR}/tools/uhub-passwd.c)
|
add_executable(uhub-passwd ${PROJECT_SOURCE_DIR}/tools/uhub-passwd.c)
|
||||||
|
|
||||||
add_library(mod_example MODULE ${PROJECT_SOURCE_DIR}/plugins/mod_example.c)
|
add_library(mod_example MODULE ${PROJECT_SOURCE_DIR}/plugins/mod_example.c)
|
||||||
@ -122,6 +129,13 @@ add_library(mod_topic MODULE ${PROJECT_SOURCE_DIR}/plugins/mod_topic.c)
|
|||||||
add_library(mod_no_guest_downloads MODULE ${PROJECT_SOURCE_DIR}/plugins/mod_no_guest_downloads.c)
|
add_library(mod_no_guest_downloads MODULE ${PROJECT_SOURCE_DIR}/plugins/mod_no_guest_downloads.c)
|
||||||
add_library(mod_auth_sqlite MODULE ${PROJECT_SOURCE_DIR}/plugins/mod_auth_sqlite.c)
|
add_library(mod_auth_sqlite MODULE ${PROJECT_SOURCE_DIR}/plugins/mod_auth_sqlite.c)
|
||||||
|
|
||||||
|
if(WIN32)
|
||||||
|
target_link_libraries(uhub ws2_32)
|
||||||
|
target_link_libraries(test ws2_32)
|
||||||
|
target_link_libraries(mod_logging ws2_32)
|
||||||
|
target_link_libraries(mod_welcome ws2_32)
|
||||||
|
endif()
|
||||||
|
|
||||||
set_target_properties(
|
set_target_properties(
|
||||||
mod_example
|
mod_example
|
||||||
mod_welcome
|
mod_welcome
|
||||||
@ -137,32 +151,28 @@ set_target_properties(
|
|||||||
|
|
||||||
target_link_libraries(uhub ${CMAKE_DL_LIBS} adc network utils)
|
target_link_libraries(uhub ${CMAKE_DL_LIBS} adc network utils)
|
||||||
target_link_libraries(uhub-passwd ${SQLITE3_LIBRARIES} utils)
|
target_link_libraries(uhub-passwd ${SQLITE3_LIBRARIES} utils)
|
||||||
target_link_libraries(autotest-bin ${CMAKE_DL_LIBS} adc network utils)
|
target_link_libraries(test ${CMAKE_DL_LIBS} adc network utils)
|
||||||
target_link_libraries(mod_example utils)
|
target_link_libraries(mod_example utils)
|
||||||
target_link_libraries(mod_welcome network utils)
|
target_link_libraries(mod_welcome utils)
|
||||||
target_link_libraries(mod_auth_simple utils)
|
target_link_libraries(mod_auth_simple utils)
|
||||||
target_link_libraries(mod_auth_sqlite ${SQLITE3_LIBRARIES} utils)
|
target_link_libraries(mod_auth_sqlite ${SQLITE3_LIBRARIES} utils)
|
||||||
target_link_libraries(mod_chat_history utils)
|
target_link_libraries(mod_chat_history utils)
|
||||||
target_link_libraries(mod_chat_history_sqlite ${SQLITE3_LIBRARIES} utils)
|
target_link_libraries(mod_chat_history_sqlite ${SQLITE3_LIBRARIES} utils)
|
||||||
target_link_libraries(mod_no_guest_downloads utils)
|
target_link_libraries(mod_no_guest_downloads utils)
|
||||||
target_link_libraries(mod_chat_only utils)
|
target_link_libraries(mod_chat_only utils)
|
||||||
target_link_libraries(mod_logging network utils)
|
target_link_libraries(mod_logging utils)
|
||||||
target_link_libraries(mod_topic utils)
|
target_link_libraries(mod_topic utils)
|
||||||
target_link_libraries(utils network)
|
target_link_libraries(utils network)
|
||||||
|
target_link_libraries(mod_welcome network)
|
||||||
|
target_link_libraries(mod_logging network)
|
||||||
|
|
||||||
if(WIN32)
|
|
||||||
target_link_libraries(uhub ws2_32)
|
|
||||||
target_link_libraries(autotest-bin ws2_32)
|
|
||||||
target_link_libraries(mod_logging ws2_32)
|
|
||||||
target_link_libraries(mod_welcome ws2_32)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
add_library(adcclient STATIC ${adcclient_SOURCES})
|
add_library(adcclient STATIC ${adcclient_SOURCES})
|
||||||
add_executable(uhub-admin ${PROJECT_SOURCE_DIR}/tools/admin.c)
|
add_executable(uhub-admin ${PROJECT_SOURCE_DIR}/tools/admin.c)
|
||||||
target_link_libraries(uhub-admin adcclient adc network utils pthread)
|
target_link_libraries(uhub-admin adcclient adc network utils pthread)
|
||||||
target_link_libraries(uhub pthread)
|
target_link_libraries(uhub pthread)
|
||||||
target_link_libraries(autotest-bin pthread)
|
target_link_libraries(test pthread)
|
||||||
|
|
||||||
if (ADC_STRESS)
|
if (ADC_STRESS)
|
||||||
add_executable(adcrush ${PROJECT_SOURCE_DIR}/tools/adcrush.c ${adcclient_SOURCES})
|
add_executable(adcrush ${PROJECT_SOURCE_DIR}/tools/adcrush.c ${adcclient_SOURCES})
|
||||||
@ -201,7 +211,7 @@ endif()
|
|||||||
|
|
||||||
if(SSL_SUPPORT)
|
if(SSL_SUPPORT)
|
||||||
target_link_libraries(uhub ${SSL_LIBS})
|
target_link_libraries(uhub ${SSL_LIBS})
|
||||||
target_link_libraries(autotest-bin ${SSL_LIBS})
|
target_link_libraries(test ${SSL_LIBS})
|
||||||
if(UNIX)
|
if(UNIX)
|
||||||
target_link_libraries(uhub-admin ${SSL_LIBS})
|
target_link_libraries(uhub-admin ${SSL_LIBS})
|
||||||
endif()
|
endif()
|
||||||
@ -213,16 +223,19 @@ if(SSL_SUPPORT)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (SYSTEMD_SUPPORT)
|
if (SYSTEMD_SUPPORT)
|
||||||
target_link_libraries(uhub ${SD_LIBRARIES})
|
target_link_libraries(uhub ${SD_DAEMON_LIBRARIES})
|
||||||
target_link_libraries(autotest-bin ${SD_LIBRARIES})
|
target_link_libraries(uhub ${SD_JOURNAL_LIBRARIES})
|
||||||
target_link_libraries(uhub-passwd ${SD_LIBRARIES})
|
target_link_libraries(test ${SD_DAEMON_LIBRARIES})
|
||||||
target_link_libraries(uhub-admin ${SD_LIBRARIES})
|
target_link_libraries(test ${SD_JOURNAL_LIBRARIES})
|
||||||
include_directories(${SD_INCLUDE_DIRS})
|
target_link_libraries(uhub-passwd ${SD_JOURNAL_LIBRARIES})
|
||||||
|
target_link_libraries(uhub-admin ${SD_JOURNAL_LIBRARIES})
|
||||||
|
include_directories(${SD_DAEMON_INCLUDE_DIRS})
|
||||||
|
include_directories(${SD_JOURNAL_INCLUDE_DIRS})
|
||||||
add_definitions(-DSYSTEMD)
|
add_definitions(-DSYSTEMD)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_file ("${PROJECT_SOURCE_DIR}/version.h.in" "${PROJECT_BINARY_DIR}/version.h")
|
configure_file ("${PROJECT_SOURCE_DIR}/version.h.in" "${PROJECT_SOURCE_DIR}/version.h")
|
||||||
configure_file ("${PROJECT_SOURCE_DIR}/system.h.in" "${PROJECT_BINARY_DIR}/system.h")
|
configure_file ("${PROJECT_SOURCE_DIR}/system.h.in" "${PROJECT_SOURCE_DIR}/system.h")
|
||||||
|
|
||||||
# mark_as_advanced(FORCE CMAKE_BUILD_TYPE)
|
# mark_as_advanced(FORCE CMAKE_BUILD_TYPE)
|
||||||
# if (RELEASE)
|
# if (RELEASE)
|
||||||
|
@ -47,8 +47,8 @@
|
|||||||
- marked plugin callbacks that are not called yet
|
- marked plugin callbacks that are not called yet
|
||||||
- add on_change_nick() to struct plugin_funcs
|
- add on_change_nick() to struct plugin_funcs
|
||||||
- minimal changes
|
- minimal changes
|
||||||
- Updated init script in Debian package.
|
- Updated init script in debian package.
|
||||||
- Updated list of man pages in Debian package.
|
- Updated list of man pages in debian package.
|
||||||
- Added man page for uhub-passwd.
|
- Added man page for uhub-passwd.
|
||||||
- Merge branch 'master' of https://github.com/Tilka/uhub
|
- Merge branch 'master' of https://github.com/Tilka/uhub
|
||||||
- Fix issue with QUI messages being allowed through the hub
|
- Fix issue with QUI messages being allowed through the hub
|
||||||
@ -78,7 +78,7 @@
|
|||||||
- minimal documentation fixes
|
- minimal documentation fixes
|
||||||
- update client software link
|
- update client software link
|
||||||
- update compile howto link
|
- update compile howto link
|
||||||
- fix Debian changelog
|
- fix debian changelog
|
||||||
- Fix bug #158 - Added plugin for setting topic (hub description).
|
- Fix bug #158 - Added plugin for setting topic (hub description).
|
||||||
- Command arguments handling + cleanups
|
- Command arguments handling + cleanups
|
||||||
|
|
||||||
|
19
Dockerfile
19
Dockerfile
@ -1,19 +0,0 @@
|
|||||||
FROM alpine:latest as builder
|
|
||||||
RUN apk update && apk upgrade && apk add --no-cache bash util-linux cmake make gcc git sqlite-dev openssl-dev git build-base
|
|
||||||
WORKDIR /app
|
|
||||||
COPY . .
|
|
||||||
RUN cmake . && make
|
|
||||||
RUN sed -i 's/\/usr\/lib\/uhub\//\/libs\//g' ./doc/*.conf && \
|
|
||||||
sed -i 's/\/usr\/lib\/uhub\//\/libs\//g' ./doc/rules.txt && \
|
|
||||||
sed -i 's/\/etc\/uhub\//\/conf\//g' ./doc/*.conf && \
|
|
||||||
sed -i 's/\/etc\/uhub\//\/conf\//g' ./doc/rules.txt && \
|
|
||||||
echo 'Welcome to uHub' > ./doc/motd.txt
|
|
||||||
|
|
||||||
FROM alpine:latest
|
|
||||||
RUN apk update && apk upgrade && apk add --no-cache bash util-linux openssl-dev sqlite-dev
|
|
||||||
WORKDIR /app
|
|
||||||
COPY --from=builder /app/uhub .
|
|
||||||
COPY --from=builder /app/doc/plugins.conf /app/doc/uhub.conf /app/doc/users.conf /app/doc/rules.txt /app/doc/motd.txt /conf/
|
|
||||||
COPY --from=builder /app/*.so /libs/
|
|
||||||
ENTRYPOINT ["./uhub"]
|
|
||||||
CMD ["-c","/conf/uhub.conf"]
|
|
@ -1,13 +1,8 @@
|
|||||||
# uhub
|
|
||||||
|
|
||||||
Welcome and thanks for downloading uHub, a high performance ADC p2p hub.
|
Welcome and thanks for downloading uHub, a high performance ADC p2p hub.
|
||||||
|
|
||||||
For the official documentation, bugs and other information, please visit:
|
For the official documentation, bugs and other information, please visit:
|
||||||
https://www.uhub.org/
|
http://www.uhub.org/
|
||||||
|
|
||||||
For a list of compatible ADC clients, see:
|
For a list of compatible ADC clients, see:
|
||||||
https://en.wikipedia.org/wiki/Comparison_of_ADC_software#Client_software
|
http://en.wikipedia.org/wiki/Advanced_Direct_Connect#Client_software
|
||||||
|
|
||||||
# on dockerhub
|
|
||||||
|
|
||||||
* https://hub.docker.com/r/sneak/uhub
|
|
@ -78,7 +78,7 @@ Description: a high performance hub for the ADC peer-to-peer network
|
|||||||
Its low memory footprint allows it to handle several thousand users
|
Its low memory footprint allows it to handle several thousand users
|
||||||
on high-end servers, or a small private hub on embedded hardware.
|
on high-end servers, or a small private hub on embedded hardware.
|
||||||
.
|
.
|
||||||
Homepage: https://www.uhub.org/
|
Homepage: http://www.extatic.org/uhub/
|
||||||
EOF
|
EOF
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ cmake ${CMAKEOPTS} \
|
|||||||
make VERBOSE=1
|
make VERBOSE=1
|
||||||
|
|
||||||
|
|
||||||
make VERBOSE=1 autotest-bin
|
make VERBOSE=1 test
|
||||||
./autotest-bin
|
./test
|
||||||
|
|
||||||
|
|
||||||
sudo make install
|
sudo make install
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# SQLITE3_FOUND True if sqlite3 got found
|
# SQLITE3_FOUND True if sqlite3 got found
|
||||||
# SQLITE3_INCLUDEDIR Location of sqlite3 headers
|
# SQLITE3_INCLUDEDIR Location of sqlite3 headers
|
||||||
# SQLITE3_LIBRARIES List of libraries to use sqlite3
|
# SQLITE3_LIBRARIES List of libaries to use sqlite3
|
||||||
# SQLITE3_DEFINITIONS Definitions to compile sqlite3
|
# SQLITE3_DEFINITIONS Definitions to compile sqlite3
|
||||||
#
|
#
|
||||||
# Copyright (c) 2007 Juha Tuomala <tuju@iki.fi>
|
# Copyright (c) 2007 Juha Tuomala <tuju@iki.fi>
|
||||||
|
2
debian/control
vendored
2
debian/control
vendored
@ -20,5 +20,5 @@ Description: High performance ADC p2p hub
|
|||||||
- Advanced access control support
|
- Advanced access control support
|
||||||
- Easy configuration
|
- Easy configuration
|
||||||
.
|
.
|
||||||
Homepage: https://www.uhub.org/
|
Homepage: http://www.uhub.org/
|
||||||
|
|
||||||
|
2
debian/copyright
vendored
2
debian/copyright
vendored
@ -12,7 +12,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|||||||
GNU General Public License for more details.
|
GNU General Public License for more details.
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
You should have received a copy of the GNU General Public License
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
On Debian GNU/Linux systems, the complete text of the GNU General Public
|
On Debian GNU/Linux systems, the complete text of the GNU General Public
|
||||||
License can be found in `/usr/share/common-licenses/GPL'.
|
License can be found in `/usr/share/common-licenses/GPL'.
|
||||||
|
@ -67,7 +67,7 @@ Accepting new users
|
|||||||
| | |
|
| | |
|
||||||
| V |
|
| V |
|
||||||
| --------------------- ---------------------
|
| --------------------- ---------------------
|
||||||
| | Send password | ------> | Receive and check |
|
| | Send password | ------> | Reveive and check |
|
||||||
| | request, if needed| | password. |
|
| | request, if needed| | password. |
|
||||||
| --------------------- ---------------------
|
| --------------------- ---------------------
|
||||||
| |
|
| |
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
How to compile:
|
How to compile:
|
||||||
---------------
|
---------------
|
||||||
|
|
||||||
See the official compiling howto: https://www.uhub.org/compile.php
|
See the official compiling howto: http://www.uhub.org/compile.php
|
||||||
|
|
||||||
Prerequisites
|
Prerequisites
|
||||||
|
|
||||||
@ -12,7 +12,7 @@ Before you try to compile µHub, please make sure the following prerequisites ar
|
|||||||
* openssl > 0.9.8 (or use "make USE_SSL=NO")
|
* openssl > 0.9.8 (or use "make USE_SSL=NO")
|
||||||
* sqlite > 3.x
|
* sqlite > 3.x
|
||||||
|
|
||||||
or read https://www.uhub.org/compile.php for more info.
|
or read http://www.uhub.org/compile.php for more info.
|
||||||
|
|
||||||
|
|
||||||
Linux, Mac OSX, FreeBSD, NetBSD and OpenBSD
|
Linux, Mac OSX, FreeBSD, NetBSD and OpenBSD
|
||||||
|
@ -31,7 +31,7 @@ The hub should send a packet containing the token back:
|
|||||||
'IECH {token} {host:port}', aswell as the same message via TCP.
|
'IECH {token} {host:port}', aswell as the same message via TCP.
|
||||||
|
|
||||||
If the client receives the message via UDP, it should now be able to determine the type of NAT.
|
If the client receives the message via UDP, it should now be able to determine the type of NAT.
|
||||||
If the client receives the message via TCP only it knows it has a firewall blocking incoming communication.
|
If the client receives the message via TCP only it knows it has a firewall blocking incomming communication.
|
||||||
If the client does not receive the message, it should assume a firewall is blocking all UDP communication,
|
If the client does not receive the message, it should assume a firewall is blocking all UDP communication,
|
||||||
and resume in passive mode.
|
and resume in passive mode.
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
Getting started guide
|
Getting started guide
|
||||||
---------------------
|
---------------------
|
||||||
|
|
||||||
|
(This document is maintained at http://www.extatic.org/uhub/getstarted.html )
|
||||||
|
|
||||||
Unpack your binaries
|
Unpack your binaries
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
@ -15,7 +17,6 @@ Create configuration files.
|
|||||||
If no configuration files are created, uhub will use the default parameters, so you can skip this step if you are in a hurry to see it run.
|
If no configuration files are created, uhub will use the default parameters, so you can skip this step if you are in a hurry to see it run.
|
||||||
|
|
||||||
As root, or use sudo.
|
As root, or use sudo.
|
||||||
|
|
||||||
% mkdir /etc/uhub
|
% mkdir /etc/uhub
|
||||||
% cp doc/uhub.conf /etc/uhub
|
% cp doc/uhub.conf /etc/uhub
|
||||||
% cp doc/users.conf /etc/uhub
|
% cp doc/users.conf /etc/uhub
|
||||||
@ -31,11 +32,8 @@ NOTE: It is important to use the "adc://" prefix, and the port number when using
|
|||||||
|
|
||||||
If you modify the configuration files in /etc/uhub you will have to notify uhub by sending a HUP signal.
|
If you modify the configuration files in /etc/uhub you will have to notify uhub by sending a HUP signal.
|
||||||
|
|
||||||
% ps aux | grep uhub
|
|
||||||
% kill -HUP <pid of uhub>
|
% kill -HUP <pid of uhub>
|
||||||
|
|
||||||
Or, for the lazy people
|
Or, for the lazy people
|
||||||
|
|
||||||
% killall -HUP uhub
|
% killall -HUP uhub
|
||||||
|
|
||||||
In order to run uhub as a daemon, start it with the -f switch which will make it fork into the background.
|
In order to run uhub as a daemon, start it with the -f switch which will make it fork into the background.
|
||||||
@ -43,25 +41,17 @@ In addition, use the -l to specify a log file instead of stdout. One can also sp
|
|||||||
if one wishes to run uhub as a specific user using the -u and -g switches.
|
if one wishes to run uhub as a specific user using the -u and -g switches.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
% uhub -f -l mylog.txt -u nobody -g nogroup
|
% uhub -f -l mylog.txt -u nobody -g nogroup
|
||||||
|
|
||||||
|
|
||||||
If you are planning to more than 1024 users on hub, you must increase the max number of file descriptors allowed.
|
If you are planning to more than 1024 users on hub, you must increase the max number of file descriptors allowed.
|
||||||
This limit needs to be higher than the configured max_users in uhub.conf.
|
This limit needs to be higher than the configured max_users in uhub.conf.
|
||||||
|
|
||||||
In Linux can add the following lines to /etc/security/limits.conf (allows for ~4000 users)
|
In linux can add the following lines to /etc/security/limits.conf (allows for ~4000 users)
|
||||||
* soft nofile 4096
|
* soft nofile 4096
|
||||||
* hard nofile 4096
|
* hard nofile 4096
|
||||||
|
|
||||||
Or, you can use (as root):
|
Or, you can use (as root):
|
||||||
|
|
||||||
% ulimit -n 4096
|
% ulimit -n 4096
|
||||||
|
|
||||||
You can interact with uhub in your hub main chat using the `!` prefix, followed by a command:
|
|
||||||
|
|
||||||
Example :
|
|
||||||
|
|
||||||
* to display help and the command you can use:
|
|
||||||
!help
|
|
||||||
|
|
||||||
Your mileage may vary -- Good luck!
|
Your mileage may vary -- Good luck!
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#
|
#
|
||||||
# chkconfig: - 91 35
|
# chkconfig: - 91 35
|
||||||
# description: Starts and stops the Uhub ( https://www.uhub.org ) daemons on RHEL\CentOS \
|
# description: Starts and stops the Uhub ( http://www.uhub.org ) daemons on RHEL\CentOS \
|
||||||
# used to provide p2p network services.
|
# used to provide p2p network services.
|
||||||
#
|
#
|
||||||
# pidfile: /var/run/uhub.pid
|
# pidfile: /var/run/uhub.pid
|
||||||
|
@ -41,7 +41,7 @@ plugin /usr/lib/uhub/mod_logging.so "file=/var/log/uhub.log"
|
|||||||
#
|
#
|
||||||
# Parameters:
|
# Parameters:
|
||||||
# motd: path/filename for the welcome message (message of the day)
|
# motd: path/filename for the welcome message (message of the day)
|
||||||
# rules: path/filename for the rules file
|
# rules: path/filenam for the rules file
|
||||||
#
|
#
|
||||||
# NOTE: The files MUST exist, however if you do not wish to provide one then these parameters can be omitted.
|
# NOTE: The files MUST exist, however if you do not wish to provide one then these parameters can be omitted.
|
||||||
#
|
#
|
||||||
@ -69,3 +69,4 @@ plugin /usr/lib/uhub/mod_welcome.so "motd=/etc/uhub/motd.txt rules=/etc/uhub/rul
|
|||||||
# history_default: when !history is provided without arguments, then this default number of messages are returned.
|
# history_default: when !history is provided without arguments, then this default number of messages are returned.
|
||||||
# history_connect: the number of chat history messages to send when users connect (0 = do not send any history)
|
# history_connect: the number of chat history messages to send when users connect (0 = do not send any history)
|
||||||
plugin /usr/lib/uhub/mod_chat_history.so "history_max=200 history_default=10 history_connect=5"
|
plugin /usr/lib/uhub/mod_chat_history.so "history_max=200 history_default=10 history_connect=5"
|
||||||
|
|
||||||
|
@ -39,4 +39,4 @@ is one of 'admin', 'super', 'op', 'user'
|
|||||||
This program was written by Jan Vidar Krey <janvidar@extatic.org>
|
This program was written by Jan Vidar Krey <janvidar@extatic.org>
|
||||||
.SH "BUG REPORTS"
|
.SH "BUG REPORTS"
|
||||||
If you find a bug in uhub please report it to
|
If you find a bug in uhub please report it to
|
||||||
.B https://github.com/janvidar/uhub/issues
|
.B http://bugs.extatic.org/
|
||||||
|
@ -69,4 +69,4 @@ To run uhub as a daemon, and log to a file:
|
|||||||
This program was written by Jan Vidar Krey <janvidar@extatic.org>
|
This program was written by Jan Vidar Krey <janvidar@extatic.org>
|
||||||
.SH "BUG REPORTS"
|
.SH "BUG REPORTS"
|
||||||
If you find a bug in uhub please report it to
|
If you find a bug in uhub please report it to
|
||||||
.B https://github.com/janvidar/uhub/issues
|
.B http://bugs.extatic.org/
|
||||||
|
@ -2,10 +2,10 @@
|
|||||||
# You should normally place this file in /etc/uhub/uhub.conf
|
# You should normally place this file in /etc/uhub/uhub.conf
|
||||||
# and customize some of the settings below.
|
# and customize some of the settings below.
|
||||||
#
|
#
|
||||||
# This file is read only to the uhub daemon, and if you
|
# This file is read only to the uhub deamon, and if you
|
||||||
# make changes to it while uhub is running you can send a
|
# make changes to it while uhub is running you can send a
|
||||||
# HUP signal to it ( $ killall -HUP uhub ), to reparse configuration (only on UNIX).
|
# HUP signal to it ( $ killall -HUP uhub ), to reparse configuration (only on UNIX).
|
||||||
# All configuration directives: https://www.uhub.org/config.php
|
# All configuration directives: http://www.uhub.org/config.php
|
||||||
|
|
||||||
# Bind to this port and address
|
# Bind to this port and address
|
||||||
# server_bind_addr=any means listen to "::" if IPv6 is supported
|
# server_bind_addr=any means listen to "::" if IPv6 is supported
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
inherit eutils
|
inherit eutils
|
||||||
|
|
||||||
if [ "$PV" != "9999" ]; then
|
if [ "$PV" != "9999" ]; then
|
||||||
SRC_URI="https://www.extatic.org/downloads/uhub/${P}-src.tar.bz2"
|
SRC_URI="http://www.extatic.org/downloads/uhub/${P}-src.tar.bz2"
|
||||||
KEYWORDS="~amd64 ~x86"
|
KEYWORDS="~amd64 ~x86"
|
||||||
else
|
else
|
||||||
inherit git
|
inherit git
|
||||||
@ -16,7 +16,7 @@ fi
|
|||||||
EAPI="2"
|
EAPI="2"
|
||||||
|
|
||||||
DESCRIPTION="High performance ADC hub"
|
DESCRIPTION="High performance ADC hub"
|
||||||
HOMEPAGE="https://www.uhub.org/"
|
HOMEPAGE="http://www.uhub.org/"
|
||||||
|
|
||||||
LICENSE="GPL-3"
|
LICENSE="GPL-3"
|
||||||
SLOT="0"
|
SLOT="0"
|
||||||
|
@ -5,7 +5,7 @@ Release: 2
|
|||||||
License: GPLv3
|
License: GPLv3
|
||||||
Group: Networking/File transfer
|
Group: Networking/File transfer
|
||||||
Source: uhub-%{version}.tar.gz
|
Source: uhub-%{version}.tar.gz
|
||||||
URL: https://www.uhub.org
|
URL: http://www.uhub.org
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||||
|
|
||||||
BuildRequires: sqlite-devel
|
BuildRequires: sqlite-devel
|
||||||
@ -80,7 +80,7 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
if [ $1 -gt 1 ] ; then
|
if [ $1 -gt 1 ] ; then
|
||||||
/etc/rc.d/init.d/uhub restart >/dev/null || :
|
/etc/rc.d/init.d/uhub restart >/dev/null || :
|
||||||
fi
|
fi
|
||||||
# need more information about add services and users in system
|
# need more informations about add services and users in system
|
||||||
/usr/sbin/adduser -M -d /tmp -G nobody -s /sbin/nologin -c 'The Uhub ADC p2p hub Daemon' uhub >/dev/null 2>&1 ||:
|
/usr/sbin/adduser -M -d /tmp -G nobody -s /sbin/nologin -c 'The Uhub ADC p2p hub Daemon' uhub >/dev/null 2>&1 ||:
|
||||||
# write SSL create
|
# write SSL create
|
||||||
echo "PLS see /usr/share/doc/uhub/"
|
echo "PLS see /usr/share/doc/uhub/"
|
||||||
|
@ -8,7 +8,7 @@ start on filesystem or runlevel [2345]
|
|||||||
stop on runlevel [!2345]
|
stop on runlevel [!2345]
|
||||||
|
|
||||||
# Allow the service to respawn, but if its happening too often
|
# Allow the service to respawn, but if its happening too often
|
||||||
# (10 times in 5 seconds) there's a problem and we should stop trying.
|
# (10 times in 5 seconds) theres a problem and we should stop trying.
|
||||||
respawn
|
respawn
|
||||||
respawn limit 10 5
|
respawn limit 10 5
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -118,8 +118,8 @@ typedef uint32_t fourcc_t;
|
|||||||
#define ADC_INF_FLAG_SUPPORT "SU" /* support (extensions, feature cast) */
|
#define ADC_INF_FLAG_SUPPORT "SU" /* support (extensions, feature cast) */
|
||||||
#define ADC_INF_FLAG_SHARED_SIZE "SS" /* size of total files shared in bytes */
|
#define ADC_INF_FLAG_SHARED_SIZE "SS" /* size of total files shared in bytes */
|
||||||
#define ADC_INF_FLAG_SHARED_FILES "SF" /* number of files shared */
|
#define ADC_INF_FLAG_SHARED_FILES "SF" /* number of files shared */
|
||||||
#define ADC_INF_FLAG_UPLOAD_SPEED "US" /* maximum upload speed achieved in bytes/sec */
|
#define ADC_INF_FLAG_UPLOAD_SPEED "US" /* maximum upload speed acheived in bytes/sec */
|
||||||
#define ADC_INF_FLAG_DOWNLOAD_SPEED "DS" /* maximum download speed achieved in bytes/sec */
|
#define ADC_INF_FLAG_DOWNLOAD_SPEED "DS" /* maximum download speed acheived in bytes/sec */
|
||||||
#define ADC_INF_FLAG_UPLOAD_SLOTS "SL" /* maximum upload slots (concurrent uploads) */
|
#define ADC_INF_FLAG_UPLOAD_SLOTS "SL" /* maximum upload slots (concurrent uploads) */
|
||||||
#define ADC_INF_FLAG_AUTO_SLOTS "AS" /* automatic slot if upload speed is less than this in bytes/sec */
|
#define ADC_INF_FLAG_AUTO_SLOTS "AS" /* automatic slot if upload speed is less than this in bytes/sec */
|
||||||
#define ADC_INF_FLAG_AUTO_SLOTS_MAX "AM" /* maximum number of automatic slots */
|
#define ADC_INF_FLAG_AUTO_SLOTS_MAX "AM" /* maximum number of automatic slots */
|
||||||
@ -134,7 +134,7 @@ typedef uint32_t fourcc_t;
|
|||||||
#define ADC_MSG_FLAG_PRIVATE "PM" /* message is a private message */
|
#define ADC_MSG_FLAG_PRIVATE "PM" /* message is a private message */
|
||||||
|
|
||||||
#define ADC_SCH_FLAG_INCLUDE "AN" /* include given search term */
|
#define ADC_SCH_FLAG_INCLUDE "AN" /* include given search term */
|
||||||
#define ADC_SCH_FLAG_EXCLUDE "NO" /* exclude given search term */
|
#define ADC_SCH_FLAG_EXCLUDE "NO" /* exclude given serach term */
|
||||||
#define ADC_SCH_FLAG_FILE_EXTENSION "EX" /* search only for files with the given file extension */
|
#define ADC_SCH_FLAG_FILE_EXTENSION "EX" /* search only for files with the given file extension */
|
||||||
#define ADC_SCH_FLAG_FILE_TYPE "TY" /* search only for files with this file type (separate type) */
|
#define ADC_SCH_FLAG_FILE_TYPE "TY" /* search only for files with this file type (separate type) */
|
||||||
#define ADC_SCH_FLAG_LESS_THAN "LE" /* search for files with this size or less */
|
#define ADC_SCH_FLAG_LESS_THAN "LE" /* search for files with this size or less */
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ enum msg_status_level
|
|||||||
extern struct adc_message* adc_msg_incref(struct adc_message* msg);
|
extern struct adc_message* adc_msg_incref(struct adc_message* msg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decrease the reference counter, and free the memory when appropriate.
|
* Decrease the reference counter, and free the memory when apropriate.
|
||||||
*/
|
*/
|
||||||
extern void adc_msg_free(struct adc_message* msg);
|
extern void adc_msg_free(struct adc_message* msg);
|
||||||
|
|
||||||
@ -159,7 +159,7 @@ extern char* adc_msg_get_argument(struct adc_message* cmd, int offset);
|
|||||||
*
|
*
|
||||||
* @arg prefix a 2 character argument prefix
|
* @arg prefix a 2 character argument prefix
|
||||||
* @arg string must be escaped (see adc_msg_escape).
|
* @arg string must be escaped (see adc_msg_escape).
|
||||||
* @return 0 if successful, or -1 if an error occurred.
|
* @return 0 if successful, or -1 if an error occured.
|
||||||
*/
|
*/
|
||||||
extern int adc_msg_replace_named_argument(struct adc_message* cmd, const char prefix[2], const char* string);
|
extern int adc_msg_replace_named_argument(struct adc_message* cmd, const char prefix[2], const char* string);
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ extern int adc_msg_replace_named_argument(struct adc_message* cmd, const char pr
|
|||||||
* Append an argument
|
* Append an argument
|
||||||
*
|
*
|
||||||
* @arg string must be escaped (see adc_msg_escape).
|
* @arg string must be escaped (see adc_msg_escape).
|
||||||
* @return 0 if successful, or -1 if an error occurred (out of memory).
|
* @return 0 if successful, or -1 if an error occured (out of memory).
|
||||||
*/
|
*/
|
||||||
extern int adc_msg_add_argument(struct adc_message* cmd, const char* string);
|
extern int adc_msg_add_argument(struct adc_message* cmd, const char* string);
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ extern int adc_msg_add_argument(struct adc_message* cmd, const char* string);
|
|||||||
*
|
*
|
||||||
* @arg prefix a 2 character argument prefix
|
* @arg prefix a 2 character argument prefix
|
||||||
* @arg string must be escaped (see adc_msg_escape).
|
* @arg string must be escaped (see adc_msg_escape).
|
||||||
* @return 0 if successful, or -1 if an error occurred (out of memory).
|
* @return 0 if successful, or -1 if an error occured (out of memory).
|
||||||
*/
|
*/
|
||||||
extern int adc_msg_add_named_argument(struct adc_message* cmd, const char prefix[2], const char* string);
|
extern int adc_msg_add_named_argument(struct adc_message* cmd, const char prefix[2], const char* string);
|
||||||
|
|
||||||
@ -186,7 +186,7 @@ extern int adc_msg_add_named_argument(struct adc_message* cmd, const char prefix
|
|||||||
*
|
*
|
||||||
* @arg prefix a 2 character argument prefix
|
* @arg prefix a 2 character argument prefix
|
||||||
* @arg string must NOT be escaped
|
* @arg string must NOT be escaped
|
||||||
* @return 0 if successful, or -1 if an error occurred (out of memory).
|
* @return 0 if successful, or -1 if an error occured (out of memory).
|
||||||
*/
|
*/
|
||||||
extern int adc_msg_add_named_argument_string(struct adc_message* cmd, const char prefix[2], const char* string);
|
extern int adc_msg_add_named_argument_string(struct adc_message* cmd, const char prefix[2], const char* string);
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ struct command_base;
|
|||||||
*
|
*
|
||||||
* @param cbase Command base pointer.
|
* @param cbase Command base pointer.
|
||||||
* @param user User who invoked the command.
|
* @param user User who invoked the command.
|
||||||
* @param message The message that is to be interpreted as a command (including the invocation prefix '!' or '+')
|
* @param message The message that is to be interpreted as a command (including the invokation prefix '!' or '+')
|
||||||
*
|
*
|
||||||
* @return a hub_command that must be freed with command_free(). @See struct hub_command.
|
* @return a hub_command that must be freed with command_free(). @See struct hub_command.
|
||||||
*/
|
*/
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@
|
|||||||
<option name="register_self" type="boolean" default="0">
|
<option name="register_self" type="boolean" default="0">
|
||||||
<short>Allow users to register themselves on the hub.</short>
|
<short>Allow users to register themselves on the hub.</short>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
If this is enabled guests can register their nickname on the hub using !register command.
|
If this is enabled guests can register their nickname on the hub.
|
||||||
Otherwise only operators can register users.
|
Otherwise only operators can register users.
|
||||||
]]></description>
|
]]></description>
|
||||||
<since>0.4.0</since>
|
<since>0.4.0</since>
|
||||||
@ -170,7 +170,7 @@
|
|||||||
<check min="1024" max="1048576" />
|
<check min="1024" max="1048576" />
|
||||||
<short>Max read buffer before parse, per user</short>
|
<short>Max read buffer before parse, per user</short>
|
||||||
<description><![CDATA[
|
<description><![CDATA[
|
||||||
Maximum receive buffer allowed before commands are processed. If a single ADC message exceeds this limit, it will be discarded by the hub. Use with caution.
|
Maximum receive buffer allowed before commands are procesed. If a single ADC message exceeds this limit, it will be discarded by the hub. Use with caution.
|
||||||
]]></description>
|
]]></description>
|
||||||
<since>0.1.3</since>
|
<since>0.1.3</since>
|
||||||
</option>
|
</option>
|
||||||
@ -567,7 +567,7 @@
|
|||||||
</option>
|
</option>
|
||||||
|
|
||||||
<option name="msg_inf_error_nick_taken" type="message" default="Nickname is already in use">
|
<option name="msg_inf_error_nick_taken" type="message" default="Nickname is already in use">
|
||||||
<description><![CDATA[This message will be sent to clients if their provided nickname is already in use on the hub.]]></description>
|
<description><![CDATA[This message will be sent to clients if their provided nickname is alredy in use on the hub.]]></description>
|
||||||
<since>0.2.0</since>
|
<since>0.2.0</since>
|
||||||
</option>
|
</option>
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -88,7 +88,7 @@ static int check_hash_tiger(const char* cid, const char* pid)
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FIXME: Only works for tiger hash. If a client doesn't support tiger we cannot let it in!
|
* FIXME: Only works for tiger hash. If a client doesnt support tiger we cannot let it in!
|
||||||
*/
|
*/
|
||||||
static int check_cid(struct hub_info* hub, struct hub_user* user, struct adc_message* cmd)
|
static int check_cid(struct hub_info* hub, struct hub_user* user, struct adc_message* cmd)
|
||||||
{
|
{
|
||||||
@ -337,19 +337,9 @@ static int check_logged_in(struct hub_info* hub, struct hub_user* user, struct a
|
|||||||
{
|
{
|
||||||
if (lookup1 == lookup2)
|
if (lookup1 == lookup2)
|
||||||
{
|
{
|
||||||
if (user_flag_get(lookup1, flag_choke))
|
LOG_DEBUG("check_logged_in: exact same user is logged in: %s", user->id.nick);
|
||||||
{
|
|
||||||
LOG_DEBUG("check_logged_in: exact same user is already logged in, but likely ghost: %s", user->id.nick);
|
|
||||||
|
|
||||||
// Old user unable to swallow data.
|
|
||||||
// Disconnect the existing user, and allow new user to enter.
|
|
||||||
hub_disconnect_user(hub, lookup1, quit_ghost_timeout);
|
hub_disconnect_user(hub, lookup1, quit_ghost_timeout);
|
||||||
}
|
return 0;
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_DEBUG("check_logged_in: exact same user is already logged in: %s", user->id.nick);
|
|
||||||
return status_msg_inf_error_cid_taken;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,12 +13,29 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "uhub.h"
|
#include "uhub.h"
|
||||||
|
|
||||||
|
struct ioq_send
|
||||||
|
{
|
||||||
|
size_t size; /** Size of send queue (in bytes, not messages) */
|
||||||
|
size_t offset; /** Queue byte offset in the first message. Should be 0 unless a partial write. */
|
||||||
|
#ifdef SSL_SUPPORT
|
||||||
|
size_t last_send; /** When using SSL, one have to send the exact same buffer and length if a write cannot complete. */
|
||||||
|
#endif
|
||||||
|
struct linked_list* queue; /** List of queued messages (struct adc_message) */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ioq_recv
|
||||||
|
{
|
||||||
|
char* buf;
|
||||||
|
size_t size;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG_SENDQ
|
#ifdef DEBUG_SENDQ
|
||||||
static void debug_msg(const char* prefix, struct adc_message* msg)
|
static void debug_msg(const char* prefix, struct adc_message* msg)
|
||||||
{
|
{
|
||||||
@ -147,6 +164,42 @@ int ioq_send_send(struct ioq_send* q, struct net_connection* con)
|
|||||||
struct adc_message* msg = list_get_first(q->queue);
|
struct adc_message* msg = list_get_first(q->queue);
|
||||||
if (!msg) return 0;
|
if (!msg) return 0;
|
||||||
uhub_assert(msg->cache && *msg->cache);
|
uhub_assert(msg->cache && *msg->cache);
|
||||||
|
|
||||||
|
#ifdef HAVE_FUNC_WRITEV
|
||||||
|
#define MAX_IOVEC 32
|
||||||
|
struct iovec vec[MAX_IOVEC];
|
||||||
|
size_t n = 0;
|
||||||
|
vec[0].iov_base = msg->cache + q->offset;
|
||||||
|
vec[0].iov_len = msg->length - q->offset;
|
||||||
|
|
||||||
|
for (struct adc_message* tmp = (struct adc_message*) list_get_next(q->queue), n = 1; tmp && n < MAX_IOVEC; tmp = (struct adc_message*) list_get_next(q->queue), n++)
|
||||||
|
{
|
||||||
|
vec[n].iov_base = msg->cache;
|
||||||
|
vec[n].iov_len = msg->length;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = net_con_writev(con, &iovec, n);
|
||||||
|
|
||||||
|
if (ret > 0)
|
||||||
|
{
|
||||||
|
while (ret > 0)
|
||||||
|
{
|
||||||
|
if (ret >= (msg->length - q->offset))
|
||||||
|
{
|
||||||
|
ret -= (msg->length - q->offset);
|
||||||
|
q->offset = 0;
|
||||||
|
ioq_send_remove(q, msg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
q->offset += ret;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
ret = net_con_send(con, msg->cache + q->offset, msg->length - q->offset);
|
ret = net_con_send(con, msg->cache + q->offset, msg->length - q->offset);
|
||||||
|
|
||||||
if (ret > 0)
|
if (ret > 0)
|
||||||
@ -159,8 +212,10 @@ int ioq_send_send(struct ioq_send* q, struct net_connection* con)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int ioq_send_is_empty(struct ioq_send* q)
|
int ioq_send_is_empty(struct ioq_send* q)
|
||||||
{
|
{
|
||||||
return (q->size - q->offset) == 0;
|
return (q->size - q->offset) == 0;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -21,25 +21,8 @@
|
|||||||
#define HAVE_UHUB_IO_QUEUE_H
|
#define HAVE_UHUB_IO_QUEUE_H
|
||||||
|
|
||||||
struct adc_message;
|
struct adc_message;
|
||||||
struct linked_list;
|
struct ioq_send;
|
||||||
typedef int (*ioq_write)(void* desc, const void* buf, size_t len);
|
struct ioq_recv;
|
||||||
typedef int (*ioq_read)(void* desc, void* buf, size_t len);
|
|
||||||
|
|
||||||
struct ioq_send
|
|
||||||
{
|
|
||||||
size_t size; /** Size of send queue (in bytes, not messages) */
|
|
||||||
size_t offset; /** Queue byte offset in the first message. Should be 0 unless a partial write. */
|
|
||||||
#ifdef SSL_SUPPORT
|
|
||||||
size_t last_send; /** When using SSL, one have to send the exact same buffer and length if a write cannot complete. */
|
|
||||||
#endif
|
|
||||||
struct linked_list* queue; /** List of queued messages (struct adc_message) */
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ioq_recv
|
|
||||||
{
|
|
||||||
char* buf;
|
|
||||||
size_t size;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a send queue
|
* Create a send queue
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ int main_loop()
|
|||||||
setup_signal_handlers(hub);
|
setup_signal_handlers(hub);
|
||||||
#ifdef SYSTEMD
|
#ifdef SYSTEMD
|
||||||
/* Notify the service manager that this daemon has
|
/* Notify the service manager that this daemon has
|
||||||
* been successfully initialized and shall enter the
|
* been successfully initalized and shall enter the
|
||||||
* main loop.
|
* main loop.
|
||||||
*/
|
*/
|
||||||
sd_notifyf(0, "READY=1\n"
|
sd_notifyf(0, "READY=1\n"
|
||||||
@ -471,7 +471,7 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
else if (ret == 0)
|
else if (ret == 0)
|
||||||
{
|
{
|
||||||
/* child process - detach from TTY */
|
/* child process - detatch from TTY */
|
||||||
fclose(stdin);
|
fclose(stdin);
|
||||||
fclose(stdout);
|
fclose(stdout);
|
||||||
fclose(stderr);
|
fclose(stderr);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -137,12 +137,6 @@ void net_event(struct net_connection* con, int event, void *arg)
|
|||||||
LOG_TRACE("net_event() : fd=%d, ev=%d, arg=%p", con->sd, (int) event, arg);
|
LOG_TRACE("net_event() : fd=%d, ev=%d, arg=%p", con->sd, (int) event, arg);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (event == NET_EVENT_ERROR)
|
|
||||||
{
|
|
||||||
hub_disconnect_user(user->hub, user, quit_socket_error);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event == NET_EVENT_TIMEOUT)
|
if (event == NET_EVENT_TIMEOUT)
|
||||||
{
|
{
|
||||||
if (user_is_connecting(user))
|
if (user_is_connecting(user))
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -102,6 +102,7 @@ struct plugin_handle* plugin_load(const char* filename, const char* config, stru
|
|||||||
int ret;
|
int ret;
|
||||||
struct plugin_handle* handle = (struct plugin_handle*) hub_malloc_zero(sizeof(struct plugin_handle));
|
struct plugin_handle* handle = (struct plugin_handle*) hub_malloc_zero(sizeof(struct plugin_handle));
|
||||||
struct uhub_plugin* plugin = plugin_open(filename);
|
struct uhub_plugin* plugin = plugin_open(filename);
|
||||||
|
struct plugin_hub_internals* internals = (struct plugin_hub_internals*) plugin->internals;
|
||||||
|
|
||||||
if (!plugin)
|
if (!plugin)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -117,7 +118,6 @@ struct plugin_handle* plugin_load(const char* filename, const char* config, stru
|
|||||||
unregister_f = plugin_lookup_symbol(plugin, "plugin_unregister");
|
unregister_f = plugin_lookup_symbol(plugin, "plugin_unregister");
|
||||||
|
|
||||||
// register hub internals
|
// register hub internals
|
||||||
struct plugin_hub_internals* internals = (struct plugin_hub_internals*) plugin->internals;
|
|
||||||
internals->unregister = unregister_f;
|
internals->unregister = unregister_f;
|
||||||
internals->hub = hub;
|
internals->hub = hub;
|
||||||
internals->callback_data = plugin_callback_data_create();
|
internals->callback_data = plugin_callback_data_create();
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -90,14 +90,11 @@ static void probe_net_event(struct net_connection* con, int events, void *arg)
|
|||||||
if (probe->hub->config->tls_enable)
|
if (probe->hub->config->tls_enable)
|
||||||
{
|
{
|
||||||
LOG_TRACE("Probed TLS %d.%d connection", (int) probe_recvbuf[9], (int) probe_recvbuf[10]);
|
LOG_TRACE("Probed TLS %d.%d connection", (int) probe_recvbuf[9], (int) probe_recvbuf[10]);
|
||||||
if (net_con_ssl_handshake(con, net_con_ssl_mode_server, probe->hub->ctx) < 0)
|
if (user_create(probe->hub, probe->connection, &probe->addr))
|
||||||
{
|
|
||||||
LOG_TRACE("TLS handshake negotiation failed.");
|
|
||||||
}
|
|
||||||
else if (user_create(probe->hub, probe->connection, &probe->addr))
|
|
||||||
{
|
{
|
||||||
probe->connection = 0;
|
probe->connection = 0;
|
||||||
}
|
}
|
||||||
|
net_con_ssl_handshake(con, net_con_ssl_mode_server, probe->hub->ctx);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -80,21 +80,18 @@ static int check_send_queue(struct hub_info* hub, struct hub_user* user, struct
|
|||||||
if (user_flag_get(user, flag_user_list))
|
if (user_flag_get(user, flag_user_list))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if ((user->send_queue->size + msg->length) > get_max_send_queue(hub))
|
if ((ioq_send_get_bytes(user->send_queue) + msg->length) > get_max_send_queue(hub))
|
||||||
{
|
{
|
||||||
user_flag_set(user, flag_choke);
|
|
||||||
LOG_WARN("send queue overflowed, message discarded.");
|
LOG_WARN("send queue overflowed, message discarded.");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (user->send_queue->size > get_max_send_queue_soft(hub))
|
if (ioq_send_get_bytes(user->send_queue) > get_max_send_queue_soft(hub))
|
||||||
{
|
{
|
||||||
user_flag_set(user, flag_choke);
|
|
||||||
LOG_WARN("send queue soft overflowed.");
|
LOG_WARN("send queue soft overflowed.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
user_flag_unset(user, flag_choke);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ enum user_quit_reason
|
|||||||
quit_timeout = 4, /** User timed out (no data for a while) */
|
quit_timeout = 4, /** User timed out (no data for a while) */
|
||||||
quit_send_queue = 5, /** User's send queue was overflowed */
|
quit_send_queue = 5, /** User's send queue was overflowed */
|
||||||
quit_memory_error = 6, /** Not enough memory available */
|
quit_memory_error = 6, /** Not enough memory available */
|
||||||
quit_socket_error = 7, /** A socket error occurred */
|
quit_socket_error = 7, /** A socket error occured */
|
||||||
quit_protocol_error = 8, /** Fatal protocol error */
|
quit_protocol_error = 8, /** Fatal protocol error */
|
||||||
quit_logon_error = 9, /** Unable to login (wrong password, CID/PID, etc) */
|
quit_logon_error = 9, /** Unable to login (wrong password, CID/PID, etc) */
|
||||||
quit_update_error = 10, /** Update error. INF update changed share/slot info and no longer satisfies the hub limits. */
|
quit_update_error = 10, /** Update error. INF update changed share/slot info and no longer satisfies the hub limits. */
|
||||||
@ -76,7 +76,7 @@ enum user_quit_reason
|
|||||||
quit_ghost_timeout = 12, /** The user is a ghost, and trying to login from another connection */
|
quit_ghost_timeout = 12, /** The user is a ghost, and trying to login from another connection */
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Returns an appropriate string for the given quit reason */
|
/** Returns an apropriate string for the given quit reason */
|
||||||
extern const char* user_get_quit_reason_string(enum user_quit_reason);
|
extern const char* user_get_quit_reason_string(enum user_quit_reason);
|
||||||
|
|
||||||
struct hub_user_info
|
struct hub_user_info
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ extern struct hub_user_manager* uman_init();
|
|||||||
* Shuts down the user manager.
|
* Shuts down the user manager.
|
||||||
* All users will be disconnected and deleted as part of this.
|
* All users will be disconnected and deleted as part of this.
|
||||||
*
|
*
|
||||||
* @return 0 on success, or -1 in an error occurred (invalid pointer).
|
* @return 0 on success, or -1 in an error occured (invalid pointer).
|
||||||
*/
|
*/
|
||||||
extern int uman_shutdown(struct hub_user_manager* users);
|
extern int uman_shutdown(struct hub_user_manager* users);
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ extern struct hub_user* uman_get_user_by_nick(struct hub_user_manager* users, co
|
|||||||
*
|
*
|
||||||
* @param[out] target the list of users matching the address
|
* @param[out] target the list of users matching the address
|
||||||
* @param range the IP range of users to match
|
* @param range the IP range of users to match
|
||||||
* @return The number of users matching the addresses, or -1 on error (mask is wrong).
|
* @return The number of users matching the addressess, or -1 on error (mask is wrong).
|
||||||
*/
|
*/
|
||||||
extern size_t uman_get_user_by_addr(struct hub_user_manager* users, struct linked_list* target, struct ip_range* range);
|
extern size_t uman_get_user_by_addr(struct hub_user_manager* users, struct linked_list* target, struct ip_range* range);
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -57,6 +57,48 @@ ssize_t net_con_send(struct net_connection* con, const void* buf, size_t len)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_FUNC_WRITEV
|
||||||
|
ssize_t net_con_writev(struct net_connection* con, const struct iovec* iov, size_t iocnt)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
#ifdef SSL_SUPPORT
|
||||||
|
if (!con->ssl)
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
ret = writev(con->sd, iovec, (int) iocnt);
|
||||||
|
if (ret == -1)
|
||||||
|
{
|
||||||
|
if (is_blocked_or_interrupted())
|
||||||
|
return 0;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#ifdef SSL_SUPPORT
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ssize_t total = 0;
|
||||||
|
ret = 0;
|
||||||
|
while (iocnt--)
|
||||||
|
{
|
||||||
|
ret = net_ssl_send(con, buf, len);
|
||||||
|
if (ret >= 0)
|
||||||
|
total += ret;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (total == 0 && !is_blocked_or_interrupted())
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return total;
|
||||||
|
}
|
||||||
|
#endif /* SSL_SUPPORT */
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ssize_t net_con_recv(struct net_connection* con, void* buf, size_t len)
|
ssize_t net_con_recv(struct net_connection* con, void* buf, size_t len)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -88,16 +88,21 @@ extern void net_con_close(struct net_connection* con);
|
|||||||
*
|
*
|
||||||
* @return returns the number of bytes sent.
|
* @return returns the number of bytes sent.
|
||||||
* 0 if no data is sent, and this function should be called again (EWOULDBLOCK/EINTR)
|
* 0 if no data is sent, and this function should be called again (EWOULDBLOCK/EINTR)
|
||||||
* <0 if an error occurred, the negative number contains the error code.
|
* <0 if an error occured, the negative number contains the error code.
|
||||||
*/
|
*/
|
||||||
extern ssize_t net_con_send(struct net_connection* con, const void* buf, size_t len);
|
extern ssize_t net_con_send(struct net_connection* con, const void* buf, size_t len);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_FUNC_WRITEV
|
||||||
|
extern ssize_t net_con_writev(struct net_connection* con, const struct iovec* iov, size_t iocnt);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Receive data
|
* Receive data
|
||||||
*
|
*
|
||||||
* @return returns the number of bytes sent.
|
* @return returns the number of bytes sent.
|
||||||
* 0 if no data is sent, and this function should be called again (EWOULDBLOCK/EINTR)
|
* 0 if no data is sent, and this function should be called again (EWOULDBLOCK/EINTR)
|
||||||
* <0 if an error occurred, the negative number contains the error code.
|
* <0 if an error occured, the negative number contains the error code.
|
||||||
*/
|
*/
|
||||||
extern ssize_t net_con_recv(struct net_connection* con, void* buf, size_t len);
|
extern ssize_t net_con_recv(struct net_connection* con, void* buf, size_t len);
|
||||||
|
|
||||||
@ -109,7 +114,7 @@ extern ssize_t net_con_recv(struct net_connection* con, void* buf, size_t len);
|
|||||||
extern ssize_t net_con_peek(struct net_connection* con, void* buf, size_t len);
|
extern ssize_t net_con_peek(struct net_connection* con, void* buf, size_t len);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set timeout for connection.
|
* Set timeout for connetion.
|
||||||
*
|
*
|
||||||
* @param seconds the number of seconds into the future.
|
* @param seconds the number of seconds into the future.
|
||||||
*/
|
*/
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -92,7 +92,7 @@ extern int ip_is_valid_ipv6(const char* address);
|
|||||||
*
|
*
|
||||||
* @param text_addr is an ipaddress either ipv6 or ipv4.
|
* @param text_addr is an ipaddress either ipv6 or ipv4.
|
||||||
* Special magic addresses called "any" and "loopback" exist,
|
* Special magic addresses called "any" and "loopback" exist,
|
||||||
* and will work across IPv6/IPv4.
|
* and will work accross IPv6/IPv4.
|
||||||
* @param port Fill the struct sockaddr* with the given port, can safely be ignored.
|
* @param port Fill the struct sockaddr* with the given port, can safely be ignored.
|
||||||
*/
|
*/
|
||||||
extern int ip_convert_address(const char* text_address, int port, struct sockaddr* addr, socklen_t* addr_len);
|
extern int ip_convert_address(const char* text_address, int port, struct sockaddr* addr, socklen_t* addr_len);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* uhub - A tiny ADC p2p connection hub
|
* uhub - A tiny ADC p2p connection hub
|
||||||
* Copyright (C) 2007-2019, Jan Vidar Krey
|
* Copyright (C) 2007-2014, Jan Vidar Krey
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -805,22 +805,4 @@ void net_stats_add_close()
|
|||||||
stats.closed++;
|
stats.closed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void net_stats_tls_add_accept()
|
|
||||||
{
|
|
||||||
stats.tls_accept++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void net_stats_tls_add_connect()
|
|
||||||
{
|
|
||||||
stats.tls_connect++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void net_stats_tls_add_error()
|
|
||||||
{
|
|
||||||
stats.tls_error++;
|
|
||||||
}
|
|
||||||
|
|
||||||
void net_stats_tls_add_close()
|
|
||||||
{
|
|
||||||
stats.tls_close++;
|
|
||||||
}
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* uhub - A tiny ADC p2p connection hub
|
* uhub - A tiny ADC p2p connection hub
|
||||||
* Copyright (C) 2007-2019, Jan Vidar Krey
|
* Copyright (C) 2007-2014, Jan Vidar Krey
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -28,10 +28,6 @@ struct net_statistics
|
|||||||
size_t accept;
|
size_t accept;
|
||||||
size_t closed;
|
size_t closed;
|
||||||
size_t errors;
|
size_t errors;
|
||||||
size_t tls_accept;
|
|
||||||
size_t tls_connect;
|
|
||||||
size_t tls_error;
|
|
||||||
size_t tls_close;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct net_socket_t;
|
struct net_socket_t;
|
||||||
@ -57,7 +53,7 @@ extern int net_initialize();
|
|||||||
extern int net_destroy();
|
extern int net_destroy();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the number of sockets currently being monitored.
|
* @return the number of sockets currrently being monitored.
|
||||||
*/
|
*/
|
||||||
extern int net_monitor_count();
|
extern int net_monitor_count();
|
||||||
|
|
||||||
@ -67,7 +63,7 @@ extern int net_monitor_count();
|
|||||||
extern int net_monitor_capacity();
|
extern int net_monitor_capacity();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the last error code occurred.
|
* @return the last error code occured.
|
||||||
*
|
*
|
||||||
* NOTE: On Windows this is the last error code from the socket library, but
|
* NOTE: On Windows this is the last error code from the socket library, but
|
||||||
* on UNIX this is the errno variable that can be overwritten by any
|
* on UNIX this is the errno variable that can be overwritten by any
|
||||||
@ -251,14 +247,9 @@ extern void net_stats_report();
|
|||||||
extern void net_stats_reset();
|
extern void net_stats_reset();
|
||||||
extern void net_stats_add_tx(size_t bytes);
|
extern void net_stats_add_tx(size_t bytes);
|
||||||
extern void net_stats_add_rx(size_t bytes);
|
extern void net_stats_add_rx(size_t bytes);
|
||||||
extern void net_stats_tls_add_accept();
|
|
||||||
extern void net_stats_tls_add_connect();
|
|
||||||
extern void net_stats_tls_add_error();
|
|
||||||
extern void net_stats_tls_add_close();
|
|
||||||
extern void net_stats_add_accept();
|
extern void net_stats_add_accept();
|
||||||
extern void net_stats_add_error();
|
extern void net_stats_add_error();
|
||||||
extern void net_stats_add_close();
|
extern void net_stats_add_close();
|
||||||
extern void net_stats_add_connect();
|
|
||||||
extern int net_stats_timeout();
|
extern int net_stats_timeout();
|
||||||
extern void net_stats_get(struct net_statistics** intermediate, struct net_statistics** total);
|
extern void net_stats_get(struct net_statistics** intermediate, struct net_statistics** total);
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* uhub - A tiny ADC p2p connection hub
|
* uhub - A tiny ADC p2p connection hub
|
||||||
* Copyright (C) 2007-2019, Jan Vidar Krey
|
* Copyright (C) 2007-2014, Jan Vidar Krey
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -27,10 +27,6 @@
|
|||||||
|
|
||||||
void net_stats_add_tx(size_t bytes);
|
void net_stats_add_tx(size_t bytes);
|
||||||
void net_stats_add_rx(size_t bytes);
|
void net_stats_add_rx(size_t bytes);
|
||||||
void net_stats_tls_add_accept();
|
|
||||||
void net_stats_tls_add_errors();
|
|
||||||
void net_stats_tls_add_accept();
|
|
||||||
|
|
||||||
|
|
||||||
struct net_ssl_openssl
|
struct net_ssl_openssl
|
||||||
{
|
{
|
||||||
@ -95,9 +91,7 @@ int net_ssl_library_init()
|
|||||||
int net_ssl_library_shutdown()
|
int net_ssl_library_shutdown()
|
||||||
{
|
{
|
||||||
ERR_clear_error();
|
ERR_clear_error();
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
||||||
ERR_remove_state(0);
|
ERR_remove_state(0);
|
||||||
#endif
|
|
||||||
|
|
||||||
ENGINE_cleanup();
|
ENGINE_cleanup();
|
||||||
CONF_modules_unload(1);
|
CONF_modules_unload(1);
|
||||||
@ -112,115 +106,36 @@ int net_ssl_library_shutdown()
|
|||||||
|
|
||||||
static void add_io_stats(struct net_ssl_openssl* handle)
|
static void add_io_stats(struct net_ssl_openssl* handle)
|
||||||
{
|
{
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
if (handle->bio->num_read > handle->bytes_rx)
|
||||||
unsigned long num_read = handle->bio->num_read;
|
|
||||||
unsigned long num_write = handle->bio->num_write;
|
|
||||||
#else
|
|
||||||
unsigned long num_read = BIO_number_read(handle->bio);
|
|
||||||
unsigned long num_write = BIO_number_written(handle->bio);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (num_read > handle->bytes_rx)
|
|
||||||
{
|
{
|
||||||
net_stats_add_rx(num_read - handle->bytes_rx);
|
net_stats_add_rx(handle->bio->num_read - handle->bytes_rx);
|
||||||
handle->bytes_rx = num_read;
|
handle->bytes_rx = handle->bio->num_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (num_write > handle->bytes_tx)
|
if (handle->bio->num_write > handle->bytes_tx)
|
||||||
{
|
{
|
||||||
net_stats_add_tx(num_write - handle->bytes_tx);
|
net_stats_add_tx(handle->bio->num_write - handle->bytes_tx);
|
||||||
handle->bytes_tx = num_write;
|
handle->bytes_tx = handle->bio->num_write;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static const SSL_METHOD* get_ssl_method(const char* tls_version, long* flags)
|
static const SSL_METHOD* get_ssl_method(const char* tls_version)
|
||||||
{
|
{
|
||||||
if (!flags)
|
|
||||||
{
|
|
||||||
LOG_ERROR("flags is null");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tls_version || !*tls_version)
|
if (!tls_version || !*tls_version)
|
||||||
{
|
{
|
||||||
LOG_ERROR("tls_version is not set.");
|
LOG_ERROR("tls_version is not set.");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
*flags = 0;
|
|
||||||
*flags |= SSL_OP_NO_SSLv2;
|
|
||||||
*flags |= SSL_OP_NO_SSLv3;
|
|
||||||
|
|
||||||
if (!strcmp(tls_version, "1.0"))
|
if (!strcmp(tls_version, "1.0"))
|
||||||
{
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
||||||
return TLSv1_method();
|
return TLSv1_method();
|
||||||
#endif
|
if (!strcmp(tls_version, "1.1"))
|
||||||
}
|
|
||||||
else if (!strcmp(tls_version, "1.1"))
|
|
||||||
{
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
||||||
return TLSv1_1_method();
|
return TLSv1_1_method();
|
||||||
#else
|
if (!strcmp(tls_version, "1.2"))
|
||||||
*flags |= SSL_OP_NO_TLSv1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else if (!strcmp(tls_version, "1.2"))
|
|
||||||
{
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
||||||
return TLSv1_2_method();
|
return TLSv1_2_method();
|
||||||
#else
|
|
||||||
*flags |= SSL_OP_NO_TLSv1;
|
|
||||||
*flags |= SSL_OP_NO_TLSv1_1;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else if (!strcmp(tls_version, "1.3"))
|
|
||||||
{
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
||||||
LOG_ERROR("TLS 1.3 is not supported by this version of OpenSSL");
|
|
||||||
return 0;
|
|
||||||
#else
|
|
||||||
*flags |= SSL_OP_NO_TLSv1;
|
|
||||||
*flags |= SSL_OP_NO_TLSv1_1;
|
|
||||||
*flags |= SSL_OP_NO_TLSv1_2;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LOG_ERROR("Unable to recognize tls_version: %s", tls_version);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#if OPENSSL_VERSION_NUMBER < 0x10100000L
|
|
||||||
// never gets here!
|
|
||||||
#else
|
|
||||||
return TLS_method();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
LOG_ERROR("Unable to recognize tls_version.");
|
||||||
* List of supported protocols for ALPN.
|
return 0;
|
||||||
* We only support "adc" protocol.
|
|
||||||
*/
|
|
||||||
unsigned char alpn_protocols[] = {
|
|
||||||
3, 'a', 'd', 'c',
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback for the server to select a protocol from the list
|
|
||||||
* sent by the client via ALPN.
|
|
||||||
*/
|
|
||||||
static int alpn_server_select_protocol(SSL *ssl, const unsigned char **out, unsigned char *outlen,
|
|
||||||
const unsigned char *in, unsigned int inlen, void *arg)
|
|
||||||
{
|
|
||||||
int res = SSL_select_next_proto((unsigned char **)out, outlen,
|
|
||||||
alpn_protocols, sizeof(alpn_protocols), in, inlen);
|
|
||||||
if (res == OPENSSL_NPN_NO_OVERLAP)
|
|
||||||
{
|
|
||||||
// set default protocol
|
|
||||||
*out = alpn_protocols;
|
|
||||||
*outlen = 1+alpn_protocols[0];
|
|
||||||
}
|
|
||||||
return SSL_TLSEXT_ERR_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -229,8 +144,7 @@ static int alpn_server_select_protocol(SSL *ssl, const unsigned char **out, unsi
|
|||||||
struct ssl_context_handle* net_ssl_context_create(const char* tls_version, const char* tls_ciphersuite)
|
struct ssl_context_handle* net_ssl_context_create(const char* tls_version, const char* tls_ciphersuite)
|
||||||
{
|
{
|
||||||
struct net_context_openssl* ctx = (struct net_context_openssl*) hub_malloc_zero(sizeof(struct net_context_openssl));
|
struct net_context_openssl* ctx = (struct net_context_openssl*) hub_malloc_zero(sizeof(struct net_context_openssl));
|
||||||
long flags = 0;
|
const SSL_METHOD* ssl_method = get_ssl_method(tls_version);
|
||||||
const SSL_METHOD* ssl_method = get_ssl_method(tls_version, &flags);
|
|
||||||
|
|
||||||
if (!ssl_method)
|
if (!ssl_method)
|
||||||
{
|
{
|
||||||
@ -240,18 +154,23 @@ struct ssl_context_handle* net_ssl_context_create(const char* tls_version, const
|
|||||||
|
|
||||||
ctx->ssl = SSL_CTX_new(ssl_method);
|
ctx->ssl = SSL_CTX_new(ssl_method);
|
||||||
|
|
||||||
|
/* Disable SSLv2 */
|
||||||
|
SSL_CTX_set_options(ctx->ssl, SSL_OP_NO_SSLv2);
|
||||||
|
|
||||||
|
// #ifdef SSL_OP_NO_SSLv3
|
||||||
|
/* Disable SSLv3 */
|
||||||
|
SSL_CTX_set_options(ctx->ssl, SSL_OP_NO_SSLv3);
|
||||||
|
// #endif
|
||||||
|
|
||||||
// FIXME: Why did we need this again?
|
// FIXME: Why did we need this again?
|
||||||
SSL_CTX_set_quiet_shutdown(ctx->ssl, 1);
|
SSL_CTX_set_quiet_shutdown(ctx->ssl, 1);
|
||||||
|
|
||||||
#ifdef SSL_OP_NO_COMPRESSION
|
#ifdef SSL_OP_NO_COMPRESSION
|
||||||
/* Disable compression */
|
/* Disable compression */
|
||||||
LOG_TRACE("Disabling SSL compression."); /* "CRIME" attack */
|
LOG_TRACE("Disabling SSL compression."); /* "CRIME" attack */
|
||||||
flags |= SSL_OP_NO_COMPRESSION;
|
SSL_CTX_set_options(ctx->ssl, SSL_OP_NO_COMPRESSION);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Set flags
|
|
||||||
SSL_CTX_set_options(ctx->ssl, flags);
|
|
||||||
|
|
||||||
/* Set preferred cipher suite */
|
/* Set preferred cipher suite */
|
||||||
if (SSL_CTX_set_cipher_list(ctx->ssl, tls_ciphersuite) != 1)
|
if (SSL_CTX_set_cipher_list(ctx->ssl, tls_ciphersuite) != 1)
|
||||||
{
|
{
|
||||||
@ -261,8 +180,6 @@ struct ssl_context_handle* net_ssl_context_create(const char* tls_version, const
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
SSL_CTX_set_alpn_select_cb(ctx->ssl, alpn_server_select_protocol, NULL);
|
|
||||||
|
|
||||||
return (struct ssl_context_handle*) ctx;
|
return (struct ssl_context_handle*) ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -333,16 +250,13 @@ static int handle_openssl_error(struct net_connection* con, int ret, int read)
|
|||||||
|
|
||||||
case SSL_ERROR_SSL:
|
case SSL_ERROR_SSL:
|
||||||
net_ssl_set_state(handle, tls_st_error);
|
net_ssl_set_state(handle, tls_st_error);
|
||||||
net_stats_tls_add_error();
|
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
case SSL_ERROR_SYSCALL:
|
case SSL_ERROR_SYSCALL:
|
||||||
net_ssl_set_state(handle, tls_st_error);
|
net_ssl_set_state(handle, tls_st_error);
|
||||||
net_stats_tls_add_error();
|
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
net_stats_tls_add_error();
|
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -358,7 +272,6 @@ ssize_t net_con_ssl_accept(struct net_connection* con)
|
|||||||
{
|
{
|
||||||
net_con_update(con, NET_EVENT_READ);
|
net_con_update(con, NET_EVENT_READ);
|
||||||
net_ssl_set_state(handle, tls_st_connected);
|
net_ssl_set_state(handle, tls_st_connected);
|
||||||
net_stats_tls_add_accept();
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
return handle_openssl_error(con, ret, tls_st_accepting);
|
return handle_openssl_error(con, ret, tls_st_accepting);
|
||||||
@ -377,13 +290,10 @@ ssize_t net_con_ssl_connect(struct net_connection* con)
|
|||||||
{
|
{
|
||||||
net_con_update(con, NET_EVENT_READ);
|
net_con_update(con, NET_EVENT_READ);
|
||||||
net_ssl_set_state(handle, tls_st_connected);
|
net_ssl_set_state(handle, tls_st_connected);
|
||||||
net_stats_tls_add_connect();
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = handle_openssl_error(con, ret, tls_st_connecting);
|
ret = handle_openssl_error(con, ret, tls_st_connecting);
|
||||||
|
|
||||||
if (ret != 0)
|
|
||||||
LOG_ERROR("net_con_ssl_connect: ret=%d", ret);
|
LOG_ERROR("net_con_ssl_connect: ret=%d", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -423,7 +333,7 @@ ssize_t net_ssl_send(struct net_connection* con, const void* buf, size_t len)
|
|||||||
{
|
{
|
||||||
struct net_ssl_openssl* handle = get_handle(con);
|
struct net_ssl_openssl* handle = get_handle(con);
|
||||||
|
|
||||||
LOG_TRACE("net_ssl_send(), state=%d", (int) handle->state);
|
LOG_ERROR("net_ssl_send(), state=%d", (int) handle->state);
|
||||||
|
|
||||||
if (handle->state == tls_st_error)
|
if (handle->state == tls_st_error)
|
||||||
return -2;
|
return -2;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along wtimeout_evtith this program. If not, see <https://www.gnu.org/licenses/>.
|
* along wtimeout_evtith this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -35,16 +35,6 @@ struct plugin_command
|
|||||||
struct linked_list* args;
|
struct linked_list* args;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum plugin_command_arg_type
|
|
||||||
{
|
|
||||||
plugin_cmd_arg_type_integer,
|
|
||||||
plugin_cmd_arg_type_string,
|
|
||||||
plugin_cmd_arg_type_user,
|
|
||||||
plugin_cmd_arg_type_address,
|
|
||||||
plugin_cmd_arg_type_range,
|
|
||||||
plugin_cmd_arg_type_credentials,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct plugin_command_arg_data
|
struct plugin_command_arg_data
|
||||||
{
|
{
|
||||||
enum plugin_command_arg_type type;
|
enum plugin_command_arg_type type;
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -28,7 +28,6 @@
|
|||||||
#include "util/credentials.h"
|
#include "util/credentials.h"
|
||||||
#include "network/ipcalc.h"
|
#include "network/ipcalc.h"
|
||||||
#include "plugin_api/types.h"
|
#include "plugin_api/types.h"
|
||||||
#include "plugin_api/command_api.h"
|
|
||||||
|
|
||||||
typedef void (*on_connection_accepted_t)(struct plugin_handle*, struct ip_addr_encap*);
|
typedef void (*on_connection_accepted_t)(struct plugin_handle*, struct ip_addr_encap*);
|
||||||
typedef void (*on_connection_refused_t)(struct plugin_handle*, struct ip_addr_encap*);
|
typedef void (*on_connection_refused_t)(struct plugin_handle*, struct ip_addr_encap*);
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -93,6 +93,15 @@ struct ban_info
|
|||||||
time_t expiry; /* Time when the ban record expires */
|
time_t expiry; /* Time when the ban record expires */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum plugin_command_arg_type
|
||||||
|
{
|
||||||
|
plugin_cmd_arg_type_integer,
|
||||||
|
plugin_cmd_arg_type_string,
|
||||||
|
plugin_cmd_arg_type_user,
|
||||||
|
plugin_cmd_arg_type_address,
|
||||||
|
plugin_cmd_arg_type_range,
|
||||||
|
plugin_cmd_arg_type_credentials,
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* HAVE_UHUB_PLUGIN_TYPES_H */
|
#endif /* HAVE_UHUB_PLUGIN_TYPES_H */
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -26,7 +26,7 @@
|
|||||||
#include "util/list.h"
|
#include "util/list.h"
|
||||||
#include "util/cbuffer.h"
|
#include "util/cbuffer.h"
|
||||||
|
|
||||||
#define MAX_HISTORY_SIZE 614400
|
#define MAX_HISTORY_SIZE 16384
|
||||||
|
|
||||||
struct chat_history_data
|
struct chat_history_data
|
||||||
{
|
{
|
||||||
@ -142,7 +142,7 @@ void user_login(struct plugin_handle* plugin, struct plugin_user* user)
|
|||||||
struct cbuffer* buf = NULL;
|
struct cbuffer* buf = NULL;
|
||||||
struct linked_list* found = (struct linked_list*) list_create();
|
struct linked_list* found = (struct linked_list*) list_create();
|
||||||
|
|
||||||
sql_execute(data, get_messages_callback, found, "SELECT from_nick,message, datetime(time, 'localtime') as time FROM chat_history ORDER BY time DESC LIMIT 0,%d;", (int) data->history_connect);
|
sql_execute(data, get_messages_callback, found, "SELECT * FROM chat_history ORDER BY time DESC LIMIT 0,%d;", (int) data->history_connect);
|
||||||
|
|
||||||
if (data->history_connect > 0 && list_size(found) > 0)
|
if (data->history_connect > 0 && list_size(found) > 0)
|
||||||
{
|
{
|
||||||
@ -180,7 +180,7 @@ static int command_history(struct plugin_handle* plugin, struct plugin_user* use
|
|||||||
else
|
else
|
||||||
maxlines = data->history_default;
|
maxlines = data->history_default;
|
||||||
|
|
||||||
sql_execute(data, get_messages_callback, found, "SELECT from_nick,message, datetime(time, 'localtime') as time FROM chat_history ORDER BY time DESC LIMIT 0,%d;", maxlines);
|
sql_execute(data, get_messages_callback, found, "SELECT * FROM chat_history ORDER BY time DESC LIMIT 0,%d;", maxlines);
|
||||||
|
|
||||||
size_t linecount = list_size(found);
|
size_t linecount = list_size(found);
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -30,7 +30,7 @@ enum Warnings
|
|||||||
struct user_info
|
struct user_info
|
||||||
{
|
{
|
||||||
sid_t sid; // The SID of the user
|
sid_t sid; // The SID of the user
|
||||||
int warnings; // The number of denies (used to track whether or not a warning should be sent). @see enum Warnings.
|
int warnings; // The number of denies (used to track wether or not a warning should be sent). @see enum Warnings.
|
||||||
};
|
};
|
||||||
|
|
||||||
struct chat_only_data
|
struct chat_only_data
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
* GNU General Public License for more details.
|
* GNU General Public License for more details.
|
||||||
*
|
*
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user