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. 267
      src/frame/frame_asterisk.c
  2. 57
      src/frame/frame_asterisk.h

267
src/frame/frame_asterisk.c

@ -29,10 +29,10 @@
* channel V |¨¨¨¨¨¨¨¨¨¨¨ * channel V |¨¨¨¨¨¨¨¨¨¨¨
* | agent-| | * | agent-| |
* V V V * V V V
* call Queue * call queue member
* | | * |
* V V * V
* bridge info * bridge
*¨ *¨
* Essa será a estrutura da permanecia * Essa será a estrutura da permanecia
*/ */
@ -46,7 +46,6 @@
static struct s_peer *_peer = NULL; static struct s_peer *_peer = NULL;
static struct s_queue *_queue = NULL;
static struct s_list_channel *list_channel = 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->callerid_name);
free(peer->status); free(peer->status);
free(peer->address); free(peer->address);
free(peer->time); free(peer->_time);
free_variable(peer->variable); free_variable(peer->variable);
free_channel(peer->channel); free_channel(peer->channel);
free_agent(peer->agent); free_agent(peer->agent);
@ -701,198 +700,124 @@ int free_bridge(struct s_bridge *bridge){
} }
/* end 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){ int count_queue_member_name(const char *peer_name, const char *queue_name){
if(strcasecmp_n((*Q)->queue_name, name) == 0){
return *Q;
}
Q = &(*Q)->next;
}
return NULL;
}
int count_queue(){
int len = 0; int len = 0;
struct s_queue *queue = _queue; struct s_peer *peer = get_peer(peer_name);
if(peer){
return 0;
}
while(queue){ struct s_queue_member *member;
++len; member = peer->member;
queue = queue->next; while(member){
member = member->next;
len++;
} }
return 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){ int len = 0;
struct s_queue *persist_queue = _queue; struct s_queue_member *member;
int queue_id = 0;
if(!peer){
while(persist_queue){ return 0;
if(queue_id == id) }
return persist_queue;
persist_queue = persist_queue->next; member = peer->member;
++queue_id; 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){ queue_member = peer->member;
if(strcasecmp_n((*Q)->queue_name, queue->queue_name) == 0){ while(queue_member){
*Q = queue->next; if(!strcasecmp_n(queue_member->queue_name, queue_name)){
free_queue(queue); return queue_member;
return 0;
} }
Q = &(*Q)->next;
queue_member = queue_member->next;
} }
return -1; return NULL;
} }
int free_queue(struct s_queue *queue){
/* struct s_queue_member *get_queue_member(struct s_peer *peer, const char *queue_name){
* int id;
* char *name;
* char *state;
* int count_agent;
* struct s_queue_member *member;
*/
if(!queue) {return -1;} struct s_queue_member *queue_member;
free(queue->queue_name); queue_member = peer->member;
free(queue->queue_number); while(queue_member){
free(queue->strategy); if(!strcasecmp_n(queue_member->queue_name, queue_name)){
return queue_member;
}
queue_member = queue_member->next;
}
free(queue); return NULL;
return 0;
} }
/* 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 **QM = &peer->member;
struct s_queue_member *member; while(*QM){
struct s_queue *queue;
queue = get_queue(queue_name);
if( !queue ) {return 0;}
member = queue->member; QM = &(*QM)->next;
while(member){
member = member->next;
len++;
} }
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; int insert_queue_member(struct s_peer *peer, struct s_queue_member *member){
while(queue_member){
if(id_queue_member == id)
return queue_member;
queue_member = queue_member->next; if(!peer){
++id_queue_member; return -1;;
} }
return NULL; struct s_queue_member **QM = &peer->member;
}
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;
while(*QM){ while(*QM){
if(strcasecmp_n((*QM)->ramal, member->ramal) == 0){
return -1;
}
QM = &(*QM)->next; QM = &(*QM)->next;
} }
@ -902,44 +827,35 @@ int insert_queue_member(const char *queue_name, struct s_queue_member *member){
return 0; 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){ int remove_queue_member_name(const char *peer_name, const char *queue_name){
struct s_queue *queue = get_queue(queue_name);
if(!queue) {return -1;}
struct s_queue_member *current = queue->member; struct s_peer *peer = get_peer(peer_name);
while(current){ if(!peer){
queue->member = current->next; return -1;
free_queue_member(current);
current = queue->member;
} }
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){ while(*QM){
if(strcasecmp_n((*QM)->ramal, member_name) == 0){ if(strcasecmp_n((*QM)->queue_name, queue_name) == 0){
qm = (*QM)->next; qm = (*QM)->next;
free_queue_member(*QM); free_queue_member(*QM);
*QM = 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){ int free_queue_member(struct s_queue_member *member){
/* /*
char *queue; char *queue;
char *member_name; int membership;
char *interface;
char *state_interface;
char *membership;
int Penalty int Penalty
int Calls_Taken; int Calls_Taken;
int last_Call; int last_Call;
@ -973,9 +884,7 @@ int free_queue_member(struct s_queue_member *member){
if(!member) { return -1; } if(!member) { return -1; }
free(member->ramal); free(member->queue_name);
free(member->interface);
free(member->membership);
free(member); free(member);

57
src/frame/frame_asterisk.h

@ -25,10 +25,10 @@
* channel V |¨¨¨¨¨¨¨¨¨¨¨ * channel V |¨¨¨¨¨¨¨¨¨¨¨
* | agent-| | * | agent-| |
* V V V * V V V
* call Queue * call queue member
* | | * |
* V V * V
* bridge info * bridge
* *
* Essa será a estrutura da permanecia * Essa será a estrutura da permanecia
*/ */
@ -61,11 +61,8 @@ struct s_agent {
}; };
struct s_queue_member { struct s_queue_member {
unsigned long long id; unsigned long long id;
char *ramal; char *queue_name;
char *interface;
char *membership;
unsigned int matricula;
int dynamic; int dynamic;
int calls_taken; int calls_taken;
int last_call; 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 { struct s_peer {
char *callerid_number; char *callerid_number;
@ -103,13 +86,15 @@ struct s_peer {
char *exten_statustext; char *exten_statustext;
char *address; char *address;
int trunk; int trunk;
char *time; char *_time;
struct s_channel *channel; struct s_channel *channel;
struct s_variable *variable; struct s_variable *variable;
struct s_agent *agent; // trunk não pode agent struct s_agent *agent; // trunk não pode agent
struct s_queue_member *member;
struct s_peer *next; struct s_peer *next;
}; };
struct s_transfer { struct s_transfer {
char *channel_transferred; char *channel_transferred;
char *peer_receive_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 remove_bridge_uniqueid(const char *peer, const char *uniqueid, const char *bridge_uniqueid);
int free_bridge(struct s_bridge *bridge); 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 */ /* queue_member */
struct s_queue_member *create_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_name(const char *peer_name, const char *queue_name);
int count_queue_member(const char *queue_name); int count_queue_member(struct s_peer *peer, 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_name(const char *peer_name, const char *queue_name);
struct s_queue_member *get_queue_member(const char *queue_name, const char *member_name); struct s_queue_member *get_queue_member(struct s_peer *peer, const char *queue_name);
int remove_queue_member_all(const char *queue_name); int insert_queue_member_name(const char *peer_name, struct s_queue_member *member);
int remove_queue_member(const char *queue_name, const char *member_name); 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); int free_queue_member(struct s_queue_member *member);

Loading…
Cancel
Save