Compare commits
	
		
			74 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 312d0783cf | |||
| 8564297e2a | |||
| c015835d3a | |||
| 1d14abd875 | |||
| 74bed4bc02 | |||
| 8f229f41e1 | |||
| b4d6decc06 | |||
| 04f87b7587 | |||
| b7dd384048 | |||
| e101afab38 | |||
| 37e9165548 | |||
| 25bb7a978d | |||
| 7d531a9bbf | |||
| 1c009f394a | |||
| 649ea0baf7 | |||
| de942e40ac | |||
| 5d3c2bea95 | |||
| 620418fa3b | |||
| 28e4bc1399 | |||
| a0becea2fc | |||
| 6a72c7382b | |||
| 86d7b7aed5 | |||
| 07201b7bdc | |||
| 2ae916fc1a | |||
| 2ba8908024 | |||
| 4a287a724e | |||
| 87e1236b30 | |||
| 0044672b85 | |||
| e921a619b0 | |||
| 25282cfe23 | |||
| 8187bedcb6 | |||
| 79140c3abc | |||
| 4d11be0b85 | |||
| b746c014aa | |||
| f69edd6606 | |||
| 385de6f4fe | |||
| 0fdffa0e50 | |||
| 36c59ff375 | |||
| 71f3532e04 | |||
| d135728424 | |||
| 2185af0b7d | |||
| f22764ec56 | |||
| 02c7c6dcd6 | |||
| 364eb009ca | |||
| d4cbc576e2 | |||
| 9bb9c9868c | |||
| cd8e3d6d41 | |||
| fa965a85e4 | |||
| 59a4c356dd | |||
| c912726f49 | |||
| fbfe0ba18a | |||
| 5ee210a5b7 | |||
| 5d55d7f6de | |||
| b952fc1f6d | |||
| 89065e4d34 | |||
| bc4b8ee19f | |||
| 281ef2e93e | |||
| 9b22d72fd1 | |||
| f11635ed7f | |||
| a1e47ca4c9 | |||
| 6c7a2ce3c8 | |||
| 153d8c55d9 | |||
| d14bc2df53 | |||
| d8299a1231 | |||
| 465c2e4082 | |||
| 2a97c01215 | |||
| 152ba0847d | |||
| fe88e30bf5 | |||
| a8a852d4b3 | |||
| e41f503202 | |||
| 762aaffecf | |||
| 99ac971b66 | |||
| e75e840346 | |||
| 3d59a94554 | 
@@ -1,3 +1,5 @@
 | 
			
		||||
sudo: required
 | 
			
		||||
dist: trusty
 | 
			
		||||
language: c
 | 
			
		||||
notifications:
 | 
			
		||||
 irc:
 | 
			
		||||
@@ -25,15 +27,18 @@ compiler:
 | 
			
		||||
before_install:
 | 
			
		||||
 # We need this PPA for a recent version of libedit
 | 
			
		||||
 - sudo add-apt-repository ppa:ondrej/php5-5.6 -y
 | 
			
		||||
 # We need this PPA for Lua 5.3
 | 
			
		||||
 - sudo add-apt-repository ppa:vbernat/haproxy-1.6 -y
 | 
			
		||||
 - sudo apt-get update -qq
 | 
			
		||||
install:
 | 
			
		||||
 - sudo apt-get install -y help2man libedit-dev expect
 | 
			
		||||
 - sudo apt-get install -y libncursesw5-dev libreadline-dev libedit-dev
 | 
			
		||||
   liblua5.3-dev help2man expect
 | 
			
		||||
before_script:
 | 
			
		||||
 - mkdir build
 | 
			
		||||
 - cd build
 | 
			
		||||
script:
 | 
			
		||||
 - cmake .. -DCMAKE_INSTALL_PREFIX=/usr
 | 
			
		||||
   -DWANT_READLINE=$readline -DWANT_LIBEDIT=$libedit
 | 
			
		||||
 - make
 | 
			
		||||
 - make all test
 | 
			
		||||
 - cpack -G DEB
 | 
			
		||||
 - ../test
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
project (uirc3 C)
 | 
			
		||||
cmake_minimum_required (VERSION 2.8.5)
 | 
			
		||||
cmake_minimum_required (VERSION 2.8.11)
 | 
			
		||||
 | 
			
		||||
# Options
 | 
			
		||||
option (WANT_READLINE "Use GNU Readline for the UI (better)" ON)
 | 
			
		||||
@@ -14,7 +14,7 @@ endif ("${CMAKE_C_COMPILER_ID}" MATCHES "GNU" OR CMAKE_COMPILER_IS_GNUC)
 | 
			
		||||
# Version
 | 
			
		||||
set (project_VERSION_MAJOR "0")
 | 
			
		||||
set (project_VERSION_MINOR "9")
 | 
			
		||||
set (project_VERSION_PATCH "1")
 | 
			
		||||
set (project_VERSION_PATCH "2")
 | 
			
		||||
 | 
			
		||||
set (project_VERSION "${project_VERSION_MAJOR}")
 | 
			
		||||
set (project_VERSION "${project_VERSION}.${project_VERSION_MINOR}")
 | 
			
		||||
@@ -38,6 +38,20 @@ list (APPEND project_libraries ${libssl_LIBRARIES})
 | 
			
		||||
include_directories (${libssl_INCLUDE_DIRS})
 | 
			
		||||
link_directories (${libssl_LIBRARY_DIRS})
 | 
			
		||||
 | 
			
		||||
# FIXME: other Lua versions may be acceptable, don't know yet
 | 
			
		||||
pkg_search_module (lua lua53 lua5.3 lua-5.3 lua>=5.3)
 | 
			
		||||
option (WITH_LUA "Enable experimental support for Lua plugins" ${lua_FOUND})
 | 
			
		||||
 | 
			
		||||
if (WITH_LUA)
 | 
			
		||||
	if (NOT lua_FOUND)
 | 
			
		||||
		message (FATAL_ERROR "Lua library not found")
 | 
			
		||||
	endif (NOT lua_FOUND)
 | 
			
		||||
 | 
			
		||||
	list (APPEND project_libraries ${lua_LIBRARIES})
 | 
			
		||||
	include_directories (${lua_INCLUDE_DIRS})
 | 
			
		||||
	link_directories (${lua_LIBRARY_DIRS})
 | 
			
		||||
endif (WITH_LUA)
 | 
			
		||||
 | 
			
		||||
# -lpthread is only there for debugging (gdb & errno)
 | 
			
		||||
# -lrt is only for glibc < 2.17
 | 
			
		||||
# -liconv may or may not be a part of libc
 | 
			
		||||
@@ -75,16 +89,13 @@ elseif (WANT_LIBEDIT)
 | 
			
		||||
endif ((WANT_READLINE AND WANT_LIBEDIT) OR (NOT WANT_READLINE AND NOT WANT_LIBEDIT))
 | 
			
		||||
 | 
			
		||||
# Generate a configuration file
 | 
			
		||||
if (WANT_READLINE)
 | 
			
		||||
	set (HAVE_READLINE 1)
 | 
			
		||||
endif (WANT_READLINE)
 | 
			
		||||
 | 
			
		||||
if (WANT_LIBEDIT)
 | 
			
		||||
	set (HAVE_EDITLINE 1)
 | 
			
		||||
endif (WANT_LIBEDIT)
 | 
			
		||||
set (HAVE_READLINE "${WANT_READLINE}")
 | 
			
		||||
set (HAVE_EDITLINE "${WANT_LIBEDIT}")
 | 
			
		||||
set (HAVE_LUA      "${WITH_LUA}")
 | 
			
		||||
 | 
			
		||||
include (GNUInstallDirs)
 | 
			
		||||
set (plugin_dir ${CMAKE_INSTALL_LIBDIR}/${PROJECT_NAME})
 | 
			
		||||
# ZyklonB is currently an odd duck but degesch follows normal XDG rules
 | 
			
		||||
set (zyklonb_plugin_dir ${CMAKE_INSTALL_LIBDIR}/zyklonb/plugins)
 | 
			
		||||
configure_file (${PROJECT_SOURCE_DIR}/config.h.in ${PROJECT_BINARY_DIR}/config.h)
 | 
			
		||||
include_directories (${PROJECT_SOURCE_DIR} ${PROJECT_BINARY_DIR})
 | 
			
		||||
 | 
			
		||||
@@ -111,13 +122,44 @@ target_link_libraries (degesch ${project_libraries})
 | 
			
		||||
add_executable (kike kike.c kike-replies.c ${common_sources} ${common_headers})
 | 
			
		||||
target_link_libraries (kike ${project_libraries})
 | 
			
		||||
 | 
			
		||||
# Tests
 | 
			
		||||
function (make_tests_for target_name)
 | 
			
		||||
	get_target_property (sources   ${target_name} SOURCES)
 | 
			
		||||
	get_target_property (libraries ${target_name} LINK_LIBRARIES)
 | 
			
		||||
 | 
			
		||||
	set (test test-${target_name})
 | 
			
		||||
	add_executable (${test} ${sources})
 | 
			
		||||
	target_link_libraries (${test} ${libraries})
 | 
			
		||||
	add_test (NAME ${test} COMMAND ${test})
 | 
			
		||||
	set_target_properties (${test} PROPERTIES COMPILE_DEFINITIONS TESTING)
 | 
			
		||||
endfunction (make_tests_for)
 | 
			
		||||
 | 
			
		||||
include (CTest)
 | 
			
		||||
if (BUILD_TESTING)
 | 
			
		||||
	make_tests_for (degesch)
 | 
			
		||||
endif (BUILD_TESTING)
 | 
			
		||||
 | 
			
		||||
# Various clang-based diagnostics, loads of fake positives and spam
 | 
			
		||||
file (GLOB clang_tidy_sources *.c)
 | 
			
		||||
set (clang_tidy_checks misc-* readability-*
 | 
			
		||||
	-readability-braces-around-statements
 | 
			
		||||
	-readability-named-parameter)
 | 
			
		||||
string (REPLACE ";" "," clang_tidy_checks "${clang_tidy_checks}")
 | 
			
		||||
 | 
			
		||||
set (CMAKE_EXPORT_COMPILE_COMMANDS ON)
 | 
			
		||||
add_custom_target (clang-tidy
 | 
			
		||||
	COMMAND clang-tidy -p ${PROJECT_BINARY_DIR} -checks=${clang_tidy_checks}
 | 
			
		||||
		${clang_tidy_sources} 1>&2
 | 
			
		||||
	USES_TERMINAL
 | 
			
		||||
	WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
 | 
			
		||||
 | 
			
		||||
# Installation
 | 
			
		||||
install (TARGETS zyklonb degesch kike DESTINATION ${CMAKE_INSTALL_BINDIR})
 | 
			
		||||
install (FILES LICENSE DESTINATION ${CMAKE_INSTALL_DOCDIR})
 | 
			
		||||
 | 
			
		||||
foreach (plugin coin eval script youtube ${plugins})
 | 
			
		||||
	install (FILES plugins/${plugin} DESTINATION ${plugin_dir})
 | 
			
		||||
endforeach (plugin)
 | 
			
		||||
install (DIRECTORY plugins/zyklonb/
 | 
			
		||||
	DESTINATION ${zyklonb_plugin_dir} USE_SOURCE_PERMISSIONS)
 | 
			
		||||
install (DIRECTORY plugins/degesch/
 | 
			
		||||
	DESTINATION ${CMAKE_INSTALL_DATADIR}/degesch/plugins)
 | 
			
		||||
 | 
			
		||||
# Generate documentation from program help
 | 
			
		||||
find_program (HELP2MAN_EXECUTABLE help2man)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								NEWS
									
									
									
									
									
								
							@@ -1,3 +1,29 @@
 | 
			
		||||
0.9.2 (2015-12-31)
 | 
			
		||||
 | 
			
		||||
 * degesch: added rudimentary support for Lua scripting
 | 
			
		||||
 | 
			
		||||
 * degesch: added detection of pasting, so that it doesn't trigger other
 | 
			
		||||
   keyboard shortcuts, such as for autocomplete
 | 
			
		||||
 | 
			
		||||
 * degesch: added auto-away capability
 | 
			
		||||
 | 
			
		||||
 * degesch: added an /oper command
 | 
			
		||||
 | 
			
		||||
 * degesch: libedit backend works again
 | 
			
		||||
 
 | 
			
		||||
 * degesch: added capability to edit the input line using VISUAL/EDITOR
 | 
			
		||||
 | 
			
		||||
 * degesch: added Meta-Tab to switch to the last used buffer
 | 
			
		||||
 | 
			
		||||
 * degesch: correctly respond to stopping and resuming (SIGTSTP)
 | 
			
		||||
 | 
			
		||||
 * degesch: fixed decoding of text formatting
 | 
			
		||||
 | 
			
		||||
 * degesch: unseen PMs now show up as highlights
 | 
			
		||||
 | 
			
		||||
 * degesch: various bugfixes
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
0.9.1 (2015-09-25)
 | 
			
		||||
 | 
			
		||||
 * All "ssl" options have been renamed to "tls"
 | 
			
		||||
@@ -20,7 +46,7 @@
 | 
			
		||||
 * degesch: joins, parts, nick changes and quits don't count as new buffer
 | 
			
		||||
   activity anymore
 | 
			
		||||
 | 
			
		||||
 * degesch: add Meta-H to open the full log file
 | 
			
		||||
 * degesch: added Meta-H to open the full log file
 | 
			
		||||
 | 
			
		||||
 * degesch: various bugfixes and little improvements
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,43 +1,54 @@
 | 
			
		||||
uirc3
 | 
			
		||||
=====
 | 
			
		||||
:compact-option:
 | 
			
		||||
 | 
			
		||||
The unethical IRC trinity.  This project consists of an experimental IRC client,
 | 
			
		||||
daemon, and bot.  It's all you're ever going to need for chatting.
 | 
			
		||||
daemon, and bot.  It's all you're ever going to need for chatting, as long as
 | 
			
		||||
you can make do with minimalist software.
 | 
			
		||||
 | 
			
		||||
All of them have these potentially interesting properties:
 | 
			
		||||
 | 
			
		||||
 - full IPv6 support
 | 
			
		||||
 - TLS support, including client certificates
 | 
			
		||||
 - minimal dependencies
 | 
			
		||||
 - very compact and easy to hack on
 | 
			
		||||
 - compact and arguably easy to hack on
 | 
			
		||||
 - permissive license
 | 
			
		||||
 | 
			
		||||
degesch
 | 
			
		||||
-------
 | 
			
		||||
The IRC client.  It is largely defined by being built on top of GNU Readline.
 | 
			
		||||
Its interface should however feel familiar for weechat or irssi users.
 | 
			
		||||
The IRC client.  It is largely defined by being built on top of GNU Readline
 | 
			
		||||
that has been hacked to death.  Its interface should feel somewhat familiar for
 | 
			
		||||
weechat or irssi users.
 | 
			
		||||
 | 
			
		||||
This is the youngest and largest application within the project.  It has most of
 | 
			
		||||
the stuff you'd expect of an IRC client, such as being able to set up multiple
 | 
			
		||||
servers, powerful configuration system, integrated help, mIRC text formatting,
 | 
			
		||||
CTCP queries, automatic splitting of overlong messages, autocomplete, logging
 | 
			
		||||
to file, and command aliases.
 | 
			
		||||
This is the largest application within the project.  It has most of the stuff
 | 
			
		||||
you'd expect of an IRC client, such as being able to set up multiple servers,
 | 
			
		||||
a powerful configuration system, integrated help, text formatting, CTCP queries,
 | 
			
		||||
automatic splitting of overlong messages, autocomplete, logging to file,
 | 
			
		||||
auto-away, command aliases and rudimentary support for Lua scripting.
 | 
			
		||||
 | 
			
		||||
kike
 | 
			
		||||
----
 | 
			
		||||
The IRC daemon.  It is designed to be used as a regular user application rather
 | 
			
		||||
than a system-wide daemon.  If all you want is a decent, minimal IRCd for
 | 
			
		||||
a small network of respectful users (or bots), or testing, this one will do it.
 | 
			
		||||
testing purposes or a small network of respectful users (or bots), this one will
 | 
			
		||||
do it just fine.
 | 
			
		||||
 | 
			
		||||
Notable features:
 | 
			
		||||
 - TLS autodetection (why doesn't everyone have this?)
 | 
			
		||||
 - IRCop authentication through TLS client certificates
 | 
			
		||||
 - epoll/kqueue support; it should be able to handle quite a number of users
 | 
			
		||||
 | 
			
		||||
 - TLS autodetection (why doesn't everyone have this?), using secure defaults
 | 
			
		||||
 - IRCop authentication via TLS client certificates
 | 
			
		||||
 - epoll/kqueue support; this means that it should be able to handle quite
 | 
			
		||||
   a number of concurrent user connections
 | 
			
		||||
 - partial IRCv3 support
 | 
			
		||||
 | 
			
		||||
Not supported:
 | 
			
		||||
 | 
			
		||||
 - server linking (which also means no services); I consider existing protocols
 | 
			
		||||
   for this purpose ugly and tricky to implement correctly
 | 
			
		||||
 - online changes to configuration; the config system from degesch could be used
 | 
			
		||||
 - limits of almost any kind, just connections and mode +l
 | 
			
		||||
   for this purpose ugly and tricky to implement correctly; I've also found no
 | 
			
		||||
   use for this feature yet
 | 
			
		||||
 - online changes to configuration; the configuration system from degesch could
 | 
			
		||||
   be used to implement this feature if needed
 | 
			
		||||
 - limits of almost any kind, just connections and mode `+l`
 | 
			
		||||
 | 
			
		||||
ZyklonB
 | 
			
		||||
-------
 | 
			
		||||
@@ -45,64 +56,66 @@ The IRC bot.  It builds upon the concept of my other VitaminA IRC bot.  The main
 | 
			
		||||
characteristic of these two bots is that they run plugins as coprocesses, which
 | 
			
		||||
allows for enhanced reliability and programming language freedom.
 | 
			
		||||
 | 
			
		||||
While originally intended to be a simple C99 rewrite of the original bot, which
 | 
			
		||||
was written in the GNU dialect of AWK, it fairly quickly became a playground
 | 
			
		||||
where I added everything that seemed nice, and it eventually got me into writing
 | 
			
		||||
the rest of this package.
 | 
			
		||||
While originally intended to be a simple rewrite of the original AWK bot in C,
 | 
			
		||||
it fairly quickly became a playground, and it eventually got me into writing
 | 
			
		||||
the rest of the package.
 | 
			
		||||
 | 
			
		||||
Notable features:
 | 
			
		||||
 - resilient against crashes, server disconnects and timeouts
 | 
			
		||||
 - SOCKS support (even though socksify can add that easily to any program)
 | 
			
		||||
It survives crashes, server disconnects and timeouts, and also has native SOCKS
 | 
			
		||||
support (even though socksify can add that easily to any program).
 | 
			
		||||
 | 
			
		||||
Building
 | 
			
		||||
--------
 | 
			
		||||
Build dependencies: CMake, pkg-config, help2man, awk, sh, liberty (included)
 | 
			
		||||
Build dependencies: CMake, pkg-config, help2man, awk, sh, liberty (included) +
 | 
			
		||||
Runtime dependencies: openssl, curses (degesch),
 | 
			
		||||
                      readline or libedit >= 2013-07-12 (degesch)
 | 
			
		||||
                      readline >= 6.0 or libedit >= 2013-07-12 (degesch),
 | 
			
		||||
                      lua >= 5.3 (degesch, optional)
 | 
			
		||||
 | 
			
		||||
 $ git clone https://github.com/pjanouch/uirc3.git
 | 
			
		||||
 $ git submodule init
 | 
			
		||||
 $ git submodule update
 | 
			
		||||
 $ mkdir build
 | 
			
		||||
 $ cd build
 | 
			
		||||
 $ git clone --recursive https://github.com/pjanouch/uirc3.git
 | 
			
		||||
 $ mkdir uirc3/build
 | 
			
		||||
 $ cd uirc3/build
 | 
			
		||||
 $ cmake .. -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug \
 | 
			
		||||
            -DWANT_READLINE=ON -DWANT_LIBEDIT=OFF
 | 
			
		||||
            -DWANT_READLINE=ON -DWANT_LIBEDIT=OFF -DWANT_LUA=ON
 | 
			
		||||
 $ make
 | 
			
		||||
 | 
			
		||||
To install the application, you can do either the usual:
 | 
			
		||||
 | 
			
		||||
 # make install
 | 
			
		||||
 | 
			
		||||
Or you can try telling CMake to make a package for you.  For Debian it is:
 | 
			
		||||
 | 
			
		||||
 $ cpack -G DEB
 | 
			
		||||
 # dpkg -i uirc3-*.deb
 | 
			
		||||
 | 
			
		||||
Note that for versions of CMake before 2.8.9, you need to prefix cpack with
 | 
			
		||||
`fakeroot' or file ownership will end up wrong.
 | 
			
		||||
Note that for versions of CMake before 2.8.9, you need to prefix `cpack` with
 | 
			
		||||
`fakeroot` or file ownership will end up wrong.
 | 
			
		||||
 | 
			
		||||
Running
 | 
			
		||||
-------
 | 
			
		||||
`degesch' has in-program configuration.  Just run it and read the instructions.
 | 
			
		||||
'degesch' has in-program configuration.  Just run it and read the instructions.
 | 
			
		||||
 | 
			
		||||
For the rest you might want to generate a configuration file:
 | 
			
		||||
 | 
			
		||||
 $ zyklonb --write-default-config
 | 
			
		||||
 $ kike --write-default-config
 | 
			
		||||
 | 
			
		||||
After making any necessary edits to the file (there are comments to aid you in
 | 
			
		||||
doing that), simply run the appropriate program with no arguments:
 | 
			
		||||
 | 
			
		||||
 $ zyklonb
 | 
			
		||||
 $ kike
 | 
			
		||||
 | 
			
		||||
`ZyklonB' stays running in the foreground, therefore I recommend launching it
 | 
			
		||||
'ZyklonB' stays running in the foreground, therefore I recommend launching it
 | 
			
		||||
inside a Screen or tmux session.
 | 
			
		||||
 | 
			
		||||
`kike', on the other hand, immediately forks into the background.  Use the PID
 | 
			
		||||
file or something like `killall' if you want to terminate it.  You can run it
 | 
			
		||||
as a `forking' type systemd user service.
 | 
			
		||||
'kike', on the other hand, immediately forks into the background.  Use the PID
 | 
			
		||||
file or something like `killall` if you want to terminate it.  You can run it
 | 
			
		||||
as a `forking` type systemd user service.
 | 
			
		||||
 | 
			
		||||
Client Certificates
 | 
			
		||||
-------------------
 | 
			
		||||
`kike' uses SHA1 fingerprints of TLS client certificates to authenticate users.
 | 
			
		||||
'kike' uses SHA1 fingerprints of TLS client certificates to authenticate users.
 | 
			
		||||
To get the fingerprint from a certificate file in the required form, use:
 | 
			
		||||
 | 
			
		||||
 $ openssl x509 -in public.pem -outform DER | sha1sum
 | 
			
		||||
 | 
			
		||||
Contributing and Support
 | 
			
		||||
@@ -118,7 +131,7 @@ And no, I'm not going to change the names.
 | 
			
		||||
 | 
			
		||||
License
 | 
			
		||||
-------
 | 
			
		||||
`uirc3' is written by Přemysl Janouch <p.janouch@gmail.com>.
 | 
			
		||||
'uirc3' is written by Přemysl Janouch <p.janouch@gmail.com>.
 | 
			
		||||
 | 
			
		||||
You may use the software under the terms of the ISC license, the text of which
 | 
			
		||||
is included within the package, or, at your option, you may relicense the work
 | 
			
		||||
@@ -2,9 +2,10 @@
 | 
			
		||||
#define CONFIG_H
 | 
			
		||||
 | 
			
		||||
#define PROGRAM_VERSION "${project_VERSION}"
 | 
			
		||||
#define PLUGIN_DIR "${CMAKE_INSTALL_PREFIX}/${plugin_dir}"
 | 
			
		||||
#define ZYKLONB_PLUGIN_DIR "${CMAKE_INSTALL_PREFIX}/${zyklonb_plugin_dir}"
 | 
			
		||||
 | 
			
		||||
#cmakedefine HAVE_READLINE
 | 
			
		||||
#cmakedefine HAVE_EDITLINE
 | 
			
		||||
#cmakedefine HAVE_LUA
 | 
			
		||||
 | 
			
		||||
#endif  // ! CONFIG_H
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										9
									
								
								kike.c
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								kike.c
									
									
									
									
									
								
							@@ -1784,7 +1784,7 @@ mode_processor_do_user (struct mode_processor *self, int mode)
 | 
			
		||||
			target, self->channel->name);
 | 
			
		||||
	else if (irc_modify_mode (&target_user->modes, mode, self->adding))
 | 
			
		||||
	{
 | 
			
		||||
		str_append_c (self->output, self->mode_char);                                      \
 | 
			
		||||
		str_append_c (self->output, self->mode_char);
 | 
			
		||||
		str_vector_add (self->output_params, client->nickname);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -3421,6 +3421,13 @@ irc_try_fetch_client (struct server_context *ctx, int listen_fd)
 | 
			
		||||
	c->ping_timer.dispatcher = on_client_ping_timer;
 | 
			
		||||
	c->ping_timer.user_data = c;
 | 
			
		||||
 | 
			
		||||
	// A little bit questionable once the traffic gets high enough (IMO),
 | 
			
		||||
	// but it reduces silly latencies that we don't need because we already
 | 
			
		||||
	// do buffer our output
 | 
			
		||||
	int yes = 1;
 | 
			
		||||
	soft_assert (setsockopt (fd, IPPROTO_TCP, TCP_NODELAY,
 | 
			
		||||
		&yes, sizeof yes) != -1);
 | 
			
		||||
 | 
			
		||||
	set_blocking (fd, false);
 | 
			
		||||
	client_update_poller (c, NULL);
 | 
			
		||||
	client_set_kill_timer (c);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								liberty
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								liberty
									
									
									
									
									
								
							 Submodule liberty updated: 649c351560...f6d74544f8
									
								
							
							
								
								
									
										33
									
								
								plugins/degesch/ping-timeout.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								plugins/degesch/ping-timeout.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,33 @@
 | 
			
		||||
--
 | 
			
		||||
-- ping-timeout.lua: ping timeout readability enhancement plugin
 | 
			
		||||
--
 | 
			
		||||
-- Copyright (c) 2015, Přemysl Janouch <p.janouch@gmail.com>
 | 
			
		||||
--
 | 
			
		||||
-- Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
-- purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
-- copyright notice and this permission notice appear in all copies.
 | 
			
		||||
--
 | 
			
		||||
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 | 
			
		||||
-- SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
 | 
			
		||||
-- OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 | 
			
		||||
-- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
degesch.hook_irc (function (hook, server, line)
 | 
			
		||||
	local start, timeout =
 | 
			
		||||
		line:match ("^(:[^ ]* QUIT :Ping timeout:) (%d+) seconds$")
 | 
			
		||||
	if not start then
 | 
			
		||||
		return line
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local minutes = timeout // 60
 | 
			
		||||
	if minutes == 0 then
 | 
			
		||||
		return line
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
	local seconds = timeout % 60
 | 
			
		||||
	return ("%s %d minutes, %d seconds"):format (start, minutes, seconds)
 | 
			
		||||
end)
 | 
			
		||||
							
								
								
									
										63
									
								
								plugins/degesch/utm-filter.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								plugins/degesch/utm-filter.lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,63 @@
 | 
			
		||||
--
 | 
			
		||||
-- utm-filter.lua: filter out Google Analytics bullshit from URLs
 | 
			
		||||
--
 | 
			
		||||
-- Copyright (c) 2015, Přemysl Janouch <p.janouch@gmail.com>
 | 
			
		||||
--
 | 
			
		||||
-- Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
-- purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
-- copyright notice and this permission notice appear in all copies.
 | 
			
		||||
--
 | 
			
		||||
-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
 | 
			
		||||
-- SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
 | 
			
		||||
-- OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
 | 
			
		||||
-- CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
--
 | 
			
		||||
 | 
			
		||||
-- A list of useless URL parameters that don't affect page function
 | 
			
		||||
local banned = {
 | 
			
		||||
	gclid        = 1,
 | 
			
		||||
 | 
			
		||||
	utm_source   = 1,
 | 
			
		||||
	utm_medium   = 1,
 | 
			
		||||
	utm_term     = 1,
 | 
			
		||||
	utm_content  = 1,
 | 
			
		||||
	utm_campaign = 1,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
-- Go through a parameter list and throw out any banned elements
 | 
			
		||||
local do_args = function (args)
 | 
			
		||||
	local filtered = {}
 | 
			
		||||
	for part in args:gmatch ("[^&]+") do
 | 
			
		||||
		if not banned[part:match ("^[^=]*")] then
 | 
			
		||||
			table.insert (filtered, part)
 | 
			
		||||
		end
 | 
			
		||||
	end
 | 
			
		||||
	return table.concat (filtered, "&")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- Filter parameters in both the query and the fragment part of an URL
 | 
			
		||||
local do_single_url = function (url)
 | 
			
		||||
	return url:gsub ('^([^?#]*)%?([^#]*)', function (start, query)
 | 
			
		||||
		local clean = do_args (query)
 | 
			
		||||
		return #clean > 0 and start .. "?" .. clean or start
 | 
			
		||||
	end, 1):gsub ('^([^#]*)#(.*)', function (start, fragment)
 | 
			
		||||
		local clean = do_args (fragment)
 | 
			
		||||
		return #clean > 0 and start .. "#" .. clean or start
 | 
			
		||||
	end, 1)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local do_text = function (text)
 | 
			
		||||
	return text:gsub ('%f[%g]https?://%g+', do_single_url)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
degesch.hook_irc (function (hook, server, line)
 | 
			
		||||
	local start, message = line:match ("^(.* :)(.*)$")
 | 
			
		||||
	return message and start .. do_text (message) or line
 | 
			
		||||
end)
 | 
			
		||||
 | 
			
		||||
degesch.hook_input (function (hook, buffer, input)
 | 
			
		||||
	return do_text (input)
 | 
			
		||||
end)
 | 
			
		||||
		Reference in New Issue
	
	Block a user