#include "callroute_nodelist.h" #include "strutil.h" #include #ifndef SAFE_FREE #define SAFE_FREE(p)\ do{\ if (p){\ free(p);\ p = NULL;\ }\ }while(0) #endif node_list_head_t* create_node_list_head(const char* pcallernum) { node_list_head_t* pnode = NULL; if (NULL != pcallernum){ pnode = (node_list_head_t*)malloc(sizeof(node_list_head_t)); if (NULL != pnode){ size_t ulen = strlen(pcallernum); char* pnumber = (char*)malloc(ulen+1); memset(pnumber, 0, ulen+1); memcpy(pnumber, pcallernum, ulen); pnode->pcallernum = pnumber; pnode->nodecount = 0; pnode->pnext = NULL; } } return pnode; } int add_node_to_list(node_list_head_t* plist, const char* newcallernum, const char* pcallurl, const char* pstrassistip, const char* pstrport) { int ret = -1; if (NULL == plist){ return ret; } if (NULL != pcallurl && NULL != pstrassistip && NULL != pstrport){ callurl_node_t* plast = plist->pnext; callurl_node_t* pnode = (callurl_node_t*)malloc(sizeof(callurl_node_t)); size_t ulen = strlen(pcallurl); char* psipurl = (char*)malloc(ulen+1); char* pstrnewcallernum = NULL; char* pstrip = NULL; int uport = atoi(pstrport); memset(psipurl, 0, ulen+1); fifter_string(psipurl, ulen+1, pcallurl, '\''); ulen = strlen(pstrassistip); pstrip = (char*)malloc(ulen+1); memset(pstrip, 0, ulen+1); memcpy(pstrip, pstrassistip, ulen); ulen = strlen(newcallernum); pstrnewcallernum = (char*)malloc(ulen+1); memset(pstrnewcallernum, 0, ulen+1); memcpy(pstrnewcallernum, newcallernum, ulen); pnode->strcallurl = psipurl; pnode->strassistip = pstrip; pnode->strnewcallernum = pstrnewcallernum; pnode->uassistport = (unsigned int)uport; pnode->bused = false; pnode->pnext = NULL; if (NULL != plast){ while(plast && NULL != plast->pnext){ plast = plast->pnext; } plast->pnext = pnode; plist->nodecount++; } else{ *(&plist->pnext) = pnode; plist->nodecount++; } ret = 0; } return ret; } callurl_node_t* get_no_used_node(node_list_head_t* plist){ callurl_node_t *phead = NULL; callurl_node_t *pnode = NULL; if (NULL != plist){ phead = plist->pnext; while(phead){ pnode = phead; if (pnode->bused == false){ return pnode; } phead = phead->pnext; } } return NULL; } int free_node_list(node_list_head_t* plist) { callurl_node_t *phead = NULL; callurl_node_t *pnode = NULL; if (NULL != plist){ free(plist->pcallernum); plist->pcallernum = NULL; phead = plist->pnext; while(phead){ pnode = phead; phead = phead->pnext; free_callurl_node(pnode); } SAFE_FREE(plist); } return 0; } int free_callurl_node(callurl_node_t* pnode) { int ret = -1; if (NULL == pnode){ return ret; } SAFE_FREE(pnode->strnewcallernum); SAFE_FREE(pnode->strassistip); SAFE_FREE(pnode->strcallurl); free(pnode); pnode = NULL; return ret; }