/* * ======== ListMP_open ======== */ Int ListMP_open(String name, ListMP_Handle *handlePtr) { SharedRegion_SRPtr sharedShmBase; Ptr sharedAddr; Int status; /* Assert that a pointer has been supplied */ Assert_isTrue(handlePtr != NULL, ti_sdo_ipc_Ipc_A_nullArgument); /* Assert that we have enough information to open the gate */ Assert_isTrue(name != NULL, ti_sdo_ipc_Ipc_A_invParam); /* Search NameServer */ status = NameServer_getUInt32((NameServer_Handle)ListMP_module->nameServer, name, &sharedShmBase, ti_sdo_utils_MultiProc_procIdList); if (status < 0) { /* Name was not found */ *handlePtr = NULL; return (ListMP_E_NOTFOUND); } sharedAddr = SharedRegion_getPtr(sharedShmBase); status = ListMP_openByAddr(sharedAddr, handlePtr); return (status); }
/* * ======== SemaphoreMP_open ======== */ Int SemaphoreMP_open(String name, SemaphoreMP_Handle *handlePtr) { SharedRegion_SRPtr sharedShmBase; Int status; Ptr sharedAddr; Error_Block eb; Error_init(&eb); /* Assert that a pointer has been supplied */ Assert_isTrue(handlePtr != NULL, ti_sdo_ipc_Ipc_A_nullArgument); /* Assert that a name has been supplied */ Assert_isTrue(name != NULL, ti_sdo_ipc_Ipc_A_invParam); /* Open by name */ status = NameServer_getUInt32((NameServer_Handle) SemaphoreMP_module->nameServer, name, &sharedShmBase, NULL); if (status < 0) { /* Name not found. */ *handlePtr = NULL; return (-1); //TODO } sharedAddr = SharedRegion_getPtr(sharedShmBase); status = SemaphoreMP_openByAddr(sharedAddr, handlePtr); return (status); }
/* * ======== MessageQ_open ======== */ Int MessageQ_open(String name, MessageQ_QueueId *queueId) { Int status; Error_Block eb; Assert_isTrue(name != NULL, ti_sdo_ipc_MessageQ_A_invalidParam); Assert_isTrue(queueId != NULL, ti_sdo_ipc_MessageQ_A_invalidParam); Error_init(&eb); /* Search NameServer */ status = NameServer_getUInt32( (NameServer_Handle)MessageQ_module->nameServer, name, queueId, NULL); if (status >= 0) { return (MessageQ_S_SUCCESS); /* name found */ } else { return (MessageQ_E_NOTFOUND); /* name not found */ } }
/** ============================================================================ * Globals * ============================================================================ */ Int nameLenTest() { NameServer_Params params; NameServer_Handle nsHandle; Int32 status = 0; UInt32 val; Log_print0(Diags_INFO, "Testing long names...\n"); #if 0 /* Commented out due to assertion thrown when name length > maxNameLen */ NameServer_Params_init(¶ms); params.maxValueLen = sizeof(UInt32); params.maxNameLen = 32; nsHandle = NameServer_create(NSLONGNAME, ¶ms); if (nsHandle == NULL) { Log_print1(Diags_INFO, "Failed to create NameServer '%s'\n", (IArg)NSLONGNAME); return -1; } else { printf("Created NameServer '%s'\n", NSLONGNAME); } /* This name should be too long for creation params and results in error */ printf("Trying to add a name that exceeds maxNameLen...\n"); ptr = NameServer_addUInt32(nsHandle, NSLONGNAME, 0xdeadbeef); if (ptr == NULL) { Log_print0(Diags_INFO, " ...got expected Failure from NameServer_addUInt32()\n"); } else { Log_print1(Diags_INFO, " Error: NameServer_addUInt32() returned non-NULL %p (but " "was expected to fail)\n", (IArg)ptr); NameServer_delete(&nsHandle); return -1; } Log_print0(Diags_INFO, "Deleting nsHandle...\n"); NameServer_delete(&nsHandle); #endif NameServer_Params_init(¶ms); params.maxValueLen = sizeof(UInt32); params.maxNameLen = 180; nsHandle = NameServer_create(NSNAME, ¶ms); if (nsHandle == NULL) { Log_print1(Diags_INFO, "Failed to create NameServer '%s'\n", (IArg)NSNAME); return -1; } else { Log_print1(Diags_INFO, "Created NameServer '%s'\n", (IArg)NSNAME); } /* This name is too long for remote to handle and results in error */ Log_print0(Diags_INFO, "Trying to get a name that the remote cannot handle...\n"); val = 0x00c0ffee; status = NameServer_getUInt32(nsHandle, NSLONGNAME, &val, NULL); if (status == NameServer_E_NAMETOOLONG) { Log_print0(Diags_INFO, " ...got expected Failure from NameServer_getUInt32()\n"); } else { Log_print1(Diags_INFO, " Error: NameServer_getUint32() returned unexpected " "result: %d\n", (IArg)status); return -1; } Log_print0(Diags_INFO, "Deleting nsHandle...\n"); NameServer_delete(&nsHandle); NameServer_Params_init(¶ms); params.maxValueLen = sizeof(UInt32); params.maxNameLen = 32; nsHandle = NameServer_create(NSLONGNAME, ¶ms); if (nsHandle == NULL) { Log_print1(Diags_INFO, "Failed to create NameServer '%s'\n", (IArg)NSLONGNAME); return -1; } else { Log_print1(Diags_INFO, "Created NameServer '%s'\n", (IArg)NSLONGNAME); } /* The instance name is too long for remote and results in error */ Log_print0(Diags_INFO, "Trying to use an instance name that the remote cannot handle...\n"); val = 0x00c0ffee; status = NameServer_getUInt32(nsHandle, "Key", &val, NULL); if (status == NameServer_E_NAMETOOLONG) { Log_print0(Diags_INFO, " ...got expected Failure from NameServer_getUInt32()\n"); } else { Log_print1(Diags_INFO, " Error: NameServer_getUint32() returned unexpected " "result: %d\n", (IArg)status); return -1; } Log_print0(Diags_INFO, "Deleting nsHandle...\n"); NameServer_delete(&nsHandle); return 0; }
Int testNS(NameServer_Handle nsHandle, String name) { Int32 status = 0; Ptr ptr; UInt32 val; char key[16]; Int i; ptr = NameServer_addUInt32(nsHandle, name, 0xdeadbeef); if (ptr == NULL) { Log_print0(Diags_INFO, "Failed to NameServer_addUInt32()\n"); return -1; } else { Log_print1(Diags_INFO, "NameServer_addUInt32() returned %p\n", (IArg)ptr); } Log_print0(Diags_INFO, "Trying to add same key (should fail)...\n"); ptr = NameServer_addUInt32(nsHandle, name, 0xdeadc0de); if (ptr == NULL) { Log_print0(Diags_INFO, " ...got expected Failure from NameServer_addUInt32()\n"); } else { Log_print1(Diags_INFO, " Error: NameServer_addUInt32() returned non-NULL %p (but was expected to fail)\n", (IArg)ptr); return -1; } val = 0x00c0ffee; status = NameServer_getUInt32(nsHandle, name, &val, NULL); Log_print2(Diags_INFO, "NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val); Log_print0(Diags_INFO, "Removing 0xdeadbeef w/ NameServer_remove()...\n"); status = NameServer_remove(nsHandle, name); if (status < 0) { Log_print1(Diags_INFO, "NameServer_remove() failed: %d\n", status); return -1; } ptr = NameServer_addUInt32(nsHandle, name, 0xdeadc0de); if (ptr == NULL) { Log_print0(Diags_INFO, "Error: NameServer_addUInt32() failed\n"); return -1; } else { Log_print0(Diags_INFO, "NameServer_addUInt32(0xdeadc0de) succeeded\n"); } val = 0x00c0ffee; status = NameServer_getUInt32(nsHandle, name, &val, NULL); Log_print2(Diags_INFO, "NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val); Log_print0(Diags_INFO, "Removing 0xdeadc0de w/ NameServer_removeEntry()...\n"); status = NameServer_removeEntry(nsHandle, ptr); if (status < 0) { Log_print1(Diags_INFO, "NameServer_remove() failed: %d\n", status); return -1; } ptr = NameServer_addUInt32(nsHandle, name, 0x0badc0de); if (ptr == NULL) { Log_print0(Diags_INFO, "Error: NameServer_addUInt32() failed\n"); return -1; } else { Log_print0(Diags_INFO, "NameServer_addUInt32(0x0badc0de) succeeded\n"); } val = 0x00c0ffee; status = NameServer_getUInt32(nsHandle, name, &val, NULL); Log_print2(Diags_INFO, "NameServer_getUInt32() returned %d, val=0x%x (was 0x00c0ffee)\n", status, val); status = NameServer_remove(nsHandle, name); if (status < 0) { Log_print0(Diags_INFO, "Error: NameServer_remove() failed\n"); return -1; } else { Log_print1(Diags_INFO, "NameServer_remove(%s) succeeded\n", (IArg)name); } for (i = 0; i < 10; i++) { sprintf(key, "foobar%d", i); ptr = NameServer_addUInt32(nsHandle, key, 0x0badc0de + i); if (ptr == NULL) { Log_print0(Diags_INFO, "Error: NameServer_addUInt32() failed\n"); return -1; } else { Log_print2(Diags_INFO, "NameServer_addUInt32(%s, 0x%x) succeeded\n", (IArg)key, 0x0badc0de + i); } val = 0x00c0ffee; status = NameServer_getUInt32(nsHandle, key, &val, NULL); Log_print3(Diags_INFO, "NameServer_getUInt32(%s) returned %d, val=0x%x (was 0x00c0ffee)\n", (IArg)key, status, val); if (val != (0x0badc0de + i)) { Log_print2(Diags_INFO, "get val (0x%x) != add val (0x%x)!\n", val, 0x0badc0de + i); } } for (i = 0; i < 10; i++) { sprintf(key, "foobar%d", i); status = NameServer_remove(nsHandle, key); if (status < 0) { Log_print0(Diags_INFO, "Error: NameServer_remove() failed\n"); return -1; } else { Log_print1(Diags_INFO, "NameServer_remove(%s) succeeded\n", (IArg)key); } } return 0; }