AthenaTransportLinkAdapter * athenaTransportLinkAdapter_Create(void (*removeLinkCallback)(void *removeLinkContext, PARCBitVector *parcBitVector), AthenaTransportLinkAdapter_RemoveLinkCallbackContext removeLinkContext) { AthenaTransportLinkAdapter *athenaTransportLinkAdapter = parcMemory_AllocateAndClear(sizeof(AthenaTransportLinkAdapter)); assertNotNull(athenaTransportLinkAdapter, "parcMemory_AllocateAndClear failed to create a new AthenaTransportLinkAdapter"); athenaTransportLinkAdapter->moduleList = parcArrayList_Create((void (*)(void **))athenaTransportLinkModule_Destroy); athenaTransportLinkAdapter->instanceList = parcArrayList_Create(NULL); athenaTransportLinkAdapter->listenerList = parcArrayList_Create(NULL); athenaTransportLinkAdapter->nextLinkToRead = 0; athenaTransportLinkAdapter->pollfdListSize = 0; athenaTransportLinkAdapter->removeLink = removeLinkCallback; athenaTransportLinkAdapter->removeLinkContext = removeLinkContext; athenaTransportLinkAdapter->log = _parc_logger_create(); return athenaTransportLinkAdapter; }
AthenaTransportLinkModule * athenaTransportLinkModule_Create(const char *name, AthenaTransportLinkModule_Open *openMethod, AthenaTransportLinkModule_Poll *pollMethod) { AthenaTransportLinkModule *athenaTransportLinkModule = parcMemory_AllocateAndClear(sizeof(AthenaTransportLinkModule)); assertNotNull(athenaTransportLinkModule, "parcMemory_AllocateAndClear failed to create a new AthenaTransportLinkModule"); athenaTransportLinkModule->log = _parc_logger_create(name); athenaTransportLinkModule->name = parcMemory_StringDuplicate(name, strlen(name)); assertNotNull(athenaTransportLinkModule->name, "parcMemory_AllocateAndClear failed allocate athenaTransportLinkModule name"); athenaTransportLinkModule->instanceList = parcArrayList_Create((void (*)(void **))athenaTransportLink_Release); assertNotNull(athenaTransportLinkModule->instanceList, "athenaTransportLinkModule_TCP could not allocate instance list"); athenaTransportLinkModule->openMethod = openMethod; athenaTransportLinkModule->pollMethod = pollMethod; return athenaTransportLinkModule; }
AthenaTransportLink * athenaTransportLink_Create(const char *name, AthenaTransportLink_SendMethod *sendMethod, AthenaTransportLink_ReceiveMethod *receiveMethod, AthenaTransportLink_CloseMethod *closeMethod) { AthenaTransportLink *athenaTransportLink = parcObject_CreateAndClearInstance(AthenaTransportLink); if (athenaTransportLink != NULL) { athenaTransportLink->linkName = parcMemory_StringDuplicate(name, strlen(name)); athenaTransportLink->sendMethod = sendMethod; athenaTransportLink->receiveMethod = receiveMethod; athenaTransportLink->closeMethod = closeMethod; athenaTransportLink->log = _parc_logger_create(name); athenaTransportLink->linkEvents = AthenaTransportLinkEvent_None; athenaTransportLink->linkFlags = AthenaTransportLinkFlag_None; athenaTransportLink->eventFd = -1; } return athenaTransportLink; }