123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- #include "callroute_nodelist.h"
- #include "strutil.h"
- #include <string.h>
- #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);
- str_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;
- }
|