Ejemplo n.º 1
0
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);
}