Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
BIBLESYNC(7)		    Linux Programmer's Manual		    BIBLESYNC(7)

NAME
     biblesync - multicast navigation synchronization in Bible programs

SYNOPSIS
     #include <biblesync.hh>

     typedef enum_BibleSync_mode {
	 BSP_MODE_DISABLE,
	 BSP_MODE_PERSONAL,
	 BSP_MODE_SPEAKER,
	 BSP_MODE_AUDIENCE,
	 N_BSP_MODE
     } BibleSync_mode;

     typedef enum_BibleSync_xmit_status {
	 BSP_XMIT_OK,
	 BSP_XMIT_FAILED,
	 BSP_XMIT_NO_SOCKET,
	 BSP_XMIT_BAD_TYPE,
	 BSP_XMIT_NO_AUDIENCE_XMIT,
	 BSP_XMIT_RECEIVING,
	 N_BSP_XMIT
     } BibleSync_xmit_status;

     typedef void (*BibleSync_navigate)(char cmd, string speakerkey,
					string bible, string ref, string alt,
					string group, string domain,
					string info,  string dump);

     Public interface:

     BibleSync *object = new BibleSync(string application,
				       string version,
				       string user);

     BibleSync_mode BibleSync::setMode(BibleSync_mode mode,
				       BibleSync_navigate *nav_func,
				       string passPhrase);
     BibleSync_mode BibleSync::getMode(void);
     string BibleSync::getVersion(void);
     string BibleSync::getPassphrase(void);
     BibleSync_xmit_status BibleSync::Transmit(string bible, string ref, string alt,
					       string group, string domain);
     BibleSync_xmit_status BibleSync::Chat(string message);
     static int BibleSync::Receive(void *object);
     bool BibleSync::setPrivate(bool privacy);
     void BibleSync::setBeaconCount(uint8_t count);
     void BibleSync::setUser(string user);
     void BibleSync::listenToSpeaker(bool listen, string speakerkey);

DESCRIPTION
     BibleSync	is a published protocol specification by which cooperating Bible
     programs navigate together.  It is implemented as a C++ class  providing  a
     small,  clean  interface including basic setup, take-down, transmit, polled
     receive, and a bare few utility methods.

     The value of BibleSync is found in several examples:

     A single user may have multiple programs,	or  multiple  computers/devices,
     all of which he wishes to follow along together.

     Similarly,  a group of people working closely together, such as translators
     or a group Bible study, can stay together as they work.

     In an instructional motif, BibleSync takes either	the  active  or  passive
     mode, providing for a unidirectional navigation control.

BIBLESYNC ESSENTIALS
     BibleSync	communicates using local multicast.  Three operational modes are
     provided: Personal, Speaker, or Audience.

     In Personal mode, BibleSync operates as a peer among  peers,  both  sending
     and receiving navigation synchronization on the shared local multicast net-
     work.   Applications  are	expected to respond appropriately to navigation,
     and to send synchronization events of their own as the user moves about his
     Bible.

     In Speaker or Audience mode, BibleSync either transmits only  (Speaker)  or
     receives  only  (Audience)  navigation.  The Audience is expected to follow
     along with the Speaker's direction.  The Speaker ignores  incoming  naviga-
     tion; the Audience transmits no navigation.

     The difference between Personal and Speaker/Audience is thus strictly as to
     whether both sides of the conversation are active for each participant.

     On  startup  of  the protocol, BibleSync transmits a presence announcement,
     informing other communication partners of the application's  participation.
     BibleSync makes this announcement available to the application; whether the
     application  shows  these	announcements to the user is the application de-
     signer's choice.

     Thereafter, as appropriate to the operational mode selected,  BibleSync  is
     tasked  with  polled  reception  of  incoming  navigation event packets and
     transmission of navigation event packets on the user's part.

     Transmitters (Personal and Speaker modes) issue availability beacons  every
     10 seconds.  Received beacons for previously-unknown Speakers are handed up
     to  the application as "new Speaker" events.  These beacons provide for re-
     ceivers (Personal and Audience modes) to maintain a managed list of  avail-
     able  Speakers.   Furthermore,  when a transmitter ceases to issue beacons,
     its presence in the list of available Speakers is aged out until being  re-
     moved  after  30  seconds	of beacon silence.  The application is again in-
     formed as a Speaker ages out with a "dead Speaker" event.

     Default listening behavior is that the first Speaker heard  via  beacon  is
     marked  for listening.  Other transmitters claiming Speaker status via bea-
     con are initially ignored, but their presence is made known to the applica-
     tion.  This provides for the application to maintain a list from which  the
     user  can	select Speakers he wishes to synchronize his application.  It is
     useful for the application to provide blanket "listen to all"  and  "listen
     to  none" functions, as well as per-Speaker selections, informing BibleSync
     of these choices.	In any case, this default "first  Speaker  only"  policy
     can be overridden by the application with any other policy desired, through
     the use of listenToSpeaker() as the application designer requires.

     Synchronization events include 5 data elements: The Bible abbreviation; the
     verse  reference;	an  alternate reference (if desired; not required) which
     may allow the application to interpret better based on  variant  versifica-
     tion; a synchronization group identifier; and the domain.

     The  group identifier is a single digit between 1 and 9.  The specification
     is imprecise as to this parameter's use.	The  initial  implementation  of
     BibleSync	in  Xiphos uses the synchronization group as an indicator of the
     tab number in its tabbed interface: Not only is the  Bible  navigated,  but
     the tab in which to navigate is selected.

     The domain parameter is currently fixed as "BIBLE-VERSE".	This will be put
     to greater use in future revisions of the protocol.

     BibleSync transmits no packet when the application leaves the conversation.

PUBLIC INTERFACE
   Object creation
     The  application must create a single BibleSync object, identifying the ap-
     plication's name, its version, and the user.

   setMode
     setMode identifies how BibleSync should behave. The application  must  pro-
     vide  as  well the navigation callback function by which BibleSync will in-
     form the application of incoming events; the callback makes all the naviga-
     tion parameters provided in event packets	available  to  the  application.
     setMode   returns	 the  resulting  mode.	 The  application  provides  the
     passphrase to be used as well; this argument defaults to "" (empty string),
     indicating that the existing passphrase should be left in place.

   getMode
     The application may request the current mode.

   getVersion
     The version string of the library itself is returned.

   getPassphrase
     Intended for use when preparing to enter any active mode,	the  application
     may request the current passphrase, so as to provide a default.

   Transmit
     The  protocol  requires all the indicated parameters, but all have defaults
     in Transmit: KJV, Gen.1.1, empty alternate, 1, and BIBLE-VERSE.

   Chat
     This is a method for transmission of casual text messages to all others  in
     the  conversation.   It is expected to be received by applications who will
     display them in a suitable manner to the user.

   Receive
     This is a static method accessible from either C or C++.  It must be called
     with the object pointer so as to re-enter object context  for  the  private
     internal  receiver.   Receive()  must  be called regularly (i.e. polled) as
     long as it continues to return TRUE.  When it returns FALSE, it means  that
     the  mode has changed to BSP_MODE_DISABLE, and the scheduled polling should
     stop.  See also the note below on polled reception.

   setPrivate
     In the circumstance where the user has multiple programs running on a  sin-
     gle computer and does not want his navigation broadcast outside that single
     system,  when  in	Personal mode, the application may also request privacy.
     The effect is to set multicast TTL to zero, meaning that packets  will  not
     go out on the wire.

   setBeaconCount
     Beacon  transmission occurs during every Nth call to Receive(); the default
     value is 10. This presumes the application will  call  Receive()  once  per
     second. If the application will call Receive() less frequently, divide that
     time (say, 2 seconds) into 10 to get a value (5) to use with this call. Use
     setBeaconCount() prior to enabling Personal or Speaker mode.

   setUser
     If  the  application allows the user to set a name via settings dialog, se-
     tUser() is available to re-assign the associated user name as seen by  oth-
     ers.

   listenToSpeaker
     Aside from default listen behavior detailed above, the application specifi-
     cally  asks to listen or not to listen to specific Speakers.  The key is as
     provided during the notification of a new Speaker.

RECEIVE USE CASES
     There are 7 values for the cmd parameter of the nav_func.	 In  all  cases,
     the dump parameter provides the raw content of an arriving packet.

   'A'
     Announce.	 A  general  presence message is in alt, and the individual ele-
     ments are also available, as overloaded use of the parameters:  bible  con-
     tains the user; ref contains the IP address; group contains the application
     name and version; and domain contains the device identification.

   'N'
     Navigation.   The	bible,	ref,  alt, group, and domain parameters are pre-
     sented as they arrived.  info and dump are also available.

   'S'
     Speaker's initial recognition from beacon receipt.   Overloaded  parameters
     are available as for presence announcements.

   'D'
     Dead Speaker.  speakerkey holds the UUID key of a previously-identified ap-
     plication which is no longer a candidate for listening.

   'C'
     Chat.   Message  text  is in alt and other parameters are overloaded as per
     announce, above.

   'M'
     Mismatch.	The incoming event packet is mismatched, either against the cur-
     rent passphrase or for a navigation synchronization packet  when  BibleSync
     is  in  Speaker  mode.  The info parameter begins with either "announce" or
     "sync", plus the user and IP address from whom the packet came.   As  well,
     in the sync case, the regular bible, ref, alt, group, and domain parameters
     are  available.  In the announce case, the presence message is in alt, with
     overloaded individual parameters as previously described.

   'E'
     Error.  This indicates network errors and malformed packets.  The	applica-
     tion's nav_func is provided only the info and dump parameters.

NOTES
   Polled reception
     The  application must provide a means by which to poll regularly for incom-
     ing packets.  In Xiphos, which is built on GTK and GLib,  this  is  readily
     provided  by mechanisms like g_timeout_add(), which sets a regular interval
     call of the indicated function.  GLib will re-schedule the call as long  as
     the called function returns TRUE.	When it returns FALSE, GLib un-schedules
     the  call.   Receive()  adheres to this straightforward convention.  There-
     fore, it is imperative that every time the application moves from	disabled
     to any non-disabled mode, Receive is again scheduled for polled use.

     A	1-second poll interval is expected.  Brief experience during development
     has shown that longer intervals lead to a perception of lag. If the  appli-
     cation  designer  nonetheless expects to call Receive() less frequently, it
     is necessary to use setBeaconCount() to change the number of  calls  to  it
     between beacon transmissions.

     During every Receive() call, all waiting packets are processed.

   No datalink security
     BibleSync	is  a protocol defined for a friendly environment.  It offers no
     security in its current specification, and any packet sniffer such as wire-
     shark(1) or tcpdump(8) can see the entire conversation.  The  specification
     makes  passing reference to future encryption, but at this time none is im-
     plemented.

   Managed Speaker lists
     The addition of transmitter beacons was  a  result  of  initial  experience
     showing that it can be too easy for a user to mis-start BibleSync, or for a
     malicious user to interject himself into serious work.  The goal of beacons
     is to provide a means by which, on the one hand, the user can be made aware
     of  who  is  attempting to be a Speaker and, on the other hand, confine the
     set of Speakers whom the user will permit to make	synchronization  changes
     in  the  application.   The  simplest  use  of 'S' new Speaker notification
     events is to respond with listenToSpeaker(true, speakerkey) which in effect
     makes BibleSync behave as though there are no beacons.  More serious use of
     'S'/'D' is for the application to manage its own sense of available  Speak-
     ers, providing a means by which the user can make sensible selections about
     how  to  react to each Speaker's presence.  BibleSync can be told to listen
     to legitimate Speakers, and to ignore interlopers, whether  intended  mali-
     ciously or merely due to other users' inadvertent behavior.

   Sending verse lists
     One  of the better uses of BibleSync is in sharing verse lists.  Consider a
     relatively weak application, perhaps on a mobile  device,	and  a	desktop-
     based application with strong search capability.  Run searches on the desk-
     top,  and send the result via BibleSync to the mobile app.  The ref parame-
     ter is not confined to a single reference.  In normal citation syntax,  the
     verse  reference may consist of semicolon-separated references, comma-sepa-
     rated verses, and hyphen-separated ranges.  Be aware that the specification
     has a relatively short limit on packet size, so that at most  a  few  dozen
     references will be sent.

   Standard reference syntax
     It is the responsibility of the application to transmit references in stan-
     dard  format.   BibleSync	neither validates nor converts the application's
     incoming bible, ref, and alt parameters.  The specification references  the
     BibleRef and OSIS specifications.

SEE ALSO
     http://biblesyncprotocol.wikispaces.com  (user  "General_Public",	password
     "password"), http://semanticbible.com/bibleref/bibleref-specification.html,
     socket(2), setsockopt(2), select(2), recvfrom(2), sendto(2), and ip(7), es-
     pecially sections on IP_ADD_MEMBERSHIP, IP_MULTICAST_IF, IP_MULTICAST_LOOP,
     and IP_MULTICAST_TTL.

Linux				   2018-04-27			    BIBLESYNC(7)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=biblesync&sektion=7&manpath=FreeBSD+Ports+15.1.quarterly>

home | help