Florent Le Coz
af2d232059
Little README fixes
2014-01-13 20:11:36 +01:00
Florent Le Coz
48b4f7b83f
Remove cryptopp dependency, directly include a simple sha1 implementation
2014-01-13 20:11:36 +01:00
Florent Le Coz
fef9c8193d
Also set the role and affiliation of users already in the chan
2014-01-06 01:22:43 +01:00
Florent Le Coz
7701c90763
Add missing errno.h includes
2014-01-04 02:48:08 +01:00
Florent Le Coz
b513683041
Document the shutdown procedure
2014-01-04 02:04:38 +01:00
Florent Le Coz
d90c1978de
Fix a bug when receiving a topic change
...
The number of arguments is not always the same
2014-01-04 01:59:36 +01:00
Florent Le Coz
fbec16f1a2
Possibility to change a channel's topic
2014-01-04 01:59:36 +01:00
Florent Le Coz
e840704b58
Convert received modes into roles and affiliations
2014-01-04 01:59:36 +01:00
Florent Le Coz
baf03a7e20
Do not throw an exception when recv returns and error, just close the socket
2014-01-04 01:59:36 +01:00
Florent Le Coz
acf769d83a
Use isupport informations to know the user modes when joining
...
Also remove the duplicate send_self_join methods, user only send_user_join
2014-01-04 01:59:36 +01:00
Florent Le Coz
a075517824
Basic isupport support
...
CHANMODES and PREFIX only
2014-01-04 01:59:36 +01:00
Florent Le Coz
43cc60e4a9
Handle nickname conflicts by sending the correct XMPP error presence
2014-01-04 01:59:35 +01:00
Florent Le Coz
e8e592d1ac
Remove disconnected IrcClients
2014-01-04 01:59:35 +01:00
Florent Le Coz
aa53276859
Keep a "connected" state in the SocketHandler class
2014-01-04 01:59:35 +01:00
Florent Le Coz
483e17020d
Be verbose about the connection status, and some errors
2014-01-04 01:59:35 +01:00
Florent Le Coz
9df757fc67
Handle topic changes
2014-01-04 01:59:35 +01:00
Florent Le Coz
b8ce9ed43d
Check that channels are joined before acting on objects in it
2014-01-04 01:59:34 +01:00
Florent Le Coz
3afb63a650
Shutdown cleanly on SIGINT
2014-01-04 01:59:14 +01:00
Florent Le Coz
df59a09163
Do not mismatch password and hostname in the config error help message
2013-12-24 14:04:12 +01:00
Florent Le Coz
983477084c
connect() returns a boolean
2013-12-24 14:03:40 +01:00
Florent Le Coz
2ecb637f0c
Read a variable number of bytes, 4096 by default
2013-12-23 17:07:43 +01:00
Florent Le Coz
e35472a6cb
Correctly send the part message to IRC
...
By fixing a namespace when looking for an XML element containing that message
2013-12-23 17:02:46 +01:00
Florent Le Coz
7d8ce3b563
Use XML-sanitized strings when serializing stanzas for the XMPP server
2013-12-15 00:34:30 +01:00
Florent Le Coz
3960e4d5af
Functions to provide xml-valid strings
...
By removing invalid chars, see http://www.w3.org/TR/xml/#charsets
2013-12-15 00:34:13 +01:00
Florent Le Coz
b29290f73a
Lowercase the chan names in two missing cases
2013-12-09 03:53:01 +01:00
Florent Le Coz
bb094e5058
Document the log_file and log_level configuration options
2013-12-08 20:33:36 +01:00
Florent Le Coz
2aa868c7cc
Document the bare-JID-for-IRC-users feature
2013-12-08 20:28:57 +01:00
Florent Le Coz
8e2dd573bb
Provide the doc in markdown format
...
The included man page is now generated from this markdown file, using ronn
2013-12-08 20:23:35 +01:00
Florent Le Coz
b11126a19d
Provide a JID for IRC users, and add a stringprep dependency for this
2013-12-08 20:14:12 +01:00
Florent Le Coz
cb718def0c
Put utils::tolower definition in its own cpp file
2013-12-08 18:02:24 +01:00
Florent Le Coz
fb01f78b0a
Rewrite the FindIconv module cleanly
2013-12-08 15:57:10 +01:00
Florent Le Coz
2c9680bc03
Rewrite the FindCryptopp cmake module cleanly
2013-12-08 15:57:06 +01:00
Florent Le Coz
e2117bcb0a
Enforce a simple limit of 400 bytes for IRC messages body
...
The limit for the whole message is 512 bytes, we limit the body to 400
(instead of doing a calculation based on the command name and the other
parameters), because it's simple, easy and that’s enough.
fixes #2416
2013-12-08 04:47:05 +01:00
Florent Le Coz
6fa548a194
Display all the MODE arguments in the message
2013-12-03 19:56:57 +01:00
Florent Le Coz
a4c845ab6c
Use the logger everywhere
2013-12-03 19:15:37 +01:00
Florent Le Coz
2662ed89e2
Add a logger class
2013-12-03 19:15:37 +01:00
Florent Le Coz
6bd176f15e
Fix a parenthesis ambiguity
2013-12-03 18:49:43 +01:00
Florent Le Coz
050cf1fd60
xml-escape the tail in an XmlNode
2013-12-02 13:15:51 +01:00
Florent Le Coz
d6832fbcc9
:3
2013-11-28 21:09:27 +01:00
Florent Le Coz
1151c26c36
Channel names are case insensitive
...
But some servers (epiknet for example) send channel names with an uppercase
2013-11-28 02:14:42 +01:00
Florent Le Coz
2921f53657
Print some stuff when ./test is running
2013-11-28 01:18:26 +01:00
Florent Le Coz
61ecaab400
Re-add support for /me messages from IRC
...
It was recently removed because it was handled in the old "convert irc
colors" code. It now is in the right place.
2013-11-28 01:18:26 +01:00
Florent Le Coz
3c5cdec1d1
Add some documentation
2013-11-28 01:18:26 +01:00
Florent Le Coz
e6f20d3c0f
Implement IRC format to xhtml-im conversion
...
The generated XML is very verbose because each IRC formatting tag makes us
close a <span/> element and reopen it with the new style applied. However,
this works quite well and is easy to implement.
2013-11-28 01:18:26 +01:00
Florent Le Coz
31e18e49b6
fsanitize=address requires libasan, that’s a useless dependency.
...
Also we cannot use both this feature and valgrind at the same time.
So, I’ll just specify this flag myself when I need it, this doesn’t
need to be there by default
2013-11-28 01:18:21 +01:00
Florent Le Coz
fba01f4646
Remove incomplete implementation of remove_irc_colors
2013-11-27 00:37:23 +01:00
Florent Le Coz
959291afe6
Set the parent of a node passed to add_child, and return it for conveniance
2013-11-27 00:37:23 +01:00
Florent Le Coz
12a18ca748
TIL override and final
2013-11-21 19:38:31 +01:00
Florent Le Coz
bfcc9cdc74
Send XMPP multi-line messages as multiple IRC messages
2013-11-21 00:58:14 +01:00
Florent Le Coz
70a58a8f71
Merge branch 'epolletc'
2013-11-21 00:37:01 +01:00
Florent Le Coz
b72908548d
Let the user choose the poller to use through cmake POLLER option
...
Use ccmake, or cmake -i, or cmake -DPOLLER=EPOLL, for example
2013-11-21 00:35:15 +01:00
Florent Le Coz
b569240a55
Use epoll
2013-11-21 00:35:15 +01:00
Florent Le Coz
1e122d3342
Send the motd as one single big message
...
We append each line to a string, and when the MOTD is
complete, we send that string at once.
2013-11-21 00:35:15 +01:00
Florent Le Coz
e7a441e798
Add a test for xml escape/unescape
2013-11-16 12:08:32 +01:00
Florent Le Coz
a85e1abaaa
Fix a warning
2013-11-14 23:39:28 +01:00
Florent Le Coz
641166b037
Link with pthread, required by cryptopp
2013-11-14 23:35:58 +01:00
Florent Le Coz
8c33a01e68
Include stdlib.h for atoi
2013-11-13 01:39:26 +01:00
Florent Le Coz
abce2fc92e
Do not crash on special chars in the content of message
...
That’s ugly, and we need to sanitize everything properly, and also handle
these special messages.
2013-11-13 01:36:30 +01:00
Florent Le Coz
0859801230
Handle KICK in irc channel, both ways
2013-11-13 01:24:36 +01:00
Florent Le Coz
3cfaab9a2d
Map irc commands to callbacks, in a clean way
2013-11-12 23:48:10 +01:00
Florent Le Coz
5817a95b5e
Basic handling of modes, both ways
2013-11-12 23:48:10 +01:00
Florent Le Coz
b60cbda4f9
Read the served hostname from the config file
2013-11-12 22:35:27 +01:00
Florent Le Coz
2be4811d14
Unescape XML before sending messages over IRC
2013-11-11 00:29:44 +01:00
Florent Le Coz
096a4e3baf
Handle nick changes, both ways
2013-11-11 00:24:34 +01:00
Florent Le Coz
f0d9273da6
Add a Config module, and use it to get the password from a file
2013-11-10 20:47:11 +01:00
Florent Le Coz
10d5287177
Handle private messages, both ways
2013-11-10 06:33:04 +01:00
Florent Le Coz
7ba2d0fb45
Handle the ACTION (/me) IRC command, both ways
2013-11-10 05:41:22 +01:00
Florent Le Coz
a992e281c4
Connect to localhost instead of the served hostname
...
Because the XMPP component connection is only available locally, the XMPP
servers proably only listen on 127.0.0.1 instead of 0.0.0.0.
2013-11-10 05:10:54 +01:00
Florent Le Coz
0bb7ee0127
Handle IRC QUIT command
2013-11-10 05:08:50 +01:00
Florent Le Coz
af4fc92c21
Fix the include of the config.h
2013-11-10 03:35:31 +01:00
Florent Le Coz
5cb81cace0
And actually use the values found by cmake
2013-11-10 03:29:12 +01:00
Florent Le Coz
ef014f7ddf
Properly detect iconv features to compile
2013-11-10 03:18:08 +01:00
Florent Le Coz
6a43d350be
Add include for perror
2013-11-10 03:08:45 +01:00
Florent Le Coz
3d92360310
Use the Expat library directly instead of relying on expatpp
...
And now we handle namespaces, yay.
And a nice little test.
2013-11-10 02:30:22 +01:00
Florent Le Coz
8acd7a02ae
Aaaand, I forgot to add files
2013-11-09 23:20:12 +01:00
Florent Le Coz
7c67149935
Implement part and join, both ways
2013-11-09 23:17:48 +01:00
Florent Le Coz
f38b31a63e
Remove IRC colors from the body when forwarding it to XMPP
2013-11-09 21:40:29 +01:00
Florent Le Coz
af5548897a
Cosmetic
2013-11-09 06:29:15 +01:00
Florent Le Coz
ccebe901d7
Check UTF-8 encoding, and convert strings to UTF-8
...
Handle conversion errors properly by inserting � instead. Add a binary
header to provide portable way to write binary literals (I like them) Also
add a test file. ref #2404
2013-11-09 06:01:47 +01:00
Florent Le Coz
a418b6ed5d
Send and receive messages
...
Also correctly respond to PING with the id, escape some XML content, but not
always
2013-11-07 01:53:09 +01:00
Florent Le Coz
4b76a30d04
Add make_unique.hpp and split.hpp
2013-11-06 21:01:18 +01:00
Florent Le Coz
bf7b05ef72
Implement the Bridge class to translate between the two protocols
...
Add all useful classes as well: Jid, Iid, IrcChannel, IrcUser etc to
properly keep the informations about what we receive from the IRC server.
Only handle the MUC join stanza, and send the list of users in the IRC
channel to the XMPP user, and the IRC channel’s topic, for now.
2013-11-06 21:01:18 +01:00
Florent Le Coz
dea7f60fa1
Add FindCryptoPP to the cmake search stuf
2013-11-03 17:55:39 +01:00
Florent Le Coz
d834d6ed06
Exit the poller when it handles no connection at all
2013-11-03 17:55:23 +01:00
Florent Le Coz
f2f94618fc
Add a basic XMPP component implementation, doing the authentication
2013-11-03 17:51:32 +01:00
Florent Le Coz
5bbd34a3a9
Add an XmppParser, and Stanza classes
...
Generate events on stanza and stream open/close.
Create Stanza and serialize them.
Note: XML namespaces are not handled yet.
2013-11-03 17:19:48 +01:00
Florent Le Coz
87aaacdb42
Rename libirc and libxmpp to irc and xmpp
2013-11-03 00:22:32 +01:00
Florent Le Coz
e332d7a2c0
Add initial CMakeLists.txt that compiles the current code
2013-11-02 23:49:12 +01:00
Florent Le Coz
358b53faef
Move the basic socket implementation into the SocketHandler class
...
(that is, the read/write/connect/etc)
Because this code is actually common for both the IrcClient and
XmppComponent class. These two classes have to implement some higher level
callbacks (parsing the data provided in the buffers, doing stuff when the
connection is done) instead of doing the read/write/connect low level
things.
2013-11-02 23:39:00 +01:00
Florent Le Coz
7f580dbc0e
Add irc_message.hpp
2013-11-02 16:05:55 +01:00
Florent Le Coz
4027ef8c00
Basic IRC message parsing/sending
2013-11-02 16:04:10 +01:00
Florent Le Coz
64c1b28ce2
Add some dummy main
2013-11-02 03:23:17 +01:00
Florent Le Coz
7869ef2ace
First step of the connection skeleton
...
Basic connect, socket creating, polling, recving, etc.
2013-11-02 03:19:24 +01:00