Protocol

Network Working Group                                     Romain Bignon
Request for relevance                                        March 2011

                           COLUMBO Protocol

Abstract

   The COLUMBO project is a social application which aims to share
   the available rates on [DLFP] with other people to synchronize
   attacks on a single content target.

Table of Contents

   1.  INTRODUCTION ...............................................    1
      1.1  Vocabulary .............................................    1
      1.2  Request ................................................    1
      1.3  Norloges ...............................................    1
   2.  SPECIFICATION ..............................................    1
      2.1  The board ..............................................    1
      2.2  The COLUMBO network ....................................    1
      2.3  Request life ...........................................    1
   3.  MESSAGES ...................................................    1
      3.1  CoinCoin ...............................................    1
      3.2  PanPan .................................................    1
      3.3  SpaFini ................................................    1
   4.  SECURITY CONSIDERATIONS ....................................    1
   5.  REFERENCES .................................................    1

1. INTRODUCTION

   COLUMBO has been designed over a number of years for use with
   LinuxFr.org[DLFP].  This document describes the current COLUBO
   protocol.

   The COLUMBO protocol uses the DLFP board[BOARD] as transport layer,
   which assures the authentication of senders, and also the
   integrity, the reliability and the flow control of data.

1.1. Vocabulary

   A colombin is a node on the COLUMBO network.
   A moule is a user of the [BOARD].
   A content is a comment, a diary or a news on Linuxfr.org[DLFP].
   A comment is a message on a diary or a news sent by someone.
   A plusse is a positive vote.
   A moinse is a negative vote.
   A tag is a label set on a diary or a news.

1.2. Request

   A request is created when a colombin broadcasts a CoinCoin message
   on the board. It is identified by its norloge (the timestamp of the
   CoinCoin message).

   A colombin can agree it (with the PanPan message) or refuse it
   (without sending any reply) a request.

   When a request is accepted (needs two agrees), every colombins
   plusse, moinse or tag the content attached.

1.3. Norloge

   A norloge is a timestamp represented by:

   <norloge> ::= <hours> ':' <minutes> ':' <seconds>
   <hours>   ::= <hdigit> <digit>
   <minutes: ::= <mdigit> <digit>
   <seconds> ::= <mdigit> <digit>
   <digit>   ::= [ '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' |
                   '8' | '9' ]
   <mdigit>  ::= [ '0' | '1' | '2' | '3' | '4' | '5' ]
   <hdigit>  ::= [ '0' | '1' | '2' ]

   Example:
     14:02:12

2. SPECIFICATIONS

2.1. The board

   The board is composed by moules< which are authenticated by
   Linuxfr.org[DLFP]:
                         \_o<
                           \           .----------mr_spoke<
               moules<      \         /
                 \_________.-----------.
                           |           |------pankkake<
                           |   BOARD   |
          dalida<----------|           |
                           '-----------'
                             /       \
                   LiNuCe<--'       adonai<

   When a user sends a message on the board, it is broadcasted to
   every other moules.

   Each message contains the following information:
     id: id of message
     timestamp: the timestamp of message (in form 'yyyymmddHHMMSS')
     login: the moule's username on Linuxfr.org[DLFP]
     text: the content of the message

2.2. The COLUMBO network

   On the board, moules< who use a COLUMBO client are named colombins.
   There isn't anything to distinguish (lorraine) a colombin from a
   moule, because it's a really secret brotherhood.

   The only way to guess if a moule is a colombin, is to see if it
   posts requests or answer to them. But sometimes, there are fake
   colombins like reblochon< who have reverse-engineered the COLUMBO
   protocol and who simulate requests and answers. A request has been
   sent to Frederic Lefebvre to do something against these fucking
   pedophiliac hackers.

2.3 Request life

   When a colombin wants to create a request, a CoinCoin message is
   broadcasted on the COLUMBO network. For example:

     message = \_o< https://linuxfr.org/nodes/85118/comments/1218199 -

                           .---->mr_spoke
                      .-------.
            moules--->| BOARD |----->pankkake
                      '-------'
                          '---->dalida

   Once the message is correctly parsed by every colombins, the
   request is recognized by these properties:
     Request:
       timestamp = 13:37:12
       sender = moules
       author = pff
       url = https://linuxfr.org/nodes/85118/comments/1218199
       action = moinse
       agrees = 0

   Then, the COLUMBO client may asks their users if they agree to this
   request or no.

   When a colombin agrees, it sends a PanPan message which refers to
   the request's timestamp, and the agrees counter is incremented:

     message = 13:37:12 pan ! pan !

                           .---->mr_spoke
                      .-------.
            moules<---| BOARD |<-----pankkake
                      '-------'
                          '---->dalida

     Request:
       timestamp = 13:37:12
       sender = moules
       author = pff
       url = https://linuxfr.org/nodes/85118/comments/1218199
       action = moinse
       agrees = 1

   When the second colombin sends an agree, all other colombins *must*
   do what the request ask (plusse, moinse or tag the content).

   Then, the request is destroyed, and the acknowledge SpaFini message
   is broadcasted by adonai<.

   Note: until two PanPan messages, the request still exists.

3. MESSAGES

3.1. CoinCoin

   To send a request to other colombins, a message is broadcasted:

   <message>   ::= '\_o<' <SPACE> <url> <SPACE> <action> [ <tag> ]
   <url>       ::= 'http' [ 's' ] '://linuxfr.org/' <PATH>
   <action>    ::= [ '+' | '-' | '#' ]
   <tag>       ::= <letter> { <letter> }
   <letter>    ::= 'a'...'z' | 'A'...'Z' | '_'
   <SPACE>     ::= ' ' { ' ' }

   Examples:
     \_o< http://linuxfr.org/nodes/85054/comments/1216750 -
     \_o< https://linuxfr.org/news/weboob-06 #weboob

   The <url> argument is the one of the content attached to this
   request. If it isn't a right URL, or if it does not exist, the
   client may ignore it.

   The <action> argument can take three values:
     '+': the request wants to plusse this content
     '-': the request wants to moinse this content
     '#': the request wants to tag this content

   If this is a 'tag' request, an extra argument, introduced in the
   18/3/11 revision of this document, is requested, <tag>. This is a
   one-word court label used as tag on the content.

   Note: a tag can be set only on diaries and news.

   When receiving a request, you can agree it with the PanPan message,
   or to refuse it by ignoring it.

3.2. PanPan

   To agree a request, a message is broadcasted:

   <message>   ::= <requestID> <SPACE> 'pan ! pan !'
   <requestID> ::= <norloge>
   <SPACE>     ::= ' ' { ' ' }

   Example:
     14:15:36 pan ! pan !

   When the request has been agreed by at least two colombins, the
   request is *accepted*.

   The sender of a request can't send a PanPan message for it own
   request, or send it twice.

3.3. SpaFini

   This ACK message is sent by an external third-service bot:

   <message>   ::= <requestID> { <SPACE> <replyID> } <SPACE> <ack>
   <requestID> ::= <norloge>
   <replyID>   ::= <norloge>
   <ack>       ::= [ 'c\'est pas bientôt fini les bots ?' |
                     'sans déconner c\'est pas fini, les bots ?' ]

   It refers to the Request message, and all of the PanPan replies.

4. SECURITY CONSIDERATIONS

   There aren't any security issues.

5. REFERENCES

   [DLFP] http://linuxfr.org

   [BOARD] http://linuxfr.org/board

Romain Bignon                                                    [Page 1]


Also available in: HTML TXT