47 #define SERVER_AUTH_FILE "DSM://auth.servers" 48 #define ACCESS_FILE_TIMEOUT_MS (1000 * 60 * 60 * 4) 49 #define MAX_CALLBACKS 5 55 ACCESS_FILE_NOTLOADED,
58 ACCESS_FILE_LOADING_SYNC,
59 ACCESS_FILE_LOADING_ASYNC
64 static AccessFileState_t accessFileState = ACCESS_FILE_NOTLOADED;
66 static U32BIT lastAccessUpdate = 0;
68 static U16BIT callbackCount = 0;
70 static void(*fileLoadedCallback[MAX_CALLBACKS]) (void);
73 static MHEG5ServerAccess_t CheckUrlPermitted(U8BIT *url);
74 static void AuthFileRetrieved(
void *userData,
S_CONTENT *content );
75 static void AuthFileRetrievalFailed(
void *userData );
76 static int GetLineLength(U8BIT *
string, U8BIT **remaining,
int max);
77 static void NotifyServerAccessReady(
void);
82 static void MHEG5UpdateServerAccess(
void)
86 accessFileState = ACCESS_FILE_LOADING_SYNC;
90 authFilename.data = (U8BIT *)SERVER_AUTH_FILE;
91 authFilename.len = strlen(SERVER_AUTH_FILE);
94 AuthFileRetrieved, AuthFileRetrievalFailed );
96 if (accessFileState == ACCESS_FILE_LOADING_SYNC)
98 accessFileState = ACCESS_FILE_LOADING_ASYNC;
114 BOOLEAN timeToUpdate;
115 MHEG5ServerAccess_t permission;
118 timeToUpdate = FALSE;
120 permission = SERVER_ACCESS_PENDING;
122 if (accessFileState == ACCESS_FILE_NOTLOADED)
126 else if ((currentTime > lastAccessUpdate) &&
127 (currentTime - lastAccessUpdate) > ACCESS_FILE_TIMEOUT_MS)
131 else if (currentTime < lastAccessUpdate)
139 MHEG5UpdateServerAccess();
142 switch (accessFileState)
144 case ACCESS_FILE_LOADED:
145 permission = CheckUrlPermitted(url);
147 case ACCESS_FILE_MISSING:
148 permission = SERVER_ACCESS_BLOCKED;
150 case ACCESS_FILE_LOADING_ASYNC:
151 permission = SERVER_ACCESS_PENDING;
165 static MHEG5ServerAccess_t CheckUrlPermitted(U8BIT *url)
172 MHEG5ServerAccess_t permission;
173 MHEG5ServerAccess_t entryAuthRequired;
176 permission = SERVER_ACCESS_BLOCKED;
177 if (accessFileState == ACCESS_FILE_LOADED)
179 fileBuffer = accessFile.data;
183 remainingChars = accessFile.len;
184 lineLength = GetLineLength(line, &nextLine, remainingChars);
185 while (lineLength >= 0)
193 entryAuthRequired = SERVER_ACCESS_PERMITTED_NO_AUTH;
197 entryAuthRequired = SERVER_ACCESS_PERMITTED_AUTH;
205 else if (*line ==
'#')
210 else if (strlen((
char *)url) <= (
size_t)lineLength)
218 differ = MHEG5strncmp( line, url, lineLength );
224 if (line[lineLength - 1] ==
'/' || url[lineLength] ==
'/')
226 permission = entryAuthRequired;
233 remainingChars -= (lineLength + 1);
234 lineLength = GetLineLength(line, &nextLine, remainingChars);
248 static void AuthFileRetrieved(
void *userData,
S_CONTENT *content )
252 USE_UNWANTED_PARAM(userData);
257 MHEG5freeMem(accessFile.data);
260 accessFile.data = MHEG5getMem(content->size + 1);
261 if (accessFile.data != NULL)
263 accessFile.len = content->size;
265 memcpy(accessFile.data, content->data, content->size);
266 accessFile.data[accessFile.len] =
'\0';
269 if (accessFileState == ACCESS_FILE_LOADING_ASYNC)
274 accessFileState = ACCESS_FILE_LOADED;
279 NotifyServerAccessReady();
290 static void AuthFileRetrievalFailed(
void *userData )
294 USE_UNWANTED_PARAM(userData);
297 if (accessFileState == ACCESS_FILE_LOADING_ASYNC)
302 accessFileState = ACCESS_FILE_MISSING;
308 MHEG5freeMem(accessFile.data);
309 accessFile.data = NULL;
315 NotifyServerAccessReady();
325 if (accessFileState != ACCESS_FILE_LOADING_ASYNC)
330 MHEG5freeMem(accessFile.data);
331 accessFile.data = NULL;
335 accessFileState = ACCESS_FILE_NOTLOADED;
346 if (callbackCount < MAX_CALLBACKS)
348 fileLoadedCallback[callbackCount] = LoadNotifyCallback;
360 static int GetLineLength(U8BIT *
string, U8BIT **remaining,
int max)
366 if (
string != NULL && max > 0)
369 for (i = 0; i < max; i++)
372 if (
string[i] ==
'\n')
375 *remaining =
string + i + 1;
378 else if (
string[i] ==
'\0')
393 static void NotifyServerAccessReady(
void)
397 for (i = 0; i < callbackCount; i++)
399 if (fileLoadedCallback[i] != NULL)
401 fileLoadedCallback[i]();
U32BIT STB_OSGetClockMilliseconds(void)
Get Current Computer Clock Time.
Interface functions to DSM-CC instance for MHEG5.
void * MHEG5FileOrmGet(MHEG5String name, U16BIT priority, void *userData, F_CB_Good cbGood, F_CB_Fail cbFail)
Get a file. The file will be loaded and one of the callback functions called when request is resolved...
MHEG5ServerAccess_t MHEG5CheckServerPermitted(U8BIT *url)
This file defines the profile for the MHEG engine.
Implement Functions to support Service Gateways. Functions for standarizing several GroupIDs like +DS...
Functions relating to HTTPS Server Access.
File interface functions to DSMCC component.
void MHEG5AddServerAccessCallback(void(*LoadNotifyCallback)(void))
Add callback function to be called when the server access permission file is loaded.
void MHEG5ResetServerAccess(void)
Reset the cachedserver access permission file.
Header file - Function prototypes for operating system.