add participant instance handle to builtin topics
Extend the endpoint built-in topic data with the participant instance handle (the GUID was already present). Having the instance handle available makes it trivial to look up the participant, whereas a lookup of the GUID is rather impractical. Signed-off-by: Erik Boasson <eb@ilities.com>
This commit is contained in:
		
							parent
							
								
									f12b36e112
								
							
						
					
					
						commit
						42500e7fb8
					
				
					 3 changed files with 9 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -210,6 +210,7 @@ typedef struct dds_builtintopic_endpoint
 | 
			
		|||
{
 | 
			
		||||
  dds_builtintopic_guid_t key;
 | 
			
		||||
  dds_builtintopic_guid_t participant_key;
 | 
			
		||||
  dds_instance_handle_t participant_instance_handle;
 | 
			
		||||
  char *topic_name;
 | 
			
		||||
  char *type_name;
 | 
			
		||||
  dds_qos_t *qos;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@
 | 
			
		|||
struct ddsi_serdata_builtintopic {
 | 
			
		||||
  struct ddsi_serdata c;
 | 
			
		||||
  nn_guid_t key;
 | 
			
		||||
  dds_instance_handle_t pphandle;
 | 
			
		||||
  nn_xqos_t xqos;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -73,11 +73,13 @@ static struct ddsi_serdata_builtintopic *serdata_builtin_new(const struct ddsi_s
 | 
			
		|||
static void from_entity_pp (struct ddsi_serdata_builtintopic *d, const struct participant *pp)
 | 
			
		||||
{
 | 
			
		||||
  nn_xqos_copy(&d->xqos, &pp->plist->qos);
 | 
			
		||||
  d->pphandle = pp->e.iid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void from_entity_proxypp (struct ddsi_serdata_builtintopic *d, const struct proxy_participant *proxypp)
 | 
			
		||||
{
 | 
			
		||||
  nn_xqos_copy(&d->xqos, &proxypp->plist->qos);
 | 
			
		||||
  d->pphandle = proxypp->e.iid;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void set_topic_type_from_sertopic (struct ddsi_serdata_builtintopic *d, const struct ddsi_sertopic *tp)
 | 
			
		||||
| 
						 | 
				
			
			@ -96,12 +98,14 @@ static void set_topic_type_from_sertopic (struct ddsi_serdata_builtintopic *d, c
 | 
			
		|||
 | 
			
		||||
static void from_entity_rd (struct ddsi_serdata_builtintopic *d, const struct reader *rd)
 | 
			
		||||
{
 | 
			
		||||
  d->pphandle = rd->c.pp->e.iid;
 | 
			
		||||
  nn_xqos_copy(&d->xqos, rd->xqos);
 | 
			
		||||
  set_topic_type_from_sertopic(d, rd->topic);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void from_entity_prd (struct ddsi_serdata_builtintopic *d, const struct proxy_reader *prd)
 | 
			
		||||
{
 | 
			
		||||
  d->pphandle = prd->c.proxypp->e.iid;
 | 
			
		||||
  nn_xqos_copy(&d->xqos, prd->c.xqos);
 | 
			
		||||
  assert (d->xqos.present & QP_TOPIC_NAME);
 | 
			
		||||
  assert (d->xqos.present & QP_TYPE_NAME);
 | 
			
		||||
| 
						 | 
				
			
			@ -109,12 +113,14 @@ static void from_entity_prd (struct ddsi_serdata_builtintopic *d, const struct p
 | 
			
		|||
 | 
			
		||||
static void from_entity_wr (struct ddsi_serdata_builtintopic *d, const struct writer *wr)
 | 
			
		||||
{
 | 
			
		||||
  d->pphandle = wr->c.pp->e.iid;
 | 
			
		||||
  nn_xqos_copy(&d->xqos, wr->xqos);
 | 
			
		||||
  set_topic_type_from_sertopic(d, wr->topic);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void from_entity_pwr (struct ddsi_serdata_builtintopic *d, const struct proxy_writer *pwr)
 | 
			
		||||
{
 | 
			
		||||
  d->pphandle = pwr->c.proxypp->e.iid;
 | 
			
		||||
  nn_xqos_copy(&d->xqos, pwr->c.xqos);
 | 
			
		||||
  assert (d->xqos.present & QP_TOPIC_NAME);
 | 
			
		||||
  assert (d->xqos.present & QP_TYPE_NAME);
 | 
			
		||||
| 
						 | 
				
			
			@ -219,6 +225,7 @@ static bool to_sample_endpoint (const struct ddsi_serdata_builtintopic *d, struc
 | 
			
		|||
  ppguid = d->key;
 | 
			
		||||
  ppguid.entityid.u = NN_ENTITYID_PARTICIPANT;
 | 
			
		||||
  convkey (&sample->participant_key, &ppguid);
 | 
			
		||||
  sample->participant_instance_handle = d->pphandle;
 | 
			
		||||
  if (d->c.kind == SDK_DATA)
 | 
			
		||||
  {
 | 
			
		||||
    assert (d->xqos.present & QP_TOPIC_NAME);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue