From d10c27909fad1547bb6984124b0449ec6d241e8f Mon Sep 17 00:00:00 2001 From: Rodgger Date: Thu, 27 Oct 2022 08:06:24 -0400 Subject: [PATCH] =?UTF-8?q?Mudando=20a=20forma=20da=20camada=20de=20persis?= =?UTF-8?q?t=C3=AAncia.=20Apenas=20ter=C3=A1=20o=20peer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frame/frame_asterisk.c | 267 ++++++++++++------------------------- src/frame/frame_asterisk.h | 57 +++----- 2 files changed, 105 insertions(+), 219 deletions(-) diff --git a/src/frame/frame_asterisk.c b/src/frame/frame_asterisk.c index e77f710..6932076 100644 --- a/src/frame/frame_asterisk.c +++ b/src/frame/frame_asterisk.c @@ -29,10 +29,10 @@ * channel V |¨¨¨¨¨¨¨¨¨¨¨ * | agent-| | * V V V - * call Queue - * | | - * V V - * bridge info + * call queue member + * | + * V + * bridge *¨ * Essa será a estrutura da permanecia */ @@ -46,7 +46,6 @@ static struct s_peer *_peer = NULL; -static struct s_queue *_queue = NULL; static struct s_list_channel *list_channel = NULL; @@ -234,7 +233,7 @@ int free_peer(struct s_peer *peer){ free(peer->callerid_name); free(peer->status); free(peer->address); - free(peer->time); + free(peer->_time); free_variable(peer->variable); free_channel(peer->channel); free_agent(peer->agent); @@ -701,198 +700,124 @@ int free_bridge(struct s_bridge *bridge){ } /* end bridge */ -/* - * queue - */ -struct s_queue* create_queue(){ - struct s_queue *queue; - queue = (struct s_queue *) calloc(1, sizeof(struct s_queue)); - - return queue; -} - -int insert_queue(struct s_queue *queue){ - struct s_queue **Q = &_queue; - - while(*Q){ - if(strcasecmp_n((*Q)->queue_name, queue->queue_name) == 0){ - return -1; - } - - Q = &(*Q)->next; - } - *Q = queue; +/* queue member */ +struct s_queue_member *create_queue_member(){ + struct s_queue_member *member; + member = (struct s_queue_member *) calloc(1, sizeof(struct s_queue_member)); - return 0; + return member; } -struct s_queue *get_queue(const char *name){ - struct s_queue **Q = &_queue; - while(*Q){ - if(strcasecmp_n((*Q)->queue_name, name) == 0){ - return *Q; - } - Q = &(*Q)->next; - } - - return NULL; -} - -int count_queue(){ +int count_queue_member_name(const char *peer_name, const char *queue_name){ int len = 0; - struct s_queue *queue = _queue; + struct s_peer *peer = get_peer(peer_name); + if(peer){ + return 0; + } - while(queue){ - ++len; - queue = queue->next; + struct s_queue_member *member; + member = peer->member; + while(member){ + member = member->next; + len++; } return len; } -int queue_empty(){ - if(!_queue){ - return 1; - } - return 0; -} +int count_queue_member(struct s_peer *peer, const char *queue_name){ -struct s_queue *get_queue_id(int id){ - struct s_queue *persist_queue = _queue; - int queue_id = 0; - - while(persist_queue){ - if(queue_id == id) - return persist_queue; + int len = 0; + struct s_queue_member *member; + + if(!peer){ + return 0; + } - persist_queue = persist_queue->next; - ++queue_id; + member = peer->member; + while(member){ + member = member->next; + len++; } - return NULL; + return len; } -int remove_queue_all(){ - - struct s_queue *current = _queue; - - if(!_queue) - return 0; - while(current){ - _queue = current->next; - remove_queue_member_all(current->queue_name); - free_queue(current); - current = _queue; - } - _queue = NULL; - - return 0; -} +struct s_queue_member *get_queue_member_name(const char *peer_name, const char *queue_name){ -int remove_queue(struct s_queue *queue){ + struct s_queue_member *queue_member; - struct s_queue **Q = &_queue; + struct s_peer *peer = get_peer(peer_name); + if(!peer) return NULL; - while(*Q){ - if(strcasecmp_n((*Q)->queue_name, queue->queue_name) == 0){ - *Q = queue->next; - free_queue(queue); - return 0; + queue_member = peer->member; + while(queue_member){ + if(!strcasecmp_n(queue_member->queue_name, queue_name)){ + return queue_member; } - Q = &(*Q)->next; + + queue_member = queue_member->next; } - return -1; + return NULL; } -int free_queue(struct s_queue *queue){ - /* - * int id; - * char *name; - * char *state; - * int count_agent; - * struct s_queue_member *member; - */ +struct s_queue_member *get_queue_member(struct s_peer *peer, const char *queue_name){ - if(!queue) {return -1;} + struct s_queue_member *queue_member; - free(queue->queue_name); - free(queue->queue_number); - free(queue->strategy); + queue_member = peer->member; + while(queue_member){ + if(!strcasecmp_n(queue_member->queue_name, queue_name)){ + return queue_member; + } + queue_member = queue_member->next; + } - free(queue); - - return 0; + return NULL; } -/* end queue */ -/* queue member */ -struct s_queue_member *create_queue_member(){ - struct s_queue_member *member; - member = (struct s_queue_member *) calloc(1, sizeof(struct s_queue_member)); - return member; -} +int insert_queue_member_name(const char *peer_name, struct s_queue_member *member){ + struct s_peer *peer = get_peer(peer_name); + if(!peer){ + return -1; + } -int count_queue_member(const char *queue_name){ - int len = 0; - struct s_queue_member *member; - struct s_queue *queue; - queue = get_queue(queue_name); - if( !queue ) {return 0;} + struct s_queue_member **QM = &peer->member; + while(*QM){ - member = queue->member; - while(member){ - member = member->next; - len++; + QM = &(*QM)->next; } - return len; -} + *QM = member; -struct s_queue_member *get_queue_member_id(const char *queue_name, size_t id){ + return 0; +} - struct s_queue_member *queue_member; - struct s_queue *queue; - int id_queue_member = 0; - queue = get_queue(queue_name); - if(!queue) return NULL; - queue_member = queue->member; - while(queue_member){ - if(id_queue_member == id) - return queue_member; +int insert_queue_member(struct s_peer *peer, struct s_queue_member *member){ - queue_member = queue_member->next; - ++id_queue_member; + if(!peer){ + return -1;; } - return NULL; -} - -int insert_queue_member(const char *queue_name, struct s_queue_member *member){ - struct s_queue *queue = get_queue(queue_name); - if(!queue) { return -1; } - - struct s_queue_member **QM = &queue->member; + struct s_queue_member **QM = &peer->member; while(*QM){ - if(strcasecmp_n((*QM)->ramal, member->ramal) == 0){ - return -1; - } QM = &(*QM)->next; } @@ -902,44 +827,35 @@ int insert_queue_member(const char *queue_name, struct s_queue_member *member){ return 0; } -struct s_queue_member *get_queue_member(const char *queue_name, const char *member_name){ - struct s_queue *queue = get_queue(queue_name); - if(!queue) { return NULL; } - - struct s_queue_member **QM = &queue->member; - while(*QM){ - if(strcasecmp_n((*QM)->ramal, member_name) == 0){ - return *QM; - } - } - return NULL; -} -int remove_queue_member_all(const char *queue_name){ - struct s_queue *queue = get_queue(queue_name); - if(!queue) {return -1;} +int remove_queue_member_name(const char *peer_name, const char *queue_name){ - struct s_queue_member *current = queue->member; - while(current){ - queue->member = current->next; - free_queue_member(current); - current = queue->member; + struct s_peer *peer = get_peer(peer_name); + if(!peer){ + return -1; } - queue->member = NULL; + struct s_queue_member *qm, **QM = &peer->member; + while(*QM){ + if(strcasecmp_n((*QM)->queue_name, queue_name) == 0){ + qm = (*QM)->next; + free_queue_member(*QM); + *QM = qm; + return 0; + } + } - return 1; + return -1; } -int remove_queue_member(const char *queue_name, const char *member_name){ - struct s_queue *queue = get_queue(queue_name); - if(!queue) {return -1;} - struct s_queue_member *qm, **QM = &queue->member; + +int remove_queue_member(struct s_peer *peer, const char *queue_name){ + struct s_queue_member *qm, **QM = &peer->member; while(*QM){ - if(strcasecmp_n((*QM)->ramal, member_name) == 0){ + if(strcasecmp_n((*QM)->queue_name, queue_name) == 0){ qm = (*QM)->next; free_queue_member(*QM); *QM = qm; @@ -951,16 +867,11 @@ int remove_queue_member(const char *queue_name, const char *member_name){ } - - int free_queue_member(struct s_queue_member *member){ /* char *queue; - char *member_name; - char *interface; - char *state_interface; - char *membership; + int membership; int Penalty int Calls_Taken; int last_Call; @@ -973,9 +884,7 @@ int free_queue_member(struct s_queue_member *member){ if(!member) { return -1; } - free(member->ramal); - free(member->interface); - free(member->membership); + free(member->queue_name); free(member); diff --git a/src/frame/frame_asterisk.h b/src/frame/frame_asterisk.h index 9d436c1..23d9d7a 100644 --- a/src/frame/frame_asterisk.h +++ b/src/frame/frame_asterisk.h @@ -25,10 +25,10 @@ * channel V |¨¨¨¨¨¨¨¨¨¨¨ * | agent-| | * V V V - * call Queue - * | | - * V V - * bridge info + * call queue member + * | + * V + * bridge * * Essa será a estrutura da permanecia */ @@ -61,11 +61,8 @@ struct s_agent { }; struct s_queue_member { - unsigned long long id; - char *ramal; - char *interface; - char *membership; - unsigned int matricula; + unsigned long long id; + char *queue_name; int dynamic; int calls_taken; int last_call; @@ -78,20 +75,6 @@ struct s_queue_member { }; -struct s_queue { - unsigned long long id; - char *queue_name; - char *queue_number; - char *strategy; - unsigned int hold_time; - unsigned int talk_time; - unsigned int calls_completed; - unsigned int calls_abandoned; - unsigned int calls_limit; - unsigned int calls_waiting; - struct s_queue_member *member; /* peer sem ou com agent */ - struct s_queue *next; -}; struct s_peer { char *callerid_number; @@ -103,13 +86,15 @@ struct s_peer { char *exten_statustext; char *address; int trunk; - char *time; + char *_time; struct s_channel *channel; struct s_variable *variable; struct s_agent *agent; // trunk não pode agent + struct s_queue_member *member; struct s_peer *next; }; + struct s_transfer { char *channel_transferred; char *peer_receive_transferred; @@ -236,25 +221,17 @@ struct s_bridge *get_bridge(const char *peer, const char *uniqueid, const char * int remove_bridge_uniqueid(const char *peer, const char *uniqueid, const char *bridge_uniqueid); int free_bridge(struct s_bridge *bridge); -/* queue */ -struct s_queue* create_queue(); -int insert_queue(struct s_queue *queue); -struct s_queue *get_queue(const char *name); -int count_queue(); -int queue_empty(); -struct s_queue *get_queue_id(int id); -int remove_queue(struct s_queue *queue); -int remove_queue_all(); -int free_queue(struct s_queue *queue); /* queue_member */ struct s_queue_member *create_queue_member(); -int insert_queue_member(const char *queue_name, struct s_queue_member *member); -int count_queue_member(const char *queue_name); -struct s_queue_member *get_queue_member_id(const char *queue_name, size_t id); -struct s_queue_member *get_queue_member(const char *queue_name, const char *member_name); -int remove_queue_member_all(const char *queue_name); -int remove_queue_member(const char *queue_name, const char *member_name); +int count_queue_member_name(const char *peer_name, const char *queue_name); +int count_queue_member(struct s_peer *peer, const char *queue_name); +struct s_queue_member *get_queue_member_name(const char *peer_name, const char *queue_name); +struct s_queue_member *get_queue_member(struct s_peer *peer, const char *queue_name); +int insert_queue_member_name(const char *peer_name, struct s_queue_member *member); +int insert_queue_member(struct s_peer *peer, struct s_queue_member *member); +int remove_queue_member_name(const char *peer_name, const char *queue_name); +int remove_queue_member(struct s_peer *peer, const char *queue_name); int free_queue_member(struct s_queue_member *member);