Firmware CoAP and transport improvement
This commit is contained in:
		
							parent
							
								
									edc993427e
								
							
						
					
					
						commit
						7edcc605e9
					
				@ -33,6 +33,7 @@ import org.thingsboard.server.common.data.Device;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceProfile;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.Firmware;
 | 
			
		||||
import org.thingsboard.server.common.data.FirmwareInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.ResourceType;
 | 
			
		||||
import org.thingsboard.server.common.data.TbResource;
 | 
			
		||||
import org.thingsboard.server.common.data.TenantProfile;
 | 
			
		||||
@ -471,19 +472,22 @@ public class DefaultTransportApiService implements TransportApiService {
 | 
			
		||||
        if (firmwareId == null) {
 | 
			
		||||
            builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
 | 
			
		||||
        } else {
 | 
			
		||||
            Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId);
 | 
			
		||||
            FirmwareInfo firmwareInfo = firmwareService.findFirmwareInfoById(tenantId, firmwareId);
 | 
			
		||||
 | 
			
		||||
            if (firmware == null) {
 | 
			
		||||
            if (firmwareInfo == null) {
 | 
			
		||||
                builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND);
 | 
			
		||||
            } else {
 | 
			
		||||
                builder.setResponseStatus(TransportProtos.ResponseStatus.SUCCESS);
 | 
			
		||||
                builder.setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits());
 | 
			
		||||
                builder.setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits());
 | 
			
		||||
                builder.setTitle(firmware.getTitle());
 | 
			
		||||
                builder.setVersion(firmware.getVersion());
 | 
			
		||||
                builder.setFileName(firmware.getFileName());
 | 
			
		||||
                builder.setContentType(firmware.getContentType());
 | 
			
		||||
                firmwareDataCache.put(firmwareId.toString(), firmware.getData().array());
 | 
			
		||||
                builder.setTitle(firmwareInfo.getTitle());
 | 
			
		||||
                builder.setVersion(firmwareInfo.getVersion());
 | 
			
		||||
                builder.setFileName(firmwareInfo.getFileName());
 | 
			
		||||
                builder.setContentType(firmwareInfo.getContentType());
 | 
			
		||||
                if (!firmwareDataCache.has(firmwareId.toString())) {
 | 
			
		||||
                    Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId);
 | 
			
		||||
                    firmwareDataCache.put(firmwareId.toString(), firmware.getData().array());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,4 +24,9 @@ public interface FirmwareDataCache {
 | 
			
		||||
    void put(String key, byte[] value);
 | 
			
		||||
 | 
			
		||||
    void evict(String key);
 | 
			
		||||
 | 
			
		||||
    default boolean has(String firmwareId) {
 | 
			
		||||
        byte[] data = get(firmwareId, 1, 0);
 | 
			
		||||
        return data != null && data.length > 0;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -20,7 +20,6 @@ import com.google.protobuf.Descriptors;
 | 
			
		||||
import com.google.protobuf.DynamicMessage;
 | 
			
		||||
import lombok.Data;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.apache.commons.lang3.StringUtils;
 | 
			
		||||
import org.eclipse.californium.core.coap.CoAP;
 | 
			
		||||
import org.eclipse.californium.core.coap.Request;
 | 
			
		||||
import org.eclipse.californium.core.coap.Response;
 | 
			
		||||
@ -34,6 +33,7 @@ import org.thingsboard.server.coapserver.TbCoapDtlsSessionInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.DataConstants;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceProfile;
 | 
			
		||||
import org.thingsboard.server.common.data.DeviceTransportType;
 | 
			
		||||
import org.thingsboard.server.common.data.StringUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.TransportPayloadType;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration;
 | 
			
		||||
import org.thingsboard.server.common.data.device.profile.CoapDeviceTypeConfiguration;
 | 
			
		||||
@ -448,7 +448,7 @@ public class CoapTransportResource extends AbstractCoapTransportResource {
 | 
			
		||||
            if (msg.getResponseStatus().equals(TransportProtos.ResponseStatus.SUCCESS)) {
 | 
			
		||||
                if (msg.getTitle().equals(title) && msg.getVersion().equals(version)) {
 | 
			
		||||
                    String firmwareId = new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB()).toString();
 | 
			
		||||
                    String strChunkSize = exchange.getQueryParameter("chunkSize");
 | 
			
		||||
                    String strChunkSize = exchange.getQueryParameter("size");
 | 
			
		||||
                    String strChunk = exchange.getQueryParameter("chunk");
 | 
			
		||||
                    int chunkSize = StringUtils.isEmpty(strChunkSize) ? 0 : Integer.parseInt(strChunkSize);
 | 
			
		||||
                    int chunk = StringUtils.isEmpty(strChunk) ? 0 : Integer.parseInt(strChunk);
 | 
			
		||||
 | 
			
		||||
@ -539,8 +539,7 @@ public class DefaultTransportService implements TransportService {
 | 
			
		||||
                    new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setFirmwareRequestMsg(msg).build());
 | 
			
		||||
 | 
			
		||||
            AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), response -> {
 | 
			
		||||
                TransportProtos.GetFirmwareResponseMsg firmwareResponseMsg = response.getValue().getFirmwareResponseMsg();
 | 
			
		||||
                callback.onSuccess(firmwareResponseMsg);
 | 
			
		||||
                callback.onSuccess(response.getValue().getFirmwareResponseMsg());
 | 
			
		||||
            }, callback::onError, transportCallbackExecutor);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user