File: erc-backend.el.html

This file defines backend network communication handlers for ERC.

How things work:

You define a new handler with define-erc-response-handler. This defines a function, a corresponding hook variable, and populates a global hash table erc-server-responses with a map from response to hook variable. See the function documentation for more information.

Upon receiving a line from the server, erc-parse-server-response is called on it.

A line generally looks like:

LINE := ':' SENDER ' ' COMMAND ' ' (COMMAND-ARGS ' ')* ':' CONTENTS SENDER := Not ':' | ' ' COMMAND := Not ':' | ' ' COMMAND-ARGS := Not ':' | ' '

This gets parsed and stuffed into an erc-response struct. You can access the fields of the struct with:

COMMAND --- erc-response.command COMMAND-ARGS --- erc-response.command-args CONTENTS --- erc-response.contents SENDER --- erc-response.sender LINE --- erc-response.unparsed TAGS --- erc-response.tags

WARNING, WARNING!! It's probably not a good idea to destructively modify the list of command-args in your handlers, since other functions down the line may well need to access the arguments too.

That is, unless you're /absolutely/ sure that your handler doesn't invoke some other function that needs to use COMMAND-ARGS, don't do something like

(while (erc-response.command-args parsed)
  (let ((a (pop (erc-response.command-args parsed))))
    ...))

The parsed response is handed over to erc-handle-parsed-server-response, which checks whether it should carry out duplicate suppression, and then runs erc-call-hooks. erc-call-hooks retrieves the relevant hook variable from erc-server-responses and runs it.

Most handlers then destructure the parsed response in some way
(depending on what the handler is, the arguments have different
meanings), and generally display something, usually using erc-display-message.

Defined variables (154)

erc-coding-system-precedenceList of coding systems to be preferred when receiving a string from the server.
erc-encoding-coding-alistAlist of target regexp and coding-system pairs to use.
erc-server-001-functionsHook called upon receiving a 001 server response.
erc-server-002-functionsHook called upon receiving a 002 server response.
erc-server-003-functionsHook called upon receiving a 003 server response.
erc-server-004-functionsHook called upon receiving a 004 server response.
erc-server-005-functionsHook called upon receiving a 005 server response.
erc-server-221-functionsHook called upon receiving a 221 server response.
erc-server-250-functionsHook called upon receiving a 250 server response.
erc-server-251-functionsHook called upon receiving a 251 server response.
erc-server-252-functionsHook called upon receiving a 252 server response.
erc-server-253-functionsHook called upon receiving a 253 server response.
erc-server-254-functionsHook called upon receiving a 254 server response.
erc-server-255-functionsHook called upon receiving a 255 server response.
erc-server-256-functionsHook called upon receiving a 256 server response.
erc-server-257-functionsHook called upon receiving a 257 server response.
erc-server-258-functionsHook called upon receiving a 258 server response.
erc-server-259-functionsHook called upon receiving a 259 server response.
erc-server-265-functionsHook called upon receiving a 265 server response.
erc-server-266-functionsHook called upon receiving a 266 server response.
erc-server-275-functionsHook called upon receiving a 275 server response.
erc-server-290-functionsHook called upon receiving a 290 server response.
erc-server-301-functionsHook called upon receiving a 301 server response.
erc-server-303-functionsHook called upon receiving a 303 server response.
erc-server-305-functionsHook called upon receiving a 305 server response.
erc-server-306-functionsHook called upon receiving a 306 server response.
erc-server-307-functionsHook called upon receiving a 307 server response.
erc-server-311-functionsHook called upon receiving a 311 server response.
erc-server-312-functionsHook called upon receiving a 312 server response.
erc-server-313-functionsHook called upon receiving a 313 server response.
erc-server-314-functionsHook called upon receiving a 314 server response.
erc-server-315-functionsHook called upon receiving a 315 server response.
erc-server-317-functionsHook called upon receiving a 317 server response.
erc-server-318-functionsHook called upon receiving a 318 server response.
erc-server-319-functionsHook called upon receiving a 319 server response.
erc-server-320-functionsHook called upon receiving a 320 server response.
erc-server-321-functionsHook called upon receiving a 321 server response.
erc-server-322-functionsHook called upon receiving a 322 server response.
erc-server-323-functionsHook called upon receiving a 323 server response.
erc-server-324-functionsHook called upon receiving a 324 server response.
erc-server-328-functionsHook called upon receiving a 328 server response.
erc-server-329-functionsHook called upon receiving a 329 server response.
erc-server-330-functionsHook called upon receiving a 330 server response.
erc-server-331-functionsHook called upon receiving a 331 server response.
erc-server-332-functionsHook called upon receiving a 332 server response.
erc-server-333-functionsHook called upon receiving a 333 server response.
erc-server-341-functionsHook called upon receiving a 341 server response.
erc-server-352-functionsHook called upon receiving a 352 server response.
erc-server-353-functionsHook called upon receiving a 353 server response.
erc-server-366-functionsHook called upon receiving a 366 server response.
erc-server-367-functionsHook called upon receiving a 367 server response.
erc-server-368-functionsHook called upon receiving a 368 server response.
erc-server-369-functionsHook called upon receiving a 369 server response.
erc-server-371-functionsHook called upon receiving a 371 server response.
erc-server-372-functionsHook called upon receiving a 372 server response.
erc-server-374-functionsHook called upon receiving a 374 server response.
erc-server-375-functionsHook called upon receiving a 375 server response.
erc-server-376-functionsHook called upon receiving a 376 server response.
erc-server-377-functionsHook called upon receiving a 377 server response.
erc-server-378-functionsHook called upon receiving a 378 server response.
erc-server-379-functionsHook called upon receiving a 379 server response.
erc-server-391-functionsHook called upon receiving a 391 server response.
erc-server-401-functionsHook called upon receiving a 401 server response.
erc-server-403-functionsHook called upon receiving a 403 server response.
erc-server-404-functionsHook called upon receiving a 404 server response.
erc-server-405-functionsHook called upon receiving a 405 server response.
erc-server-406-functionsHook called upon receiving a 406 server response.
erc-server-412-functionsHook called upon receiving a 412 server response.
erc-server-421-functionsHook called upon receiving a 421 server response.
erc-server-422-functionsHook called upon receiving a 422 server response.
erc-server-431-functionsHook called upon receiving a 431 server response.
erc-server-432-functionsHook called upon receiving a 432 server response.
erc-server-433-functionsHook called upon receiving a 433 server response.
erc-server-437-functionsHook called upon receiving a 437 server response.
erc-server-442-functionsHook called upon receiving a 442 server response.
erc-server-445-functionsHook called upon receiving a 445 server response.
erc-server-446-functionsHook called upon receiving a 446 server response.
erc-server-451-functionsHook called upon receiving a 451 server response.
erc-server-461-functionsHook called upon receiving a 461 server response.
erc-server-462-functionsHook called upon receiving a 462 server response.
erc-server-463-functionsHook called upon receiving a 463 server response.
erc-server-464-functionsHook called upon receiving a 464 server response.
erc-server-465-functionsHook called upon receiving a 465 server response.
erc-server-474-functionsHook called upon receiving a 474 server response.
erc-server-475-functionsHook called upon receiving a 475 server response.
erc-server-477-functionsHook called upon receiving a 477 server response.
erc-server-481-functionsHook called upon receiving a 481 server response.
erc-server-482-functionsHook called upon receiving a 482 server response.
erc-server-483-functionsHook called upon receiving a 483 server response.
erc-server-484-functionsHook called upon receiving a 484 server response.
erc-server-485-functionsHook called upon receiving a 485 server response.
erc-server-491-functionsHook called upon receiving a 491 server response.
erc-server-501-functionsHook called upon receiving a 501 server response.
erc-server-502-functionsHook called upon receiving a 502 server response.
erc-server-671-functionsHook called upon receiving a 671 server response.
erc-server-ERROR-functionsHook called upon receiving a ERROR server response.
erc-server-INVITE-functionsHook called upon receiving a INVITE server response.
erc-server-JOIN-functionsHook called upon receiving a JOIN server response.
erc-server-KICK-functionsHook called upon receiving a KICK server response.
erc-server-MODE-functionsHook called upon receiving a MODE server response.
erc-server-MOTD-functionsHook called upon receiving a MOTD server response.
erc-server-NICK-functionsHook called upon receiving a NICK server response.
erc-server-NOTICE-functionsHook called upon receiving a NOTICE server response.
erc-server-PART-functionsHook called upon receiving a PART server response.
erc-server-PING-functionsHook called upon receiving a PING server response.
erc-server-PONG-functionsHook called upon receiving a PONG server response.
erc-server-PRIVMSG-functionsHook called upon receiving a PRIVMSG server response.
erc-server-QUIT-functionsHook called upon receiving a QUIT server response.
erc-server-TOPIC-functionsHook called upon receiving a TOPIC server response.
erc-server-WALLOPS-functionsHook called upon receiving a WALLOPS server response.
erc-server-announced-nameThe name the server announced to use.
erc-server-auto-reconnectNon-nil means that ERC will attempt to reestablish broken connections.
erc-server-bannedNon-nil if the user is denied access because of a server ban.
erc-server-coding-systemThe default coding system for incoming and outgoing text.
erc-server-connect-functionFunction used to initiate a connection.
erc-server-connectedNon-nil if the current buffer has been used by ERC to establish
erc-server-current-nickNickname on the current server.
erc-server-duplicate-timeoutThe time allowed in seconds between duplicate messages.
erc-server-duplicatesInternal variable used to track duplicate messages.
erc-server-error-occurredNon-nil if the user triggers some server error.
erc-server-filter-dataThe data that arrived from the server but has not been processed yet.
erc-server-flood-last-messageWhen we sent the last message.
erc-server-flood-marginA margin on how much excess data we send.
erc-server-flood-penaltyHow much we penalize a message.
erc-server-flood-queueThe queue of messages waiting to be sent to the server.
erc-server-flood-timerThe timer to resume sending.
erc-server-lagCalculated server lag time in seconds.
erc-server-last-peersLast peers used, both sender and receiver.
erc-server-last-ping-timeTime the last ping was sent.
erc-server-last-received-timeTime the last message was received from the server.
erc-server-last-sent-timeTime the message was sent.
erc-server-lines-sentLine counter.
erc-server-parametersAlist listing the supported server parameters.
erc-server-ping-handlerThis variable holds the periodic ping timer.
erc-server-ping-timer-alistMapping of server buffers to their specific ping timer.
erc-server-prevent-duplicatesEither nil or a list of strings.
erc-server-processThe process object of the corresponding server connection.
erc-server-processing-pNon-nil when we’re currently processing a message.
erc-server-quittingNon-nil if the user requests a quit.
erc-server-reconnect-attemptsNumber of times that ERC will attempt to reestablish a broken connection.
erc-server-reconnect-countNumber of times we have failed to reconnect to the current server.
erc-server-reconnect-timeoutNumber of seconds to wait between successive reconnect attempts.
erc-server-reconnectingNon-nil if the user requests an explicit reconnect, and the
erc-server-responsesHash table mapping server responses to their handler hooks.
erc-server-send-ping-intervalInterval of sending pings to the server, in seconds.
erc-server-send-ping-timeoutIf the time between ping and response is greater than this, reconnect.
erc-server-timed-outNon-nil if the IRC server failed to respond to a ping.
erc-server-timestamp-formatTimestamp format used with server response messages.
erc-server-versionThe name and version of the server’s ircd.
erc-session-client-certificateTLS client certificate used when connecting over TLS.
erc-session-connectorThe function used to connect to this session (nil for the default).
erc-session-portThe port used to connect to.
erc-session-serverThe server name used to connect to for this session.
erc-split-line-lengthThe maximum length of a single message.

Defined functions (161)

copy-erc-response(ARG)
define-erc-response-handler((NAME &rest ALIASES) &optional EXTRA-FN-DOC EXTRA-VAR-DOC &rest FN-BODY)
erc-bounds-of-word-at-point()
erc-call-hooks(PROCESS MESSAGE)
erc-coding-system-for-target(TARGET)
erc-decode-parsed-server-response(PARSED-RESPONSE)
erc-decode-string-from-target(STR TARGET)
erc-forward-word()
erc-get-hook(COMMAND)
erc-handle-parsed-server-response(PROCESS PARSED-RESPONSE)
erc-handle-unknown-server-response(PROC PARSED)
erc-message(MESSAGE-COMMAND LINE &optional FORCE)
erc-open-network-stream(NAME BUFFER HOST SERVICE &rest PARAMETERS)
erc-parse-server-response(PROC STRING)
erc-parse-tags(STRING)
erc-process-sentinel(CPROC EVENT)
erc-process-sentinel-1(EVENT BUFFER)
erc-process-sentinel-2(EVENT BUFFER)
erc-response-p(CL-X)
erc-response-p--cmacro(CL-WHOLE-ARG CL-X)
erc-response.command(CL-X)
erc-response.command--cmacro(CL-WHOLE-ARG CL-X)
erc-response.command-args(CL-X)
erc-response.command-args--cmacro(CL-WHOLE-ARG CL-X)
erc-response.contents(CL-X)
erc-response.contents--cmacro(CL-WHOLE-ARG CL-X)
erc-response.sender(CL-X)
erc-response.sender--cmacro(CL-WHOLE-ARG CL-X)
erc-response.tags(CL-X)
erc-response.tags--cmacro(CL-WHOLE-ARG CL-X)
erc-response.unparsed(CL-X)
erc-response.unparsed--cmacro(CL-WHOLE-ARG CL-X)
erc-send-ctcp-message(TGT L &optional FORCE)
erc-send-ctcp-notice(TGT L &optional FORCE)
erc-send-line(TEXT DISPLAY-FN)
erc-server-001(PROC PARSED)
erc-server-002(PROC PARSED)
erc-server-003(PROC PARSED)
erc-server-004(PROC PARSED)
erc-server-005(PROC PARSED)
erc-server-221(PROC PARSED)
erc-server-250(PROC PARSED)
erc-server-251(PROC PARSED)
erc-server-252(PROC PARSED)
erc-server-253(PROC PARSED)
erc-server-254(PROC PARSED)
erc-server-255(PROC PARSED)
erc-server-256(PROC PARSED)
erc-server-257(PROC PARSED)
erc-server-258(PROC PARSED)
erc-server-259(PROC PARSED)
erc-server-265(PROC PARSED)
erc-server-266(PROC PARSED)
erc-server-275(PROC PARSED)
erc-server-290(PROC PARSED)
erc-server-301(PROC PARSED)
erc-server-303(PROC PARSED)
erc-server-305(PROC PARSED)
erc-server-306(PROC PARSED)
erc-server-307(PROC PARSED)
erc-server-311(PROC PARSED)
erc-server-312(PROC PARSED)
erc-server-313(PROC PARSED)
erc-server-314(PROC PARSED)
erc-server-315(PROC PARSED)
erc-server-317(PROC PARSED)
erc-server-318(PROC PARSED)
erc-server-319(PROC PARSED)
erc-server-320(PROC PARSED)
erc-server-321(PROC PARSED)
erc-server-321-message(PROC PARSED)
erc-server-322(PROC PARSED)
erc-server-322-message(PROC PARSED)
erc-server-323(PROC PARSED)
erc-server-324(PROC PARSED)
erc-server-328(PROC PARSED)
erc-server-329(PROC PARSED)
erc-server-330(PROC PARSED)
erc-server-331(PROC PARSED)
erc-server-332(PROC PARSED)
erc-server-333(PROC PARSED)
erc-server-341(PROC PARSED)
erc-server-352(PROC PARSED)
erc-server-353(PROC PARSED)
erc-server-366(PROC PARSED)
erc-server-367(PROC PARSED)
erc-server-368(PROC PARSED)
erc-server-369(PROC PARSED)
erc-server-371(PROC PARSED)
erc-server-372(PROC PARSED)
erc-server-374(PROC PARSED)
erc-server-375(PROC PARSED)
erc-server-376(PROC PARSED)
erc-server-377(PROC PARSED)
erc-server-378(PROC PARSED)
erc-server-379(PROC PARSED)
erc-server-391(PROC PARSED)
erc-server-401(PROC PARSED)
erc-server-403(PROC PARSED)
erc-server-404(PROC PARSED)
erc-server-405(PROC PARSED)
erc-server-406(PROC PARSED)
erc-server-412(PROC PARSED)
erc-server-421(PROC PARSED)
erc-server-422(PROC PARSED)
erc-server-431(PROC PARSED)
erc-server-432(PROC PARSED)
erc-server-433(PROC PARSED)
erc-server-437(PROC PARSED)
erc-server-442(PROC PARSED)
erc-server-445(PROC PARSED)
erc-server-446(PROC PARSED)
erc-server-451(PROC PARSED)
erc-server-461(PROC PARSED)
erc-server-462(PROC PARSED)
erc-server-463(PROC PARSED)
erc-server-464(PROC PARSED)
erc-server-465(PROC PARSED)
erc-server-474(PROC PARSED)
erc-server-475(PROC PARSED)
erc-server-477(PROC PARSED)
erc-server-481(PROC PARSED)
erc-server-482(PROC PARSED)
erc-server-483(PROC PARSED)
erc-server-484(PROC PARSED)
erc-server-485(PROC PARSED)
erc-server-491(PROC PARSED)
erc-server-501(PROC PARSED)
erc-server-502(PROC PARSED)
erc-server-671(PROC PARSED)
erc-server-ERROR(PROC PARSED)
erc-server-INVITE(PROC PARSED)
erc-server-JOIN(PROC PARSED)
erc-server-KICK(PROC PARSED)
erc-server-MODE(PROC PARSED)
erc-server-MOTD(PROC PARSED)
erc-server-NICK(PROC PARSED)
erc-server-NOTICE(PROC PARSED)
erc-server-PART(PROC PARSED)
erc-server-PING(PROC PARSED)
erc-server-PONG(PROC PARSED)
erc-server-PRIVMSG(PROC PARSED)
erc-server-QUIT(PROC PARSED)
erc-server-TOPIC(PROC PARSED)
erc-server-WALLOPS(PROC PARSED)
erc-server-connect(SERVER PORT BUFFER &optional CLIENT-CERTIFICATE)
erc-server-delayed-reconnect(BUFFER)
erc-server-filter-function(PROCESS STRING)
erc-server-process-alive(&optional BUFFER)
erc-server-reconnect()
erc-server-reconnect-p(EVENT)
erc-server-reconnect-p--inliner(INLINE--FORM EVENT)
erc-server-send(STRING &optional FORCEP TARGET)
erc-server-send-ping(BUF)
erc-server-send-queue(BUFFER)
erc-server-setup-periodical-ping(BUFFER)
erc-split-line(LONGLINE)
erc-upcase-first-word(STR)
erc-word-at-arg-p(POS)
make-erc-response
make-erc-response--cmacro

Defined faces (0)