Difference between revisions of "GeometryServiceNetworkProtocol"

From BRL-CAD
(Specifics about the libPKG header implementation)
(Remove references to pkg)
 
(12 intermediate revisions by 2 users not shown)
Line 12: Line 12:
 
----
 
----
  
==Visual GSNet Msg Breakdown==
 
[[Image:GSNetMsgBreakdown.png|520x373px]]
 
  
----
 
  
==GSNet Msg==
+
=GSNet Msg Description=
===Header===
+
==Header==
The header of the GSNet Msg contains the information necessary for quickly determining authenticity, type and length.  Geometry Service's network library, libNetwork, is built upon BRL-CAD's networking library: libPKG.  This causes the header byte layout to look like this:
+
The header of the GSNet Msg contains the information necessary for quickly determining authenticity, type and length.  Geometry Service's network library, libNetwork, has a header byte layout that looks like this:
 
<br /><br />
 
<br /><br />
 
   
 
   
{|border="1"
+
{|style="border-collapse: separate; border-spacing: 0; border-width: 1px; border-style: solid; border-color: #666699; padding: 0;"
|width="180"|'''Element'''
+
|style="border: 1px solid #666699; background-color: #666699; color: #FFFFFF; width: 180px;"|'''Element'''
|width="180"|'''Length'''
+
|style="border: 1px solid #666699; background-color: #666699; color: #FFFFFF; width: 180px;"|'''Length'''
|width="180"|'''Value'''
+
|style="border: 1px solid #666699; background-color: #666699; color: #FFFFFF; width: 180px;"|'''Value'''
|-
 
|Magic1
 
|int16 (2 Bytes)
 
|Always 0x41FE
 
|-
 
|Magic2
 
|int16 (2 Bytes)
 
|Always 0x5309
 
 
|-
 
|-
|MessageLength
+
|style="border: 1px solid #666699;"|MsgType
|int32 (4 bytes)
+
|style="border: 1px solid #666699;"|int16 (2 bytes)
|
+
|style="border: 1px solid #666699;"|
 
|-
 
|-
|MsgType
+
|style="border: 1px solid #666699;"|MessageLength
|int16 (2 bytes)
+
|style="border: 1px solid #666699;"|int32 (4 bytes)
|
+
|style="border: 1px solid #666699;"|Does *NOT* include the type or length, so is packet size - 6
 
|-
 
|-
|MessageUUID
+
|style="border: 1px solid #666699;"|MessageUUID
|[[GSNet_String|String (Variable bytes)]]
+
|style="border: 1px solid #666699;"|[[GSNet_String|String (Variable bytes)]]
|
+
|style="border: 1px solid #666699;"|
 
|-
 
|-
|HasRegardingUUID
+
|style="border: 1px solid #666699;"|HasRegardingUUID
|Boolean (1 byte)
+
|style="border: 1px solid #666699;"|Boolean (1 byte)
|
+
|style="border: 1px solid #666699;"|
 
|-
 
|-
|RegardingMessageUUID
+
|style="border: 1px solid #666699;"|RegardingMessageUUID
|[[GSNet_String|String (Variable bytes)]]
+
|style="border: 1px solid #666699;"|[[GSNet_String|String (Variable bytes)]]
|
+
|style="border: 1px solid #666699;"|
 
|}
 
|}
  
  
====libPKG Part====
+
* '''MsgType:''' 2 byte integer value that tells what type of message this is.
Due to some C and C++ incompatabilities, the libPKG "Type" parameter is used as "Magic2" in the GSNet Protocol. NetMsg routing is performed on the "GS Msg Type" parameter
+
* '''MessageUUID:''' Standard UUID for this message.  Currently stored as a string.
 
+
* '''HasRegardingUUID:''' Boolean flag that indicates whether there is a Regarding UUID or not.
====GSNet Part====
+
* '''RegardingMessageUUID:''' Standard UUID that indicates this NetMsg is a response to another NetMsg.
  
 +
----
  
 +
==Data==
 
----
 
----
===Data===
+
The Data load of a NetMsg is, obivously, the important and unique part.  Data Loads can be as small as zero (in the case of a TypeOnlyMsg) or many kilobytes long.
----
 
 
 
  
List of [[NetMsgTypes]].
+
Here is a list of [[NetMsgTypes|NetMsg types]] and here is a list of [[Common NetMsg Exchanges]].
 
List of [[Common NetMsg Exchanges]]
 

Latest revision as of 16:12, 4 May 2011


GSNet
The Geometry Service Network (GSNet) Protocol is a TCP/IP based protocol designed to facilitate socketed communications between Geometry Service Nodes on a network. A Geometry Service Node is defined as any softwares that supports communication via the GSNet Protocol.




GSNet Msg Description[edit]

Header[edit]

The header of the GSNet Msg contains the information necessary for quickly determining authenticity, type and length. Geometry Service's network library, libNetwork, has a header byte layout that looks like this:

Element Length Value
MsgType int16 (2 bytes)
MessageLength int32 (4 bytes) Does *NOT* include the type or length, so is packet size - 6
MessageUUID String (Variable bytes)
HasRegardingUUID Boolean (1 byte)
RegardingMessageUUID String (Variable bytes)


  • MsgType: 2 byte integer value that tells what type of message this is.
  • MessageUUID: Standard UUID for this message. Currently stored as a string.
  • HasRegardingUUID: Boolean flag that indicates whether there is a Regarding UUID or not.
  • RegardingMessageUUID: Standard UUID that indicates this NetMsg is a response to another NetMsg.

Data[edit]


The Data load of a NetMsg is, obivously, the important and unique part. Data Loads can be as small as zero (in the case of a TypeOnlyMsg) or many kilobytes long.

Here is a list of NetMsg types and here is a list of Common NetMsg Exchanges.