Browse Source

Mudando a forma da camada de persistência. Apenas terá o peer

pull/9/head
Rodgger 2 years ago
parent
commit
d10c27909f
  1. 265
      src/frame/frame_asterisk.c
  2. 55
      src/frame/frame_asterisk.h

265
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;
int len = 0;
struct s_queue_member *member;
while(persist_queue){
if(queue_id == id)
return persist_queue;
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;
*/
if(!queue) {return -1;}
struct s_queue_member *get_queue_member(struct s_peer *peer, const char *queue_name){
free(queue->queue_name);
free(queue->queue_number);
free(queue->strategy);
struct s_queue_member *queue_member;
queue_member = peer->member;
while(queue_member){
if(!strcasecmp_n(queue_member->queue_name, queue_name)){
return queue_member;
}
free(queue);
queue_member = queue_member->next;
}
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);

55
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
*/
@ -62,10 +62,7 @@ struct s_agent {
struct s_queue_member {
unsigned long long id;
char *ramal;
char *interface;
char *membership;
unsigned int matricula;
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);

Loading…
Cancel
Save