- removed obsolete files: addrcache.[ch]
- added addrcache.h to Makefile.am
This commit is contained in:
parent
08d3eabe7e
commit
5d640092f2
@ -1,5 +1,6 @@
|
|||||||
0.8.1
|
0.8.1
|
||||||
=====
|
=====
|
||||||
|
20-Jun-2011: - removed obsolete files: addrcache.[ch]
|
||||||
19-Jun-2011: - new plugin_regex: apply an extended regular expression
|
19-Jun-2011: - new plugin_regex: apply an extended regular expression
|
||||||
to the SIP 'To' URI and rewrite the target (outgoing
|
to the SIP 'To' URI and rewrite the target (outgoing
|
||||||
calls only)
|
calls only)
|
||||||
|
|||||||
@ -84,7 +84,6 @@ siproxd_SOURCES = siproxd.c proxy.c register.c sock.c utils.c \
|
|||||||
rtpproxy_relay.c accessctl.c route_processing.c \
|
rtpproxy_relay.c accessctl.c route_processing.c \
|
||||||
security.c auth.c fwapi.c resolve.c \
|
security.c auth.c fwapi.c resolve.c \
|
||||||
dejitter.c plugins.c redirect_cache.c
|
dejitter.c plugins.c redirect_cache.c
|
||||||
# addrcache.c
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -96,7 +95,8 @@ libcustom_fw_module_a_SOURCES = custom_fw_module.c
|
|||||||
|
|
||||||
|
|
||||||
noinst_HEADERS = log.h siproxd.h digcalc.h rtpproxy.h \
|
noinst_HEADERS = log.h siproxd.h digcalc.h rtpproxy.h \
|
||||||
fwapi.h plugins.h dejitter.h addrcache.h
|
fwapi.h plugins.h dejitter.h \
|
||||||
|
redirect_cache.h
|
||||||
|
|
||||||
EXTRA_DIST = .buildno
|
EXTRA_DIST = .buildno
|
||||||
|
|
||||||
|
|||||||
230
src/addrcache.c
230
src/addrcache.c
@ -1,230 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (C) 2005 Hans Carlos Hofmann <carlos@hchs.de>
|
|
||||||
|
|
||||||
This file is part of Siproxd.
|
|
||||||
|
|
||||||
Siproxd is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Siproxd is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Siproxd; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <osipparser2/osip_parser.h>
|
|
||||||
#include "siproxd.h"
|
|
||||||
#include "log.h"
|
|
||||||
|
|
||||||
#include "addrcache.h"
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
osip_message_t *sipmsg;
|
|
||||||
int direction;
|
|
||||||
int channel;
|
|
||||||
struct sockaddr_in source;
|
|
||||||
int lastused;
|
|
||||||
} addrcache_t ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* count the request's
|
|
||||||
*/
|
|
||||||
static int tacount;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* table to remember the sources
|
|
||||||
*/
|
|
||||||
static addrcache_t cachetable[SOURCECACHE_SIZE];
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We caching the address as function of from and to header to
|
|
||||||
* find the correct path where to send the sip-responses
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* initialize internal variables
|
|
||||||
*/
|
|
||||||
int adr_cache_init(void)
|
|
||||||
{
|
|
||||||
tacount = 1 ;
|
|
||||||
memset(&cachetable, 0, sizeof(cachetable));
|
|
||||||
return STS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int my_cseq_match (osip_cseq_t * cseq1, osip_cseq_t * cseq2)
|
|
||||||
{
|
|
||||||
if (cseq1 == NULL || cseq2 == NULL) return -1;
|
|
||||||
if (cseq1->number == NULL || cseq2->number == NULL ||
|
|
||||||
cseq1->method == NULL || cseq2->method == NULL) return -1 ;
|
|
||||||
|
|
||||||
if (0 != strcmp (cseq1->number, cseq2->number)) return -1 ;
|
|
||||||
if (0 != strcmp (cseq1->method, cseq2->method)) return -1 ;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We seek for an existing entry
|
|
||||||
* if not found, we return a suggest which entry shoud be overwritten
|
|
||||||
*/
|
|
||||||
int seek_for_entry (osip_message_t *sipmsg, addrcache_t **entry_out)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
addrcache_t *entry;
|
|
||||||
addrcache_t *suggest;
|
|
||||||
|
|
||||||
|
|
||||||
for (suggest=entry=&cachetable[0],i=0;i<SOURCECACHE_SIZE;i++,entry++)
|
|
||||||
{
|
|
||||||
if (entry->sipmsg)
|
|
||||||
{
|
|
||||||
if ((0 == osip_call_id_match (sipmsg->call_id, entry->sipmsg->call_id)) &&
|
|
||||||
(0 == osip_from_tag_match (sipmsg->from,entry->sipmsg->from)) &&
|
|
||||||
(0 == my_cseq_match (sipmsg->cseq, sipmsg->cseq)) )
|
|
||||||
{
|
|
||||||
int level = 0 ;
|
|
||||||
int isequal = 1 ;
|
|
||||||
|
|
||||||
osip_via_t *via1;
|
|
||||||
osip_via_t *via2;
|
|
||||||
|
|
||||||
while ( isequal &&
|
|
||||||
(level == 0 || entry->direction == DIR_INCOMING) &&
|
|
||||||
!osip_list_eol (&(sipmsg->vias), level) &&
|
|
||||||
!osip_list_eol (&(entry->sipmsg->vias), level) &&
|
|
||||||
(via1 = (osip_via_t *) osip_list_get(&(sipmsg->vias), level)) &&
|
|
||||||
(via2 = (osip_via_t *) osip_list_get(&(entry->sipmsg->vias), level)) &&
|
|
||||||
(level < 70))
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* This must be, because of legal loop backs in case of
|
|
||||||
* calling one party behind this proxy from behind this
|
|
||||||
* proxy :-/
|
|
||||||
*/
|
|
||||||
|
|
||||||
osip_generic_param_t *branch ;
|
|
||||||
char *branch_value = "\0";
|
|
||||||
char *branch_compare = "\0";
|
|
||||||
|
|
||||||
osip_via_param_get_byname (via1, "branch", &branch);
|
|
||||||
if (branch && branch->gvalue) branch_value = branch->gvalue ;
|
|
||||||
|
|
||||||
|
|
||||||
osip_via_param_get_byname (via2, "branch", &branch);
|
|
||||||
if (branch && branch->gvalue) branch_compare = branch->gvalue ;
|
|
||||||
|
|
||||||
if (0 != strcmp(branch_value,branch_compare)) isequal = 0 ;
|
|
||||||
|
|
||||||
level ++ ;
|
|
||||||
} ;
|
|
||||||
if (isequal &&
|
|
||||||
osip_list_eol (&(sipmsg->vias), level) &&
|
|
||||||
(osip_list_eol (&(entry->sipmsg->vias), level) ||
|
|
||||||
entry->direction == DIR_OUTGOING ) )
|
|
||||||
{
|
|
||||||
*entry_out = entry ;
|
|
||||||
return STS_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (suggest->lastused > entry->lastused)
|
|
||||||
{
|
|
||||||
suggest = entry ;
|
|
||||||
} ;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
suggest = entry ;
|
|
||||||
suggest->lastused = 0 ;
|
|
||||||
} ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
*entry_out = suggest ;
|
|
||||||
return STS_FAILURE ;
|
|
||||||
}
|
|
||||||
|
|
||||||
int store_address (osip_message_t *sipmsg, int direction, int channel, const struct sockaddr_in *source)
|
|
||||||
{
|
|
||||||
int sts;
|
|
||||||
addrcache_t *entry;
|
|
||||||
|
|
||||||
sts = seek_for_entry (sipmsg,&entry) ;
|
|
||||||
|
|
||||||
if (entry->sipmsg)
|
|
||||||
{
|
|
||||||
osip_message_free (entry->sipmsg) ;
|
|
||||||
entry->sipmsg = NULL ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
if (osip_message_clone (sipmsg,&(entry->sipmsg)))
|
|
||||||
{
|
|
||||||
entry->sipmsg = NULL ;
|
|
||||||
return STS_FAILURE ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
entry->lastused = tacount ++ ;
|
|
||||||
entry->direction = direction ;
|
|
||||||
entry->channel = channel ;
|
|
||||||
memcpy(&(entry->source), source, sizeof (*source));
|
|
||||||
|
|
||||||
return STS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
int load_address (osip_message_t *sipmsg, osip_message_t ** initsipmsg,
|
|
||||||
int *direction, int *channel, struct sockaddr_in *source)
|
|
||||||
{
|
|
||||||
int sts;
|
|
||||||
addrcache_t *entry;
|
|
||||||
|
|
||||||
sts = seek_for_entry (sipmsg,&entry) ;
|
|
||||||
if (sts == STS_FAILURE)
|
|
||||||
{
|
|
||||||
return STS_FAILURE ;
|
|
||||||
} ;
|
|
||||||
|
|
||||||
*initsipmsg = entry->sipmsg ;
|
|
||||||
*direction = entry->direction ;
|
|
||||||
*channel = entry->channel ;
|
|
||||||
memcpy(source, &(entry->source), sizeof (*source));
|
|
||||||
|
|
||||||
return STS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
not yet used:
|
|
||||||
int adr_cache_kill(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
addrcache_t *entry;
|
|
||||||
|
|
||||||
for (entry=&cachetable[0],i=0;i<SOURCECACHE_SIZE;i++,entry++)
|
|
||||||
{
|
|
||||||
if (entry->sipmsg)
|
|
||||||
{
|
|
||||||
osip_message_free (entry->sipmsg) ;
|
|
||||||
entry->sipmsg = NULL ;
|
|
||||||
} ;
|
|
||||||
} ;
|
|
||||||
return STS_SUCCESS;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright (C) 2005 Hans Carlos Hofmann <carlos@hchs.de>
|
|
||||||
|
|
||||||
This file is part of Siproxd.
|
|
||||||
|
|
||||||
Siproxd is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
Siproxd is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with Siproxd; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef ADDRCACHE_H
|
|
||||||
#define ADDRCACHE_H 1
|
|
||||||
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <osipparser2/osip_parser.h>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We caching the address as function of from and to header to
|
|
||||||
* find the correct path where to send the sip-responses
|
|
||||||
*/
|
|
||||||
int adr_cache_init(void);
|
|
||||||
|
|
||||||
int store_address (osip_message_t *sipmsg, int direction, int channel, const struct sockaddr_in *source);
|
|
||||||
|
|
||||||
int load_address (osip_message_t *sipmsg, osip_message_t ** initsipmsg,
|
|
||||||
int *direction, int *channel, struct sockaddr_in *source);
|
|
||||||
|
|
||||||
/* not used: int adr_cache_kill(void);*/
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
Loading…
x
Reference in New Issue
Block a user