Compare commits

..

45 Commits

Author SHA1 Message Date
fdc1ccc68e kick off CI
All checks were successful
continuous-integration/drone/push Build is passing
2020-03-22 07:57:35 -07:00
0875ba15f5 adds drone ci config 2020-03-22 07:48:16 -07:00
Jan Vidar Krey
35d8088b44 Handle socket errors from connected clients.
If a TLS error occurs, it could end up in a situation where the network handler code did not want to
read or write because it only had the error flag set. However, this was not handled, which left the
socket triggering in the event loop - but nothing was done to handle it.

This can easily cause a 100% cpu situation - the hub is still functioning though while this is
happening.
2019-12-13 10:51:40 +01:00
Jan Vidar Krey
cff10910ad Issue 72: Improve ghost user detection
uhub has the ability to disconnect a 'ghost' user, e.g. if a user
reconnects then uhub will kick the existing user if it is still there.
However, this could also be triggered abusively by having two "tabs" or windows
connect at the same time from the same client. The process of connecting a new
client is rather expensive because it triggers a lot of updates on all connections.

With this change, uhub will only attempt to disconnect the existing client if
it is marked with the "flag_choke" flag, which indicates that messages must be
dropped simply because the client is not accepting data fast enough. This will
cause the new connection to fail because the user is already logged in.

This can be further improved by adding a timestamp for when the connection
previously was provable working. Which is possibly a better and more reliable
way of detecting ghost users.
2019-12-01 13:16:28 +01:00
Jan Vidar Krey
78a7039240 Fix CPU spikes for TLS connections using incompatible TLS protocol versions. 2019-06-18 16:01:44 +02:00
Jan Vidar Krey
0ae96b0da8 Add statistics about OpenSSL events such as handshakes, closes and errors. 2019-06-18 15:59:22 +02:00
Jan Vidar Krey
022a9895ec fixup! Fix OpenSSL error, wrong initialization order. 2019-04-24 10:53:39 +02:00
Jan Vidar Krey
891adb84fb fixup! Fix OpenSSL error, wrong initialization order. 2019-04-24 10:50:31 +02:00
Jan Vidar Krey
9762b9389d fixup! Fix OpenSSL error, wrong initialization order. 2019-04-24 10:46:59 +02:00
Jan Vidar Krey
076e75897b Fix OpenSSL error, wrong initialization order. 2019-04-24 10:32:01 +02:00
Jan Vidar Krey
bc8974b9a3 Add better TLS protocol negotiation for OpenSSL >1.0.1 2019-04-23 16:16:36 +02:00
Boris Pek
1eb00ac04a Update link in README. 2019-04-23 15:59:03 +02:00
Boris Pek
cf3a6e06df Secure URLs: http --> https (part 2) 2019-04-23 15:59:03 +02:00
Boris Pek
cb04255006 Secure URLs: http --> https (part 1) 2019-04-23 15:59:03 +02:00
Jan Vidar Krey
2a57dc859d Merge branch 'direct-connect-alpn_static' 2019-03-31 19:34:19 +02:00
Jan Vidar Krey
212064c166 Fix alpn_server_select_protocol to be static. 2019-03-31 19:33:46 +02:00
Jan Vidar Krey
56426f7b2a Merge branch 'alpn_static' of git://github.com/direct-connect/uhub into direct-connect-alpn_static 2019-03-31 19:27:50 +02:00
Jan Vidar Krey
00bd8ba24d Compile with Ubuntu 16.04/xenial on Travis CI 2019-03-19 21:10:00 +01:00
Jan Vidar Krey
46906a9a9c Merge branch 'master' of github.com:janvidar/uhub 2019-03-15 11:31:29 +01:00
Denys Smirnov
566cd9a9db advertise ADC protocol with ALPN 2019-03-15 02:19:19 +02:00
Boris Pek
b27c44e633 cmake: fix build out of source tree
when there is only read access to sources.
2019-02-25 19:50:56 +01:00
Boris Pek
d25fead3a8 Fix spelling errors 2019-02-25 19:46:24 +01:00
Boris Pek
ef83b31cec Fix spelling errors 2019-02-25 19:46:24 +01:00
Boris Pek
be1ad4f475 Fix cross-compilation for MS Windows using MinGW
[Thanks to Felix Brucker]
(Closes: #55)
2019-01-14 12:49:35 +01:00
Boris Pek
3435d53478 Use secure URL of git submodule in .gitmodules
(Closes: #58)
2019-01-14 12:48:00 +01:00
Felix Brucker
9038f56efe Add Dockerfile 2019-01-02 10:42:40 +01:00
Jan Vidar Krey
de01486c0f Fix plug-in API header files. 2018-11-27 13:20:41 +01:00
Jan Vidar Krey
c383a53105 Fix crash if unable to load plugin. 2018-11-21 11:00:20 +01:00
Kcchouette
f0b67ea4cd Update config.xml 2018-11-20 11:56:07 +01:00
Kcchouette
ac96ace7df Finish adding bots to uhub-passwd
Related to https://github.com/janvidar/uhub/pull/28
2018-11-18 20:32:00 +01:00
Kcchouette
7970f80114 Update getstarted.txt 2018-11-18 20:31:37 +01:00
Kcchouette
62216a7afe Update issue url (#48)
* Update issue url

* Update uhub.1

* update bugs URL
2018-11-18 20:30:23 +01:00
Felix Brucker
99711a5c6e Allow many large messages 2018-10-11 23:29:32 +02:00
Felix Brucker
e43aea35cc Use localtime instead of utc 2018-10-11 23:29:32 +02:00
makefu
d54d723c59 add aarch64 to supported architectures
closes #46
2018-10-11 23:24:11 +02:00
Jan Vidar Krey
c813231c8d
Merge pull request #44 from Kcchouette/patch-1
Update plugins.conf
2018-04-30 15:23:43 +02:00
Kcchouette
debbca572f
Update plugins.conf 2018-04-30 15:22:42 +02:00
Jan Vidar Krey
a8ee6e7f60 Bump version to 0.5.1 2018-02-26 14:13:21 +00:00
Jan Vidar Krey
f0e9b2ffd9 Add support for OpenSSL 1.1 2018-02-26 10:58:41 +00:00
Jan Vidar Krey
ba19048ebc Rename the test binary to autotest-bin, to avoid naming conflicts for the reserved 'test' target. 2018-02-19 11:59:34 +01:00
Jan Vidar Krey
fd05f13fe4 Make error message if sqlite3 is not found! 2018-02-19 11:44:43 +01:00
Jan Vidar Krey
11538d6909 Mute debug log messages for net_send() that were incorrectly classified as error messages. 2018-01-15 17:00:56 +00:00
Yorhel
90d05c9a19 mod_logging: Fix inverted if statement in syslog config check 2016-07-11 09:26:34 +00:00
Jan Vidar Krey
ed5a59b16c Merge pull request #35 from CoiLock/master
Fixed compilation on systemd > 210
2016-03-07 18:17:07 +01:00
CoiLock
70f2a43f67 Fixed compilation on systemd > 210 2016-03-07 17:54:07 +01:00
137 changed files with 480 additions and 389 deletions

17
.drone.yml Normal file
View File

@ -0,0 +1,17 @@
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
View File

@ -21,5 +21,3 @@ 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
View File

@ -1,3 +1,3 @@
[submodule "thirdparty/sqlite"] [submodule "thirdparty/sqlite"]
path = thirdparty/sqlite path = thirdparty/sqlite
url = git://github.com/janvidar/sqlite.git url = https://github.com/janvidar/sqlite.git

View File

@ -1,4 +1,5 @@
language: cpp language: cpp
dist: xenial
compiler: compiler:
- gcc - gcc
- clang - clang
@ -9,3 +10,5 @@ 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
View File

@ -1,2 +1 @@
Bugs are tracked on: http://bugs.extatic.org/ Bugs are tracked on: https://github.com/janvidar/uhub/issues

View File

@ -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 0) set (UHUB_VERSION_PATCH 1)
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)
@ -26,8 +26,7 @@ find_package(Git)
find_package(Sqlite3) find_package(Sqlite3)
include(TestBigEndian) include(TestBigEndian)
include(CheckSymbolExists) include(CheckSymbolExists)
include(CheckFunctionExists)
include(CheckIncludeFile) include(CheckIncludeFile)
include(CheckTypeSize) include(CheckTypeSize)
@ -55,10 +54,13 @@ 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_DAEMON REQUIRED libsystemd-daemon) pkg_search_module(SD REQUIRED libsystemd)
pkg_search_module(SD_JOURNAL REQUIRED libsystemd-journal)
endif() endif()
if (MSVC) if (MSVC)
@ -70,21 +72,12 @@ 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_type_size( ssize_t SSIZE_T )
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_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})
@ -115,7 +108,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(test ${CMAKE_SOURCE_DIR}/autotest/test.c ${uhub_SOURCES} ) add_executable(autotest-bin ${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)
@ -129,13 +122,6 @@ 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
@ -151,28 +137,32 @@ 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(test ${CMAKE_DL_LIBS} adc network utils) target_link_libraries(autotest-bin ${CMAKE_DL_LIBS} adc network utils)
target_link_libraries(mod_example utils) target_link_libraries(mod_example utils)
target_link_libraries(mod_welcome utils) target_link_libraries(mod_welcome network 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 utils) target_link_libraries(mod_logging network 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(test pthread) target_link_libraries(autotest-bin 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})
@ -211,7 +201,7 @@ endif()
if(SSL_SUPPORT) if(SSL_SUPPORT)
target_link_libraries(uhub ${SSL_LIBS}) target_link_libraries(uhub ${SSL_LIBS})
target_link_libraries(test ${SSL_LIBS}) target_link_libraries(autotest-bin ${SSL_LIBS})
if(UNIX) if(UNIX)
target_link_libraries(uhub-admin ${SSL_LIBS}) target_link_libraries(uhub-admin ${SSL_LIBS})
endif() endif()
@ -223,19 +213,16 @@ if(SSL_SUPPORT)
endif() endif()
if (SYSTEMD_SUPPORT) if (SYSTEMD_SUPPORT)
target_link_libraries(uhub ${SD_DAEMON_LIBRARIES}) target_link_libraries(uhub ${SD_LIBRARIES})
target_link_libraries(uhub ${SD_JOURNAL_LIBRARIES}) target_link_libraries(autotest-bin ${SD_LIBRARIES})
target_link_libraries(test ${SD_DAEMON_LIBRARIES}) target_link_libraries(uhub-passwd ${SD_LIBRARIES})
target_link_libraries(test ${SD_JOURNAL_LIBRARIES}) target_link_libraries(uhub-admin ${SD_LIBRARIES})
target_link_libraries(uhub-passwd ${SD_JOURNAL_LIBRARIES}) include_directories(${SD_INCLUDE_DIRS})
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_SOURCE_DIR}/version.h") configure_file ("${PROJECT_SOURCE_DIR}/version.h.in" "${PROJECT_BINARY_DIR}/version.h")
configure_file ("${PROJECT_SOURCE_DIR}/system.h.in" "${PROJECT_SOURCE_DIR}/system.h") configure_file ("${PROJECT_SOURCE_DIR}/system.h.in" "${PROJECT_BINARY_DIR}/system.h")
# mark_as_advanced(FORCE CMAKE_BUILD_TYPE) # mark_as_advanced(FORCE CMAKE_BUILD_TYPE)
# if (RELEASE) # if (RELEASE)

View File

@ -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 Normal file
View File

@ -0,0 +1,19 @@
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"]

View File

@ -1,8 +1,13 @@
# 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:
http://www.uhub.org/ https://www.uhub.org/
For a list of compatible ADC clients, see: For a list of compatible ADC clients, see:
http://en.wikipedia.org/wiki/Advanced_Direct_Connect#Client_software https://en.wikipedia.org/wiki/Comparison_of_ADC_software#Client_software
# on dockerhub
* https://hub.docker.com/r/sneak/uhub

View File

@ -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: http://www.extatic.org/uhub/ Homepage: https://www.uhub.org/
EOF EOF
cd .. cd ..

View File

@ -34,8 +34,8 @@ cmake ${CMAKEOPTS} \
make VERBOSE=1 make VERBOSE=1
make VERBOSE=1 test make VERBOSE=1 autotest-bin
./test ./autotest-bin
sudo make install sudo make install

View File

@ -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 libaries to use sqlite3 # SQLITE3_LIBRARIES List of libraries 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
View File

@ -20,5 +20,5 @@ Description: High performance ADC p2p hub
- Advanced access control support - Advanced access control support
- Easy configuration - Easy configuration
. .
Homepage: http://www.uhub.org/ Homepage: https://www.uhub.org/

2
debian/copyright vendored
View File

@ -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 <http://www.gnu.org/licenses/>. along with this program. If not, see <https://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'.

View File

@ -67,7 +67,7 @@ Accepting new users
| | | | | |
| V | | V |
| --------------------- --------------------- | --------------------- ---------------------
| | Send password | ------> | Reveive and check | | | Send password | ------> | Receive and check |
| | request, if needed| | password. | | | request, if needed| | password. |
| --------------------- --------------------- | --------------------- ---------------------
| | | |

View File

@ -1,7 +1,7 @@
How to compile: How to compile:
--------------- ---------------
See the official compiling howto: http://www.uhub.org/compile.php See the official compiling howto: https://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 http://www.uhub.org/compile.php for more info. or read https://www.uhub.org/compile.php for more info.
Linux, Mac OSX, FreeBSD, NetBSD and OpenBSD Linux, Mac OSX, FreeBSD, NetBSD and OpenBSD

View File

@ -28,10 +28,10 @@ The UDP packet SHOULD be echoed by the hub.
This UDP packet should contain simply 'HECH {cid} {token}' (Hub echo). This UDP packet should contain simply 'HECH {cid} {token}' (Hub echo).
The hub should send a packet containing the token back: 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}', as well 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 incomming communication. If the client receives the message via TCP only it knows it has a firewall blocking incoming 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.

View File

@ -1,8 +1,6 @@
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:
@ -17,6 +15,7 @@ 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
@ -32,8 +31,11 @@ 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.
@ -41,17 +43,25 @@ 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!

View File

@ -1,7 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# chkconfig: - 91 35 # chkconfig: - 91 35
# description: Starts and stops the Uhub ( http://www.uhub.org ) daemons on RHEL\CentOS \ # description: Starts and stops the Uhub ( https://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

View File

@ -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/filenam for the rules file # rules: path/filename 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,4 +69,3 @@ 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"

View File

@ -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 http://bugs.extatic.org/ .B https://github.com/janvidar/uhub/issues

View File

@ -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 http://bugs.extatic.org/ .B https://github.com/janvidar/uhub/issues

View File

@ -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 deamon, and if you # This file is read only to the uhub daemon, 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: http://www.uhub.org/config.php # All configuration directives: https://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

View File

@ -4,7 +4,7 @@
inherit eutils inherit eutils
if [ "$PV" != "9999" ]; then if [ "$PV" != "9999" ]; then
SRC_URI="http://www.extatic.org/downloads/uhub/${P}-src.tar.bz2" SRC_URI="https://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="http://www.uhub.org/" HOMEPAGE="https://www.uhub.org/"
LICENSE="GPL-3" LICENSE="GPL-3"
SLOT="0" SLOT="0"

View File

@ -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: http://www.uhub.org URL: https://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 informations about add services and users in system # need more information 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/"

View File

@ -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) theres a problem and we should stop trying. # (10 times in 5 seconds) there's a problem and we should stop trying.
respawn respawn
respawn limit 10 5 respawn limit 10 5

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 acheived in bytes/sec */ #define ADC_INF_FLAG_UPLOAD_SPEED "US" /* maximum upload speed achieved in bytes/sec */
#define ADC_INF_FLAG_DOWNLOAD_SPEED "DS" /* maximum download speed acheived in bytes/sec */ #define ADC_INF_FLAG_DOWNLOAD_SPEED "DS" /* maximum download speed achieved 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 serach term */ #define ADC_SCH_FLAG_EXCLUDE "NO" /* exclude given search 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 */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 apropriate. * Decrease the reference counter, and free the memory when appropriate.
*/ */
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 occured. * @return 0 if successful, or -1 if an error occurred.
*/ */
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 occured (out of memory). * @return 0 if successful, or -1 if an error occurred (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 occured (out of memory). * @return 0 if successful, or -1 if an error occurred (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 occured (out of memory). * @return 0 if successful, or -1 if an error occurred (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);

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 invokation prefix '!' or '+') * @param message The message that is to be interpreted as a command (including the invocation 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.
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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. If this is enabled guests can register their nickname on the hub using !register command.
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 procesed. 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 processed. 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 alredy in use on the hub.]]></description> <description><![CDATA[This message will be sent to clients if their provided nickname is already in use on the hub.]]></description>
<since>0.2.0</since> <since>0.2.0</since>
</option> </option>

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 doesnt support tiger we cannot let it in! * FIXME: Only works for tiger hash. If a client doesn't 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,9 +337,19 @@ static int check_logged_in(struct hub_info* hub, struct hub_user* user, struct a
{ {
if (lookup1 == lookup2) if (lookup1 == lookup2)
{ {
LOG_DEBUG("check_logged_in: exact same user is logged in: %s", user->id.nick); if (user_flag_get(lookup1, flag_choke))
hub_disconnect_user(hub, lookup1, quit_ghost_timeout); {
return 0; 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);
}
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
{ {

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -13,29 +13,12 @@
* 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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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)
{ {
@ -160,46 +143,10 @@ static void ioq_send_remove(struct ioq_send* q, struct adc_message* msg)
int ioq_send_send(struct ioq_send* q, struct net_connection* con) int ioq_send_send(struct ioq_send* q, struct net_connection* con)
{ {
int ret; int ret;
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)
@ -212,10 +159,8 @@ 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;

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -21,8 +21,25 @@
#define HAVE_UHUB_IO_QUEUE_H #define HAVE_UHUB_IO_QUEUE_H
struct adc_message; struct adc_message;
struct ioq_send; struct linked_list;
struct ioq_recv; typedef int (*ioq_write)(void* desc, const void* buf, size_t len);
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

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 initalized and shall enter the * been successfully initialized 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 - detatch from TTY */ /* child process - detach from TTY */
fclose(stdin); fclose(stdin);
fclose(stdout); fclose(stdout);
fclose(stderr); fclose(stderr);

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -137,6 +137,12 @@ 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))

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -102,7 +102,6 @@ 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;
@ -118,6 +117,7 @@ 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();

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -90,11 +90,14 @@ 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 (user_create(probe->hub, probe->connection, &probe->addr)) if (net_con_ssl_handshake(con, net_con_ssl_mode_server, probe->hub->ctx) < 0)
{
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
{ {

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -80,18 +80,21 @@ 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 ((ioq_send_get_bytes(user->send_queue) + msg->length) > get_max_send_queue(hub)) if ((user->send_queue->size + 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 (ioq_send_get_bytes(user->send_queue) > get_max_send_queue_soft(hub)) if (user->send_queue->size > 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;
} }

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 occured */ quit_socket_error = 7, /** A socket error occurred */
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 apropriate string for the given quit reason */ /** Returns an appropriate 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

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 occured (invalid pointer). * @return 0 on success, or -1 in an error occurred (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 addressess, or -1 on error (mask is wrong). * @return The number of users matching the addresses, 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);

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -57,48 +57,6 @@ 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;

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -88,21 +88,16 @@ 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 occured, the negative number contains the error code. * <0 if an error occurred, 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 occured, the negative number contains the error code. * <0 if an error occurred, 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);
@ -114,7 +109,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 connetion. * Set timeout for connection.
* *
* @param seconds the number of seconds into the future. * @param seconds the number of seconds into the future.
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 accross IPv6/IPv4. * and will work across 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);

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* uhub - A tiny ADC p2p connection hub * uhub - A tiny ADC p2p connection hub
* Copyright (C) 2007-2014, Jan Vidar Krey * Copyright (C) 2007-2019, 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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -805,4 +805,22 @@ 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++;
}

View File

@ -1,6 +1,6 @@
/* /*
* uhub - A tiny ADC p2p connection hub * uhub - A tiny ADC p2p connection hub
* Copyright (C) 2007-2014, Jan Vidar Krey * Copyright (C) 2007-2019, 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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -28,6 +28,10 @@ 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;
@ -53,7 +57,7 @@ extern int net_initialize();
extern int net_destroy(); extern int net_destroy();
/** /**
* @return the number of sockets currrently being monitored. * @return the number of sockets currently being monitored.
*/ */
extern int net_monitor_count(); extern int net_monitor_count();
@ -63,7 +67,7 @@ extern int net_monitor_count();
extern int net_monitor_capacity(); extern int net_monitor_capacity();
/** /**
* @return the last error code occured. * @return the last error code occurred.
* *
* 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
@ -247,9 +251,14 @@ 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);

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -1,6 +1,6 @@
/* /*
* uhub - A tiny ADC p2p connection hub * uhub - A tiny ADC p2p connection hub
* Copyright (C) 2007-2014, Jan Vidar Krey * Copyright (C) 2007-2019, 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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -27,6 +27,10 @@
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
{ {
@ -91,7 +95,9 @@ 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);
@ -106,36 +112,115 @@ 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 (handle->bio->num_read > handle->bytes_rx) #if OPENSSL_VERSION_NUMBER < 0x10100000L
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(handle->bio->num_read - handle->bytes_rx); net_stats_add_rx(num_read - handle->bytes_rx);
handle->bytes_rx = handle->bio->num_read; handle->bytes_rx = num_read;
} }
if (handle->bio->num_write > handle->bytes_tx) if (num_write > handle->bytes_tx)
{ {
net_stats_add_tx(handle->bio->num_write - handle->bytes_tx); net_stats_add_tx(num_write - handle->bytes_tx);
handle->bytes_tx = handle->bio->num_write; handle->bytes_tx = num_write;
} }
} }
static const SSL_METHOD* get_ssl_method(const char* tls_version) static const SSL_METHOD* get_ssl_method(const char* tls_version, long* flags)
{ {
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;
} }
if (!strcmp(tls_version, "1.0")) *flags = 0;
return TLSv1_method(); *flags |= SSL_OP_NO_SSLv2;
if (!strcmp(tls_version, "1.1")) *flags |= SSL_OP_NO_SSLv3;
return TLSv1_1_method();
if (!strcmp(tls_version, "1.2"))
return TLSv1_2_method();
LOG_ERROR("Unable to recognize tls_version."); if (!strcmp(tls_version, "1.0"))
return 0; {
#if OPENSSL_VERSION_NUMBER < 0x10100000L
return TLSv1_method();
#endif
}
else if (!strcmp(tls_version, "1.1"))
{
#if OPENSSL_VERSION_NUMBER < 0x10100000L
return TLSv1_1_method();
#else
*flags |= SSL_OP_NO_TLSv1;
#endif
}
else if (!strcmp(tls_version, "1.2"))
{
#if OPENSSL_VERSION_NUMBER < 0x10100000L
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
}
/**
* List of supported protocols for ALPN.
* 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;
} }
/** /**
@ -144,7 +229,8 @@ static const SSL_METHOD* get_ssl_method(const char* tls_version)
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));
const SSL_METHOD* ssl_method = get_ssl_method(tls_version); long flags = 0;
const SSL_METHOD* ssl_method = get_ssl_method(tls_version, &flags);
if (!ssl_method) if (!ssl_method)
{ {
@ -154,23 +240,18 @@ 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 */
SSL_CTX_set_options(ctx->ssl, SSL_OP_NO_COMPRESSION); flags |= 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)
{ {
@ -180,6 +261,8 @@ 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;
} }
@ -250,13 +333,16 @@ 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;
} }
@ -272,6 +358,7 @@ 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);
@ -290,11 +377,14 @@ 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);
LOG_ERROR("net_con_ssl_connect: ret=%d", ret);
if (ret != 0)
LOG_ERROR("net_con_ssl_connect: ret=%d", ret);
return ret; return ret;
} }
@ -333,7 +423,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_ERROR("net_ssl_send(), state=%d", (int) handle->state); LOG_TRACE("net_ssl_send(), state=%d", (int) handle->state);
if (handle->state == tls_st_error) if (handle->state == tls_st_error)
return -2; return -2;

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along wtimeout_evtith this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -35,6 +35,16 @@ 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;

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -28,6 +28,7 @@
#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*);

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */
@ -93,15 +93,6 @@ 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 */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 16384 #define MAX_HISTORY_SIZE 614400
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 chat_history ORDER BY time DESC LIMIT 0,%d;", (int) data->history_connect); 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);
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 chat_history ORDER BY time DESC LIMIT 0,%d;", maxlines); 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);
size_t linecount = list_size(found); size_t linecount = list_size(found);

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://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 wether or not a warning should be sent). @see enum Warnings. int warnings; // The number of denies (used to track whether or not a warning should be sent). @see enum Warnings.
}; };
struct chat_only_data struct chat_only_data

View File

@ -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 <http://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
* *
*/ */

Some files were not shown because too many files have changed in this diff Show More