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