PE codes for CBE check
Hello, we rae using RFA 8.1 C++ api's to consume Level1 and Level2 market data. We want to understand how Market Price client should fetch PE codes from REFRESH response message?
- Option 1 --> Get it from manifest of response message(Refresh).
- Option 2 --> Get it from FID "PERM_CODE".
Which way is correct?
The other question is our RFA client(Consumer) application is expecting permission data to be available in manifest of Refresh response message [Option1 above] but our Provider is not able to set it in manifest because their real time provider api's(possibly EMA) do not allow them to set manifest at all. What is the way out in this situation?
Best Answer
-
Technically, there is no manifest in the Refresh message.
<refreshMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="4" containerType="RSSL_DT_FIELD_LIST" flags="0x1FA (RSSL_RFMF_HAS_PERM_DATA|RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_HAS_SEQ_NUM|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE|RSSL_RFMF_HAS_QOS|RSSL_RFMF_CLEAR_CACHE)" groupId="1" seqNum="19888" permData="0301 6462 C0" qosDynamic="0" qosRate="1" qosTimeliness="1" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="**All is well" dataSize="1646">
<key flags="0x7 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE)" serviceId="10004" name="IBM.N" nameType="1"/>
<dataBody>
<fieldList flags="0x9 (RSSL_FLF_HAS_FIELD_LIST_INFO|RSSL_FLF_HAS_STANDARD_DATA)" fieldListNum="79" dictionaryId="1">
<fieldEntry fieldId="1" data="3E"/>
<fieldEntry fieldId="2" data="40"/>The manifest is used by RFA to represent the following data in the refresh message.
If there is permission data in a Refresh message, RFA consumers will get it via the manifest.
1
Answers
-
Thanks for reaching out to us.
Yes, you can get a DACS lock from the permission data in the refresh message.
<refreshMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="4" containerType="RSSL_DT_FIELD_LIST" flags="0x1FA (RSSL_RFMF_HAS_PERM_DATA|RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_HAS_SEQ_NUM|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE|RSSL_RFMF_HAS_QOS|RSSL_RFMF_CLEAR_CACHE)" groupId="1" seqNum="19888" permData="0301 6462 C0" qosDynamic="0" qosRate="1" qosTimeliness="1" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="**All is well" dataSize="1646">
<key flags="0x7 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE)" serviceId="10004" name="IBM.N" nameType="1"/>
<dataBody>
<fieldList flags="0x9 (RSSL_FLF_HAS_FIELD_LIST_INFO|RSSL_FLF_HAS_STANDARD_DATA)" fieldListNum="79" dictionaryId="1">
<fieldEntry fieldId="1" data="3E"/>
<fieldEntry fieldId="2" data="40"/>Otherwise, you can create it from PE in the "PROD_PERM" field.
EMA allows users to get and set permission data in the refresh message.
/** Returns PermissionData.
@throw OmmInvalidUsageException if hasPermissionData() returns false
@return EmaBuffer containing permission data
*/
const EmaBuffer& getPermissionData() const;
...
/** Specifies PermissionData.
@param[in] permissionData an EmaBuffer object with permission data information
@return reference to this object
*/
RefreshMsg& permissionData( const EmaBuffer& permissionData );I hope that this information is of help.
1 -
@Jirapongse How to get permission data from refresh message in RFA api ? Can you tell me api to get it? RFA 8.1 C++ api RespMsg object do not have any api to get Permission Data.0
-
For RFA, the permission data is in Manifest.
const Manifest & rfa::message::RespMsg::getManifest() const
const rfa::common::Buffer & rfa::message::Manifest::getPermissionData()You need to check the manifest's hint mask before accessing the permission data.
0 -
@Jirapongse Yes we plan to use Open DACS C++ api to do so. I understand DACMC feature of Open DACS api. It allows specifying list of ip addresses while acquiring connection to DAC Daemon. It will get locked with first IP that has DAC Daemon processes running and login will be sent to that DAC site.
Our requirement is different. We want to connect to multiple DAC Daemon sites one by one until we find out a DAC site where given user is authorized. Consider following example -
- Let's say we have user "PT1".
- There are two DAC sites, "Site A" & "Site B".
- We will acquire "Site A" connection first and try logging in "PT1" user with "Site A" but it gets logged out as "PT1" is not authorized on "Site A"
- We then acquire "Site B" connection and try logging in "PT1" user with "Site B" and it gets logged in there.
Is this possible?
Also out of two DAC sites, one intend to use non standard port(other than 8211) so is it possible?
Also can you show me sample code to generate dac locks using PROD_PERM?
0 -
@Jirapongse Our Provider [Publisher] is using NON RFA api's so they are not able to set Manifest. Our Consumer[client] is using RFA api's so it expects permission data to be set on Manifest. Basically its incompatibility issue between provider and consumer api's. How to handle this?
Also can you show me sample code to generate dac locks using PROD_PERM?
0 -
Our Provider [Publisher] is using NON RFA api's so they are not able to set Manifest. Our Consumer[client] is using RFA api's so it expects permission data to be set on Manifest. Basically its incompatibility issue between provider and consumer api's. How to handle this?
Also can you show me sample code to generate dac locks using PROD_PERM?
0 -
@Jirapongse @umer.nalla @wasin.w @Monika.Stankovic Can someone answer below query in the context of my previous question?
"Our Provider [Publisher] is using NON RFA api's so they are not able to set Manifest. Our Consumer[client] is using RFA api's so it expects permission data to be set on Manifest. Basically its incompatibility issue between provider and consumer api's. How to handle this?
Also can you show me sample code to generate dac locks using PROD_PERM?"
0 -
RFA and Real-Time APIs (EMA and ETA) can get and set permission data but RFA uses the manifest to store permission data. The permission data is in the refresh message. EMA's provider applications can set the permission data by using the following method.
RefreshMsg& permissionData( const EmaBuffer& permissionData );
It is not an incompatibility issue. APIs just use diffrentent terms.
You can use OpenDACS API to generate DACS locks from PEs.
0 -
@Jirapongse Consider following -
- A provider(publisher) using EMA can publish DACS lock in Refresh message only and not in Manifest
- A consumer using RFA api can read DACS locks only from Manifest.
How it is supposed to handle?
0 -
@Jirapongse Thank you very much for your response. I know this thread is getting stretched but we are very close to understanding it.
In our case, provider using EMA is publishing refresh message that looks similar to yours. It has permData and RSSL_RFMF_HAS_PERM_DATA flag set but when RFA consumer reads it then Manifest hint mask "PermissionDataFlag" is not set.
0 -
@mktdata
You can enable tracing in RFA to verify if the retrieved refresh message contains permision data.
0 -
I can retrieve it properly with rfa8.2.2.L1.
The trace file contains the following refresh message.
<refreshMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="3" containerType="RSSL_DT_FIELD_LIST" flags="0x1FA (RSSL_RFMF_HAS_PERM_DATA|RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_HAS_SEQ_NUM|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE|RSSL_RFMF_HAS_QOS|RSSL_RFMF_CLEAR_CACHE)" groupId="1" seqNum="31598" permData="0301 0162 16C0" qosDynamic="0" qosRate="2" qosTimeliness="1" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="" dataSize="1643">
<key flags="0x7 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE)" serviceId="5001" name="/IBM.N" nameType="1"/>
<dataBody>
<fieldList flags="0x9 (RSSL_FLF_HAS_FIELD_LIST_INFO|RSSL_FLF_HAS_STANDARD_DATA)" fieldListNum="79" dictionaryId="1">
<fieldEntry fieldId="1" data="1848"/>
<fieldEntry fieldId="2" data="40"/>The RFA code is:
void StarterConsumer::processMarketPriceResponse(const rfa::sessionLayer::OMMItemEvent& event, const RespMsg& respMsg)
{
...
if (respMsg.getHintMask() & RespMsg::ManifestFlag)
{
const Manifest& manifest = respMsg.getManifest();
if (manifest.getHintMask() & Manifest::PermissionDataFlag) {
const rfa::common::Buffer permissionData = manifest.getPermissionData();
printf("\n\n#####Permission data size: %d\n#######\n\n", permissionData.size());
}
}The output is:
0 -
@Jirapongse This is what it shows -- I think permData value of "00" is not valid.
<refreshMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="6" containerType="RSSL_DT_FIELD_LIST" flags="0x6A (RSSL_RFMF_HAS_PERM_DATA|RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE)" groupId="0" permData="00" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="Refresh Completed" dataSize="515">
<key flags="0x3 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME)" serviceId="1" name="AFC.BK"/>
<dataBody>
<fieldList flags="0x8 (RSSL_FLF_HAS_STANDARD_DATA)">
0 -
@Jirapongse I see below error. Is it because of permData="00" is set? Stream is closed by api automatically with below error.
EQ_APAC -
Status :
DataState : Suspect
StreamState : Closed
StatusCode : NotAuthorized
StatusText : The supplied lock is not a DACS lock
0 -
It is possible because the DACS lock is invalid.0
-
This is the refresh message when subscribing to the same RIC (AFC.BK).
<refreshMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="3" containerType="RSSL_DT_FIELD_LIST" flags="0x1FA (RSSL_RFMF_HAS_PERM_DATA|RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_HAS_SEQ_NUM|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE|RSSL_RFMF_HAS_QOS|RSSL_RFMF_CLEAR_CACHE)" groupId="2" seqNum="65344" permData="0301 0167 61C0" qosDynamic="0" qosRate="2" qosTimeliness="1" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="" dataSize="1235">
<key flags="0x7 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME|RSSL_MKF_HAS_NAME_TYPE)" serviceId="5001" name="AFC.BK" nameType="1"/>
<dataBody>
<fieldList flags="0x9 (RSSL_FLF_HAS_FIELD_LIST_INFO|RSSL_FLF_HAS_STANDARD_DATA)" fieldListNum="2" dictionaryId="1">
<fieldEntry fieldId="1" data="1A69"/>
<fieldEntry fieldId="2" data="8E"/>0
Categories
- All Categories
- 6 AHS
- 37 Alpha
- 161 App Studio
- 4 Block Chain
- 4 Bot Platform
- 16 Connected Risk APIs
- 47 Data Fusion
- 30 Data Model Discovery
- 608 Datastream
- 1.3K DSS
- 577 Eikon COM
- 4.9K Eikon Data APIs
- 7 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- Trading API
- 2.7K Elektron
- 1.3K EMA
- 236 ETA
- 519 WebSocket API
- 33 FX Venues
- 10 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 20 Messenger Bot
- 2 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 59 Open Calais
- 264 Open PermID
- 39 Entity Search
- 2 Org ID
- PAM
- PAM - Logging
- 8.4K Private Comments
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 20 RDMS
- 1.4K Refinitiv Data Platform
- 367 Refinitiv Data Platform Libraries
- 3 Refinitiv Due Diligence
- LSEG Due Diligence Portal API
- 3 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.1K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 10 World-Check Customer Risk Screener
- 990 World-Check One
- 44 World-Check One Zero Footprint
- 45 Side by Side Integration API
- Test Space
- 3 Thomson One Smart
- 1.2K TR Internal
- Global Hackathon 2015
- 2 Specialists Who Code
- 10 TR Knowledge Graph
- 150 Transactions
- 142 REDI API
- 1.7K TREP APIs
- 4 CAT
- 21 DACS Station
- 117 Open DACS
- 1.1K RFA
- 103 UPA
- 172 TREP Infrastructure
- 224 TRKD
- 886 TRTH
- 5 Velocity Analytics
- 5 Wealth Management Web Services
- 59 Workspace SDK
- 9 Element Framework
- 5 Grid
- 13 World-Check Data File
- Yield Book Analytics
- 46 中文论坛