コード例 #1
0
static int
createVariableAccessAttributesResponse(
		MmsServerConnection* connection,
		char* domainId,
		char* nameId,
		int invokeId,
		ByteBuffer* response)
{
	MmsDevice* device = MmsServer_getDevice(connection->server);

	MmsDomain* domain = MmsDevice_getDomain(device, domainId);

	if (domain == NULL) {
		if (DEBUG) printf("mms_server: domain %s not known\n", domainId);
		return -1;
	}

	MmsTypeSpecification* namedVariable = MmsDomain_getNamedVariable(domain, nameId);

	if (namedVariable == NULL) {
		if (DEBUG) printf("mms_server: named variable %s not known\n", nameId);
		return -1;
	}

	MmsPdu_t* mmsPdu = mmsServer_createConfirmedResponse(invokeId);

	mmsPdu->choice.confirmedResponsePdu.confirmedServiceResponse.present =
			ConfirmedServiceResponse_PR_getVariableAccessAttributes;

	GetVariableAccessAttributesResponse_t* getVarAccessAttr;

	getVarAccessAttr = &(mmsPdu->choice.confirmedResponsePdu.
			confirmedServiceResponse.choice.getVariableAccessAttributes);

	getVarAccessAttr->mmsDeletable = 0;

	createTypeSpecification(namedVariable, &getVarAccessAttr->typeSpecification);

	asn_enc_rval_t rval;

	rval = der_encode(&asn_DEF_MmsPdu, mmsPdu,
			mmsServer_write_out, (void*) response);

	if (DEBUG) xer_fprint(stdout, &asn_DEF_MmsPdu, mmsPdu);

	deleteVariableAccessAttributesResponse(getVarAccessAttr);

	asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0);

	return 0;
}
コード例 #2
0
static void
createVariableAccessAttributesResponse(
		MmsServerConnection connection,
		char* domainId,
		char* nameId,
		int invokeId,
		ByteBuffer* response)
{
	MmsDevice* device = MmsServer_getDevice(connection->server);

	MmsVariableSpecification* namedVariable = NULL;

	if (domainId != NULL) {
	    MmsDomain* domain = MmsDevice_getDomain(device, domainId);

	    if (domain == NULL) {
	        if (DEBUG_MMS_SERVER) printf("MMS_SERVER: domain %s not known\n", domainId);

	        mmsServer_createConfirmedErrorPdu(invokeId, response,
	                              MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);
	        goto exit_function;
	    }

	    namedVariable = MmsDomain_getNamedVariable(domain, nameId);
	}
#if (CONFIG_MMS_SUPPORT_VMD_SCOPE_NAMED_VARIABLES == 1)
	else
	    namedVariable = MmsDevice_getNamedVariable(device, nameId);
#endif /* (CONFIG_MMS_SUPPORT_VMD_SCOPE_NAMED_VARIABLES == 1) */


	if (namedVariable == NULL) {
		if (DEBUG_MMS_SERVER) printf("MMS_SERVER: named variable %s not known\n", nameId);

		mmsServer_createConfirmedErrorPdu(invokeId, response,
		                          MMS_ERROR_ACCESS_OBJECT_NON_EXISTENT);

		goto exit_function;
	}

	MmsPdu_t* mmsPdu = mmsServer_createConfirmedResponse(invokeId);

	mmsPdu->choice.confirmedResponsePdu.confirmedServiceResponse.present =
			ConfirmedServiceResponse_PR_getVariableAccessAttributes;

	GetVariableAccessAttributesResponse_t* getVarAccessAttr;

	getVarAccessAttr = &(mmsPdu->choice.confirmedResponsePdu.
			confirmedServiceResponse.choice.getVariableAccessAttributes);

	getVarAccessAttr->mmsDeletable = 0;

	createTypeSpecification(namedVariable, &getVarAccessAttr->typeSpecification);

	asn_enc_rval_t rval =
	        der_encode(&asn_DEF_MmsPdu, mmsPdu, mmsServer_write_out, (void*) response);

	if (rval.encoded == -1) {
	    response->size = 0;

        if (DEBUG_MMS_SERVER)
            printf("MMS getVariableAccessAttributes: message to large! send error PDU!\n");

        mmsServer_createConfirmedErrorPdu(invokeId, response,
                      MMS_ERROR_SERVICE_OTHER);

        goto exit_function;
	}

	deleteVariableAccessAttributesResponse(getVarAccessAttr);

	asn_DEF_MmsPdu.free_struct(&asn_DEF_MmsPdu, mmsPdu, 0);

exit_function:
	return;
}