Rivendell Notification Protocol

Fred Gleason


Table of Contents

Overview
Notification Messages
Carts
Logs
Pypad Instances
Dropbox Instances
RDCatch Event Instances
RSS Feed Items
RSS Feeds
SoundPanel Buttons [rdairplay(1)]
Extended SoundPanel Buttons [rdpanel(1)]
RDCatch Messages
Deck Event Processed Operation
Deck Status Operation
Reload Decks Operation
Send Meter Levels Operation
Set Input Monitor
Set Input Monitor Response
Stop Deck Operation

Overview

This document defines the IP protocol used by Rivendell for real-time communication between different modules and/or hosts. Messages are sent by means of multicast UDP packets to port 20539. The IPv4 multicast group address used is defined the in the SYSTEM.NOTIFICATION_ADDRESS database field.

Update messages are textual, with individual fields delimited by the ASCII SPACE character. They are formatted as follows:

keyword arg1 arg2 [...]

where keyword defines the class of message. The following classes are defined:

Notifications

Signals a change to a Rivendell database object.

Catch Events

RDCatch state changes.

Notification Messages

Notification messages use the following format:

NOTIFY type action id

type

The database object type to which the message pertains.

action

The action being reported. The following actions are defined:

ADD

The referenced object has just been added to the database.

DELETE

The referenced object has just been deleted from the database.

MODIFY

The reference object has just been modified in the database.

id

Unique id of the object.

The following database object types are defined:

Carts

Table 1. Cart Fields

FieldValue
Database FieldCART.NUMBER
TypeCART
Id Data TypeUnsigned Integer
RDNotification::Type ValueRDNotification::CartType [1]

Logs

Table 2. Log Fields

FieldValue
Database FieldLOGS.NAME
TypeLOG
Id Data TypeString
RDNotification::Type ValueRDNotification::LogType [2]

Pypad Instances

Table 3. Pypad Instance Fields

FieldValue
Database FieldPYPAD_INSTANCES.ID
TypePYPAD
Id Data TypeInteger
RDNotification::Type ValueRDNotification::PypadType [3]

Dropbox Instances

Table 4. Dropbox Instance Fields

FieldValue
Database FieldSTATIONS.NAME
TypeDROPBOX
Id Data TypeString
RDNotification::Type ValueRDNotification::DropboxType [4]

Note

Dropbox Add/Modify/Delete actions operate at a 'per-host' granularity --i.e. any notification will cause all dropboxes on the target host to be killed and then restarted.

RDCatch Event Instances

Table 5. RDCatch Event Fields

FieldValue
Database FieldRECORDINGS.ID
TypeCATCH_EVENT
Id Data TypeInteger
RDNotification::Type ValueRDNotification::CatchEventType [5]

RSS Feed Items

Table 6. RSS Feed Item Fields

FieldValue
Database FieldPODCASTS.ID
TypeFEED_ITEM
Id Data TypeUnsigned Integer
RDNotification::Type ValueRDNotification::FeedItemType [6]

RSS Feeds

Table 7. RSS Feed Fields

FieldValue
Database FieldFEEDS.KEY_NAME
TypeFEED
Id Data TypeString
RDNotification::Type ValueRDNotification::FeedType [7]

SoundPanel Buttons [rdairplay(1)]

Table 8. SoundPanel Button Fields

FieldValue
Database FieldPANELS.ID
TypePANEL_BUTTON
Id Data TypeInteger
RDNotification::Type ValueRDNotification::PanelButtonType [8]

Extended SoundPanel Buttons [rdpanel(1)]

Table 9. SoundPanel Button Fields

FieldValue
Database FieldEXTENDED_PANELS.ID
TypeEXTENDED_PANEL_BUTTON
Id Data TypeInteger
RDNotification::Type ValueRDNotification::ExtendedPanelButtonType [9]

RDCatch Messages

RDCatch messages use the following format:

CATCH orig-hostname operation arg1 [...]

orig-hostname

The name of the host originating the message. From STATIONS.NAME.

operation

The RDCatch operation. See the list below.

Deck Event Processed Operation

Emitted by rdcatchd(8) every time a 'Cut Event' ['CE'] RML is processed.

Table 10. RDCatch Event Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 1 [RDCatchEvent::DeckEventProcessedOp]
Deck Channel3 Integer. Record decks have values in the range 1-127, while play decks have values in the range 128-254.
Event Number4 Integer. The value of CUT_EVENTS.NUMBER.

Deck Status Operation

Emitted by rdcatch(1) at startup to request the current status of all decks.

Table 11. RDCatch Event Request Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 2 [RDCatchEvent::DeckStatusQueryOp]

Emitted by rdcatchd(8) whenever the status of a deck changes, or as a set in response to a request. (See Table 11, “RDCatch Event Request Fields”).

Table 12. RDCatch Event Response Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 3 [RDCatchEvent::DeckStatusResponseOp]
Deck Channel3 Integer. Record decks have values in the range 1-127, while play decks have values in the range 128-254.
Status4 Integer. Current status of the specified deck. See the section called “Deck Status Codes” for code point values.
Event ID5 Unsigned Integer, from RECORDINGS.ID or 0 if deck is inactive.
Cart Number6 Unsigned Integer, from CART.NUMBER or 0 if deck status is not 3 [Active].
Cut Number7 Integer, from cut part of CUTS.CUTNAME or 0 if deck status is not 3 [Active].

Deck Status Codes

Table 13. Deck Status Codes

CodeMeaningRDDeck::Status Value
0OfflineRDDeck::Offline
1IdleRDDeck::Idle
2ReadyRDDeck::Ready
3Active (playing or recording)RDDeck::Recording
4Waiting (for a GPI)RDDeck::Waiting

Reload Decks Operation

Emitted by rdadmin(1) to trigger a reload of the record and play-out deck parameters.

Table 14. RDCatch Reload Decks Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 7 [RDCatchEvent::ReloadDecksOp]
Target Hostname3String, from STATIONS.NAME

Send Meter Levels Operation

Emitted by rdcatchd(8) to update audio meter levels for active record and play-out decks.

Table 15. RDCatch Send Meter Levels Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 8 [RDCatchEvent::SendMeterLevelsOp]
Meter Entry3String, chan:left-lvl:right-lvl

Set Input Monitor

Emitted by rdcatch(1) to turn a deck input monitor on or off.

Table 16. RDCatch Set Input Monitor Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 5 [RDCatchEvent::SetInputMonitorOp]
Target Hostname3String, from STATIONS.NAME
Deck Channel4 Integer. Record decks have values in the range 1-127, while play decks have values in the range 128-254.
State5 Boolean. 0=False, 1=True.

Set Input Monitor Response

Emitted by rdcatchd(8) to signal change of a deck input monitor.

Table 17. RDCatch Set Input Monitor Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 6 [RDCatchEvent::SetInputMonitorResponseOp]
Deck Channel3 Integer. Record decks have values in the range 1-127, while play decks have values in the range 128-254.
State4 Boolean. 0=False, 1=True.

Stop Deck Operation

Emitted by rdcatch(1) to abort a Record or Play-out event.

Table 18. RDCatch Stop Deck Fields

FieldOffsetValue
Keyword0CATCH
Originating Hostname1String, from STATIONS.NAME
Operation2Integer. 4 [RDCatchEvent::StopDeckOp]
Target Hostname3String, from STATIONS.NAME
Deck Channel4 Integer. Record decks have values in the range 1-127, while play decks have values in the range 128-254.