mirror of
https://github.com/Ylianst/MeshAgent
synced 2025-12-15 07:43:50 +00:00
1. Added ability to specify msh flags on command line
This commit is contained in:
@@ -3842,6 +3842,20 @@ int MeshAgent_AgentMode(MeshAgentHostContainer *agentHost, int paramLen, char **
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ixr = 0;
|
||||||
|
for (ri = 0; ri < paramLen; ++ri)
|
||||||
|
{
|
||||||
|
int len = strnlen_s(param[ri], 4096);
|
||||||
|
int ix;
|
||||||
|
if ((ix=ILibString_IndexOf(param[ri], len, "=", 1)) > 2 && strncmp(param[ri], "--", 2)==0)
|
||||||
|
{
|
||||||
|
ILibSimpleDataStore_Cached(agentHost->masterDb, param[ri] + 2, ix - 2, param[ri] + ix + 1, len - (ix + 1));
|
||||||
|
++ixr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
paramLen -= ixr;
|
||||||
|
|
||||||
|
|
||||||
agentHost->httpClientManager = ILibCreateWebClient(3, agentHost->chain);
|
agentHost->httpClientManager = ILibCreateWebClient(3, agentHost->chain);
|
||||||
|
|
||||||
ILibRemoteLogging_printf(ILibChainGetLogger(agentHost->chain), ILibRemoteLogging_Modules_Microstack_Generic, ILibRemoteLogging_Flags_VerbosityLevel_1, "agentcore: argv[0] = %s", param[0]);
|
ILibRemoteLogging_printf(ILibChainGetLogger(agentHost->chain), ILibRemoteLogging_Modules_Microstack_Generic, ILibRemoteLogging_Flags_VerbosityLevel_1, "agentcore: argv[0] = %s", param[0]);
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ typedef struct ILibSimpleDataStore_Root
|
|||||||
char* filePath;
|
char* filePath;
|
||||||
char scratchPad[4096];
|
char scratchPad[4096];
|
||||||
ILibHashtable keyTable; // keys --> ILibSimpleDataStore_TableEntry
|
ILibHashtable keyTable; // keys --> ILibSimpleDataStore_TableEntry
|
||||||
|
ILibHashtable cacheTable;
|
||||||
uint64_t fileSize;
|
uint64_t fileSize;
|
||||||
int error;
|
int error;
|
||||||
} ILibSimpleDataStore_Root;
|
} ILibSimpleDataStore_Root;
|
||||||
@@ -98,6 +99,11 @@ typedef struct ILibSimpleDataStore_TableEntry
|
|||||||
char valueHash[SHA384HASHSIZE];
|
char valueHash[SHA384HASHSIZE];
|
||||||
uint64_t valueOffset;
|
uint64_t valueOffset;
|
||||||
} ILibSimpleDataStore_TableEntry;
|
} ILibSimpleDataStore_TableEntry;
|
||||||
|
typedef struct ILibSimpleDataStore_CacheEntry
|
||||||
|
{
|
||||||
|
int valueLength;
|
||||||
|
char value[];
|
||||||
|
}ILibSimpleDataStore_CacheEntry;
|
||||||
|
|
||||||
const int ILibMemory_SimpleDataStore_CONTAINERSIZE = sizeof(ILibSimpleDataStore_Root);
|
const int ILibMemory_SimpleDataStore_CONTAINERSIZE = sizeof(ILibSimpleDataStore_Root);
|
||||||
void ILibSimpleDataStore_RebuildKeyTable(ILibSimpleDataStore_Root *root);
|
void ILibSimpleDataStore_RebuildKeyTable(ILibSimpleDataStore_Root *root);
|
||||||
@@ -106,6 +112,17 @@ void ILibSimpleDataStore_RebuildKeyTable(ILibSimpleDataStore_Root *root);
|
|||||||
// Perform a SHA384 hash of some data
|
// Perform a SHA384 hash of some data
|
||||||
void ILibSimpleDataStore_SHA384(char *data, int datalen, char* result) { util_sha384(data, datalen, result); }
|
void ILibSimpleDataStore_SHA384(char *data, int datalen, char* result) { util_sha384(data, datalen, result); }
|
||||||
|
|
||||||
|
void ILibSimpleDataStore_Cached(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen)
|
||||||
|
{
|
||||||
|
ILibSimpleDataStore_Root *root = (ILibSimpleDataStore_Root*)dataStore;
|
||||||
|
if (root->cacheTable == NULL) { root->cacheTable = ILibHashtable_Create(); }
|
||||||
|
ILibSimpleDataStore_CacheEntry *entry = (ILibSimpleDataStore_CacheEntry*)ILibMemory_Allocate(sizeof(ILibSimpleDataStore_CacheEntry) + valueLen, 0, NULL, NULL);
|
||||||
|
entry->valueLength = valueLen;
|
||||||
|
memcpy_s(entry->value, valueLen, value, valueLen);
|
||||||
|
|
||||||
|
ILibHashtable_Put(root->cacheTable, NULL, key, keyLen, entry);
|
||||||
|
}
|
||||||
|
|
||||||
// Write a key/value pair to file, the hash is already calculated
|
// Write a key/value pair to file, the hash is already calculated
|
||||||
uint64_t ILibSimpleDataStore_WriteRecord(FILE *f, char* key, int keyLen, char* value, int valueLen, char* hash)
|
uint64_t ILibSimpleDataStore_WriteRecord(FILE *f, char* key, int keyLen, char* value, int valueLen, char* hash)
|
||||||
{
|
{
|
||||||
@@ -403,6 +420,17 @@ __EXPORT_TYPE ILibSimpleDataStore ILibSimpleDataStore_CreateEx2(char* filePath,
|
|||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ILibSimpleDataStore_CacheClear_Sink(ILibHashtable sender, void *Key1, char* Key2, int Key2Len, void *Data, void *user)
|
||||||
|
{
|
||||||
|
if (Data != NULL) { free(Data); }
|
||||||
|
|
||||||
|
UNREFERENCED_PARAMETER(sender);
|
||||||
|
UNREFERENCED_PARAMETER(Key1);
|
||||||
|
UNREFERENCED_PARAMETER(Key2);
|
||||||
|
UNREFERENCED_PARAMETER(Key2Len);
|
||||||
|
UNREFERENCED_PARAMETER(user);
|
||||||
|
}
|
||||||
|
|
||||||
// Close the data store file
|
// Close the data store file
|
||||||
__EXPORT_TYPE void ILibSimpleDataStore_Close(ILibSimpleDataStore dataStore)
|
__EXPORT_TYPE void ILibSimpleDataStore_Close(ILibSimpleDataStore dataStore)
|
||||||
{
|
{
|
||||||
@@ -410,6 +438,7 @@ __EXPORT_TYPE void ILibSimpleDataStore_Close(ILibSimpleDataStore dataStore)
|
|||||||
|
|
||||||
if (root == NULL) return;
|
if (root == NULL) return;
|
||||||
ILibHashtable_DestroyEx(root->keyTable, ILibSimpleDataStore_TableClear_Sink, root);
|
ILibHashtable_DestroyEx(root->keyTable, ILibSimpleDataStore_TableClear_Sink, root);
|
||||||
|
if (root->cacheTable != NULL) { ILibHashtable_DestroyEx(root->cacheTable, ILibSimpleDataStore_CacheClear_Sink, NULL); }
|
||||||
|
|
||||||
free(root->filePath);
|
free(root->filePath);
|
||||||
|
|
||||||
@@ -458,6 +487,24 @@ __EXPORT_TYPE int ILibSimpleDataStore_GetEx(ILibSimpleDataStore dataStore, char*
|
|||||||
|
|
||||||
if (root == NULL) return 0;
|
if (root == NULL) return 0;
|
||||||
if (keyLen > 1 && key[keyLen - 1] == 0) { keyLen -= 1; }
|
if (keyLen > 1 && key[keyLen - 1] == 0) { keyLen -= 1; }
|
||||||
|
|
||||||
|
if (root->cacheTable != NULL)
|
||||||
|
{
|
||||||
|
ILibSimpleDataStore_CacheEntry *centry = (ILibSimpleDataStore_CacheEntry*)ILibHashtable_Get(root->cacheTable, NULL, key, keyLen);
|
||||||
|
if (centry != NULL)
|
||||||
|
{
|
||||||
|
if ((buffer != NULL) && (bufferLen >= centry->valueLength)) // If the buffer is not null and can hold the value, place the value in the buffer.
|
||||||
|
{
|
||||||
|
memcpy_s(buffer, bufferLen, centry->value, centry->valueLength);
|
||||||
|
return(centry->valueLength);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return(centry->valueLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
entry = (ILibSimpleDataStore_TableEntry*)ILibHashtable_Get(root->keyTable, NULL, key, keyLen);
|
entry = (ILibSimpleDataStore_TableEntry*)ILibHashtable_Get(root->keyTable, NULL, key, keyLen);
|
||||||
|
|
||||||
if (entry == NULL) return 0; // If there is no in-memory entry for this key, return zero now.
|
if (entry == NULL) return 0; // If there is no in-memory entry for this key, return zero now.
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ int ILibSimpleDataStore_Exists(char *filePath);
|
|||||||
|
|
||||||
// Close the data store.
|
// Close the data store.
|
||||||
__EXPORT_TYPE void ILibSimpleDataStore_Close(ILibSimpleDataStore dataStore);
|
__EXPORT_TYPE void ILibSimpleDataStore_Close(ILibSimpleDataStore dataStore);
|
||||||
|
__EXPORT_TYPE void ILibSimpleDataStore_Cached(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen);
|
||||||
|
|
||||||
__EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen);
|
__EXPORT_TYPE int ILibSimpleDataStore_PutEx(ILibSimpleDataStore dataStore, char* key, int keyLen, char* value, int valueLen);
|
||||||
#define ILibSimpleDataStore_Put(dataStore, key, value) ILibSimpleDataStore_PutEx(dataStore, key, (int)strnlen_s(key, ILibSimpleDataStore_MaxKeyLength), value, (int)strnlen_s(value, ILibSimpleDataStore_MaxUnspecifiedValueLen))
|
#define ILibSimpleDataStore_Put(dataStore, key, value) ILibSimpleDataStore_PutEx(dataStore, key, (int)strnlen_s(key, ILibSimpleDataStore_MaxKeyLength), value, (int)strnlen_s(value, ILibSimpleDataStore_MaxUnspecifiedValueLen))
|
||||||
|
|||||||
Reference in New Issue
Block a user