static int udpComputeCsepName(char *endpointSpec, char *endpointName) { unsigned short portNbr; unsigned int ipAddress; char hostName[MAXHOSTNAMELEN + 1]; if (endpointName == NULL) { putErrmsg(BadParmsMemo, NULL); return -1; } parseSocketSpec(endpointSpec, &portNbr, &ipAddress); if (portNbr == 0) { portNbr = 2357; /* Default. */ } if (ipAddress == 0) /* Default to local host. */ { getNameOfHost(hostName, sizeof hostName); ipAddress = getInternetAddress(hostName); } else { if (getInternetHostName(ipAddress, hostName) == NULL) { putErrmsg("Unknown host in endpoint.", endpointSpec); return -1; } } isprintf(endpointName, MAX_EP_NAME + 1, "%s:%hu", hostName, portNbr); return 0; }
static int udpMamsInit(MamsInterface *tsif) { unsigned short portNbr; unsigned int ipAddress; char hostName[MAXHOSTNAMELEN + 1]; struct sockaddr socketName; struct sockaddr_in *inetName; socklen_t nameLength; int fd; char endpointNameText[32]; int eptLen; long longfd; parseSocketSpec(tsif->endpointSpec, &portNbr, &ipAddress); //printf("parsed endpoint spec to port %d address %d.\n", portNbr, ipAddress); if (ipAddress == 0) { getNameOfHost(hostName, sizeof hostName); ipAddress = getInternetAddress(hostName); } else { if (getInternetHostName(ipAddress, hostName) == NULL) { putErrmsg("Unknown host in endpoint.", tsif->endpointSpec); return -1; } } portNbr = htons(portNbr); ipAddress = htonl(ipAddress); memset((char *) &socketName, 0, sizeof socketName); inetName = (struct sockaddr_in *) &socketName; inetName->sin_family = AF_INET; inetName->sin_port = portNbr; memcpy((char *) &(inetName->sin_addr.s_addr), (char *) &ipAddress, 4); fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { putSysErrmsg("udpts can't open MAMS SAP", NULL); return -1; } nameLength = sizeof(struct sockaddr); if (reUseAddress(fd) || bind(fd, &socketName, nameLength) < 0 || getsockname(fd, &socketName, &nameLength) < 0) { putSysErrmsg("udpts can't initialize AMS SAP", NULL); return -1; } portNbr = inetName->sin_port; portNbr = ntohs(portNbr); memcpy((char *) &ipAddress, (char *) &(inetName->sin_addr.s_addr), 4); ipAddress = ntohl(ipAddress); isprintf(endpointNameText, sizeof endpointNameText, "%s:%hu", hostName, portNbr); //printf("resulting ept is '%s'.\n", endpointNameText); eptLen = strlen(endpointNameText) + 1; tsif->ept = MTAKE(eptLen); if (tsif->ept == NULL) { close(fd); putSysErrmsg(NoMemoryMemo, NULL); return -1; } istrcpy(tsif->ept, endpointNameText, eptLen); longfd = fd; tsif->sap = (void *) longfd; return 0; }
static int udpAmsInit(AmsInterface *tsif, char *epspec) { unsigned short portNbr; unsigned int ipAddress; char hostName[MAXHOSTNAMELEN + 1]; struct sockaddr socketName; struct sockaddr_in *inetName; socklen_t nameLength; int fd; char endpointNameText[32]; int eptLen; long longfd; if (strcmp(epspec, "@") == 0) /* Default. */ { epspec = NULL; /* Force default selection. */ } parseSocketSpec(epspec, &portNbr, &ipAddress); if (ipAddress == 0) { getNameOfHost(hostName, sizeof hostName); ipAddress = getInternetAddress(hostName); } else { if (getInternetHostName(ipAddress, hostName) == NULL) { putErrmsg("Unknown host in endpoint.", epspec); return -1; } } portNbr = htons(portNbr); ipAddress = htonl(ipAddress); memset((char *) &socketName, 0, sizeof socketName); inetName = (struct sockaddr_in *) &socketName; inetName->sin_family = AF_INET; inetName->sin_port = portNbr; memcpy((char *) &(inetName->sin_addr.s_addr), (char *) &ipAddress, 4); fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (fd < 0) { putSysErrmsg("udpts can't open AMS SAP", NULL); return -1; } nameLength = sizeof(struct sockaddr); if (reUseAddress(fd) || bind(fd, &socketName, nameLength) < 0 || getsockname(fd, &socketName, &nameLength) < 0) { putSysErrmsg("udpts can't initialize AMS SAP", NULL); return -1; } portNbr = inetName->sin_port; portNbr = ntohs(portNbr); memcpy((char *) &ipAddress, (char *) &(inetName->sin_addr.s_addr), 4); ipAddress = ntohl(ipAddress); tsif->diligence = AmsBestEffort; tsif->sequence = AmsArrivalOrder; isprintf(endpointNameText, sizeof endpointNameText, "%s:%hu", hostName, portNbr); eptLen = strlen(endpointNameText) + 1; tsif->ept = MTAKE(eptLen); if (tsif->ept == NULL) { close(fd); putSysErrmsg(NoMemoryMemo, NULL); return -1; } istrcpy(tsif->ept, endpointNameText, eptLen); longfd = fd; tsif->sap = (void *) longfd; return 0; }
int readIonParms(char *configFileName, IonParms *parms) { char ownHostName[MAXHOSTNAMELEN + 1]; char *endOfHostName; char configFileNameBuffer[PATHLENMAX + 1 + 9 + 1]; int configFile; char buffer[512]; int lineNbr; char line[256]; int lineLength; int result; char *cursor; int i; char *tokens[2]; int tokenCount; /* Set defaults. */ CHKERR(parms); memset((char *) parms, 0, sizeof(IonParms)); parms->wmSize = 5000000; parms->wmAddress = 0; /* Dyamically allocated. */ parms->configFlags = SDR_IN_DRAM; parms->heapWords = 250000; parms->heapKey = SM_NO_KEY; istrcpy(parms->pathName, "/usr/ion", sizeof parms->pathName); /* Determine name of config file. */ if (configFileName == NULL) { #ifdef ION_NO_DNS ownHostName[0] = '\0'; #else if (getNameOfHost(ownHostName, MAXHOSTNAMELEN) < 0) { writeMemo("[?] Can't get name of local host."); return -1; } #endif /* Find end of high-order part of host name. */ if ((endOfHostName = strchr(ownHostName, '.')) != NULL) { *endOfHostName = 0; } isprintf(configFileNameBuffer, sizeof configFileNameBuffer, "%.256s.ionconfig", ownHostName); configFileName = configFileNameBuffer; } /* Get overrides from config file. */ configFile = open(configFileName, O_RDONLY, 0777); if (configFile < 0) { if (errno == ENOENT) /* No overrides apply. */ { writeMemo("[i] admin pgm using default SDR parms."); printIonParms(parms); return 0; } isprintf(buffer, sizeof buffer, "[?] admin pgm can't open SDR \ config file '%.255s': %.64s", configFileName, system_error_msg()); writeMemo(buffer); return -1; } isprintf(buffer, sizeof buffer, "[i] admin pgm using SDR parm \ overrides from %.255s.", configFileName); writeMemo(buffer); lineNbr = 0; while (1) { if (igets(configFile, line, sizeof line, &lineLength) == NULL) { if (lineLength == 0) { result = 0; printIonParms(parms); } else { result = -1; writeErrMemo("admin pgm SDR config file igets \ failed"); } break; /* Done. */ } lineNbr++; if (lineLength < 1) { continue; /* Empty line. */ } if (line[0] == '#') /* Comment only. */ { continue; } tokenCount = 0; for (cursor = line, i = 0; i < 2; i++) { if (*cursor == '\0') { tokens[i] = NULL; } else { findToken((char **) &cursor, &(tokens[i])); tokenCount++; } } if (tokenCount != 2) { isprintf(buffer, sizeof buffer, "[?] incomplete SDR \ configuration file line (%d).", lineNbr); writeMemo(buffer); result = -1; break; } if (strcmp(tokens[0], "wmKey") == 0) { parms->wmKey = atoi(tokens[1]); continue; } if (strcmp(tokens[0], "wmSize") == 0) { parms->wmSize = atoi(tokens[1]); continue; } if (strcmp(tokens[0], "wmAddress") == 0) { parms->wmAddress = (char *) atol(tokens[1]); continue; } if (strcmp(tokens[0], "sdrName") == 0) { istrcpy(parms->sdrName, tokens[1], sizeof(parms->sdrName)); continue; } if (strcmp(tokens[0], "configFlags") == 0) { parms->configFlags = atoi(tokens[1]); continue; } if (strcmp(tokens[0], "heapWords") == 0) { parms->heapWords = atoi(tokens[1]); continue; } if (strcmp(tokens[0], "heapKey") == 0) { parms->heapKey = atoi(tokens[1]); continue; } if (strcmp(tokens[0], "pathName") == 0) { istrcpy(parms->pathName, tokens[1], sizeof(parms->pathName)); continue; } isprintf(buffer, sizeof buffer, "[?] unknown SDR config \ keyword '%.32s' at line %d.", tokens[0], lineNbr); writeMemo(buffer); result = -1; break; }
static int run_file2dgr(char *remoteHostName, char *fileName) { int cyclesLeft; char ownHostName[MAXHOSTNAMELEN + 1]; unsigned int ownIpAddress; unsigned int remoteIpAddress; unsigned short remotePortNbr = TEST_PORT_NBR; PsmMgtOutcome outcome; DgrRC rc; FILE *inputFile; char line[256]; int lineLen; struct timeval startTime; unsigned long bytesSent; cyclesLeft = cyclesRequested; getNameOfHost(ownHostName, sizeof ownHostName); ownIpAddress = getInternetAddress(ownHostName); remoteIpAddress = getInternetAddress(remoteHostName); sm_ipc_init(); wmPtr = malloc(wmSize); if (wmPtr == NULL || psm_manage(wmPtr, wmSize, "dgr", &dgrwm, &outcome) < 0 || outcome == Refused) { putErrmsg("Can't acquire DGR working memory.", NULL); writeErrmsgMemos(); return 0; } #if 0 psm_start_trace(dgrwm, 10000000, NULL); #endif memmgr_add("dgr", allocFromDgrMemory, releaseToDgrMemory, dgrAtoP, dgrPtoA); if (dgr_open(ownIpAddress, 2, 0, ownIpAddress, "dgr", &dgr, &rc) < 0 || rc != DgrOpened) { putErrmsg("Can't open dgr service.", NULL); writeErrmsgMemos(); return 0; } inputFile = fopen(fileName, "r"); if (inputFile == NULL) { putSysErrmsg("Can't open input file", fileName); writeErrmsgMemos(); return 0; } eofLineLen = strlen(eofLine); getCurrentTime(&startTime); bytesSent = 0; /* Copy text lines from file to SDR. */ while (cyclesLeft > 0) { if (fgets(line, 256, inputFile) == NULL) { if (feof(inputFile)) { if (dgr_send(dgr, remotePortNbr, remoteIpAddress, DGR_NOTE_FAILED, eofLine, eofLineLen, &rc) < 0) { putErrmsg("dgr_send failed.", NULL); writeErrmsgMemos(); fclose(inputFile); return 0; } bytesSent += eofLineLen; fclose(inputFile); cyclesLeft--; if (cyclesLeft == 0) { inputFile = NULL; break; } inputFile = fopen(fileName, "r"); if (inputFile == NULL) { putSysErrmsg("Can't reopen input file", NULL); writeErrmsgMemos(); return 0; } continue; } else { putSysErrmsg("Can't read from input file", NULL); writeErrmsgMemos(); fclose(inputFile); return 0; } } lineLen = strlen(line); if (dgr_send(dgr, remotePortNbr, remoteIpAddress, DGR_NOTE_FAILED, line, lineLen, &rc) < 0) { putErrmsg("dgr_send failed", NULL); writeErrmsgMemos(); fclose(inputFile); return 0; } bytesSent += lineLen; } report(&startTime, bytesSent); writeMemo("[i] file2dgr waiting 10 sec for retransmission to stop."); snooze(10); dgr_close(dgr); #if 0 psm_print_trace(dgrwm, 0); psm_stop_trace(dgrwm); #endif if (inputFile) { fclose(inputFile); } return 0; }
static int loadTestMib() { AmsMibParameters parms = { 1, "dgr", NULL, NULL }; AmsMib *mib; char ownHostName[MAXHOSTNAMELEN + 1]; char eps[MAXHOSTNAMELEN + 5 + 1]; LystElt elt; Venture *venture; AppRole *role; Subject *subject; mib = _mib(&parms); if (mib == NULL) { return crash(); } getNameOfHost(ownHostName, sizeof ownHostName); isprintf(eps, sizeof eps, "%s:2357", ownHostName); elt = createCsEndpoint(eps, NULL); if (elt == NULL) { return crash(); } elt = createApp("amsdemo", NULL, NULL); if (elt == NULL) { return crash(); } venture = createVenture(1, "amsdemo", "test", NULL, 0, 0); if (venture == NULL) { return crash(); } role = createRole(venture, 2, "shell", NULL, NULL); if (role == NULL) { return crash(); } role = createRole(venture, 3, "log", NULL, NULL); if (role == NULL) { return crash(); } role = createRole(venture, 4, "pitch", NULL, NULL); if (role == NULL) { return crash(); } role = createRole(venture, 5, "catch", NULL, NULL); if (role == NULL) { return crash(); } role = createRole(venture, 96, "amsd", NULL, NULL); if (role == NULL) { return crash(); } role = createRole(venture, 97, "amsstop", NULL, NULL); if (role == NULL) { return crash(); } role = createRole(venture, 98, "amsmib", NULL, NULL); if (role == NULL) { return crash(); } subject = createSubject(venture, 1, "text", "Arbitrary variable-length text.", NULL, NULL, NULL); if (subject == NULL) { return crash(); } subject = createSubject(venture, 97, "amsstop", "Message space shutdown command.", NULL, NULL, NULL); if (subject == NULL) { return crash(); } subject = createSubject(venture, 98, "amsmib", "Runtime MIB updates.", NULL, NULL, NULL); if (subject == NULL) { return crash(); } return 0; }
int main(int argc, char **argv) #endif { char ownHostName[MAXHOSTNAMELEN + 1]; unsigned int ownIpAddress; unsigned short portNbr = TEST_PORT_NBR; DgrRC rc; FILE *outputFile; unsigned int remoteIpAddress; unsigned short remotePortNbr; char line[256]; int lineSize; int errnbr; getNameOfHost(ownHostName, sizeof ownHostName); ownIpAddress = getInternetAddress(ownHostName); if (dgr_open(ownIpAddress, 2, portNbr, ownIpAddress, NULL, &dgr2file_dgr, &rc) < 0) { perror("can't open dgr service"); return 0; } outputFile = openFile(); if (outputFile == NULL) return 0; printf("working on cycle %d.\n", cycleNbr); signal(SIGINT, handleQuit); while (1) { if (dgr2file_stopped) { break; } lineSize = sizeof line; if (dgr_receive(dgr2file_dgr, &remotePortNbr, &remoteIpAddress, line, &lineSize, &errnbr, DGR_BLOCKING, &rc) < 0) { putErrmsg("dg_receive failed.", NULL); return 0; } switch (rc) { case DgrDatagramReceived: break; case DgrInterrupted: dgr2file_stopped = 1; continue; default: putErrmsg("dgr_receive got unrecognized result.", itoa(rc)); return 0; } /* Process text of line. */ line[lineSize] = '\0'; if (strcmp(line, EOF_LINE_TEXT) == 0) { fclose(outputFile); outputFile = openFile(); if (outputFile == NULL) return 0; printf("working on cycle %d.\n", cycleNbr); } else /* Just write line to output file. */ { if (fputs(line, outputFile) < 0) { perror("can't write to output file"); return 0; } } } dgr_close(dgr2file_dgr); return 0; }