static void createNamedVariableListResponse(MmsServerConnection* connection, MmsNamedVariableList namedList, int invokeId, ByteBuffer* response, ReadRequest_t* read, VarAccessSpec* accessSpec) { LinkedList /*<MmsValue>*/ values = LinkedList_create(); LinkedList variables = MmsNamedVariableList_getVariableList(namedList); int variableCount = LinkedList_size(variables); MmsServer_lockModel(connection->server); int i; LinkedList variable = LinkedList_getNext(variables); for (i = 0; i < variableCount; i++) { MmsNamedVariableListEntry variableListEntry = (MmsNamedVariableListEntry) variable->data; MmsDomain* variableDomain = MmsNamedVariableListEntry_getDomain(variableListEntry); char* variableName = MmsNamedVariableListEntry_getVariableName(variableListEntry); MmsTypeSpecification* namedVariable = MmsDomain_getNamedVariable(variableDomain, variableName); addNamedVariableToResultList(namedVariable, variableDomain, variableName, values, connection, NULL); variable = LinkedList_getNext(variable); } if (isSpecWithResult(read)) /* add specification to result */ encodeReadResponse(connection, invokeId, response, values, accessSpec); else encodeReadResponse(connection, invokeId, response, values, NULL); MmsServer_unlockModel(connection->server); deleteValueList(values); }
static void createGetNamedVariableListAttributesResponse(int invokeId, ByteBuffer* response, MmsNamedVariableList variableList, char* domainName) { char* variableDomainName; asn_enc_rval_t rval; int i; int variableCount; LinkedList variable; LinkedList variables; GetNamedVariableListAttributesResponse_t* varListResponse; MmsPdu_t* mmsPdu = mmsServer_createConfirmedResponse(invokeId); BOOLEAN_t moreFollows = 0; mmsPdu->choice.confirmedResponsePdu.confirmedServiceResponse.present = ConfirmedServiceResponse_PR_getNamedVariableListAttributes; varListResponse = &(mmsPdu->choice.confirmedResponsePdu.confirmedServiceResponse. choice.getNamedVariableListAttributes); varListResponse->mmsDeletable = MmsNamedVariableList_isDeletable(variableList); variables = MmsNamedVariableList_getVariableList(variableList); variableCount = LinkedList_size(variables); varListResponse->listOfVariable.list.count = variableCount; varListResponse->listOfVariable.list.size = variableCount; varListResponse->listOfVariable.list.array = calloc(variableCount, sizeof(void*)); variable = LinkedList_getNext(variables); for (i = 0; i < variableCount; i++) { MmsNamedVariableListEntry variableEntry = (MmsNamedVariableListEntry) variable->data; varListResponse->listOfVariable.list.array[i] = calloc(1, sizeof(struct GetNamedVariableListAttributesResponse__listOfVariable__Member)); varListResponse->listOfVariable.list.array[i]->variableSpecification.present = VariableSpecification_PR_name; varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.present = ObjectName_PR_domainspecific; variableDomainName = MmsDomain_getName(variableEntry->domain); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.domainId.buf = copyString(variableDomainName); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.domainId.size = strlen(variableDomainName); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.itemId.buf = copyString(variableEntry->variableName); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.itemId.size = strlen(variableEntry->variableName); variable = LinkedList_getNext(variable); } rval = der_encode(&asn_DEF_MmsPdu, mmsPdu, mmsServer_write_out, (void*) response); if (DEBUG) xer_fprint(stdout, &asn_DEF_MmsPdu, mmsPdu); asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0); }
static void createGetNamedVariableListAttributesResponse(int invokeId, ByteBuffer* response, MmsNamedVariableList variableList) { MmsPdu_t* mmsPdu = mmsServer_createConfirmedResponse(invokeId); mmsPdu->choice.confirmedResponsePdu.confirmedServiceResponse.present = ConfirmedServiceResponse_PR_getNamedVariableListAttributes; GetNamedVariableListAttributesResponse_t* varListResponse = &(mmsPdu->choice.confirmedResponsePdu.confirmedServiceResponse. choice.getNamedVariableListAttributes); varListResponse->mmsDeletable = MmsNamedVariableList_isDeletable(variableList); LinkedList variables = MmsNamedVariableList_getVariableList(variableList); int variableCount = LinkedList_size(variables); varListResponse->listOfVariable.list.count = variableCount; varListResponse->listOfVariable.list.size = variableCount; varListResponse->listOfVariable.list.array = (struct GetNamedVariableListAttributesResponse__listOfVariable__Member**) GLOBAL_CALLOC(variableCount, sizeof(void*)); LinkedList variable = LinkedList_getNext(variables); int i; for (i = 0; i < variableCount; i++) { MmsNamedVariableListEntry variableEntry = (MmsNamedVariableListEntry) variable->data; varListResponse->listOfVariable.list.array[i] = (struct GetNamedVariableListAttributesResponse__listOfVariable__Member*) GLOBAL_CALLOC(1, sizeof(struct GetNamedVariableListAttributesResponse__listOfVariable__Member)); varListResponse->listOfVariable.list.array[i]->variableSpecification.present = VariableSpecification_PR_name; varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.present = ObjectName_PR_domainspecific; char* variableDomainName = MmsDomain_getName(variableEntry->domain); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.domainId.buf = (uint8_t*) copyString(variableDomainName); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.domainId.size = strlen(variableDomainName); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.itemId.buf = (uint8_t*) copyString(variableEntry->variableName); varListResponse->listOfVariable.list.array[i]->variableSpecification.choice.name.choice. domainspecific.itemId.size = strlen(variableEntry->variableName); variable = LinkedList_getNext(variable); } der_encode(&asn_DEF_MmsPdu, mmsPdu, mmsServer_write_out, (void*) response); asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0); }