Compare commits

...

7 Commits

Author SHA1 Message Date
Abdelkader Boudih dfaf95aee5
Merge c9ae2b084f into 3b58ebc5f3 2025-01-21 00:17:28 +00:00
junction1153b 3b58ebc5f3
[mod_sofia] Update Polycom UA to recognize new Poly phones
We observed that the new Poly phones (formerly known as Polycom) were not getting sent a SIP UPDATE in certain circumstances (example: retrieving a parked call, and therefore, Caller ID would not show the parked caller). I renamed Polycom to Poly which will catch all Poly AND Polycom UA's. I also added Acrobits, and Ringotel to extend such functionality to those UA's. There were also other minor compatibility issues with the new Poly phones which have been resolved with tweaking the UA recognition on the code.

Co-authored-by: Joseph <junction1153@gmail.com>
2025-01-21 00:57:25 +03:00
Abdelkader Boudih c9ae2b084f
Merge branch 'master' into remove_redis 2025-01-15 14:16:45 +01:00
Abdelkader Boudih 609c1c691f
Merge branch 'master' into remove_redis 2025-01-14 12:12:21 +01:00
Abdelkader Boudih 1c11193ca8
Merge branch 'master' into remove_redis 2025-01-13 16:00:15 +01:00
Abdelkader Boudih a7bd8172c2
Merge branch 'master' into remove_redis 2025-01-11 10:27:38 +01:00
Abdelkader Boudih 3f48427382
mod_redis: remove deprecated module 2025-01-10 23:39:23 +01:00
20 changed files with 13 additions and 2096 deletions

View File

@ -393,8 +393,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sms", "src\mod\applicat
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "xmlrpc-c", "xmlrpc-c", "{9DE35039-A8F6-4FBF-B1B6-EB527F802411}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "xmlrpc-c", "xmlrpc-c", "{9DE35039-A8F6-4FBF-B1B6-EB527F802411}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_redis", "src\mod\applications\mod_redis\mod_redis.2017.vcxproj", "{886B5E9D-F2C2-4AF2-98C8-EF98C4C770E6}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg", "libs\win32\libjpeg\libjpeg.2017.vcxproj", "{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libjpeg", "libs\win32\libjpeg\libjpeg.2017.vcxproj", "{019DBD2A-273D-4BA4-BF86-B5EFE2ED76B1}"
EndProject EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "abyss", "libs\win32\xmlrpc-c\abyss.2017.vcxproj", "{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "abyss", "libs\win32\xmlrpc-c\abyss.2017.vcxproj", "{D2396DD7-7D38-473A-ABB7-6F96D65AE1B9}"

View File

@ -1521,10 +1521,6 @@ Files: src/mod/applications/mod_fsk/fsk.[ch]
Copyright: 2005 Robert Krten Copyright: 2005 Robert Krten
License: BSD-2-clause License: BSD-2-clause
Files: src/mod/applications/mod_redis/credis.[ch]
Copyright: 2009-2010, Jonas Romfelt <jonas at romfelt dot se>
License: BSD-3-clause
Files: src/mod/applications/mod_*vmd/mod_vmd.c Files: src/mod/applications/mod_*vmd/mod_vmd.c
src/mod/applications/mod_avmd/mod_avmd.c src/mod/applications/mod_avmd/mod_avmd.c
Copyright: 2008-2010, Eric des Courtis <eric.des.courtis@benbria.com> Copyright: 2008-2010, Eric des Courtis <eric.des.courtis@benbria.com>

View File

@ -31,7 +31,6 @@ applications/mod_httapi
#applications/mod_nibblebill #applications/mod_nibblebill
#applications/mod_osp #applications/mod_osp
#applications/mod_prefix #applications/mod_prefix
#applications/mod_redis
applications/mod_signalwire applications/mod_signalwire
applications/mod_sms applications/mod_sms
#applications/mod_snapshot #applications/mod_snapshot

View File

@ -31,7 +31,6 @@ applications/mod_mongo
applications/mod_nibblebill applications/mod_nibblebill
#applications/mod_osp #applications/mod_osp
applications/mod_prefix applications/mod_prefix
applications/mod_redis
applications/mod_signalwire applications/mod_signalwire
applications/mod_sms applications/mod_sms
applications/mod_snapshot applications/mod_snapshot

View File

@ -1,7 +0,0 @@
<configuration name="redis.conf" description="mod_redis Configuration">
<settings>
<param name="host" value="localhost"/>
<param name="port" value="6379"/>
<param name="timeout" value="10000"/>
</settings>
</configuration>

View File

@ -2121,7 +2121,6 @@ AC_CONFIG_FILES([Makefile
src/mod/applications/mod_osp/Makefile src/mod/applications/mod_osp/Makefile
src/mod/applications/mod_prefix/Makefile src/mod/applications/mod_prefix/Makefile
src/mod/applications/mod_random/Makefile src/mod/applications/mod_random/Makefile
src/mod/applications/mod_redis/Makefile
src/mod/applications/mod_skel/Makefile src/mod/applications/mod_skel/Makefile
src/mod/applications/mod_signalwire/Makefile src/mod/applications/mod_signalwire/Makefile
src/mod/applications/mod_sms/Makefile src/mod/applications/mod_sms/Makefile

View File

@ -164,11 +164,6 @@ Description: Entropy extraction
This module extracts entropy from FreeSWITCH and feeds it into This module extracts entropy from FreeSWITCH and feeds it into
/dev/random. /dev/random.
Module: applications/mod_redis
Description: Redis limit backend
This module provides a mechanism to use Redis as a backend data
store.
Module: applications/mod_skel Module: applications/mod_skel
Description: Adds mod_skel Description: Adds mod_skel
Adds mod_skel. Adds mod_skel.

4
debian/copyright vendored
View File

@ -1521,10 +1521,6 @@ Files: src/mod/applications/mod_fsk/fsk.[ch]
Copyright: 2005 Robert Krten Copyright: 2005 Robert Krten
License: BSD-2-clause License: BSD-2-clause
Files: src/mod/applications/mod_redis/credis.[ch]
Copyright: 2009-2010, Jonas Romfelt <jonas at romfelt dot se>
License: BSD-3-clause
Files: src/mod/applications/mod_*vmd/mod_vmd.c Files: src/mod/applications/mod_*vmd/mod_vmd.c
src/mod/applications/mod_avmd/mod_avmd.c src/mod/applications/mod_avmd/mod_avmd.c
Copyright: 2008-2010, Eric des Courtis <eric.des.courtis@benbria.com> Copyright: 2008-2010, Eric des Courtis <eric.des.courtis@benbria.com>

View File

@ -450,15 +450,6 @@ Provides FreeSWITCH mod_nibblebill, provides a credit/debit module for
FreeSWITCH to allow real-time debiting of credit or cash from a database FreeSWITCH to allow real-time debiting of credit or cash from a database
while calls are in progress. while calls are in progress.
%package application-redis
Summary: FreeSWITCH mod_redis
Group: System/Libraries
Requires: %{name} = %{version}-%{release}
%description application-redis
Provides FreeSWITCH mod_redis, access to the redis key value pair db system from
FreeSWITCH
%package application-signalwire %package application-signalwire
Summary: FreeSWITCH mod_signalwire Summary: FreeSWITCH mod_signalwire
Group: System/Libraries Group: System/Libraries
@ -1210,8 +1201,8 @@ APPLICATION_MODULES_DE+="applications/mod_esl"
APPLICATION_MODULES_FR="applications/mod_fifo applications/mod_fsk applications/mod_fsv applications/mod_hash \ APPLICATION_MODULES_FR="applications/mod_fifo applications/mod_fsk applications/mod_fsv applications/mod_hash \
applications/mod_httapi applications/mod_http_cache applications/mod_lcr applications/mod_limit \ applications/mod_httapi applications/mod_http_cache applications/mod_lcr applications/mod_limit \
applications/mod_memcache applications/mod_mongo applications/mod_nibblebill \ applications/mod_memcache applications/mod_mongo applications/mod_nibblebill"
applications/mod_redis "
APPLICATION_MODULES_SZ="applications/mod_signalwire applications/mod_sms applications/mod_snapshot \ APPLICATION_MODULES_SZ="applications/mod_signalwire applications/mod_sms applications/mod_snapshot \
applications/mod_spandsp applications/mod_spy \ applications/mod_spandsp applications/mod_spy \
@ -1856,9 +1847,6 @@ fi
%files application-nibblebill %files application-nibblebill
%{MODINSTDIR}/mod_nibblebill.so* %{MODINSTDIR}/mod_nibblebill.so*
%files application-redis
%{MODINSTDIR}/mod_redis.so*
%files application-signalwire %files application-signalwire
%{MODINSTDIR}/mod_signalwire.so* %{MODINSTDIR}/mod_signalwire.so*

View File

@ -1,8 +0,0 @@
include $(top_srcdir)/build/modmake.rulesam
MODNAME=mod_redis
mod_LTLIBRARIES = mod_redis.la
mod_redis_la_SOURCES = mod_redis.c credis.c
mod_redis_la_CFLAGS = $(AM_CFLAGS) -D_GNU_SOURCE
mod_redis_la_LIBADD = $(switch_builddir)/libfreeswitch.la
mod_redis_la_LDFLAGS = -avoid-version -module -no-undefined -shared

View File

@ -1,7 +0,0 @@
<configuration name="redis.conf" description="mod_redis Configuration">
<settings>
<param name="host" value="localhost"/>
<param name="port" value="6379"/>
<param name="timeout" value="10000"/>
</settings>
</configuration>

File diff suppressed because it is too large Load Diff

View File

@ -1,327 +0,0 @@
/* credis.h -- a C client library for Redis, public API.
*
* Copyright (c) 2009-2010, Jonas Romfelt <jonas at romfelt dot se>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of Redis nor the names of its contributors may be used
* to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef __CREDIS_H
#define __CREDIS_H
#ifdef __cplusplus
extern "C" {
#endif
/* Functions below should map quite nicely to Redis 1.02 command set.
* Refer to the official Redis documentation for further explanation of
* each command. See credis examples that show how functions can be used.
* Here is a brief example that connects to a Redis server and sets value
* of key `fruit' to `banana':
*
* REDIS rh = credis_connect("localhost", 6789, 2000);
* credis_set(rh, "fruit", "banana");
* credis_close(rh);
*
* In general, functions return 0 on success or a negative value on
* error. Refer to CREDIS_ERR_* codes. The return code -1 is typically
* used when for instance a key is not found.
*
* IMPORTANT! Memory buffers are allocated, used and managed by credis
* internally. Subsequent calls to credis functions _will_ destroy the
* data to which returned values reference to. If for instance the
* returned value by a call to credis_get() is to be used later in the
* program, a strdup() is highly recommended. However, each `REDIS'
* handle has its own state and manages its own memory buffer
* independently. That means that one of two handles can be destroyed
* while the other keeps its connection and data.
*
* TODO
* - Currently only support for zero-terminated strings, not for storing
* abritary binary data as bulk data. Basically an API issue since it
* is partially supported internally.
* - Support for Redis >= 1.1 protocol
*/
/* handle to a Redis server connection */
typedef struct _cr_redis* REDIS;
#define CREDIS_OK 0
#define CREDIS_ERR -90
#define CREDIS_ERR_NOMEM -91
#define CREDIS_ERR_RESOLVE -92
#define CREDIS_ERR_CONNECT -93
#define CREDIS_ERR_SEND -94
#define CREDIS_ERR_RECV -95
#define CREDIS_ERR_TIMEOUT -96
#define CREDIS_ERR_PROTOCOL -97
#define CREDIS_TYPE_NONE 1
#define CREDIS_TYPE_STRING 2
#define CREDIS_TYPE_LIST 3
#define CREDIS_TYPE_SET 4
#define CREDIS_SERVER_MASTER 1
#define CREDIS_SERVER_SLAVE 2
#define CREDIS_VERSION_STRING_SIZE 32
typedef struct _cr_info {
char redis_version[CREDIS_VERSION_STRING_SIZE];
int bgsave_in_progress;
int connected_clients;
int connected_slaves;
unsigned int used_memory;
long long changes_since_last_save;
int last_save_time;
long long total_connections_received;
long long total_commands_processed;
int uptime_in_seconds;
int uptime_in_days;
int role;
} REDIS_INFO;
/*
* Connection handling
*/
/* setting host to NULL will use "localhost". setting port to 0 will use
* default port 6379 */
REDIS credis_connect(const char *host, int port, int timeout);
void credis_close(REDIS rhnd);
void credis_quit(REDIS rhnd);
int credis_auth(REDIS rhnd, const char *password);
int credis_ping(REDIS rhnd);
/*
* Commands operating on string values
*/
int credis_set(REDIS rhnd, const char *key, const char *val);
/* returns -1 if the key doesn't exists */
int credis_get(REDIS rhnd, const char *key, char **val);
/* returns -1 if the key doesn't exists */
int credis_getset(REDIS rhnd, const char *key, const char *set_val, char **get_val);
/* returns number of values returned in vector `valv'. `keyc' is the number of
* keys stored in `keyv'. */
int credis_mget(REDIS rhnd, int keyc, const char **keyv, char ***valv);
/* returns -1 if the key already exists and hence not set */
int credis_setnx(REDIS rhnd, const char *key, const char *val);
int credis_incr(REDIS rhnd, const char *key, int *new_val);
int credis_incrby(REDIS rhnd, const char *key, int incr_val, int *new_val);
int credis_decr(REDIS rhnd, const char *key, int *new_val);
int credis_decrby(REDIS rhnd, const char *key, int decr_val, int *new_val);
/* returns -1 if the key doesn't exists and 0 if it does */
int credis_exists(REDIS rhnd, const char *key);
/* returns -1 if the key doesn't exists and 0 if it was removed */
int credis_del(REDIS rhnd, const char *key);
/* returns type, refer to CREDIS_TYPE_* defines */
int credis_type(REDIS rhnd, const char *key);
/* TODO for Redis >= 1.1
* MSET key1 value1 key2 value2 ... keyN valueN set a multiple keys to multiple values in a single atomic operation
* MSETNX key1 value1 key2 value2 ... keyN valueN set a multiple keys to multiple values in a single atomic operation if none of
* DEL key1 key2 ... keyN remove multiple keys
*/
/*
* Commands operating on key space
*/
int credis_keys(REDIS rhnd, const char *pattern, char **keyv, int len);
int credis_randomkey(REDIS rhnd, char **key);
int credis_rename(REDIS rhnd, const char *key, const char *new_key_name);
/* returns -1 if the key already exists */
int credis_renamenx(REDIS rhnd, const char *key, const char *new_key_name);
/* returns size of db */
int credis_dbsize(REDIS rhnd);
/* returns -1 if the timeout was not set; either due to key already has
an associated timeout or key does not exist */
int credis_expire(REDIS rhnd, const char *key, int secs);
/* returns time to live seconds or -1 if key does not exists or does not
* have expire set */
int credis_ttl(REDIS rhnd, const char *key);
/*
* Commands operating on lists
*/
int credis_rpush(REDIS rhnd, const char *key, const char *element);
int credis_lpush(REDIS rhnd, const char *key, const char *element);
/* returns length of list */
int credis_llen(REDIS rhnd, const char *key);
/* returns number of elements returned in vector `elementv' */
int credis_lrange(REDIS rhnd, const char *key, int start, int range, char ***elementv);
int credis_ltrim(REDIS rhnd, const char *key, int start, int end);
/* returns -1 if the key doesn't exists */
int credis_lindex(REDIS rhnd, const char *key, int index, char **element);
int credis_lset(REDIS rhnd, const char *key, int index, const char *element);
/* returns number of elements removed */
int credis_lrem(REDIS rhnd, const char *key, int count, const char *element);
/* returns -1 if the key doesn't exists */
int credis_lpop(REDIS rhnd, const char *key, char **val);
/* returns -1 if the key doesn't exists */
int credis_rpop(REDIS rhnd, const char *key, char **val);
/* TODO for Redis >= 1.1
* RPOPLPUSH srckey dstkey
*
* TODO for Redis >= 1.3.1
* BLPOP key1 key2 ... keyN timeout
* BRPOP key1 key2 ... keyN timeout
*/
/*
* Commands operating on sets
*/
/* returns -1 if the given member was already a member of the set */
int credis_sadd(REDIS rhnd, const char *key, const char *member);
/* returns -1 if the given member is not a member of the set */
int credis_srem(REDIS rhnd, const char *key, const char *member);
/* returns -1 if the key doesn't exists and 0 if it does */
int credis_sismember(REDIS rhnd, const char *key, const char *member);
/* returns -1 if the given key doesn't exists else value is returned in `member' */
int credis_spop(REDIS rhnd, const char *key, char **member);
/* returns -1 if the member doesn't exists in the source set */
int credis_smove(REDIS rhnd, const char *sourcekey, const char *destkey,
const char *member);
/* returns cardinality (number of members) or 0 if the given key doesn't exists */
int credis_scard(REDIS rhnd, const char *key);
/* returns number of members returned in vector `members'. `keyc' is the number of
* keys stored in `keyv'. */
int credis_sinter(REDIS rhnd, int keyc, const char **keyv, char ***members);
/* `keyc' is the number of keys stored in `keyv' */
int credis_sinterstore(REDIS rhnd, const char *destkey, int keyc, const char **keyv);
/* returns number of members returned in vector `members'. `keyc' is the number of
* keys stored in `keyv'. */
int credis_sunion(REDIS rhnd, int keyc, const char **keyv, char ***members);
/* `keyc' is the number of keys stored in `keyv' */
int credis_sunionstore(REDIS rhnd, const char *destkey, int keyc, const char **keyv);
/* returns number of members returned in vector `members'. `keyc' is the number of
* keys stored in `keyv'. */
int credis_sdiff(REDIS rhnd, int keyc, const char **keyv, char ***members);
/* `keyc' is the number of keys stored in `keyv' */
int credis_sdiffstore(REDIS rhnd, const char *destkey, int keyc, const char **keyv);
/* returns number of members returned in vector `members' */
int credis_smembers(REDIS rhnd, const char *key, char ***members);
/* TODO Redis >= 1.1
* SRANDMEMBER key Return a random member of the Set value at key
*/
/*
* Multiple databases handling commands
*/
int credis_select(REDIS rhnd, int index);
/* returns -1 if the key was not moved; already present at target
* or not found on current db */
int credis_move(REDIS rhnd, const char *key, int index);
int credis_flushdb(REDIS rhnd);
int credis_flushall(REDIS rhnd);
/*
* Sorting
*/
/* returns number of elements returned in vector `elementv' */
int credis_sort(REDIS rhnd, const char *query, char ***elementv);
/*
* Persistence control commands
*/
int credis_save(REDIS rhnd);
int credis_bgsave(REDIS rhnd);
/* returns UNIX time stamp of last successfull save to disk */
int credis_lastsave(REDIS rhnd);
int credis_shutdown(REDIS rhnd);
/*
* Remote server control commands
*/
int credis_info(REDIS rhnd, REDIS_INFO *info);
int credis_monitor(REDIS rhnd);
/* setting host to NULL and/or port to 0 will turn off replication */
int credis_slaveof(REDIS rhnd, const char *host, int port);
#ifdef __cplusplus
}
#endif
#endif /* __CREDIS_H */

View File

@ -1,168 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectName>mod_redis</ProjectName>
<ProjectGuid>{886B5E9D-F2C2-4AF2-98C8-EF98C4C770E6}</ProjectGuid>
<RootNamespace>mod_redis</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\..\w32\module_release.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\..\w32\module_debug.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\..\w32\module_release.props" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="..\..\..\..\w32\module_debug.props" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<CodeAnalysisRuleSet>NativeMinimumRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>false</RunCodeAnalysis>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<CodeAnalysisRuleSet>NativeMinimumRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>false</RunCodeAnalysis>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<CodeAnalysisRuleSet>NativeMinimumRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>false</RunCodeAnalysis>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<CodeAnalysisRuleSet>NativeMinimumRules.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>false</RunCodeAnalysis>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile />
<Link>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
<ClCompile>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile />
<Link>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX64</TargetMachine>
</Link>
<ClCompile>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile />
<Link>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
</Link>
<ClCompile>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4389;4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Midl>
<TargetEnvironment>X64</TargetEnvironment>
</Midl>
<ClCompile />
<Link>
<RandomizedBaseAddress>false</RandomizedBaseAddress>
<DataExecutionPrevention>
</DataExecutionPrevention>
<TargetMachine>MachineX64</TargetMachine>
</Link>
<ClCompile>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<DisableSpecificWarnings>4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<EnablePREfast>false</EnablePREfast>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="mod_redis.c" />
<ClCompile Include="credis.c">
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">4005;4389;4133;4244;4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">4005;4389;4133;4244;4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">4005;4389;4133;4244;4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<DisableSpecificWarnings Condition="'$(Configuration)|$(Platform)'=='Release|x64'">4005;4389;4133;4244;4706;4306;4996;6340;6246;6011;6387;%(DisableSpecificWarnings)</DisableSpecificWarnings>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\w32\Library\FreeSwitchCore.2017.vcxproj">
<Project>{202d7a4e-760d-4d0e-afa1-d7459ced30ff}</Project>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<ClInclude Include="credis.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -1,349 +0,0 @@
/*
* FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2005-2014, Anthony Minessale II <anthm@freeswitch.org>
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
*
* The Initial Developer of the Original Code is
* Anthony Minessale II <anthm@freeswitch.org>
* Portions created by the Initial Developer are Copyright (C)
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Kevin Morizur <kmorizur@avgs.ca>
* Mathieu Rene <mrene@avgs.ca>
*
* mod_redis.c -- Redis limit backend
*
*/
#include <switch.h>
#include "credis.h"
SWITCH_MODULE_LOAD_FUNCTION(mod_redis_load);
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_redis_shutdown);
SWITCH_MODULE_DEFINITION(mod_redis, mod_redis_load, mod_redis_shutdown, NULL);
static struct{
char *host;
int port;
int timeout;
switch_bool_t ignore_connect_fail;
} globals;
static switch_xml_config_item_t instructions[] = {
/* parameter name type reloadable pointer default value options structure */
SWITCH_CONFIG_ITEM_STRING_STRDUP("host", CONFIG_RELOAD, &globals.host, NULL, "localhost", "Hostname for redis server"),
SWITCH_CONFIG_ITEM("port", SWITCH_CONFIG_INT, CONFIG_RELOADABLE, &globals.port, (void *) 6379, NULL,NULL, NULL),
SWITCH_CONFIG_ITEM("timeout", SWITCH_CONFIG_INT, CONFIG_RELOADABLE, &globals.timeout, (void *) 10000, NULL,NULL, NULL),
SWITCH_CONFIG_ITEM("ignore_connect_fail", SWITCH_CONFIG_BOOL, CONFIG_RELOADABLE, &globals.ignore_connect_fail, SWITCH_FALSE, NULL, "true|false", "Set to true in order to continue when redis is not contactable"),
SWITCH_CONFIG_ITEM_END()
};
/* HASH STUFF */
typedef struct {
switch_hash_t *hash;
switch_mutex_t *mutex;
} limit_redis_private_t;
static switch_status_t redis_factory(REDIS *redis)
{
if (!((*redis) = credis_connect(globals.host, globals.port, globals.timeout))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't connect to redis server at %s:%d timeout:%d\n", globals.host, globals.port, globals.timeout);
return SWITCH_STATUS_FALSE;
}
return SWITCH_STATUS_SUCCESS;
}
/* \brief Enforces limit_redis restrictions
* \param session current session
* \param realm limit realm
* \param id limit id
* \param max maximum count
* \param interval interval for rate limiting
* \return SWITCH_TRUE if the access is allowed, SWITCH_FALSE if it isnt
*/
SWITCH_LIMIT_INCR(limit_incr_redis)
{
switch_channel_t *channel = switch_core_session_get_channel(session);
limit_redis_private_t *pvt = NULL;
int val,uuid_val;
char *rediskey = NULL;
char *uuid_rediskey = NULL;
uint8_t increment = 1;
switch_status_t status = SWITCH_STATUS_SUCCESS;
REDIS redis;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "mod_redis is deprecated and will be removed in FS 1.8. Check out mod_hiredis.\n");
if (redis_factory(&redis) != SWITCH_STATUS_SUCCESS) {
if ( globals.ignore_connect_fail ) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ignore_connect_fail=true, so ignoring the fact that redis was not contactabl and continuing with the call\n" );
return SWITCH_STATUS_SUCCESS;
} else {
return SWITCH_STATUS_FALSE;
}
}
/* Get the keys for redis server */
uuid_rediskey = switch_core_session_sprintf(session,"%s_%s_%s", switch_core_get_switchname(), realm, resource);
rediskey = switch_core_session_sprintf(session, "%s_%s", realm, resource);
if ((pvt = switch_channel_get_private(channel, "limit_redis"))) {
increment = !switch_core_hash_find_locked(pvt->hash, rediskey, pvt->mutex);
} else {
/* This is the first limit check on this channel, create a hashtable, set our prviate data and add a state handler */
pvt = (limit_redis_private_t *) switch_core_session_alloc(session, sizeof(limit_redis_private_t));
switch_core_hash_init(&pvt->hash);
switch_mutex_init(&pvt->mutex, SWITCH_MUTEX_NESTED, switch_core_session_get_pool(session));
switch_channel_set_private(channel, "limit_redis", pvt);
}
if (!(switch_core_hash_find_locked(pvt->hash, rediskey, pvt->mutex))) {
switch_core_hash_insert_locked(pvt->hash, rediskey, rediskey, pvt->mutex);
}
if (increment) {
if (credis_incr(redis, rediskey, &val) != 0) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Couldn't increment value corresponding to %s\n", rediskey);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
if (max > 0) {
if (val > max){
if (credis_decr(redis, rediskey, &val) != 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Couldn't decrement value corresponding to %s\n", rediskey);
switch_goto_status(SWITCH_STATUS_GENERR, end);
} else {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "Usage for %s exceeds maximum rate of %d\n",
rediskey, max);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
} else {
if (credis_incr(redis, uuid_rediskey, &uuid_val) != 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Couldn't increment value corresponding to %s\n", uuid_rediskey);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
}
} else {
if (credis_incr(redis, uuid_rediskey, &uuid_val) != 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Couldn't increment value corresponding to %s\n", uuid_rediskey);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
}
}
/*
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "Limit incr redis : rediskey : %s val : %d max : %d\n", rediskey, val, max);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "Limit incr redis : uuid_rediskey : %s uuid_val : %d max : %d\n", uuid_rediskey,uuid_val,max);
*/
end:
if (redis) {
credis_close(redis);
}
return status;
}
/* !\brief Releases usage of a limit_redis-controlled ressource */
SWITCH_LIMIT_RELEASE(limit_release_redis)
{
switch_channel_t *channel = switch_core_session_get_channel(session);
limit_redis_private_t *pvt = switch_channel_get_private(channel, "limit_redis");
int val, uuid_val;
char *rediskey = NULL;
char *uuid_rediskey = NULL;
int status = SWITCH_STATUS_SUCCESS;
REDIS redis;
if (!pvt || !pvt->hash) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "No hashtable for channel %s\n", switch_channel_get_name(channel));
return SWITCH_STATUS_SUCCESS;
}
if (redis_factory(&redis) != SWITCH_STATUS_SUCCESS) {
if ( globals.ignore_connect_fail ) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "ignore_connect_fail=true, so ignoring the fact that redis was not contactabl and continuing with the call\n" );
return SWITCH_STATUS_SUCCESS;
} else {
return SWITCH_STATUS_FALSE;
}
}
switch_mutex_lock(pvt->mutex);
/* clear for uuid */
if (realm == NULL && resource == NULL) {
switch_hash_index_t *hi = NULL;
/* Loop through the channel's hashtable which contains mapping to all the limit_redis_item_t referenced by that channel */
while ((hi = switch_core_hash_first_iter(pvt->hash, hi))) {
void *p_val = NULL;
const void *p_key;
char *p_uuid_key = NULL;
switch_ssize_t keylen;
switch_core_hash_this(hi, &p_key, &keylen, &p_val);
if (credis_decr(redis, (const char*)p_key, &val) != 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Couldn't decrement value corresponding to %s\n", (char *)p_key);
free(hi);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
p_uuid_key = switch_core_session_sprintf(session, "%s_%s", switch_core_get_switchname(), (char *)p_key);
if (credis_decr(redis,p_uuid_key,&uuid_val) != 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Couldn't decrement value corresponding to %s\n", p_uuid_key);
free(hi);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
switch_core_hash_delete(pvt->hash, (const char *) p_key);
/*
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "Limit release redis : rediskey : %s val : %d\n", (char *)p_val,val);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "Limit incr redis : uuid_rediskey : %s uuid_val : %d\n",
p_uuid_key, uuid_val);*/
}
} else {
rediskey = switch_core_session_sprintf(session, "%s_%s", realm, resource);
uuid_rediskey = switch_core_session_sprintf(session, "%s_%s_%s", switch_core_get_switchname(), realm, resource);
switch_core_hash_delete(pvt->hash, (const char *) rediskey);
if (credis_decr(redis, rediskey, &val) != 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Couldn't decrement value corresponding to %s\n", rediskey);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
if (credis_decr(redis, uuid_rediskey, &uuid_val) != 0) {
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_ERROR, "Couldn't decrement value corresponding to %s\n", uuid_rediskey);
switch_goto_status(SWITCH_STATUS_FALSE, end);
}
/*
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "Limit release redis : rediskey : %s val : %d\n", rediskey,val);
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "Limit incr redis : uuid_rediskey : %s uuid_val : %d\n", uuid_rediskey,uuid_val);
*/
}
end:
switch_mutex_unlock(pvt->mutex);
if (redis) {
credis_close(redis);
}
return status;
}
SWITCH_LIMIT_USAGE(limit_usage_redis)
{
char *redis_key;
char *str;
REDIS redis;
int usage;
if (redis_factory(&redis) != SWITCH_STATUS_SUCCESS) {
return 0;
}
redis_key = switch_mprintf("%s_%s", realm, resource);
if (credis_get(redis, redis_key, &str) != 0){
usage = 0;
} else {
usage = atoi(str);
}
if (redis) {
credis_close(redis);
}
switch_safe_free(redis_key);
return usage;
}
SWITCH_LIMIT_RESET(limit_reset_redis)
{
REDIS redis;
if (redis_factory(&redis) == SWITCH_STATUS_SUCCESS) {
char *rediskey = switch_mprintf("%s_*", switch_core_get_switchname());
int dec = 0, val = 0, keyc;
char *uuids[2000];
if ((keyc = credis_keys(redis, rediskey, uuids, switch_arraylen(uuids))) > 0) {
int i = 0;
int hostnamelen = (int)strlen(switch_core_get_switchname())+1;
for (i = 0; i < keyc && uuids[i]; i++){
const char *key = uuids[i] + hostnamelen;
char *value;
if ((int)strlen(uuids[i]) <= hostnamelen) {
continue; /* Sanity check */
}
credis_get(redis, key, &value);
dec = atoi(value);
credis_decrby(redis, key, dec, &val);
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "DECR %s by %d. value is now %d\n", key, dec, val);
}
}
switch_safe_free(rediskey);
credis_close(redis);
return SWITCH_STATUS_SUCCESS;
} else {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_WARNING, "Couldn't check/clear old redis entries\n");
return SWITCH_STATUS_FALSE;
}
}
SWITCH_LIMIT_STATUS(limit_status_redis)
{
char *ret = switch_mprintf("This function is not yet available for Redis DB");
return ret;
}
SWITCH_MODULE_LOAD_FUNCTION(mod_redis_load)
{
switch_limit_interface_t *limit_interface = NULL;
*module_interface = switch_loadable_module_create_module_interface(pool, modname);
if (switch_xml_config_parse_module_settings("redis.conf", SWITCH_FALSE, instructions) != SWITCH_STATUS_SUCCESS) {
return SWITCH_STATUS_FALSE;
}
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "mod_redis is deprecated and will be removed in FS 1.8. Check out mod_hiredis.\n");
/* If FreeSWITCH was restarted and we still have active calls, decrement them so our global count stays valid */
limit_reset_redis();
SWITCH_ADD_LIMIT(limit_interface, "redis", limit_incr_redis, limit_release_redis, limit_usage_redis, limit_reset_redis, limit_status_redis, NULL);
return SWITCH_STATUS_SUCCESS;
}
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_redis_shutdown)
{
switch_xml_config_cleanup(instructions);
return SWITCH_STATUS_SUCCESS;
}
/* For Emacs:
* Local Variables:
* mode:c
* indent-tabs-mode:t
* tab-width:4
* c-basic-offset:4
* End:
* For VIM:
* vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet:
*/

View File

@ -254,7 +254,7 @@ char *generate_pai_str(private_object_t *tech_pvt)
callee_number = switch_sanitize_number(switch_core_session_strdup(session, callee_number)); callee_number = switch_sanitize_number(switch_core_session_strdup(session, callee_number));
callee_name = switch_sanitize_number(switch_core_session_strdup(session, callee_name)); callee_name = switch_sanitize_number(switch_core_session_strdup(session, callee_name));
if (!zstr(callee_number) && (zstr(ua) || !switch_stristr("polycom", ua))) { if (!zstr(callee_number) && (zstr(ua) || !switch_stristr("poly", ua))) {
callee_number = switch_core_session_sprintf(session, "sip:%s@%s", callee_number, host); callee_number = switch_core_session_sprintf(session, "sip:%s@%s", callee_number, host);
} }
@ -2075,13 +2075,15 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
nua_info(tech_pvt->nh, SIPTAG_CONTENT_TYPE_STR("message/sipfrag"), nua_info(tech_pvt->nh, SIPTAG_CONTENT_TYPE_STR("message/sipfrag"),
TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)), SIPTAG_PAYLOAD_STR(message), TAG_END()); TAG_IF(!zstr(tech_pvt->user_via), SIPTAG_VIA_STR(tech_pvt->user_via)), SIPTAG_PAYLOAD_STR(message), TAG_END());
} else if (update_allowed && ua && (switch_channel_var_true(tech_pvt->channel, "update_ignore_ua") || } else if (update_allowed && ua && (switch_channel_var_true(tech_pvt->channel, "update_ignore_ua") ||
switch_stristr("polycom", ua) || switch_stristr("poly", ua) ||
(switch_stristr("aastra", ua) && !switch_stristr("Intelligate", ua)) || (switch_stristr("aastra", ua) && !switch_stristr("Intelligate", ua)) ||
(switch_stristr("cisco/spa50", ua) || (switch_stristr("cisco/spa50", ua) ||
switch_stristr("cisco/spa525", ua)) || switch_stristr("cisco/spa525", ua)) ||
switch_stristr("cisco/spa30", ua) || switch_stristr("cisco/spa30", ua) ||
switch_stristr("Fanvil", ua) || switch_stristr("Fanvil", ua) ||
switch_stristr("Grandstream", ua) || switch_stristr("Grandstream", ua) ||
switch_stristr("Ringotel", ua) ||
switch_stristr("Groundwire", ua) ||
switch_stristr("Yealink", ua) || switch_stristr("Yealink", ua) ||
switch_stristr("Mitel", ua) || switch_stristr("Mitel", ua) ||
switch_stristr("Panasonic", ua))) { switch_stristr("Panasonic", ua))) {
@ -2152,7 +2154,7 @@ static switch_status_t sofia_receive_message(switch_core_session_t *session, swi
SIPTAG_PAYLOAD_STR(message), SIPTAG_PAYLOAD_STR(message),
TAG_IF(!zstr(session_id_header), SIPTAG_HEADER_STR(session_id_header)), TAG_IF(!zstr(session_id_header), SIPTAG_HEADER_STR(session_id_header)),
TAG_END()); TAG_END());
} else if (ua && switch_stristr("polycom", ua)) { } else if (ua && switch_stristr("poly", ua)) {
snprintf(message, sizeof(message), "P-Asserted-Identity: \"%s\" <%s>", msg->string_arg, tech_pvt->caller_profile->destination_number); snprintf(message, sizeof(message), "P-Asserted-Identity: \"%s\" <%s>", msg->string_arg, tech_pvt->caller_profile->destination_number);
nua_update(tech_pvt->nh, nua_update(tech_pvt->nh,
NUTAG_SESSION_TIMER(tech_pvt->session_timeout), NUTAG_SESSION_TIMER(tech_pvt->session_timeout),

View File

@ -10476,7 +10476,7 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
(!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) && (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) &&
profile->server_rport_level >= 2 && sip->sip_user_agent && profile->server_rport_level >= 2 && sip->sip_user_agent &&
sip->sip_user_agent->g_string && sip->sip_user_agent->g_string &&
(!strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20))) (!strncasecmp(sip->sip_user_agent->g_string, "Poly", 4) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20)))
) { ) {
if (sip->sip_via) { if (sip->sip_via) {
const char *port = sip->sip_via->v_port; const char *port = sip->sip_via->v_port;

View File

@ -2501,7 +2501,7 @@ static char *gen_pidf(char *user_agent, char *id, char *url, char *open, char *r
{ {
char *ret = NULL; char *ret = NULL;
if (switch_stristr("polycom", user_agent)) { if (switch_stristr("poly", user_agent)) {
*ct = "application/xpidf+xml"; *ct = "application/xpidf+xml";
/* If unknown/none prpid is provided, just show the user as online. */ /* If unknown/none prpid is provided, just show the user as online. */

View File

@ -1661,7 +1661,7 @@ uint8_t sofia_reg_handle_register_token(nua_t *nua, sofia_profile_t *profile, nu
if (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) && if (!is_tcp && !is_tls && (zstr(network_ip) || !switch_check_network_list_ip(network_ip, profile->local_network)) &&
profile->server_rport_level >= 2 && sip->sip_user_agent && profile->server_rport_level >= 2 && sip->sip_user_agent &&
sip->sip_user_agent->g_string && sip->sip_user_agent->g_string &&
( !strncasecmp(sip->sip_user_agent->g_string, "Polycom", 7) || ( !strncasecmp(sip->sip_user_agent->g_string, "Poly", 4) ||
!strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) || !strncasecmp(sip->sip_user_agent->g_string, "KIRK Wireless Server", 20) ||
!strncasecmp(sip->sip_user_agent->g_string, "ADTRAN_Total_Access", 19) )) { !strncasecmp(sip->sip_user_agent->g_string, "ADTRAN_Total_Access", 19) )) {
if (sip->sip_via) { if (sip->sip_via) {

View File

@ -281,14 +281,6 @@
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups> <RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLFOLDER</RefTargetDir> <RefTargetDir>INSTALLFOLDER</RefTargetDir>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\..\src\mod\applications\mod_redis\mod_redis.2017.vcxproj">
<Name>mod_redis</Name>
<Project>{886b5e9d-f2c2-4af2-98c8-ef98c4c770e6}</Project>
<Private>True</Private>
<DoNotHarvest>True</DoNotHarvest>
<RefProjectOutputGroups>Binaries;Content;Satellites</RefProjectOutputGroups>
<RefTargetDir>INSTALLFOLDER</RefTargetDir>
</ProjectReference>
<ProjectReference Include="..\..\src\mod\applications\mod_signalwire\mod_signalwire.2017.vcxproj"> <ProjectReference Include="..\..\src\mod\applications\mod_signalwire\mod_signalwire.2017.vcxproj">
<Name>mod_signalwire</Name> <Name>mod_signalwire</Name>
<Project>{b19ae6fc-bfff-428d-b483-3bbeaeccc618}</Project> <Project>{b19ae6fc-bfff-428d-b483-3bbeaeccc618}</Project>
@ -925,9 +917,9 @@
<Message Importance="High" Text="DefineConstants: $(DefineConstants)" /> <Message Importance="High" Text="DefineConstants: $(DefineConstants)" />
<Message Importance="High" Text="DestinationFileName: $(DestinationFileName)" /> <Message Importance="High" Text="DestinationFileName: $(DestinationFileName)" />
</Target> </Target>
<!-- <!--
To modify your build process, add your task inside one of the targets below. To modify your build process, add your task inside one of the targets below.
Other similar extension points exist, see Wix.targets. Other similar extension points exist, see Wix.targets.
--> -->
<Target Name="AfterResolveReferences"> <Target Name="AfterResolveReferences">
<Message Importance="High" Text="GitExe: $(GitExe)" /> <Message Importance="High" Text="GitExe: $(GitExe)" />