Пример #1
0
void AutoDiscovery::discover()
{
	emit aboutToDiscover();
	resetDiscovery();

	qsrand(QDateTime::currentDateTime().toTime_t());

	m_identifier = rand();

	createDatagram(m_requestDatagram, DiscoverRequest);
	sendRequest();

	m_requestTimer->start();
}
Пример #2
0
void AutoDiscovery::reply(QHostAddress &host, quint16 port)
{
	if(m_replyTimer->isActive())
	{
		qDebug() << "Discovery: Already replying to someone";
		return;
	}

	qDebug() << "Discovery: reply to" << host << port;

	createDatagram(m_replyDatagram, DiscoverReply);

	m_replyAddress = host;
	m_replyPort = port;

	sendReply();

	m_replyTimer->start();
}
Пример #3
0
int bmd230__bmdUpdateMetadata(	struct soap *soap,
				struct xsd__base64Binary *cert,
				char *userRoleId,
				char *userGroupId,
				char *userClassId,
				long id,
				struct bmd230__mtdsValues *mtds,
				char *updateReason,
				int *result)
{
char **oids_table			= NULL;
char **values_table			= NULL;
long oids_count				= 0;

bmdDatagramSet_t *req_dtg_set		= NULL;
bmdDatagramSet_t *res_dtg_set		= NULL;
bmd_info_t *bi						= NULL;

long max_datagram_in_set_transmission	= 0;
long deserialisation_max_memory			= 0;

char *derUserCert=NULL;
long derUserCertLen=0;
long retVal=0;
char* paramCert=NULL;
long paramCertLen=0;

	PRINT_SOAP("Request:\tupdating metadata values for file %li\n",id);
	/******************************/
	/*	walidacja parametrow	*/
	/******************************/
	if (id<=0)			{	SOAP_FOK(BMDSOAP_SERVER_INVALID_FILE_ID);	}
	if (updateReason==NULL)		{	SOAP_FOK(BMDSOAP_SERVER_INVALID_UPDATE_REASON);	}
	if (strlen(updateReason)<=0)	{	SOAP_FOK(BMDSOAP_SERVER_INVALID_UPDATE_REASON);	}

	/************************************************/
	/*	poczatkowe ustalenie zwracanej wartosci	*/
	/************************************************/
	(*result)=-1;

	bmdconf_get_value_int(_GLOBAL_konfiguracja,"bmd","max_datagram_in_set_transmission",
	&max_datagram_in_set_transmission);
	if(max_datagram_in_set_transmission <= 0)
	{
		max_datagram_in_set_transmission = 100;
	}

	bmdconf_get_value_int(_GLOBAL_konfiguracja, "bmd", "deserialisation_max_memory", &deserialisation_max_memory);
	if(deserialisation_max_memory < 0)
	{
		deserialisation_max_memory = 0;
	}
	else
	{
		deserialisation_max_memory = deserialisation_max_memory * 1024 * 1024;
	}

	if(_GLOBAL_soap_wssecurity_enabled == 1)
	{
		retVal=GetWSSEInformation(soap, NULL, NULL, NULL, &derUserCert, &derUserCertLen);
		if(retVal < 0)
		{
			PRINT_ERROR("Unable to get certificate from WS Security header %li\n", retVal);
			SOAP_FOK(BMDSOAP_SERVER_NO_WSSECURITY_CERTIFICATE);
		}
	}
	else
	{
		if(_GLOBAL_soap_certificate_required == 1)
		{
			if(cert == NULL)
				{ SOAP_FOK(BMDSOAP_SERVER_EMPTY_LOGIN_CERTIFICATE); }
			else
			{
				paramCert=(char*)cert->__ptr;
				paramCertLen=(long)cert->__size;
			}
		}
		else
		{
			if(cert != NULL)
			{
				paramCert=(char*)cert->__ptr;
				paramCertLen=(long)cert->__size;
			}
		}
	}


	/******************************************/
	/*	przepisanie metadanych do tablic	*/
	/******************************************/
	SOAP_FOK(ConvertMtdsList(mtds, &oids_table, &values_table, &oids_count));


	/************************************/
	/*	stworzenie datagramu zadania	*/
	/************************************/
	retVal=createDatagram(	userClassId,
					oids_table,
					values_table,
					oids_count,
					BMD_DATAGRAM_TYPE_UPDATE,
					BMD_ONLY_GROUP_DOC,
					BMD_QUERY_EQUAL,
					&req_dtg_set);
	DestroyTableOfStrings(&oids_table, oids_count);
	DestroyTableOfStrings(&values_table, oids_count);
	if(retVal < BMD_OK)
		{ SOAP_FOK(retVal); }

	/************************************************/
	/*	umieszczenie powodu update'a w datagramie	*/
	/************************************************/
	req_dtg_set->bmdDatagramSetTable[0]->protocolData=(GenBuf_t*)calloc(1, sizeof(GenBuf_t));
	if(req_dtg_set->bmdDatagramSetTable[0]->protocolData == NULL)
	{
		bmd_datagramset_free(&req_dtg_set);
		SOAP_FOK(BMD_ERR_MEMORY);
	}
	req_dtg_set->bmdDatagramSetTable[0]->protocolData->buf=(char *)calloc(strlen(updateReason)+1, sizeof(char));
	if(req_dtg_set->bmdDatagramSetTable[0]->protocolData->buf == NULL)
	{
		bmd_datagramset_free(&req_dtg_set);
		SOAP_FOK(BMD_ERR_MEMORY);
	}
	memcpy(req_dtg_set->bmdDatagramSetTable[0]->protocolData->buf, updateReason, strlen(updateReason));
	req_dtg_set->bmdDatagramSetTable[0]->protocolData->size=strlen(updateReason);
	
	
	/************************************/
	/*	usatwienie id w datagramie	*/
	/************************************/
	retVal=bmd_datagram_set_id((long *)&id, &(req_dtg_set->bmdDatagramSetTable[0]));
	if(retVal < BMD_OK)
	{
		bmd_datagramset_free(&req_dtg_set);
		SOAP_FOK(retVal);
	}

	
	/************************/
	/*	logowanie do bmd	*/
	/************************/
	retVal=PrepareDataForBMDLoginAndRequest(&bi,
				(_GLOBAL_soap_wssecurity_enabled == 1  ? derUserCert : paramCert),
				(_GLOBAL_soap_wssecurity_enabled == 1  ? derUserCertLen : paramCertLen),
				userRoleId, userGroupId, deserialisation_max_memory);
	free(derUserCert); derUserCert=NULL;
	paramCert=NULL; paramCertLen=0;
	if(retVal < BMD_OK)
	{
		bmd_datagramset_free(&req_dtg_set);
		SOAP_FOK(retVal);
	}


	/******************************/
	/*	wyslanie zadania do BMD	*/
	/******************************/
	retVal=sendRequestToBMD(bi, req_dtg_set, max_datagram_in_set_transmission, &res_dtg_set, 1, deserialisation_max_memory);
	bmd_logout(&bi, deserialisation_max_memory);
	bmd_info_destroy(&bi);
	bmd_end();
	bmd_datagramset_free(&req_dtg_set);
	bmd_datagramset_free(&res_dtg_set);
	SOAP_FOK(retVal);

	(*result)=0;

	PRINT_SOAP("Status:\t\trequest served correctly\n");
	return SOAP_OK;
}