static void store_rcvd_cmd_resp(avb_1722_1_acmp_cmd_resp* store, avb_1722_1_acmp_packet_t* pkt) { get_64(store->stream_id.c, pkt->stream_id); get_64(store->controller_guid.c, pkt->controller_guid); get_64(store->listener_guid.c, pkt->listener_guid); get_64(store->talker_guid.c, pkt->talker_guid); store->talker_unique_id = ntoh_16(pkt->talker_unique_id); store->listener_unique_id = ntoh_16(pkt->listener_unique_id); store->connection_count = ntoh_16(pkt->connection_count); store->sequence_id = ntoh_16(pkt->sequence_id); store->flags = ntoh_16(pkt->flags); store->vlan_id = ntoh_16(pkt->vlan_id); memcpy(store->stream_dest_mac, pkt->dest_mac, 6); store->message_type = GET_1722_1_MSG_TYPE(&(pkt->header)); store->status = GET_1722_1_VALID_TIME(&(pkt->header)); }
void FileAccessNetworkClient::_thread_func() { client->set_nodelay(true); while(!quit) { DEBUG_PRINT("SEM WAIT - "+itos(sem->get())); Error err = sem->wait(); DEBUG_TIME("sem_unlock"); //DEBUG_PRINT("semwait returned "+itos(werr)); DEBUG_PRINT("MUTEX LOCK "+itos(lockcount)); DEBUG_PRINT("POPO"); DEBUG_PRINT("PEPE"); lock_mutex(); DEBUG_PRINT("MUTEX PASS"); blockrequest_mutex->lock(); while(block_requests.size()) { put_32(block_requests.front()->get().id); put_32(FileAccessNetwork::COMMAND_READ_BLOCK); put_64(block_requests.front()->get().offset); put_32(block_requests.front()->get().size); block_requests.pop_front(); } blockrequest_mutex->unlock(); DEBUG_PRINT("THREAD ITER"); DEBUG_TIME("sem_read"); int id = get_32(); int response = get_32(); DEBUG_PRINT("GET RESPONSE: "+itos(response)); FileAccessNetwork *fa=NULL; if (response!=FileAccessNetwork::RESPONSE_DATA) { ERR_FAIL_COND(!accesses.has(id)); } if (accesses.has(id)) fa=accesses[id]; switch(response) { case FileAccessNetwork::RESPONSE_OPEN: { DEBUG_TIME("sem_open"); int status = get_32(); if (status!=OK) { fa->_respond(0,Error(status)); } else { uint64_t len = get_64(); fa->_respond(len,Error(status)); } fa->sem->post(); } break; case FileAccessNetwork::RESPONSE_DATA: { int64_t offset = get_64(); uint32_t len = get_32(); Vector<uint8_t> block; block.resize(len); client->get_data(block.ptr(),len); if (fa) //may have been queued fa->_set_block(offset,block); } break; case FileAccessNetwork::RESPONSE_FILE_EXISTS: { int status = get_32(); fa->exists_modtime=status!=0; fa->sem->post(); } break; case FileAccessNetwork::RESPONSE_GET_MODTIME: { uint64_t status = get_64(); fa->exists_modtime=status; fa->sem->post(); } break; } unlock_mutex(); } }
double FileAccess::get_double() const { MarshallDouble m; m.l = get_64(); return m.d; };