Overview
CoT messages are XML documents that describe events occurring in time and space. Each CoT message represents an “event” with spatial coordinates, temporal validity, and optional detailed information. Format: XML Protocol: XML over TCP or SSL/TLS Namespace: No formal namespace (legacy format)CoT Event Structure
Basic Schema
A CoT message consists of three main elements:Event Element
The root<event> element contains core attributes:
| Attribute | Type | Description |
|---|---|---|
version | String | CoT version (typically “2.0”) |
uid | String | Unique identifier for the event |
type | String | CoT type taxonomy (e.g., “a-f-G-U-C”) |
time | ISO8601 | When the event was generated |
start | ISO8601 | When the event becomes valid |
stale | ISO8601 | When the event expires |
how | String | How the coordinates were derived |
Event Attributes
version - CoT protocol versionPoint Element
The<point> element defines spatial location (point.py:11-25):
| Attribute | Type | Description |
|---|---|---|
lat | Float | Latitude in decimal degrees (point.py:17) |
lon | Float | Longitude in decimal degrees (point.py:19) |
hae | Float | Height Above Ellipsoid in meters (point.py:21) |
ce | Float | Circular Error (horizontal accuracy) in meters (point.py:23) |
le | Float | Linear Error (vertical accuracy) in meters (point.py:25) |
Detail Element
The<detail> element contains extended information (detail.py:17-30):
contact- Contact information (contact.py)usericon- Icon/marker information (usericon.py)marti- Marti/TAK server metadata (marti.py)__group- Team/group membershipstatus- Device/entity statustakv- TAK version informationtrack- Movement data
CoT Type Taxonomy
Type Format
CoT types follow the format:a-f-G-U-C
Breakdown:
a- Atom (basic entity)f- Friendly (affiliation)G- Ground (dimension)U- Unit (function)C- Combat (status)
Common Types
User Position Updates
Type:a-f-G-U-C (Friendly Ground Unit Combat)
Used for ATAK user location updates (XMLCoTController.py:174-183):
GeoChat Messages
Type:b-t-f (Bits-Text-Freeform)
Used for chat messages (XMLCoTController.py:170-172):
Ping Messages
Type:t-x-c-t (Tasking-Execute-CommsTest-Test)
Used for connection testing (XMLCoTController.py:166-168):
Map Markers
Type:a-n-G (Atom-Neutral-Ground)
Used for map points/markers (XMLCoTController.py:185-192):
Processing CoT Messages
XML Parsing
Class:XMLCoTController (XMLCoTController.py:33)
FreeTAKServer uses defusedxml for secure XML parsing:
Type Determination
Method:determineCoTType() (XMLCoTController.py:133)
Routes messages based on type:
XML to Dictionary Conversion
Method:convert_xml_to_dict() (tcp_cot_service_main.py:416)
Model to XML Conversion
Method:convert_to_xml() (tcp_cot_service_main.py:314)
Domain Model
Event Model
Class:Event (cot_management/persistence/event.py:12)
Point Model
Class:Point (cot_management/persistence/point.py:11)
Detail Model
Class:Detail (cot_management/persistence/detail.py:17)
Constructing CoT Messages
Python Example
Sending CoT Messages
Via TCP Service
Via SSL Service
Message Validation
CoT messages should validate:- Well-formed XML - Valid XML structure
- Required attributes - event, uid, type, time, start, stale
- Valid timestamps - ISO8601 format, stale > start
- Coordinate ranges - lat: -90 to 90, lon: -180 to 180
- Type taxonomy - Valid CoT type string
Related Documentation
- TCP CoT Service - TCP service implementation
- SSL CoT Service - SSL service implementation
- CoT Manager Component - CoT processing and routing