Code Monkey home page Code Monkey logo

finger-request-switch's Introduction

Finger Request Switch

by Charles Iliya Krempeaux

Preamble

The finger-protocol is a simple, friendly, human-oriented & human-legible protocol, that has its origins in the early 1970s.

Although some of the usage of the finger-protocol was similar to a directory-service for humans — it evolved into one of the early Internet-based social networks. It was not uncommon for people to publish personal information, contact information, referencs to that person's presence on other parts of the Internet, a short biography, a journal, articles, jokes, (so called) ASCII art, and more, via the finger-protocol.

One should note that online social networks existed on other pre-Internet networks. So, while the finger-protocol wasn't the first online social network — it is important because of just how important the Internet became.

The finger-protocol was created and evolved over time, by the software developers who created the finger-client software, and the finger-server software (as well as the user who chose to use or not use a particular implementation). Later on — at least 6 years after the finger-protocol was first created, IETF RFC-742 was published, in an attempt to describe the pre-existing finger-protocol. I.e., IETF RDC-742 did not create a new protocol, but instead just tried to document and describe what was created by software developers outside of the IETF. 14 years later after RFC-742 was published, and at least 20 years after the finger-protocol first existed and was evolving — RFC-1288 was published in an attempt to remove some of (what some perceived as) the ambiguity of RFC-742, to make it easier for both people who would implement a finger-protocol client or server, and to provide some guidance. However RFC-1288 added restrictions to the finger-protocol that did NOT exist in RFC-742. In 1991 some of these restrictions may have seemed reasonable, however today (in 2022) some of the restrictions probably do not make as much sense (and should probably be reconsidered). This document is in part an attempt to reconsider one of these restrictions that RFC-1288 introduced but which didn't exist in RFC-742 — in particular, how to handle a switch other than the "/W" switch.

Introduction

This document is an updated specification for a finger-protocol request

Finger-Query Specification

Using the same style of notation as IETF RFC-1288, here is an updated specification for a finger-query:

        {Q1}    ::= [{W}|{W}{S}{U}]{C}

        {Q2}    ::= [{W}{S}][{U}]{H}{C}

        {U}     ::= username

        {H}     ::= @hostname | @hostname{H}

        {W}     ::= /switchname

        {S}     ::= <SP> | <SP>{S}

        {C}     ::= <CRLF>

What Changed

The change is the definition of {W}.

In IETF RFC-1288 it was:

        {W}     ::= /W

In this document, it has been updated to:

        {W}     ::= /switchname

What this means is that — instead of the finger-protocol just having this switch:

/W

The finger-protocol can have any of these types of switches too:

/PUSH
/PULL
/LIST
/PICK
/banana
/path/to/something.ext
/once
/once/twice
/once/twice/thrice
/once/twice/thrice/fource

Parsing

Given a finger-request

For example —

"/PULL [email protected]\r\n"

One can tell if a finger-request has a switch by looking at the first character of the finger-request.

If it is a "/" character (i.e., a solidus character), then the finger-request has a switch. Else if it isn't a "/" character (i.e., a solidus character), then the finger-request doesn't have a switch.

All the characters following the "/" character (i.e., the solidus character) up to, but not including a space character or (if there is not space character) a terminaling "\r\n" (i.e., <CRLF>), is part of the switchname.

So, for example, with out example finger-request

"/PULL [email protected]\r\n"     

The switchname is "PULL".

Examples

Here are a number of example finger-requests where we specify what the switchname is

/PUSH
# switchname = "PUSH"

/PULL
# switchname = "PULL"

/LIST
# switchname = "LIST"

/PICK
# switchname = "PICK"

/banana
# switchname = "banana"

/path/to/something.ext
# switchname = "path/to/something.ext"

/once
# switchname = "once"

/once/twice
# switchname = "once/twice"

/once/twice/thrice
# switchname = "once/twice/thrice"

/once/twice/thrice/fource
# switchname = "once/twice/thrice/fource"

finger-request-switch's People

Contributors

reiver avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.