void AutoDiscovery::discover() { emit aboutToDiscover(); resetDiscovery(); qsrand(QDateTime::currentDateTime().toTime_t()); m_identifier = rand(); createDatagram(m_requestDatagram, DiscoverRequest); sendRequest(); m_requestTimer->start(); }
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(); }
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; }