33 #include <ti/net/ota/otauser.h> 34 #include <ti/net/ota/source/OtaHttpClient.h> 35 #include <ti/net/ota/source/OtaJson.h> 36 #include <ti/net/ota/source/CdnVendors/CdnGithub.h> 38 #if OTA_SERVER_TYPE == OTA_SERVER_GITHUB 41 #define OTA_SERVER_REST_REQ_DIR "/contents/" 42 #define OTA_SERVER_REST_HDR "User-Agent: " 45 #define JSON_FILE_SIZE "size" 46 #define JSON_FILE_NAME "download_url" 49 #define METADATA_FILENAME_PATH_LENGTH (30) 50 #define METADATA_FILESIZE_PATH_LENGTH (30) 52 char template_GithubMetadata [] =
"{\"#\":[{\"size\": int32,\"download_url\": string}]}";
60 int16_t CdnGithub_SendReqDir(int16_t SockId, uint8_t *pSendBuf, uint8_t *pServerName, uint8_t *pVendorDir, uint8_t *pVendorToken)
62 uint8_t ReqDirCmdBuf[100];
64 strcpy((
char *)ReqDirCmdBuf, OTA_VENDOR_ROOT_DIR);
65 strcat((
char *)ReqDirCmdBuf, OTA_SERVER_REST_REQ_DIR);
67 _SlOtaLibTrace((
"CdnGithub_SendReqDir: uri=%s\r\n", ReqDirCmdBuf));
68 return HttpClient_SendReq (SockId, pSendBuf, (uint8_t *)
"GET ", pServerName, ReqDirCmdBuf , pVendorDir, (uint8_t *)OTA_SERVER_REST_HDR, pVendorToken);
92 int16_t CdnGithub_ParseRespDir(int16_t SockId, uint8_t *pRespBuf,
OtaDirData_t *pOtaDirData)
100 int16_t files_num = 0;
102 int16_t ProcessedSize;
103 static bool firstRun = TRUE;
104 char * pTempBuf = NULL;
105 char *pJsonArrayKey =
"\"#\"";
107 char fileNamePathBuf [METADATA_FILENAME_PATH_LENGTH];
108 char fileSizePathBuf [METADATA_FILESIZE_PATH_LENGTH];
110 pOtaDirData->NumFiles = 0;
113 RespLen = HttpClient_RecvSkipHdr(SockId, pRespBuf, NET_BUF_SIZE, &jsonLen);
116 _SlOtaLibTrace((
"CdnGithub_ParseRespDir: ERROR HttpClient_RecvSkipHdr, status=%ld\r\n", RespLen));
120 ProcessedSize = RespLen;
123 while (ProcessedSize < jsonLen)
129 pTempBuf = (
char*)malloc(jsonLen+1);
130 if (pTempBuf == NULL)
135 memcpy(pTempBuf, (
char *)pRespBuf, ProcessedSize);
141 memcpy(&(pTempBuf[ProcessedSize]), (
char *)pRespBuf, (jsonLen + 1 - ProcessedSize));
144 if (ProcessedSize >= jsonLen)
152 len = HttpClient_RecvAppend(SockId, pRespBuf, NET_BUF_SIZE, ProcessedSize, ProcessedSize);
154 _SlOtaLibTrace((
"len is: %d\r\n", len));
155 _SlOtaLibTrace((
"After recvAppend pRespBuf is: %s\r\n", pRespBuf));
158 _SlOtaLibTrace((
"the entire JSON pRespBuf is: %s\r\n", pTempBuf));
166 OtaJsonObj.jsonBuffer.fileBuffer = (
char *)pRespBuf;
167 OtaJsonObj.jsonBuffer.fileBuffer[jsonLen] =
'\0';
171 OtaJsonObj.jsonBuffer.fileBuffer = (
char *)pTempBuf;
172 OtaJsonObj.jsonBuffer.fileBuffer[jsonLen] =
'\0';
179 retVal = OtaJson_init(template_GithubMetadata, &(OtaJsonObj.jsonBuffer.fileBuffer), jsonLen);
185 if (pTempBuf != NULL)
192 _SlOtaLibTrace((
"CdnDropbox_ParseRespDir: ERROR OtaJson_init, retVal=%d\r\n", retVal));
197 files_num = OtaJson_getArrayMembersCount(OtaJsonObj.jsonObjHandle, pJsonArrayKey);
204 for (i = 0; i < files_num; i++)
207 memset (&CurrFileInfo, 0,
sizeof(CurrFileInfo));
209 memset (&fileNamePathBuf, 0,
sizeof(fileNamePathBuf));
210 snprintf(fileNamePathBuf, METADATA_FILENAME_PATH_LENGTH,
"\"#\".[%d].\"download_url\"",i);
213 retVal = OtaJson_getMetadataFileName(CurrFileInfo.OtaFileName, fileNamePathBuf);
220 memset (&fileSizePathBuf, 0,
sizeof(fileSizePathBuf));
221 snprintf(fileSizePathBuf, METADATA_FILESIZE_PATH_LENGTH,
"\"#\".[%d].\"size\"",i);
224 retVal = OtaJson_getMetadataFileSize((uint32_t *)&CurrFileInfo.OtaFileSize, fileSizePathBuf);
231 pOtaDirData->OtaFileInfo[pOtaDirData->NumFiles++] = CurrFileInfo;
232 _SlOtaLibTrace((
" OtaDir FileName=%s, FileSize=%ld\r\n", CurrFileInfo.OtaFileName, CurrFileInfo.OtaFileSize));
238 RespLen = HttpClient_Recv(SockId, &pRespBuf[0], NET_BUF_SIZE, 0, 1 );
243 }
while(RespLen == NET_BUF_SIZE);
248 return pOtaDirData->NumFiles;
251 int16_t CdnGithub_SendReqFileUrl(int16_t SockId, uint8_t *pRespBuf, uint8_t *pServerName, uint8_t *pFileName, uint8_t *pVendorToken)
256 strcpy((
char *)pRespBuf, (
const char *)pFileName);
257 return strlen((
const char *)pFileName);
260 int16_t CdnGithub_ParseRespFileUrl(uint16_t SockId, uint8_t *pSendBuf, uint8_t *pFileUrl, uint32_t FileUrlBufSize)
263 strcpy((
char *)pFileUrl, (
const char *)pSendBuf);
264 return CDN_STATUS_OK;