Skip to content

Commit bcc94f9

Browse files
Merge pull request #1552 from smartdevicelink/hotfix/2_0_ptu_fix
Add code to handle legacy PTU (v4.12)
2 parents 23d39c0 + ba641c9 commit bcc94f9

File tree

2 files changed

+70
-33
lines changed

2 files changed

+70
-33
lines changed

base/src/main/java/com/smartdevicelink/managers/lifecycle/BaseLifecycleManager.java

Lines changed: 55 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,11 @@ private void setupInternalRpcListeners() {
377377
addRpcListener(FunctionID.ON_SYSTEM_REQUEST, rpcListener);
378378
addRpcListener(FunctionID.ON_APP_INTERFACE_UNREGISTERED, rpcListener);
379379
addRpcListener(FunctionID.UNREGISTER_APP_INTERFACE, rpcListener);
380+
381+
/* These are legacy and are necessary for older systems */
382+
addRpcListener(FunctionID.ON_SYNC_P_DATA, rpcListener);
383+
addRpcListener(FunctionID.ON_ENCODED_SYNC_P_DATA, rpcListener);
384+
380385
}
381386

382387
private OnRPCListener rpcListener = new OnRPCListener() {
@@ -418,42 +423,61 @@ public void onReceived(RPCMessage message) {
418423
case ON_HASH_CHANGE:
419424
break;
420425
case ON_SYSTEM_REQUEST:
426+
case ON_ENCODED_SYNC_P_DATA:
427+
case ON_SYNC_P_DATA:
428+
if (functionID.equals(FunctionID.ON_ENCODED_SYNC_P_DATA) || functionID.equals(FunctionID.ON_SYNC_P_DATA)) {
429+
DebugTool.logInfo(TAG, "Received legacy SYNC_P_DATA, handling it as OnSystemRequest");
430+
} else {
431+
DebugTool.logInfo(TAG, "Received OnSystemRequest");
432+
}
433+
421434
final OnSystemRequest onSystemRequest = (OnSystemRequest) message;
422-
if ((onSystemRequest.getUrl() != null) &&
423-
(((onSystemRequest.getRequestType() == RequestType.PROPRIETARY) && (onSystemRequest.getFileType() == FileType.JSON))
424-
|| ((onSystemRequest.getRequestType() == RequestType.HTTP) && (onSystemRequest.getFileType() == FileType.BINARY)))) {
425-
Thread handleOffboardTransmissionThread = new Thread() {
426-
@Override
427-
public void run() {
428-
RPCRequest request = PoliciesFetcher.fetchPolicies(onSystemRequest);
429-
if (request != null && isConnected()) {
430-
sendRPCMessagePrivate(request, true);
435+
RequestType requestType = onSystemRequest.getRequestType();
436+
FileType fileType = onSystemRequest.getFileType();
437+
438+
if (onSystemRequest.getUrl() != null) {
439+
if ((requestType == RequestType.PROPRIETARY && fileType == FileType.JSON)
440+
|| (requestType == RequestType.HTTP && fileType == FileType.BINARY)
441+
|| functionID.equals(FunctionID.ON_ENCODED_SYNC_P_DATA)
442+
|| functionID.equals(FunctionID.ON_SYNC_P_DATA)) {
443+
DebugTool.logInfo(TAG, "List of conditionals has passed");
444+
Thread handleOffboardTransmissionThread = new Thread() {
445+
@Override
446+
public void run() {
447+
DebugTool.logInfo(TAG, "Attempting to fetch policies");
448+
RPCRequest request = PoliciesFetcher.fetchPolicies(onSystemRequest);
449+
if (request != null && isConnected()) {
450+
sendRPCMessagePrivate(request, true);
451+
}
431452
}
432-
}
433-
};
434-
handleOffboardTransmissionThread.start();
435-
} else if (onSystemRequest.getRequestType() == RequestType.ICON_URL && onSystemRequest.getUrl() != null) {
436-
//Download the icon file and send SystemRequest RPC
437-
Thread handleOffBoardTransmissionThread = new Thread() {
438-
@Override
439-
public void run() {
440-
final String urlHttps = onSystemRequest.getUrl().replaceFirst("http://", "https://");
441-
byte[] file = FileUtls.downloadFile(urlHttps);
442-
if (file != null) {
443-
SystemRequest systemRequest = new SystemRequest();
444-
systemRequest.setFileName(onSystemRequest.getUrl());
445-
systemRequest.setBulkData(file);
446-
systemRequest.setRequestType(RequestType.ICON_URL);
447-
if (isConnected()) {
448-
sendRPCMessagePrivate(systemRequest, true);
453+
};
454+
handleOffboardTransmissionThread.start();
455+
return;
456+
} else if (requestType == RequestType.ICON_URL) {
457+
//Download the icon file and send SystemRequest RPC
458+
Thread handleOffBoardTransmissionThread = new Thread() {
459+
@Override
460+
public void run() {
461+
final String urlHttps = onSystemRequest.getUrl().replaceFirst("http://", "https://");
462+
byte[] file = FileUtls.downloadFile(urlHttps);
463+
if (file != null) {
464+
SystemRequest systemRequest = new SystemRequest();
465+
systemRequest.setFileName(onSystemRequest.getUrl());
466+
systemRequest.setBulkData(file);
467+
systemRequest.setRequestType(RequestType.ICON_URL);
468+
if (isConnected()) {
469+
sendRPCMessagePrivate(systemRequest, true);
470+
}
471+
} else {
472+
DebugTool.logError(TAG, "File was null at: " + urlHttps);
449473
}
450-
} else {
451-
DebugTool.logError(TAG, "File was null at: " + urlHttps);
452474
}
453-
}
454-
};
455-
handleOffBoardTransmissionThread.start();
475+
};
476+
handleOffBoardTransmissionThread.start();
477+
return;
478+
}
456479
}
480+
457481
break;
458482
case ON_APP_INTERFACE_UNREGISTERED:
459483

base/src/main/java/com/smartdevicelink/managers/lifecycle/RpcConverter.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,22 @@ public static RPCMessage convertTableToRpc(Hashtable<String,Object> rpcHashTable
138138
if(params != null && params.containsKey(RPCMessage.KEY_FUNCTION_NAME)){
139139
StringBuilder rpcClassName = new StringBuilder();
140140
String functionName = (String)params.get(RPCMessage.KEY_FUNCTION_NAME);
141-
if(FunctionID.SHOW_CONSTANT_TBT.toString().equals(functionName)) {
142-
functionName = "ShowConstantTbt";
141+
if (FunctionID.SHOW_CONSTANT_TBT.toString().equals(functionName)) {
142+
functionName = "ShowConstantTbt";
143+
} else if (FunctionID.ON_ENCODED_SYNC_P_DATA.toString().equals(functionName)
144+
|| FunctionID.ON_SYNC_P_DATA.toString().equals(functionName)) {
145+
//This will create an OnSystemRequest instance, but the function id in the RPC
146+
//will remain FunctionID.ON_ENCODED_SYNC_P_DATA or FunctionID.ON_SYNC_P_DATA.
147+
//This is desired behavior.
148+
functionName = FunctionID.ON_SYSTEM_REQUEST.toString();
149+
} else if (FunctionID.ENCODED_SYNC_P_DATA.toString().equals(functionName)
150+
|| FunctionID.SYNC_P_DATA.toString().equals(functionName)) {
151+
//This will create an SystemRequest instance, but the function id in the RPC
152+
//will remain FunctionID.ENCODED_SYNC_P_DATA or FunctionID.SYNC_P_DATA.
153+
//This is desired behavior.
154+
functionName = FunctionID.SYSTEM_REQUEST.toString();
143155
}
156+
144157
rpcClassName.append(RPC_PACKAGE);
145158
rpcClassName.append (functionName);
146159

0 commit comments

Comments
 (0)