summaryrefslogtreecommitdiffstats
path: root/tinySIGCOMP/src/tcomp_statehandler.c
diff options
context:
space:
mode:
Diffstat (limited to 'tinySIGCOMP/src/tcomp_statehandler.c')
-rwxr-xr-xtinySIGCOMP/src/tcomp_statehandler.c663
1 files changed, 328 insertions, 335 deletions
diff --git a/tinySIGCOMP/src/tcomp_statehandler.c b/tinySIGCOMP/src/tcomp_statehandler.c
index 596fdf9..51dbd9a 100755
--- a/tinySIGCOMP/src/tcomp_statehandler.c
+++ b/tinySIGCOMP/src/tcomp_statehandler.c
@@ -2,19 +2,19 @@
* Copyright (C) 2010-2011 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
-*
+*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
-*
+*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-*
+*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
@@ -23,7 +23,7 @@
/**@file tcomp_statehandler.c
* @brief SigComp state handler.
* Entity responsible for accessing and storing state information once permission is granted by the application.
- *
+ *
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
@@ -38,381 +38,375 @@
static int pred_find_compartment_by_id(const tsk_list_item_t *item, const void *id)
{
- if(item && item->data){
- tcomp_compartment_t *compartment = item->data;
- int64_t res = (compartment->identifier - *((int64_t*)id));
- return res > 0 ? (int)1 : (res < 0 ? (int)-1 : (int)0);
- }
- return -1;
+ if(item && item->data) {
+ tcomp_compartment_t *compartment = item->data;
+ int64_t res = (compartment->identifier - *((int64_t*)id));
+ return res > 0 ? (int)1 : (res < 0 ? (int)-1 : (int)0);
+ }
+ return -1;
}
/**Creates new SigComp state handler.
*/
tcomp_statehandler_t* tcomp_statehandler_create()
{
- tcomp_statehandler_t* statehandler;
- if((statehandler = tsk_object_new(tcomp_statehandler_def_t))){
- /* RFC 3320 - 3.3. SigComp Parameters */
- statehandler->sigcomp_parameters = tcomp_params_create();
- tcomp_params_setDmsValue(statehandler->sigcomp_parameters, SIP_RFC5049_DECOMPRESSION_MEMORY_SIZE);
- tcomp_params_setSmsValue(statehandler->sigcomp_parameters, SIP_RFC5049_STATE_MEMORY_SIZE);
- tcomp_params_setCpbValue(statehandler->sigcomp_parameters, SIP_RFC5049_CYCLES_PER_BIT);
-
- if(!(statehandler->dictionaries = tsk_list_create())){
- TSK_OBJECT_SAFE_FREE(statehandler);
- goto bail;
- }
- if(!(statehandler->compartments = tsk_list_create())){
- TSK_OBJECT_SAFE_FREE(statehandler);
- goto bail;
- }
- statehandler->sigcomp_parameters->SigComp_version = SIP_RFC5049_SIGCOMP_VERSION;
+ tcomp_statehandler_t* statehandler;
+ if((statehandler = tsk_object_new(tcomp_statehandler_def_t))) {
+ /* RFC 3320 - 3.3. SigComp Parameters */
+ statehandler->sigcomp_parameters = tcomp_params_create();
+ tcomp_params_setDmsValue(statehandler->sigcomp_parameters, SIP_RFC5049_DECOMPRESSION_MEMORY_SIZE);
+ tcomp_params_setSmsValue(statehandler->sigcomp_parameters, SIP_RFC5049_STATE_MEMORY_SIZE);
+ tcomp_params_setCpbValue(statehandler->sigcomp_parameters, SIP_RFC5049_CYCLES_PER_BIT);
+
+ if(!(statehandler->dictionaries = tsk_list_create())) {
+ TSK_OBJECT_SAFE_FREE(statehandler);
+ goto bail;
+ }
+ if(!(statehandler->compartments = tsk_list_create())) {
+ TSK_OBJECT_SAFE_FREE(statehandler);
+ goto bail;
+ }
+ statehandler->sigcomp_parameters->SigComp_version = SIP_RFC5049_SIGCOMP_VERSION;
#if TCOMP_USE_ONLY_ACKED_STATES
- statehandler->useOnlyACKedStates = tsk_true;
+ statehandler->useOnlyACKedStates = tsk_true;
#endif
- }
+ }
bail:
- return statehandler;
+ return statehandler;
}
int tcomp_statehandler_setUseOnlyACKedStates(tcomp_statehandler_t* self, tsk_bool_t useOnlyACKedStates)
{
- tsk_list_item_t* item;
- if(!self){
- TSK_DEBUG_ERROR("Invalid parameter");
- return -1;
- }
- self->useOnlyACKedStates = useOnlyACKedStates;
-
- tsk_safeobj_lock(self);
- tsk_list_foreach(item, self->compartments){
- tcomp_compartment_setUseOnlyACKedStates((tcomp_compartment_t*)item->data, self->useOnlyACKedStates);
- }
- tsk_safeobj_unlock(self);
-
- return 0;
+ tsk_list_item_t* item;
+ if(!self) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return -1;
+ }
+ self->useOnlyACKedStates = useOnlyACKedStates;
+
+ tsk_safeobj_lock(self);
+ tsk_list_foreach(item, self->compartments) {
+ tcomp_compartment_setUseOnlyACKedStates((tcomp_compartment_t*)item->data, self->useOnlyACKedStates);
+ }
+ tsk_safeobj_unlock(self);
+
+ return 0;
}
tcomp_compartment_t *tcomp_statehandler_getCompartment(const tcomp_statehandler_t *statehandler, uint64_t id)
{
- tcomp_compartment_t *result = tsk_null;
- tcomp_compartment_t* newcomp = tsk_null;
- const tsk_list_item_t *item_const;
+ tcomp_compartment_t *result = tsk_null;
+ tcomp_compartment_t* newcomp = tsk_null;
+ const tsk_list_item_t *item_const;
- if(!statehandler){
- TSK_DEBUG_ERROR("Invalid parameter");
- return 0;
- }
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return 0;
+ }
- tsk_safeobj_lock(statehandler);
+ tsk_safeobj_lock(statehandler);
- item_const = tsk_list_find_item_by_pred(statehandler->compartments, pred_find_compartment_by_id, &id);
- if(!item_const || !(result = item_const->data)){
- newcomp = tcomp_compartment_create(id, tcomp_params_getParameters(statehandler->sigcomp_parameters), statehandler->useOnlyACKedStates);
- result = newcomp;
- tsk_list_push_back_data(statehandler->compartments, ((void**) &newcomp));
- }
+ item_const = tsk_list_find_item_by_pred(statehandler->compartments, pred_find_compartment_by_id, &id);
+ if(!item_const || !(result = item_const->data)) {
+ newcomp = tcomp_compartment_create(id, tcomp_params_getParameters(statehandler->sigcomp_parameters), statehandler->useOnlyACKedStates);
+ result = newcomp;
+ tsk_list_push_back_data(statehandler->compartments, ((void**) &newcomp));
+ }
- tsk_safeobj_unlock(statehandler);
+ tsk_safeobj_unlock(statehandler);
- return result;
+ return result;
}
void tcomp_statehandler_deleteCompartment(tcomp_statehandler_t *statehandler, uint64_t id)
{
- tcomp_compartment_t *compartment;
- const tsk_list_item_t *item_const;
+ tcomp_compartment_t *compartment;
+ const tsk_list_item_t *item_const;
- if(!statehandler){
- TSK_DEBUG_ERROR("Invalid parameter");
- return;
- }
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return;
+ }
- tsk_safeobj_lock(statehandler);
+ tsk_safeobj_lock(statehandler);
- item_const = tsk_list_find_item_by_pred(statehandler->compartments, pred_find_compartment_by_id, &id);
- if(item_const && (compartment = item_const->data)){
- TSK_DEBUG_INFO("SigComp - Delete compartment %lld", id);
- tsk_list_remove_item_by_data(statehandler->compartments, compartment);
- }
+ item_const = tsk_list_find_item_by_pred(statehandler->compartments, pred_find_compartment_by_id, &id);
+ if(item_const && (compartment = item_const->data)) {
+ TSK_DEBUG_INFO("SigComp - Delete compartment %lld", id);
+ tsk_list_remove_item_by_data(statehandler->compartments, compartment);
+ }
- tsk_safeobj_unlock(statehandler);
+ tsk_safeobj_unlock(statehandler);
}
tsk_bool_t tcomp_statehandler_compartmentExist(tcomp_statehandler_t *statehandler, uint64_t id)
{
- tsk_bool_t exist;
+ tsk_bool_t exist;
- if(!statehandler){
- TSK_DEBUG_ERROR("Invalid parameter");
- return tsk_false;
- }
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return tsk_false;
+ }
- tsk_safeobj_lock(statehandler);
- exist = (tsk_list_find_item_by_pred(statehandler->compartments, pred_find_compartment_by_id, &id) ? 1 : 0);
- tsk_safeobj_unlock(statehandler);
+ tsk_safeobj_lock(statehandler);
+ exist = (tsk_list_find_item_by_pred(statehandler->compartments, pred_find_compartment_by_id, &id) ? 1 : 0);
+ tsk_safeobj_unlock(statehandler);
- return exist;
+ return exist;
}
uint32_t tcomp_statehandler_findState(tcomp_statehandler_t *statehandler, const tcomp_buffer_handle_t *partial_identifier, tcomp_state_t** lpState)
{
- uint32_t count = 0;
- tsk_list_item_t *item;
-
- if(!statehandler){
- TSK_DEBUG_ERROR("Invalid parameter");
- return 0;
- }
-
- tsk_safeobj_lock(statehandler);
-
- //
- // Compartments
- //
- tsk_list_foreach(item, statehandler->compartments){
- tcomp_compartment_t *compartment = item->data;
- count += tcomp_compartment_findState(compartment, partial_identifier, lpState);
- }
-
- if(count){
- goto bail;
- }
-
- //
- // Dictionaries
- //
- tsk_list_foreach(item, statehandler->dictionaries){
- tcomp_dictionary_t *dictionary = item->data;
- if(tcomp_buffer_startsWith(dictionary->identifier, partial_identifier)){
- *lpState = dictionary;
- count++;
- }
- }
+ uint32_t count = 0;
+ tsk_list_item_t *item;
+
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return 0;
+ }
+
+ tsk_safeobj_lock(statehandler);
+
+ //
+ // Compartments
+ //
+ tsk_list_foreach(item, statehandler->compartments) {
+ tcomp_compartment_t *compartment = item->data;
+ count += tcomp_compartment_findState(compartment, partial_identifier, lpState);
+ }
+
+ if(count) {
+ goto bail;
+ }
+
+ //
+ // Dictionaries
+ //
+ tsk_list_foreach(item, statehandler->dictionaries) {
+ tcomp_dictionary_t *dictionary = item->data;
+ if(tcomp_buffer_startsWith(dictionary->identifier, partial_identifier)) {
+ *lpState = dictionary;
+ count++;
+ }
+ }
bail:
- tsk_safeobj_unlock(statehandler);
+ tsk_safeobj_unlock(statehandler);
- return count;
+ return count;
}
void tcomp_statehandler_handleResult(tcomp_statehandler_t *statehandler, tcomp_result_t **lpResult)
{
- tcomp_compartment_t *lpCompartment;
- uint32_t compartment_total_size;
- uint8_t i;
-
- if(!statehandler){
- TSK_DEBUG_ERROR("Invalid parameter");
- return;
- }
-
- /*== Do not lock --> all functions are thread-safe. */
- //tsk_safeobj_lock(statehandler);
-
- /*
- * The compressor does not wish (or no longer wishes) to save state information?
- */
- if((*lpResult)->ret_feedback && (*lpResult)->req_feedback->S){
- if(tcomp_statehandler_compartmentExist(statehandler, (*lpResult)->compartmentId)){
- tcomp_statehandler_deleteCompartment(statehandler, (*lpResult)->compartmentId);
- }
- return;
- }
-
- /*
- * Find corresponding compartment (only if !S)
- */
- if((lpCompartment = tcomp_statehandler_getCompartment(statehandler, (*lpResult)->compartmentId))){
- compartment_total_size = lpCompartment->total_memory_size;
- }
- else{
- goto bail;
- }
+ tcomp_compartment_t *lpCompartment;
+ uint32_t compartment_total_size;
+ uint8_t i;
+
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return;
+ }
+
+ /*== Do not lock --> all functions are thread-safe. */
+ //tsk_safeobj_lock(statehandler);
+
+ /*
+ * The compressor does not wish (or no longer wishes) to save state information?
+ */
+ if((*lpResult)->ret_feedback && (*lpResult)->req_feedback->S) {
+ if(tcomp_statehandler_compartmentExist(statehandler, (*lpResult)->compartmentId)) {
+ tcomp_statehandler_deleteCompartment(statehandler, (*lpResult)->compartmentId);
+ }
+ return;
+ }
+
+ /*
+ * Find corresponding compartment (only if !S)
+ */
+ if((lpCompartment = tcomp_statehandler_getCompartment(statehandler, (*lpResult)->compartmentId))) {
+ compartment_total_size = lpCompartment->total_memory_size;
+ }
+ else {
+ goto bail;
+ }
//compartment_create_states:
- /*
- * Request state creation now we have the corresponding compartement.
- */
- if(tcomp_result_getTempStatesToCreateSize(*lpResult)){
- uint8_t count;
- /* Check compartment allocated size*/
- if(!compartment_total_size){
- goto compartment_free_states;
- }
-
- count = tcomp_result_getTempStatesToCreateSize(*lpResult);
-
- // FIXME: lock
- for (i = 0; i < count; i++)
- {
- tcomp_state_t **lpState = &((*lpResult)->statesToCreate[i]);
- if(!lpState || !*lpState){
- continue;
- }
-
- /*
- * If the state creation request needs more state memory than the
- * total state_memory_size for the compartment, the state handler
- * deletes all but the first (state_memory_size - 64) bytes from the state_value.
- */
- if(TCOMP_GET_STATE_SIZE(*lpState) > compartment_total_size){
- tsk_size_t oldSize, newSize;
- tcomp_compartment_clearStates(lpCompartment);
- oldSize = tcomp_buffer_getSize((*lpState)->value);
- newSize = (compartment_total_size - 64);
- tcomp_buffer_removeBuff((*lpState)->value, newSize, (oldSize-newSize));
- (*lpState)->length = newSize;
-
- tcomp_compartment_addState(lpCompartment, lpState);
- }
-
- /*
- * If the state creation request exceeds the state memory allocated
- * to the compartment, sufficient items of state created by the same
- * compartment are freed until enough memory is available to
- * accommodate the new state.
- */
- else{
- while(lpCompartment->total_memory_left < TCOMP_GET_STATE_SIZE(*lpState)){
- tcomp_compartment_freeStateByPriority(lpCompartment);
- }
- tcomp_compartment_addState(lpCompartment, lpState);
- }
- }
- }
+ /*
+ * Request state creation now we have the corresponding compartement.
+ */
+ if(tcomp_result_getTempStatesToCreateSize(*lpResult)) {
+ uint8_t count;
+ /* Check compartment allocated size*/
+ if(!compartment_total_size) {
+ goto compartment_free_states;
+ }
+
+ count = tcomp_result_getTempStatesToCreateSize(*lpResult);
+
+ // FIXME: lock
+ for (i = 0; i < count; i++) {
+ tcomp_state_t **lpState = &((*lpResult)->statesToCreate[i]);
+ if(!lpState || !*lpState) {
+ continue;
+ }
+
+ /*
+ * If the state creation request needs more state memory than the
+ * total state_memory_size for the compartment, the state handler
+ * deletes all but the first (state_memory_size - 64) bytes from the state_value.
+ */
+ if(TCOMP_GET_STATE_SIZE(*lpState) > compartment_total_size) {
+ tsk_size_t oldSize, newSize;
+ tcomp_compartment_clearStates(lpCompartment);
+ oldSize = tcomp_buffer_getSize((*lpState)->value);
+ newSize = (compartment_total_size - 64);
+ tcomp_buffer_removeBuff((*lpState)->value, newSize, (oldSize-newSize));
+ (*lpState)->length = newSize;
+
+ tcomp_compartment_addState(lpCompartment, lpState);
+ }
+
+ /*
+ * If the state creation request exceeds the state memory allocated
+ * to the compartment, sufficient items of state created by the same
+ * compartment are freed until enough memory is available to
+ * accommodate the new state.
+ */
+ else {
+ while(lpCompartment->total_memory_left < TCOMP_GET_STATE_SIZE(*lpState)) {
+ tcomp_compartment_freeStateByPriority(lpCompartment);
+ }
+ tcomp_compartment_addState(lpCompartment, lpState);
+ }
+ }
+ }
compartment_free_states:
- /*
- * Request state free now we have the correponding comprtement
- */
- if(tcomp_result_getTempStatesToFreeSize((const tcomp_result_t*)*lpResult)){
- tcomp_compartment_freeStates(lpCompartment, (*lpResult)->statesToFree, tcomp_result_getTempStatesToFreeSize((const tcomp_result_t*)*lpResult));
- }
+ /*
+ * Request state free now we have the correponding comprtement
+ */
+ if(tcomp_result_getTempStatesToFreeSize((const tcomp_result_t*)*lpResult)) {
+ tcomp_compartment_freeStates(lpCompartment, (*lpResult)->statesToFree, tcomp_result_getTempStatesToFreeSize((const tcomp_result_t*)*lpResult));
+ }
//compartment_remote_params:
- /*
- * Set remote -compressor- parameters.
- */
- tcomp_compartment_setRemoteParams(lpCompartment, (*lpResult)->remote_parameters);
+ /*
+ * Set remote -compressor- parameters.
+ */
+ tcomp_compartment_setRemoteParams(lpCompartment, (*lpResult)->remote_parameters);
//feedbacks:
- /*
- * Set both Returned and Requested feedbacks.
- */
-
- if(tcomp_buffer_getSize((*lpResult)->req_feedback->item)){
- tcomp_compartment_setReqFeedback(lpCompartment, (*lpResult)->req_feedback->item);
- }
- if(tcomp_buffer_getSize((*lpResult)->ret_feedback)){
- tcomp_compartment_setRetFeedback(lpCompartment, (*lpResult)->ret_feedback);
- }
-
-bail: ;
- //--tsk_safeobj_unlock(lpCompartment);
- //--tsk_safeobj_unlock(statehandler);
+ /*
+ * Set both Returned and Requested feedbacks.
+ */
+
+ if(tcomp_buffer_getSize((*lpResult)->req_feedback->item)) {
+ tcomp_compartment_setReqFeedback(lpCompartment, (*lpResult)->req_feedback->item);
+ }
+ if(tcomp_buffer_getSize((*lpResult)->ret_feedback)) {
+ tcomp_compartment_setRetFeedback(lpCompartment, (*lpResult)->ret_feedback);
+ }
+
+bail:
+ ;
+ //--tsk_safeobj_unlock(lpCompartment);
+ //--tsk_safeobj_unlock(statehandler);
}
tsk_bool_t tcomp_statehandler_handleNack(tcomp_statehandler_t *statehandler, const tcomp_nackinfo_t * nackinfo)
{
- tcomp_buffer_handle_t* sha_id;
- tsk_list_item_t *item;
- tsk_bool_t found = tsk_false;
- if(!statehandler){
- TSK_DEBUG_ERROR("Invalid parameter");
- return tsk_false;
- }
-
- if(!(sha_id = tcomp_buffer_create_null())){
- TSK_DEBUG_ERROR("Failed to create buffer handle");
- return tsk_false;
- }
-
- tcomp_buffer_referenceBuff(sha_id, ((tcomp_nackinfo_t*)nackinfo)->sha1, TSK_SHA1_DIGEST_SIZE);
-
- tsk_list_foreach(item, statehandler->compartments)
- {
- tcomp_compartment_t* lpCompartement = item->data;
- if(tcomp_compartment_hasNack(lpCompartement, sha_id))
- {
- // this compartment is responsible for this nack
- switch(nackinfo->reasonCode)
- {
- case NACK_STATE_NOT_FOUND:
- {
- // Next commented because in this version remote state ids are never saved.
- // Only the ghost has information on last partial state id to use --> reset the ghost
- //SigCompState* lpState = NULL;
- //lpCompartement->findState(&nack_info->details, &lpState);
- //if(lpState)
- //{
- // lpCompartement->freeState(lpState);
- //}
- tcomp_compartment_freeGhostState(lpCompartement);
- }
- break;
-
- default:
- {
- tcomp_compartment_freeGhostState(lpCompartement);
- tcomp_compartment_clearStates(lpCompartement);
- }
- break;
- }
- TSK_DEBUG_INFO("Compartment has NACK :)");
- tcomp_buffer_print(sha_id);
- found = tsk_true;
- }
- }
-
- if(!found)
- {
- TSK_DEBUG_ERROR("Compartments do not have NACK with id=");
- tcomp_buffer_print(sha_id);
- }
-
- TSK_OBJECT_SAFE_FREE(sha_id);
-
- return found;
+ tcomp_buffer_handle_t* sha_id;
+ tsk_list_item_t *item;
+ tsk_bool_t found = tsk_false;
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return tsk_false;
+ }
+
+ if(!(sha_id = tcomp_buffer_create_null())) {
+ TSK_DEBUG_ERROR("Failed to create buffer handle");
+ return tsk_false;
+ }
+
+ tcomp_buffer_referenceBuff(sha_id, ((tcomp_nackinfo_t*)nackinfo)->sha1, TSK_SHA1_DIGEST_SIZE);
+
+ tsk_list_foreach(item, statehandler->compartments) {
+ tcomp_compartment_t* lpCompartement = item->data;
+ if(tcomp_compartment_hasNack(lpCompartement, sha_id)) {
+ // this compartment is responsible for this nack
+ switch(nackinfo->reasonCode) {
+ case NACK_STATE_NOT_FOUND: {
+ // Next commented because in this version remote state ids are never saved.
+ // Only the ghost has information on last partial state id to use --> reset the ghost
+ //SigCompState* lpState = NULL;
+ //lpCompartement->findState(&nack_info->details, &lpState);
+ //if(lpState)
+ //{
+ // lpCompartement->freeState(lpState);
+ //}
+ tcomp_compartment_freeGhostState(lpCompartement);
+ }
+ break;
+
+ default: {
+ tcomp_compartment_freeGhostState(lpCompartement);
+ tcomp_compartment_clearStates(lpCompartement);
+ }
+ break;
+ }
+ TSK_DEBUG_INFO("Compartment has NACK :)");
+ tcomp_buffer_print(sha_id);
+ found = tsk_true;
+ }
+ }
+
+ if(!found) {
+ TSK_DEBUG_ERROR("Compartments do not have NACK with id=");
+ tcomp_buffer_print(sha_id);
+ }
+
+ TSK_OBJECT_SAFE_FREE(sha_id);
+
+ return found;
}
int tcomp_statehandler_addSipSdpDictionary(tcomp_statehandler_t *statehandler)
{
- if(!statehandler){
- TSK_DEBUG_ERROR("Invalid parameter");
- return -1;
- }
-
- tsk_safeobj_lock(statehandler);
-
- if(!statehandler->hasSipSdpDictionary){
- tcomp_dictionary_t* sip_dict = tcomp_dicts_create_sip_dict();
- tsk_list_push_back_data(statehandler->dictionaries, ((void**) &sip_dict));
- statehandler->hasSipSdpDictionary = 1;
- }
-
- tsk_safeobj_unlock(statehandler);
- return 0;
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return -1;
+ }
+
+ tsk_safeobj_lock(statehandler);
+
+ if(!statehandler->hasSipSdpDictionary) {
+ tcomp_dictionary_t* sip_dict = tcomp_dicts_create_sip_dict();
+ tsk_list_push_back_data(statehandler->dictionaries, ((void**) &sip_dict));
+ statehandler->hasSipSdpDictionary = 1;
+ }
+
+ tsk_safeobj_unlock(statehandler);
+ return 0;
}
int tcomp_statehandler_addPresenceDictionary(tcomp_statehandler_t *statehandler)
{
- if(!statehandler){
- TSK_DEBUG_ERROR("NULL SigComp state handler.");
- return -1;
- }
+ if(!statehandler) {
+ TSK_DEBUG_ERROR("NULL SigComp state handler.");
+ return -1;
+ }
- tsk_safeobj_lock(statehandler);
+ tsk_safeobj_lock(statehandler);
- if(!statehandler->hasPresenceDictionary){
- tcomp_dictionary_t* pres_dict = tcomp_dicts_create_presence_dict();
- tsk_list_push_back_data(statehandler->dictionaries, ((void**) &pres_dict));
- statehandler->hasPresenceDictionary = 1;
- }
+ if(!statehandler->hasPresenceDictionary) {
+ tcomp_dictionary_t* pres_dict = tcomp_dicts_create_presence_dict();
+ tsk_list_push_back_data(statehandler->dictionaries, ((void**) &pres_dict));
+ statehandler->hasPresenceDictionary = 1;
+ }
- tsk_safeobj_unlock(statehandler);
- return 0;
+ tsk_safeobj_unlock(statehandler);
+ return 0;
}
@@ -427,42 +421,41 @@ int tcomp_statehandler_addPresenceDictionary(tcomp_statehandler_t *statehandler)
static tsk_object_t* tcomp_statehandler_ctor(tsk_object_t * self, va_list * app)
{
- tcomp_statehandler_t *statehandler = self;
- if(statehandler){
- /* Initialize safeobject */
- tsk_safeobj_init(statehandler);
- }
- else{
- TSK_DEBUG_ERROR("Null SigComp state handler.");
- }
-
- return self;
+ tcomp_statehandler_t *statehandler = self;
+ if(statehandler) {
+ /* Initialize safeobject */
+ tsk_safeobj_init(statehandler);
+ }
+ else {
+ TSK_DEBUG_ERROR("Null SigComp state handler.");
+ }
+
+ return self;
}
static void* tcomp_statehandler_dtor(tsk_object_t *self)
{
- tcomp_statehandler_t *statehandler = self;
- if(statehandler){
- /* Deinitialize safeobject */
- tsk_safeobj_deinit(statehandler);
+ tcomp_statehandler_t *statehandler = self;
+ if(statehandler) {
+ /* Deinitialize safeobject */
+ tsk_safeobj_deinit(statehandler);
- TSK_OBJECT_SAFE_FREE(statehandler->sigcomp_parameters);
+ TSK_OBJECT_SAFE_FREE(statehandler->sigcomp_parameters);
- TSK_OBJECT_SAFE_FREE(statehandler->dictionaries);
- TSK_OBJECT_SAFE_FREE(statehandler->compartments);
- }
- else{
- TSK_DEBUG_ERROR("Null SigComp state handler.");
- }
+ TSK_OBJECT_SAFE_FREE(statehandler->dictionaries);
+ TSK_OBJECT_SAFE_FREE(statehandler->compartments);
+ }
+ else {
+ TSK_DEBUG_ERROR("Null SigComp state handler.");
+ }
- return self;
+ return self;
}
-static const tsk_object_def_t tsk_statehandler_def_s =
-{
- sizeof(tcomp_statehandler_t),
- tcomp_statehandler_ctor,
- tcomp_statehandler_dtor,
- tsk_null
+static const tsk_object_def_t tsk_statehandler_def_s = {
+ sizeof(tcomp_statehandler_t),
+ tcomp_statehandler_ctor,
+ tcomp_statehandler_dtor,
+ tsk_null
};
const tsk_object_def_t *tcomp_statehandler_def_t = &tsk_statehandler_def_s;
OpenPOWER on IntegriCloud