Chapter 7. VOP, the Virtual Object Protocol

Interobject message syntax and protocol for VOS

7.1. Introduction

TODO: add stuff about length attributes

The syntax of VOP is based on XML. It is not 100% strictly valid XML (in XML nomenclature, it is probably mostly "well-formed", however). It borrows the nested element/attribute model and syntax, but deviates from strict XML when necesary or convenient (for example, you can include arbitrary binary data of a known bytle-length directly within tags)

Two objects local to the same site will usually just communicate through method calls, without going through the network. The data structure containing the message will be specific to each implementation (in the C++ libvos implementation, see the "Message" class), but should contain all the information passed via the network protocol.

This file will describe the network protocol.

Each session is a two-way conversation between two sites, via a TCP/IP connection between the sites. There are two types of messages sent and received:

Regular object messages are contained in "message" tags, and are how different Vobjects communicate.

Remote object update messages are contained within "update" tags, and are used to update remote instances of a Vobject to changes in the local master object.

All messages (of both types) have two attributes, "to" and "from", which specify the vop: URLs of the destination and sending objects, respectively, and an attribute, "method", a string identifying the action represented by the message. Additionally, messages may contain a "nonce" attribute, containing a string which a reply should carry as its nonce, thus linking the reply to the original message. Beyond those standard attributes, various key-value fields may be required or optional with any particular method, as defined by the object type.

VOP messages have a sequential order, in which they are sent, recieved, and in which they must be processed.