c_bool u_userGetSPBFromEnvUri() { char *uri = NULL; c_bool spb = FALSE; cf_element platformConfig = NULL; cf_element dc = NULL; cf_element elemName = NULL; cf_element singleProcess = NULL; cf_data elementData = NULL; cf_data dataName; c_value value; cfgprs_status r; uri = os_getenv ("OSPL_URI"); r = cfg_parse_ospl (uri, &platformConfig); if (r == CFGPRS_OK) { dc = cf_element (cf_elementChild (platformConfig, CFG_DOMAIN)); if (dc) { singleProcess = cf_element(cf_elementChild(dc, CFG_SINGLEPROCESS)); if (singleProcess != NULL) { elementData = cf_data(cf_elementChild(singleProcess, "#text")); if (elementData != NULL) { value = cf_dataValue(elementData); if (os_strncasecmp(value.is.String, "TRUE", 4) == 0) { /* A SingleProcess value of True implies that Heap is to be used */ spb = TRUE; } } } } } return spb; }
static c_iter getKnownServices(cf_element root) { c_iter services; cf_element domain; cf_element el; cf_element cmd; cf_data data; c_iter children; cf_attribute attr; struct serviceInfo *si; assert(root); services = NULL; if (root && (domain = (cf_element)cf_elementChild(root, "Domain")) ) { children = cf_elementGetChilds(domain); while ( (el = c_iterTakeFirst(children)) != NULL) { if ( strcmp(cf_nodeGetName(cf_node(el)), "Service") == 0 && (cmd = (cf_element)cf_elementChild(el, "Command")) && (data = cf_data(cf_elementChild(cmd, "#text"))) && (si = os_malloc(sizeof(struct serviceInfo)))) { si->command = cf_dataValue(data).is.String; attr = cf_elementAttribute(el, "name"); if (attr) { si->name = cf_attributeValue(attr).is.String; } else { si->name = si->command; } if (!si->name || !si->command) { /* detected an invalid service configuration, report and skip */ fprintf(stderr, "Warning: detected invalid 'Service'" " element (name = %s; command = %s) -> skip\n", (si->name?si->name:"<null>"), (si->command?si->command:"<null>")); os_free(si); si = NULL; } else { services = c_iterInsert(services, si); } } } c_iterFree(children); } return services; }
int u_userGetDomainIdFromEnvUri() { char *uri = NULL; int domainId = 0; cf_element platformConfig = NULL; cf_element dc = NULL; cf_element elemName = NULL; cf_data dataName; c_value value; cfgprs_status r; uri = os_getenv ("OSPL_URI"); r = cfg_parse_ospl (uri, &platformConfig); if (r == CFGPRS_OK) { dc = cf_element (cf_elementChild (platformConfig, CFG_DOMAIN)); if (dc) { elemName = cf_element(cf_elementChild(dc, CFG_ID)); if (elemName) { dataName = cf_data(cf_elementChild(elemName, "#text")); if (dataName != NULL) { value = cf_dataValue(dataName); sscanf(value.is.String, "%d", &domainId); } } } } return domainId; }
static char * findDomain( cf_element platformConfig, cf_element *domain) { char *domainName = NULL; cf_element dc = NULL; cf_element elemName = NULL; cf_data dataName; c_value value; dc = cf_element (cf_elementChild (platformConfig, CFG_DOMAIN)); if (dc) { elemName = cf_element(cf_elementChild(dc, CFG_NAME)); if (elemName) { dataName = cf_data(cf_elementChild(elemName, "#text")); if (dataName) { value = cf_dataValue(dataName); domainName = value.is.String; *domain = dc; } } } return domainName; }
static void findServiceTerminatePeriod( cf_element domain, os_time *serviceTerminatePeriod) { cf_element elem; cf_attribute attr; cf_data data; c_value value; float offset, update_factor, expiry_time; /* Spliced uses 4 seconds by default or a value defined in the configuration file. */ /* But the timing in ospl starts earlier. Therefore, increase the period in ospl */ /* with an additional 4 seconds such that it is larger than that in spliced. */ offset = 4.0; (*serviceTerminatePeriod).tv_sec = offset + 4; (*serviceTerminatePeriod).tv_nsec = 0; if (domain != NULL) { elem = cf_element(cf_elementChild(domain, CFG_LEASE)); if (elem) { elem = cf_element(cf_elementChild(elem, CFG_EXPIRYTIME)); if (elem) { data = cf_data(cf_elementChild(elem, "#text")); if (data) { value = cf_dataValue(data); expiry_time = atof(value.is.String); } attr = cf_attribute(cf_elementAttribute(elem,"update_factor")); if (attr) { value = cf_attributeValue(attr); update_factor = atof(value.is.String); offset += (expiry_time * update_factor); } } } elem = cf_element(cf_elementChild(domain, CFG_TERMPERIOD)); if (elem) { data = cf_data(cf_elementChild(elem, "#text")); if (data) { value = cf_dataValue(data); /* dds2164: if '0' is defined, override any wait times, including * the 4 second offset defined above. */ if(0 == atof(value.is.String)) { (*serviceTerminatePeriod).tv_sec = 0; (*serviceTerminatePeriod).tv_nsec = 0; } else { *serviceTerminatePeriod = os_realToTime(offset + atof(value.is.String)); } } } } }
static c_iter getCPUAffinities(cf_element root) { c_iter affinities = NULL; cf_element domain; cf_element cpuAffinity; cf_data data; assert(root); if (root && (domain = (cf_element)cf_elementChild(root, "Domain")) ) { cpuAffinity = cf_element(cf_elementChild(domain, CFG_CPUAFFINITY)); if (cpuAffinity != NULL) { data = cf_data(cf_elementChild(cpuAffinity, "#text")); if (data != NULL) { char *saveptr; char *next; char *value; value = cf_dataValue(data).is.String; next = os_strtok_r(value, ",", &saveptr); while ( next != NULL ) { signed int corenum; struct cpuAffinity *newCpuAffinity; sscanf( next, "%d", &corenum); newCpuAffinity = (struct cpuAffinity *)malloc (sizeof(struct cpuAffinity)); newCpuAffinity->cpuNumber = corenum; affinities = c_iterInsert(affinities, newCpuAffinity); next = os_strtok_r(NULL, ",", &saveptr); } } } } return affinities; }
char * u_userGetDomainNameFromEnvUri() { char *uri = NULL; char * domainName = NULL; cf_element platformConfig = NULL; cf_element dc = NULL; cf_element elemName = NULL; cf_data dataName; c_value value; cfgprs_status r; uri = os_getenv ("OSPL_URI"); if ( uri != NULL ) { domainName = os_strdup(uri); } else { r = cfg_parse_ospl (uri, &platformConfig); if (r == CFGPRS_OK) { dc = cf_element (cf_elementChild (platformConfig, CFG_DOMAIN)); if (dc) { elemName = cf_element(cf_elementChild(dc, CFG_NAME)); if (elemName) { dataName = cf_data(cf_elementChild(elemName, "#text")); if (dataName != NULL) { value = cf_dataValue(dataName); domainName = os_strdup(value.is.String); } } } } } return domainName; }
{ cf_element dc = NULL; cf_element child; cf_element name; cf_data elementData; cf_element size; cf_element threshold; cf_element address; cf_element heap; cf_element locked; c_value value; cf_attribute attr; assert(config != NULL); assert(domainConfig != NULL); dc = cf_element(cf_elementChild(config, CFG_DOMAIN)); if (dc != NULL) { name = cf_element(cf_elementChild(dc, CFG_NAME)); if (name != NULL) { elementData = cf_data(cf_elementChild(name, "#text")); if (elementData != NULL) { value = cf_dataValue(elementData); os_free(domainConfig->name); domainConfig->name = os_malloc(strlen(value.is.String) + 1); os_strcpy(domainConfig->name, value.is.String); child = cf_element(cf_elementChild(dc, CFG_DATABASE)); if (child != NULL) { size = cf_element(cf_elementChild(child, CFG_SIZE)); if (size != NULL) { elementData = cf_data(cf_elementChild(size, "#text")); if (elementData != NULL) {
static c_iter getKnownApplications(cf_element root) { c_iter apps; cf_element domain; cf_element el; cf_element cmd; cf_element lib; cf_data data; c_iter children; cf_attribute attr; struct applicationInfo *ai; assert(root); apps = NULL; if (root && (domain = (cf_element)cf_elementChild(root, "Domain")) ) { children = cf_elementGetChilds(domain); while ( (el = c_iterTakeFirst(children)) != NULL) { if ( strcmp(cf_nodeGetName(cf_node(el)), "Application") == 0 && (cmd = (cf_element)cf_elementChild(el, "Command")) && (data = cf_data(cf_elementChild(cmd, "#text"))) && (ai = os_malloc(sizeof(struct applicationInfo)))) { ai->command = cf_dataValue(data).is.String; attr = cf_elementAttribute(el, "name"); if (attr) { ai->name = cf_attributeValue(attr).is.String; } else { ai->name = ai->command; } if ( (lib = (cf_element)cf_elementChild(el, "Library")) && (data = cf_data(cf_elementChild(lib, "#text"))) ) { ai->libname = cf_dataValue(data).is.String; } else { ai->libname = ai->command; } if (!ai->name || !ai->command) { /* detected an invalid application configuration, report and skip */ fprintf(stderr, "Warning: detected invalid 'Application'" " element (name = %s; command = %s) -> skip\n", (ai->name?ai->name:"<null>"), (ai->command?ai->command:"<null>")); os_free(ai); ai = NULL; } else { apps = c_iterInsert(apps, ai); } } } c_iterFree(children); } return apps; }
void u_usrClockInit ( const cf_element config) { cf_element cfgUsrClockService = NULL; cf_element cfgUsrClockModule = NULL; cf_element cfgUsrClockStart = NULL; cf_element cfgUsrClockStop = NULL; cf_element cfgUsrClockQuery = NULL; cf_element dc = NULL; cf_element cfgDomainY2038 = NULL; const char *module = NULL; const char *moduleName = NULL; const char *clockStart = NULL; const char *clockStop = NULL; const char *clockQuery = U_USRCLOCK_QUERYNAME_DEFAULT; const char *domainY2038 = NULL; os_boolean y2038Ready = OS_FALSE; os_boolean domainY2038Ready = OS_FALSE; os_boolean ignoreUserClockforReportStack=OS_FALSE; assert(config != NULL); dc = cf_element(cf_elementChild(config, CFG_DOMAIN)); if (dc != NULL) { cfgUsrClockService = cf_element(cf_elementChild(dc, U_CONF_USRCLOCK_SERVICENAME)); if (cfgUsrClockService == NULL) { cfgUsrClockService = cf_element(cf_elementChild(dc, U_CONF_USRCLOCK_SERVICENAME_OLD)); if (cfgUsrClockService != NULL) { OS_REPORT(OS_WARNING, "u_usrClockInit", 0, "Found deprecated tag 'UserClockService' in configuration. Please use 'UserClock'"); } } if (cfgUsrClockService != NULL) { ignoreUserClockforReportStack = u_usrClockConfigElementAttributeStringToBoolean(cfgUsrClockService, "reporting", OS_TRUE); if ( ignoreUserClockforReportStack == OS_FALSE) { os_reportIgnoreUserClock(); } cfgUsrClockModule = cf_element(cf_elementChild(cfgUsrClockService, U_CONF_USRCLOCK_SERVICEMODULENAME)); cfgUsrClockStart = cf_element(cf_elementChild(cfgUsrClockService, U_CONF_USRCLOCK_SERVICESTARTNAME)); cfgUsrClockStop = cf_element(cf_elementChild(cfgUsrClockService, U_CONF_USRCLOCK_SERVICESTOPNAME)); cfgUsrClockQuery = cf_element(cf_elementChild(cfgUsrClockService, U_CONF_USRCLOCK_SERVICEQUERYNAME)); cfgDomainY2038 = cf_element(cf_elementChild(dc, U_CONF_DOMAIN_Y2038READY)); if (cfgDomainY2038 != NULL) { domainY2038 = u_usrClockConfigElementDataString(cfgDomainY2038, NULL); if ((domainY2038 != NULL) && (strcmp(domainY2038, "true") == 0)) { domainY2038Ready = OS_TRUE; } } y2038Ready = u_usrClockConfigElementAttributeStringToBoolean(cfgUsrClockService, U_CONF_USRCLOCK_Y2038READY, domainY2038Ready); if ((domainY2038Ready == OS_TRUE) && (y2038Ready != domainY2038Ready)) { OS_REPORT(OS_WARNING, "u_usrClockInit", 0, "The configuration element //OpenSplice/Domain/y2038Ready is 'true' while the attribute " "//OpenSplice/Domain/UserClock/y2038Ready overrules this configuration for the userClock. " "This will cause undefined behavior when using this configuration after y2038."); } if (cfgUsrClockModule) { module = u_usrClockConfigElementDataString(cfgUsrClockModule, NULL); if (module) { if (strncmp (module, "file://", 7) == 0) { moduleName = &module[7]; } else { moduleName = module; } } } if (cfgUsrClockStart) { if (u_usrClockConfigElementAttributeStringToBoolean(cfgUsrClockStart, "enabled", OS_TRUE) == OS_TRUE) { clockStart = u_usrClockConfigElementDataString(cfgUsrClockStart, U_USRCLOCK_STARTNAME_DEFAULT); } } if (cfgUsrClockStop) { if (u_usrClockConfigElementAttributeStringToBoolean(cfgUsrClockStop, "enabled", OS_TRUE) == OS_TRUE) { clockStop = u_usrClockConfigElementDataString(cfgUsrClockStop, U_USRCLOCK_STOPNAME_DEFAULT); } } if (cfgUsrClockQuery) { if (u_usrClockConfigElementAttributeStringToBoolean(cfgUsrClockQuery, "enabled", OS_TRUE) == OS_TRUE) { clockQuery = u_usrClockConfigElementDataString(cfgUsrClockQuery, U_USRCLOCK_QUERYNAME_DEFAULT); } } os_userClockStart (moduleName, clockStart, clockStop, clockQuery, y2038Ready); } } }