예제 #1
0
cms_client
cms_clientNew(
    unsigned long ip,
    cms_service service)
{
    cms_client client;
    os_result osr;

    client = os_malloc(sizeof *client);
    if(client != NULL){
        if (cms_threadInit(cms_thread(client), "cms_client", &service->configuration->clientScheduling)) {
            cms_object(client)->kind = CMS_CLIENT;
            cms_thread(client)->did = service->did;
            cms_thread(client)->uri = os_strdup(service->uri);
            client->ip = ip;
            client->initCount = 0;
            client->service = service;
            client->internalFree = FALSE;
            osr = os_mutexInit(&client->soapMutex, NULL);
            client->soapEnvs = c_iterNew(NULL);

            if(osr == os_resultSuccess){
                osr = os_mutexInit(&client->conditionMutex, NULL);
                if(osr == os_resultSuccess){
                    osr = os_condInit(&client->condition, &client->conditionMutex, NULL );
                    if(osr == os_resultSuccess){
                        osr = os_mutexInit(&client->threadMutex, NULL);

                        if(osr == os_resultSuccess){
                            client->threads = c_iterNew(NULL);
                        } else {
                            cms_clientFree(client);
                        }
                    }
                } else {
                    cms_clientFree(client);
                }
            } else {
                cms_clientFree(client);
            }
        } else {
            cms_clientFree(client);
            client = NULL;
        }
    }

    if(client == NULL){
        if(service->configuration->verbosity >= 1){
            OS_REPORT(OS_ERROR, CMS_CONTEXT, 0,
            "cms_clientNew: client could not be initialized.");
        }
    }
    return client;
}
예제 #2
0
cms_soapThread
cms_soapThreadNew(
    const c_char* name,
    cms_client client)
{
    cms_soapThread thread;
    os_mutexAttr attr;
    os_condAttr condAttr;
    os_result osr;

    thread = NULL;
    osr = os_resultInvalid;

    if(client != NULL){
        thread = cms_soapThread(os_malloc(C_SIZEOF(cms_soapThread)));
        if (thread != NULL) {
            cms_object(thread)->kind = CMS_SOAPTHREAD;
            cms_threadInit(cms_thread(thread), name, &client->service->configuration->clientScheduling);
            cms_thread(thread)->uri =  os_strdup(cms_thread(client)->uri);
            thread->client = client;
            thread->soap = NULL;

            osr = os_mutexAttrInit(&attr);
            if(osr == os_resultSuccess){
                attr.scopeAttr = OS_SCOPE_PRIVATE;
                osr = os_mutexInit(&thread->soapMutex, &attr);
                if(osr == os_resultSuccess){
                    osr = os_condAttrInit(&condAttr);
                    if(osr == os_resultSuccess){
                        condAttr.scopeAttr = OS_SCOPE_PRIVATE;
                        osr = os_condInit(&thread->condition, &thread->soapMutex, &condAttr );
                    }
                }
            }
        }
    }

    if (osr != os_resultSuccess) {
        cms_soapThreadFree(thread);
        return NULL;
    }

    return thread;
}
예제 #3
0
cms_client
cms_clientNew(
    unsigned long ip,
    cms_service service,
    const c_char* uri)
{
    cms_client client;
    os_result osr;
    os_mutexAttr attr;
    os_condAttr condAttr;

    client = cms_client(os_malloc(C_SIZEOF(cms_client)));
    cms_threadInit(cms_thread(client), "cms_client", &service->configuration->clientScheduling);
    if(client != NULL){
        cms_object(client)->kind = CMS_CLIENT;
        cms_thread(client)->uri = os_strdup(uri);
        client->ip = ip;
        client->initCount = 0;
        client->service = service;
        client->internalFree = FALSE;
        osr = os_mutexAttrInit(&attr);

        if(osr == os_resultSuccess){
            attr.scopeAttr = OS_SCOPE_PRIVATE;
            osr = os_mutexInit(&client->soapMutex, &attr);
            client->soapEnvs = c_iterNew(NULL);

            if(osr == os_resultSuccess){
                osr = os_condAttrInit(&condAttr);

                if(osr == os_resultSuccess){
                    osr = os_mutexInit(&client->conditionMutex, &attr);

                    if(osr == os_resultSuccess){
                        condAttr.scopeAttr = OS_SCOPE_PRIVATE;
                        osr = os_condInit(&client->condition, &client->conditionMutex, &condAttr );
                        if(osr == os_resultSuccess){
                            osr = os_mutexInit(&client->threadMutex, &attr);

                            if(osr == os_resultSuccess){
                                client->threads = c_iterNew(NULL);
                            } else {
                                cms_clientFree(client);
                            }
                        }
                    } else {
                        cms_clientFree(client);
                    }
                } else {
                    cms_clientFree(client);
                }
            } else {
                cms_clientFree(client);
            }
        } else {
            cms_clientFree(client);
        }
    }

    if(client == NULL){
        if(service->configuration->verbosity >= 1){
            OS_REPORT(OS_ERROR, CMS_CONTEXT, 0,
            "cms_clientNew: client could not be initialized.");
        }
    }
    return client;
}