@startuml class ServerPortData { chunkSenderData: ServerChunkSenderData_t chunkReceiverData: ServerChunkReceiverData_t offeringRequested: atomic offered: atomic } enum ServerRequestResult { TOO_MANY_REQUESTS_HELD_IN_PARALLEL, NO_PENDING_REQUESTS, UNDEFINED_CHUNK_RECEIVE_ERROR, NO_PENDING_REQUESTS_AND_SERVER_DOES_NOT_OFFER, } enum ServerSendError { NOT_OFFERED, CLIENT_NOT_AVAILABLE, INVALID_RESPONSE, } class ServerPortUser { offer(): void stopOffer(): void isOffered(): bool hasClients(): bool getRequest(): expected releaseRequest(requestHeader: const RequestHeader*): void releaseQueuedRequests(): void hasNewRequests(): bool hasLostRequestsSinceLastCall(): bool allocateResponse(requestHeader: RequestHeader*, userPayloadSize: uint32_t, userPayloadAlignment: uint32_t): expected sendResponse(responseHeader: ResponseHeader*): expected releaseResponse(responseHeader: const ResponseHeader*): void setConditionVariable(conditionVariableData: ConditionVariableData&, notificationIndex: uint64_t): void unsetConditionVariable: void isConditionVariableSet(): bool } class ServerPortRouDi { tryGetCaProMessage(): optional dispatchCaProMessageAndGetPossibleResponse(caProMessage: const CaProMessage &): optional releaseAllChunks(): void getRequestQueueFullPolicy(): QueueFullPolicy getClientTooSlowPolicy(): ConsumerTooSlowPolicy } ServerPortUser o-- ServerPortData ServerPortData --o ServerPortRouDi @enduml