|
|
|
@ -37,7 +37,6 @@
|
|
|
|
|
|
|
|
|
|
#define CONFIG_MMS_CONNECTION_DEFAULT_TIMEOUT 5000
|
|
|
|
|
#define CONFIG_MMS_CONNECTION_DEFAULT_CONNECT_TIMEOUT 10000
|
|
|
|
|
#define OUTSTANDING_CALLS 10
|
|
|
|
|
|
|
|
|
|
static void
|
|
|
|
|
setConnectionState(MmsConnection self, MmsConnectionState newState)
|
|
|
|
@ -255,9 +254,12 @@ checkForOutstandingCall(MmsConnection self, uint32_t invokeId)
|
|
|
|
|
|
|
|
|
|
Semaphore_wait(self->outstandingCallsLock);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < OUTSTANDING_CALLS; i++) {
|
|
|
|
|
if (self->outstandingCalls[i].isUsed) {
|
|
|
|
|
if (self->outstandingCalls[i].invokeId == invokeId) {
|
|
|
|
|
for (i = 0; i < self->maxOutstandingCalled; i++)
|
|
|
|
|
{
|
|
|
|
|
if (self->outstandingCalls[i].isUsed)
|
|
|
|
|
{
|
|
|
|
|
if (self->outstandingCalls[i].invokeId == invokeId)
|
|
|
|
|
{
|
|
|
|
|
Semaphore_post(self->outstandingCallsLock);
|
|
|
|
|
return &(self->outstandingCalls[i]);
|
|
|
|
|
}
|
|
|
|
@ -276,8 +278,10 @@ addToOutstandingCalls(MmsConnection self, uint32_t invokeId, eMmsOutstandingCall
|
|
|
|
|
|
|
|
|
|
Semaphore_wait(self->outstandingCallsLock);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < OUTSTANDING_CALLS; i++) {
|
|
|
|
|
if (self->outstandingCalls[i].isUsed == false) {
|
|
|
|
|
for (i = 0; i < self->maxOutstandingCalled; i++)
|
|
|
|
|
{
|
|
|
|
|
if (self->outstandingCalls[i].isUsed == false)
|
|
|
|
|
{
|
|
|
|
|
self->outstandingCalls[i].isUsed = true;
|
|
|
|
|
self->outstandingCalls[i].invokeId = invokeId;
|
|
|
|
|
self->outstandingCalls[i].timeout = Hal_getTimeInMs() + self->requestTimeout;
|
|
|
|
@ -302,9 +306,12 @@ removeFromOutstandingCalls(MmsConnection self, uint32_t invokeId)
|
|
|
|
|
|
|
|
|
|
Semaphore_wait(self->outstandingCallsLock);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < OUTSTANDING_CALLS; i++) {
|
|
|
|
|
if (self->outstandingCalls[i].isUsed) {
|
|
|
|
|
if (self->outstandingCalls[i].invokeId == invokeId) {
|
|
|
|
|
for (i = 0; i < self->maxOutstandingCalled; i++)
|
|
|
|
|
{
|
|
|
|
|
if (self->outstandingCalls[i].isUsed)
|
|
|
|
|
{
|
|
|
|
|
if (self->outstandingCalls[i].invokeId == invokeId)
|
|
|
|
|
{
|
|
|
|
|
self->outstandingCalls[i].isUsed = false;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
@ -321,11 +328,12 @@ mmsClient_getMatchingObtainFileRequest(MmsConnection self, const char* filename)
|
|
|
|
|
|
|
|
|
|
Semaphore_wait(self->outstandingCallsLock);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < OUTSTANDING_CALLS; i++) {
|
|
|
|
|
if (self->outstandingCalls[i].isUsed) {
|
|
|
|
|
|
|
|
|
|
if (self->outstandingCalls[i].type == MMS_CALL_TYPE_OBTAIN_FILE) {
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < self->maxOutstandingCalled; i++)
|
|
|
|
|
{
|
|
|
|
|
if (self->outstandingCalls[i].isUsed)
|
|
|
|
|
{
|
|
|
|
|
if (self->outstandingCalls[i].type == MMS_CALL_TYPE_OBTAIN_FILE)
|
|
|
|
|
{
|
|
|
|
|
char* storedFilename = (char*) self->outstandingCalls[i].internalParameter.ptr;
|
|
|
|
|
|
|
|
|
|
if (storedFilename) {
|
|
|
|
@ -1008,8 +1016,8 @@ mmsIsoCallback(IsoIndication indication, void* parameter, ByteBuffer* payload)
|
|
|
|
|
|
|
|
|
|
int i = 0;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < OUTSTANDING_CALLS; i++) {
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < self->maxOutstandingCalled; i++)
|
|
|
|
|
{
|
|
|
|
|
Semaphore_wait(self->outstandingCallsLock);
|
|
|
|
|
|
|
|
|
|
if (self->outstandingCalls[i].isUsed) {
|
|
|
|
@ -1057,8 +1065,8 @@ mmsIsoCallback(IsoIndication indication, void* parameter, ByteBuffer* payload)
|
|
|
|
|
{
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < OUTSTANDING_CALLS; i++) {
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < self->maxOutstandingCalled; i++)
|
|
|
|
|
{
|
|
|
|
|
Semaphore_wait(self->outstandingCallsLock);
|
|
|
|
|
|
|
|
|
|
if (self->outstandingCalls[i].isUsed) {
|
|
|
|
@ -1493,7 +1501,9 @@ MmsConnection_createInternal(TLSConfiguration tlsConfig, bool createThread)
|
|
|
|
|
self->concludeHandlerParameter = NULL;
|
|
|
|
|
self->concludeTimeout = 0;
|
|
|
|
|
|
|
|
|
|
self->outstandingCalls = (MmsOutstandingCall) GLOBAL_CALLOC(OUTSTANDING_CALLS, sizeof(struct sMmsOutstandingCall));
|
|
|
|
|
self->maxOutstandingCalling = CONFIG_DEFAULT_MAX_SERV_OUTSTANDING_CALLING;
|
|
|
|
|
self->maxOutstandingCalled = CONFIG_DEFAULT_MAX_SERV_OUTSTANDING_CALLED;
|
|
|
|
|
self->outstandingCalls = (MmsOutstandingCall) GLOBAL_CALLOC(CONFIG_DEFAULT_MAX_SERV_OUTSTANDING_CALLED, sizeof(struct sMmsOutstandingCall));
|
|
|
|
|
|
|
|
|
|
self->isoParameters = IsoConnectionParameters_create();
|
|
|
|
|
|
|
|
|
@ -1652,6 +1662,25 @@ MmsConnection_setRequestTimeout(MmsConnection self, uint32_t timeoutInMs)
|
|
|
|
|
self->requestTimeout = timeoutInMs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
MmsConnnection_setMaxOutstandingCalls(MmsConnection self, int calling, int called)
|
|
|
|
|
{
|
|
|
|
|
if (calling < 1)
|
|
|
|
|
calling = 1;
|
|
|
|
|
|
|
|
|
|
if (called < 1)
|
|
|
|
|
called = 1;
|
|
|
|
|
|
|
|
|
|
if (self->outstandingCalls)
|
|
|
|
|
{
|
|
|
|
|
GLOBAL_FREEMEM(self->outstandingCalls);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
self->maxOutstandingCalling = calling;
|
|
|
|
|
self->maxOutstandingCalled = called;
|
|
|
|
|
self->outstandingCalls = (MmsOutstandingCall)GLOBAL_CALLOC(called, sizeof(struct sMmsOutstandingCall));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
uint32_t
|
|
|
|
|
MmsConnection_getRequestTimeout(MmsConnection self)
|
|
|
|
|
{
|
|
|
|
|