CLEMA protocol

OSCAR Servers

ICQ and AIM clients of the service's own apps sign in to servers somebody else runs, some of which the service names. GET /oscar-servers lists those, in the order to offer them. Clients ask before there is any account, so nothing authenticates it.

GET /oscar-servers?name=Mandarin&platform=Android&build=729

name, platform and build are the client's, as its hello says them. All are optional; a client that does not say what it is gets every server. A build that is no number is answered 400 with invalid_format.

{"ok":true,"servers":[
  {"id":"nina","name":"NINA","note":{"en":"nina.chat · you can create an account","ru":"nina.chat · можно создать аккаунт"},"host":"login.oscar.nina.chat","port":5190,"file_proxy":{"host":"ars.oscar.nina.bz","port":5190},"registration":{"type":"oscar","host":"oscore-n01.blue.nina.chat","port":5190,"terms_url":"https://nina.chat/legal/"}},
  {"id":"site","name":"Site","host":"oscar.example.org","port":5190,"registration":{"type":"web","url":"https://example.org/register"}}
]}
Field Description
id The server on this list
name Its name, the same in every language
note What is said under its name, by primary subtag; absent for nothing
host, port Where accounts sign in
file_proxy The proxy files are offered through, its host and port; absent for none
registration How an account is made there; absent for no way to

A registration of type oscar is made on the client's own form against its host and port, with terms_url where the server has terms to accept. One of type web is made on the page at url, opened in the browser. A client ignores fields it does not know, and a registration of a type it does not know, and goes on showing the server.

The answer carries an ETag and Cache-Control: no-cache: a client keeps the list, shows what it kept, and asks with If-None-Match, answered 304 when nothing changed. While the server has not read the list yet it answers 503 with internal_error, which is not an empty list: a client keeps the one it has. An empty servers means that none is named.

A list changes what a client offers next. It does not change the address of an account already signed in, which that account keeps: nothing told here redirects anybody's password.