📄 sessctl.c
字号:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <osipparser2/osip_parser.h>
#include "nsrsbc.h"
#include "sessctl.h"
/* initialize sessctl table */
/* Find element based on call id
* Return:
* -1 not found
* index number found
*/
int sessctl_find(const struct sip_sess_ctl_t sessctl_queue[], char *cid, int num) {
int i, index;
index = -1;
if (SESSCTL_DEBUG) printf("Begin sessctl_find() call id = %s\n", cid);
for (i = 0; i < num; i++) {
if (sessctl_queue[i].active) {
if ((!strcmp(sessctl_queue[i].cid_new, cid)) || (!strcmp(sessctl_queue[i].cid_old, cid))) {
index = i;
break;
}
}
}
return index;
}
/* New Session Information
* Return
* 0 success
* -1 failed
*/
int sessctl_new(struct sip_sess_ctl_t sessctl_queue[], char *old_cid, char *new_cid,
char *from, char *port, int num) {
int i;
for (i = 0; i < num; i++)
if (!(sessctl_queue[i].active)) break;
/* there is no space in queue */
if (i >= num) {
if (SESSCTL_DEBUG) printf("There is no space in queue");
return -1;
}
sessctl_queue[i].active = 1;
if (old_cid) {
strcpy(sessctl_queue[i].cid_old, old_cid);
} else {
sessctl_queue[i].cid_old[0]='\0';
}
if (new_cid) {
strcpy(sessctl_queue[i].cid_new, new_cid);
} else {
sessctl_queue[i].cid_new[0]='\0';
}
if (from) {
strcpy(sessctl_queue[i].from_host, from);
} else {
sessctl_queue[i].from_host[0] = '\0';
}
if (port) {
strcpy(sessctl_queue[i].from_port, port);
} else {
sessctl_queue[i].from_port[0]='\0';
}
return 0;
}
/* Free Session Information
* Return:
* 0 success
* -1 failed
*/
int sessctl_free(struct sip_sess_ctl_t sessctl_queue[], int idx) {
// int i;
// i = sessctl_find(sessctl_queue, cid, num);
// if (i < 0) return -1;
if((idx < 0) || (idx >= SESSNUM_SIZE))
return -1;
sessctl_queue[idx].active = 0;
memset(sessctl_queue[idx].cid_old, 0, CALLID_SIZE);
memset(sessctl_queue[idx].cid_new, 0, CALLID_SIZE);
memset(sessctl_queue[idx].from_host, 0, HOSTNAME_SIZE);
memset(sessctl_queue[idx].from_port, 0, PORT_SIZE);
return 0;
}
/* Update Session Informaiton
* Return:
* 0 success
* -1 failed
*/
int sessctl_update(struct sip_sess_ctl_t sessctl_queue[], char *old_cid, char *new_cid,
char *from, char *port, int num) {
int i = num;
if (old_cid) {
memset(sessctl_queue[i].cid_old, 0, CALLID_SIZE);
strcpy(sessctl_queue[i].cid_old, old_cid);
}
if (new_cid) {
memset(sessctl_queue[i].cid_new, 0, CALLID_SIZE);
strcpy(sessctl_queue[i].cid_new, new_cid);
}
if (from) {
memset(sessctl_queue[i].from_host, 0, HOSTNAME_SIZE);
strcpy(sessctl_queue[i].from_host, from);
}
if (port) {
memset(sessctl_queue[i].from_port, 0, PORT_SIZE);
strcpy(sessctl_queue[i].from_port, port);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -