Code Monkey home page Code Monkey logo

resiprocate / resiprocate Goto Github PK

View Code? Open in Web Editor NEW
590.0 70.0 294.0 91.38 MB

C++ implementation of SIP, ICE, TURN and related protocols.

Home Page: https://www.resiprocate.org

License: Other

HTML 0.44% C++ 64.75% Objective-C 0.03% Perl 1.61% Shell 1.42% Makefile 1.34% C 25.86% Awk 0.02% XSLT 0.01% QMake 0.02% Tcl 0.01% C# 2.76% Python 0.24% Assembly 0.06% OpenEdge ABL 0.16% XS 0.47% PHP 0.21% CSS 0.08% Emacs Lisp 0.48% Batchfile 0.01%

resiprocate's Introduction

-----------------------------------------------------------

IMPORTANT

 - the notes below relate to the legacy build
   system from reSIProcate <= 1.7.x

 - now, with reSIProcate 1.8.x and beyond,
   please see:

    http://www.resiprocate.org/AutotoolsBuild

   and

    http://www.resiprocate.org/Configuration_Options


-----------------------------------------------------------

Notes for the legacy build system:


The legacy reSIProcate build system is derived from
the VOCAL build system (http://www.vovida.org). 

Adding New Files to a module
----------------------------

Example: Adding a new file Foo.cxx to the stack

1) Edit resip/stack/Makefile
2) Add Foo.cxx to the SRC list

Example: Adding a new file Bar.cxx to rutil
1) Edit rutil/Makefile
2) Add Bar.cxx to the SRC list

Notes: 
- All files noted in SRC list will be added to the target library
- Adding a new header file does not need to be noted in the Makefile
- To add something to the compile line add to CXXFLAGS. 
e.g. CXXFLAGS += -DMYSPECIALDEFINE
- To add something to the link line add to LDFLAGS and/or LDLIBS
e.g. LDFLAGS += -L/usr/local/myspeciallibdir
e.g. LDLIBS += -lmyspeciallib

Creating an application based on the stack: 

Option 1:  (Using the resip build system)
For example applications using the resip build system look at resip/stack/test or at repro.

###########################################################################################
# Create a Makefile in the directory with the units with the following template
# This should be the path to the build directory of resip (in the sip subdirectory)
BUILD = ../../build   

# Includes macros
include $(BUILD)/Makefile.pre

# Add any options that need to be passed to the C++ compiler here
#CXXFLAGS += -DMYSPECIALDEFINE

# Add any options that need to be passed to the C compiler here
#CFLAGS += -DMYOTHERDEFINE

# Add any options that need to be passed to the linker here
#LDFLAGS += -L/usr/local/mydir

# Add any libraries that need to be passed to the linker here
#LDLIBS += -lmylib

# All of these packages are prerequisites for resiprocate
PACKAGES += RESIP RUTIL OPENSSL ARES PTHREAD

# Add an entry to TESTPROGRAMS for each target that has a main in it
# On linux this will generate an executable in bin.debug.Linux.i686/main
TESTPROGRAMS += main.cxx

# Add each of the C++ or C files that other than the main
# Each main target (from TESTPROGRAMS) will be linked with all of the files in SRC
SRC = 		TestSupport.cxx

# Includes macros
include $(BUILD)/Makefile.post
###########################################################################################

Option 2: (Using a third party build system)

Prerequisites: 
- Install ares library from contrib/ares 
  - cd contrib/ares
  - ./configure
  - make
  - make install

Pass the following flags to C++ compiler: 
Assumptions: 
- have pthreads
- have openssl installed
- have ares installed
- resiprocate library is built and installed

# Linux Example
CXXFLAGS += -Wall -fPIC -Wno-deprecated -march=i686 \
            -D_REENTRANT -DUSE_SSL -DNEW_MSG_HEADER_SCANNER -DUSE_IPV6 -DUSE_ARES \
            -I/usr/kerberos/include -I$(RESIP_DIR)/lib.debug.Linux.i686 
LDFLAGS += -L$(RESIP_DIR)/lib.debug.Linux.i686 
LDLIBS += -lresip -lrutil -lssl -lcrypto -lares -lpthread


resiprocate's People

Contributors

adamroach avatar balrampariyarath avatar bvandersson avatar carterdawson avatar catalinusurelu avatar davidlbutcher avatar dbozzali avatar derekmacdonald avatar dgpetrie avatar docfaraday avatar dpocock avatar duanestorey avatar ekr avatar feinerer avatar fjoanis avatar gjasny avatar ivanribakov avatar jfischl avatar jmatthewsr avatar jryden2 avatar lastique avatar mateusbellomo avatar ngm0 avatar okhowang avatar partim avatar renaud-sc avatar rjsparks avatar ryankereliuk avatar sgodin avatar xiexin0606 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

resiprocate's Issues

WebSocket handshake failure in WSS transport

I was trying to use reSIProcate as a SIP client on an iOS device. I m able to compile it for iOS arch and make SIP registrations and call using TLS, but I wanted to use SIP over WebSockets for registration.

However, while testing the same I am facing an issue with the WebSocket handshake. I wanted to check whether the SIP over WebSockets is supported for reSIProcate clients or is it just limited to the repro server?

Currently, I m getting this error in logs :

STACK | 20210127-190252.428 | | RESIP:TRANSPORT | 0x700007414000 | /Users/demo/demo-resip/resiprocate/resip/stack/ssl/TlsConnection.cxx:483 | SSL bytesRead=615
ERR | 20210127-190252.428 | | RESIP:TRANSPORT | 0x700007414000 | /Users/demo/demo-resip/resiprocate/resip/stack/ConnectionBase.cxx:645 | demo--> connection base [ V4 10.20.30.40:5063 WSS targetDomain=org.demo.com flowKey=25 transportKey=1 ] | 0x0 | 0x0
ERR | 20210127-190252.429 | | RESIP:TRANSPORT | 0x700007414000 | /Users/demo/demo-resip/resiprocate/resip/stack/ConnectionBase.cxx:796 | No SecWebSocketKey header
ERR | 20210127-190252.429 | | RESIP:TRANSPORT | 0x700007414000 | /Users/demo/demo-resip/resiprocate/resip/stack/ConnectionBase.cxx:712 | Failed to parse WebSocket initialization request
DEBUG | 20210127-190252.429 | | RESIP:TRANSPORT | 0x700007414000 | /Users/demo/demo-resip/resiprocate/resip/stack/Connection.cxx:433 | Closing connection bytesRead=-1
DEBUG | 20210127-190252.429 | | RESIP:TRANSPORT | 0x700007414000 | /Users/demo/demo-resip/resiprocate/resip/stack/ConnectionManager.cxx:217 | ConnectionManager::removeConnection()
DEBUG | 20210127-190252.429 | | RESIP:TRANSPORT | 0x700007414000 | /Users/demo/demo-resip/resiprocate/resip/stack/ConnectionBase.cxx:115 | ConnectionBase::~ConnectionBase 0x7fc93f611d10
INFO | 20210127-190252.429 | | RESIP:TRANSACTION | 0x700007391000 | /Users/demo/demo-resip/resiprocate/resip/stack/TuSelector.cxx:102 | Sending ConnectionTerminated [ V4 10.20.30.40:5063 WSS targetDomain=org.demo.com flowKey=25 transportKey=1 ] to TUs
DEBUG | 20210127-190252.466 | | RESIP:DUM | 0x70000751a000 | /Users/demo/demo-resip/resiprocate/resip/dum/DialogUsageManager.cxx:1477 | connection terminated message

Error while stating path to certificates for Android

ERR | 20210405-101509.530 | SIP | RESIP | -274996104 | ssl/Security.cxx:268 | Error calling stat() for

I get above error when I provide the path to root certificates in Mac OS while building an android app

Following is the list of things that I have tried.

Provided full path (including certificate file name)
Provided full path of the directory containing the certificate.
Intialized the Security constructor so that it picks the certificate form the default directory (~/.sipCerts)
security = new Security(".");

In all the above three cases it is unable to stat the cert file.
In the third case it looks inside (/.sipCerts) instead of (~/.sipCerts) for Mac System.

Below is the detailed log

`2021-04-05 10:17:27.135 9270-9270/? I/ample.testresi: Not late-enabling -Xcheck:jni (already on)
2021-04-05 10:17:27.159 9270-9270/? I/ample.testresi: Unquickening 12 vdex files!
2021-04-05 10:17:27.161 9270-9270/? W/ample.testresi: Unexpected CPU variant for X86 using defaults: x86
2021-04-05 10:17:27.495 9270-9270/com.example.testresip D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2021-04-05 10:17:27.496 9270-9270/com.example.testresip D/NetworkSecurityConfig: No Network Security Config specified, using platform default
2021-04-05 10:17:27.530 9270-9314/com.example.testresip D/libEGL: loaded /vendor/lib/egl/libEGL_emulation.so

2021-04-05 10:17:27.552 9270-9314/com.example.testresip D/libEGL: loaded /vendor/lib/egl/libGLESv1_CM_emulation.so

2021-04-05 10:17:27.564 9270-9314/com.example.testresip D/libEGL: loaded /vendor/lib/egl/libGLESv2_emulation.so

2021-04-05 10:17:27.737 9270-9270/com.example.testresip W/ample.testresi: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (greylist, reflection, allowed)

2021-04-05 10:17:27.738 9270-9270/com.example.testresip W/ample.testresi: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (greylist, reflection, allowed)

2021-04-05 10:17:27.797 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.797 | SIP | RESIP | -274996104 | ssl/Security.cxx:1160 | BaseSecurity::BaseSecurity

2021-04-05 10:17:27.797 9270-9270/com.example.testresip W/reSIProcate: WARNING | 20210405-101727.797 | SIP | RESIP | -274996104 | ssl/Security.cxx:3119 | unable to load DH parameters (required for PFS): TlsDHParamsFilename not specified

2021-04-05 10:17:27.798 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.798 | SIP | RESIP | -274996104 | ssl/Security.cxx:3168 | ECDH initialized

2021-04-05 10:17:27.798 9270-9270/com.example.testresip W/reSIProcate: WARNING | 20210405-101727.798 | SIP | RESIP | -274996104 | ssl/Security.cxx:3119 | unable to load DH parameters (required for PFS): TlsDHParamsFilename not specified

2021-04-05 10:17:27.798 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.798 | SIP | RESIP | -274996104 | ssl/Security.cxx:3168 | ECDH initialized

2021-04-05 10:17:27.798 9270-9270/com.example.testresip I/reSIProcate: INFO | 20210405-101727.798 | SIP | RESIP:DNS | -274996104 | dns/AresDns.cxx:397 | DNS initialization: found 1 name servers

2021-04-05 10:17:27.798 9270-9270/com.example.testresip I/reSIProcate: INFO | 20210405-101727.798 | SIP | RESIP:DNS | -274996104 | dns/AresDns.cxx:408 | name server: 8.8.8.8

2021-04-05 10:17:27.798 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.798 | SIP | RESIP | -274996104 | Compression.cxx:44 | COMPRESSION SUPPORT NOT COMPILED IN

2021-04-05 10:17:27.798 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.798 | SIP | RESIP | -274996104 | Compression.cxx:47 | Compression configuration object created; algorithm = 0

2021-04-05 10:17:27.799 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.799 | SIP | RESIP:TRANSPORT | -274996104 | TransportSelector.cxx:100 | No compression library available

2021-04-05 10:17:27.799 9270-9270/com.example.testresip I/reSIProcate: INFO | 20210405-101727.799 | SIP | RESIP:DNS | -274996104 | DnsUtil.cxx:170 | local hostname does not contain a domain part localhost

2021-04-05 10:17:27.799 9270-9270/com.example.testresip V/reSIProcate: STACK | 20210405-101727.799 | SIP | RESIP | -274996104 | ssl/Security.cxx:264 | calling stat() for /Full/Path/AndroidStudioProjects/testResip/app/src/main/cpp

2021-04-05 10:17:27.799 9270-9270/com.example.testresip E/reSIProcate: ERR | 20210405-101727.799 | SIP | RESIP | -274996104 | ssl/Security.cxx:268 | Error calling stat() for /Full/Path/AndroidStudioProjects/testResip/app/src/main/cpp: No such file or directory

2021-04-05 10:17:27.799 9270-9270/com.example.testresip I/reSIProcate: INFO | 20210405-101727.799 | SIP | RESIP | -274996104 | ssl/Security.cxx:339 | Files loaded by prefix: 0

2021-04-05 10:17:27.799 9270-9270/com.example.testresip W/reSIProcate: WARNING | 20210405-101727.799 | SIP | RESIP | -274996104 | ssl/Security.cxx:346 | No root certificates found using legacy prefixes, treating mPath as a normal directory of root certs

2021-04-05 10:17:27.799 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.799 | SIP | RESIP:DUM | -274996104 | UserProfile.cxx:145 | Adding credential: realm=phone.plivo.com user=test

2021-04-05 10:17:27.799 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.799 | SIP | RESIP:TRANSPORT | -274996104 | ConnectionBase.cxx:70 | ConnectionBase::ConnectionBase, who: [ V4 0.0.0.0:0 UNKNOWN_TRANSPORT ] 0xe8e91240

2021-04-05 10:17:27.799 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.799 | SIP | RESIP:TRANSPORT | -274996104 | ConnectionBase.cxx:83 | No compression library available: 0xe8e91240

2021-04-05 10:17:27.799 9270-9270/com.example.testresip I/reSIProcate: INFO | 20210405-101727.799 | SIP | RESIP:TRANSPORT | -274996104 | Connection.cxx:45 | Connection::Connection: new connection created to who: [ V4 0.0.0.0:0 UNKNOWN_TRANSPORT ], is server = 0

2021-04-05 10:17:27.799 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.799 | SIP | RESIP:TRANSPORT | -274996104 | ConnectionManager.cxx:34 | ConnectionManager::ConnectionManager() called

2021-04-05 10:17:27.799 9270-9270/com.example.testresip E/reSIProcate: ERR | 20210405-101727.799 | SIP | RESIP:TRANSPORT | -274996104 | InternalTransport.cxx:101 | Failed to create socket: Operation not permitted

2021-04-05 10:17:27.799 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.799 | SIP | RESIP | -274996104 | BaseException.cxx:20 | BaseException at InternalTransport.cxx:102 Can't create TcpBaseTransport

2021-04-05 10:17:27.801 9270-9270/com.example.testresip D/reSIProcate: DEBUG | 20210405-101727.801 | SIP | RESIP:TRANSPORT | -274996104 | ConnectionBase.cxx:114 | ConnectionBase::~ConnectionBase 0xe8e91240

2021-04-05 10:17:27.801 9270-9270/com.example.testresip E/reSIProcate: ERR | 20210405-101727.801 | SIP | RESIP | -274996104 | SipStack.cxx:485 | Failed to create transport: V4 TLS 5061 on ANY: TransportException Can't create TcpBaseTransport @ InternalTransport.cxx:102

2021-04-05 10:17:27.801 9270-9270/com.example.testresip A/libc: Fatal signal 6 (SIGABRT), code -1 (SI_QUEUE) in tid 9270 (ample.testresip), pid 9270 (ample.testresip)
`

Any leads or help shall be appreciated.
Or any better way of providing the root certs for Android in Mac OS system.

configure script does not support '--without-PACKAGE' syntax

When trying to explicitly disable support for a package using the '--without-PACKAGE' syntax, it will actually enable support for the package. For example if you run:

./configure --without-openssl, the build will be configured to try to build with OpenSSL support.

Used TCP error when call TransactionUser post

add Transport UDP and TCP in 5060 port. when we want post a DumCommmand by SipStack:
example:
SipStack.post(reqCatalog,0,DialogUsageManager class);

It find my code use udp to send this applicationMessage.We want used TCP to send this message(uac used tcp to register to my server). Can you help me how to used tcp to send.

Repro Monkey/Baboon/Lemur pipe interleaving

Hi, I'm currently evaluating resip/repro as a foundation for the custom SIP routing proxy. I've been studying repro overview document to get a better idea about what comes out of the box with repro and I have a question related to the "Monkey/Baboon/Lemur" concepts:

image

I understand that sequential forking can be achieved using QValueTargetHandler.

My question is:

  • can "Monkey", "Baboon" and "Lemur" pipe execution interleave?

The reason I'm asking this question is because I need to be able to implement a routing logic where next target may depend on the previous target response (think of a conditional fallback routing). To implement this using concepts from the above diagram, I imagine I would need to:

  • first execute a Monkey that produces "target 1"
  • then execute some of the Baboons to prepare/eject the request to the "target 1"
  • then execute a Lemur to process the response
  • then (optionally) repeat the Monkey/Baboon/Lemur cycle for the next target dynamically based on the "target 1" response until the call is connect (or max number of attempts is reached)

Link static library error when i add a member method in DialogUsage class

Hello,

When i add a member method "void setLocalContact(const NameAddr& contact);" in DialogUsage class, and i build the library successfully but linking failed:
undefined reference to `resip::DialogUsage::setLocalContact(resip::NameAddr const&)'

please help me and thanks.

DialogUsage.hxx
void setLocalContact(const NameAddr& contact);

DialogUsage.cxx:
void DialogUsage::setLocalContact(const NameAddr& contact) { mDialog.mLocalContact = contact; }

Mute on USB Microphone

Hi,

Using the sipxTapiConversationManager, I've seen that the muteMicrophone function in windows works only with the jack microphone and not with the USB microphone.

In the logs of resiprocate, there is no trace of errors.

DateCategory insists on DayOfWeek and comma being present when parsing Date header

RFC3261 defines Date header https://datatracker.ietf.org/doc/html/rfc3261#section-20.17 according to RFC1123
RFC1123 defines the date as https://datatracker.ietf.org/doc/html/rfc1123#section-5.2.14
The syntax for the date is hereby changed to: date = 12DIGIT month 24DIGIT
which is a restriction from the underlying RFC822 which included day-name

The DateCategory parser fails if the day-name is not present (strictly it fails because there is no "," when the day-name is not present
NB. RFC3261 is misleading because it provides an example date-string with the day-name and comma, later SIP RFC double down on this confusion by including day-name if they provide a Date header

RFC2822 which obsoletes RFC822 defines the date-string (https://datatracker.ietf.org/doc/html/rfc2822#section-3.3) making day-name comma optional and cleans up the whole mess in the specifications. However, strings without day-name cannot be parsed by ReSIProcate - resulting in failure logging of "skipped over eof" from ParseBuffer.cxx (line 63)

Not sure how the parsing code is expected to handle optional sub-fields so I am unable to fix this myself.

Thanks

setServerAuthManager can not effect for different uac(sip client) clients

We want my uas(sip server) have different registered behavior for some especially uac(sip client).
For example:
(1) No authenticate
(a)uac A register to uas,
(b)uas response uac sip 200 ok.
(2)authenticate
(a)uac B register to uas
(b)uas response uac sip 401 Unauthorized
(c)uac response uas register to authenticate
(d)uas response uac sip 200 ok

We want uas can support (1)(2) behavior at same times.but when we call setServerAuthManager,All register will used (2) behavior.All register will used (1) behavior when not call setServerAuthManager.
How can tell me,How can i do๏ผŸplease....

Small improvement

As below DialogUsageManager::makeInviteSession function(There have three similar functions), we can make the "id" as reference in this DialogId id = sessionToReplace->getDialogId();


SharedPtr<SipMessage> 
DialogUsageManager::makeInviteSession(const NameAddr& target, 
                                      InviteSessionHandle sessionToReplace, 
                                      const SharedPtr<UserProfile>& userProfile, 
                                      const Contents* initialOffer, 
                                      AppDialogSet* ads)
{
   SharedPtr<SipMessage> inv = makeInviteSession(target, userProfile, initialOffer, ads);
   // add replaces header
   resip_assert(sessionToReplace.isValid());
   if(sessionToReplace.isValid())
   {
      CallId replaces;
 //     DialogId id = sessionToReplace->getDialogId();
      **const DialogId & id = sessionToReplace->getDialogId();** // We can use this
      replaces.value() = id.getCallId();
      replaces.param(p_toTag) = id.getRemoteTag();
      replaces.param(p_fromTag) = id.getLocalTag();
      inv->header(h_Replaces) = replaces;
   }
   return inv;
}

mDum.makePagerMessage error

our camera register sip server,and refersh every 60 minutes,when refresh,i will send catalog query like below:

`
resip::ClientPagerMessageHandle clientHandle = mDum.makePagerMessage(naTo);
resip::ClientPagerMessage *cpm = clientHandle.get();

resip::SipMessage &request = cpm->getMessageRequest();
bool isvalid = request.isInvalid();
if(isvalid || request.isResponse())
{
return false;
}`

For the most part, it works fine๏ผŒbut it will crash at sometime.

i've get the core,:

image

or

_20220112173950

i looks like:
the SipMessage request is not ok,but how could this happed.

makePagerMessage build SipMessage below:

'void
BaseCreator::makeInitialRequest(const NameAddr& target, const NameAddr& from, MethodTypes method)
{
RequestLine rLine(method);
rLine.uri() = target.uri();
mLastRequest->header(h_RequestLine) = rLine;

mLastRequest->header(h_To) = target;
mLastRequest->header(h_MaxForwards).value() = 70;
mLastRequest->header(h_CSeq).method() = method;
mLastRequest->header(h_CSeq).sequence() = 1;
mLastRequest->header(h_From) = from;
mLastRequest->header(h_From).param(p_tag) = Helper::computeTag(Helper::tagSize);
mLastRequest->header(h_CallId).value() = Helper::computeCallId();'

mRequest(mLastRequest)

it's so simple!!

version 1.7 crash when timeout.

crash when timeout. i find 17308 is release before timeout.
#0 0x0000000009564207 in raise () from /lib64/libc.so.6
#1 0x00000000095658f8 in abort () from /lib64/libc.so.6
#2 0x0000000008d6f7d5 in __gnu_cxx::__verbose_terminate_handler() () from /lib64/libstdc++.so.6
#3 0x0000000008d6d746 in ?? () from /lib64/libstdc++.so.6
#4 0x0000000008d6d773 in std::terminate() () from /lib64/libstdc++.so.6
#5 0x0000000008d6e2df in __cxa_pure_virtual () from /lib64/libstdc++.so.6
#6 0x000000000821f302 in resip::operator<< (strm=..., handled=...) at Handled.cxx:31
#7 0x000000000821cab0 in resip::DumTimeout::encode (this=0x342a57c0, strm=...) at DumTimeout.cxx:139
#8 0x00000000086c472e in resip::operator<< (strm=..., msg=...) at Message.cxx:40
#9 0x000000000876953d in resip::TuSelector::add (this=0xd0e62f8, msg=0x342a57c0,
usage=resip::TimeLimitFiforesip::Message::InternalElement) at TuSelector.cxx:67
#10 0x0000000008733e4b in resip::TuSelectorTimerQueue::addToFifo (this=0xd109eb8, msg=0x342a57c0,
d=resip::TimeLimitFiforesip::Message::InternalElement) at TimerQueue.cxx:179
#11 0x0000000008733ab8 in resip::BaseTimeLimitTimerQueue::process (this=0xd109eb8) at TimerQueue.cxx:137
#12 0x0000000008728f80 in resip::SipStack::process (this=0xd0e61e0, fdset=...) at SipStack.cxx:734
#13 0x000000000872be07 in resip::InterruptableStackThread::thread (this=0xd12df80) at InterruptableStackThread.cxx:41
#14 0x0000000008abb553 in threadIfThreadWrapper (threadParm=0xd12df80) at ThreadIf.cxx:51
#15 0x0000000006dbddd5 in start_thread () from /lib64/libpthread.so.0
#16 0x000000000962bead in clone () from /lib64/libc.so.6
image
image

Resip memory increase but never decrease

Hi , I build a server using resip-1.10.2 as a sip redirect server to provide load balance. The memory will increase when received more INVITE request. Much worse is that if our server runs a bit slowly, more and more INVITE received in resip is handled slowly. This cause memory increases and the memory will not decrease any more even if there is no new call later. The worstest case is our server occupy 100G memory and is killed the the operation system.

Hope I have describe the question clearly. Could you please help me to figure the root cause of the memory increasing? Is there has a buffer?

Usage of std::auto_ptr prevents compilation of consuming projects when using C++17

As we know, C++17 removes std::auto_ptr. It looks like this is used in a few places throughout resiprocate.

I can see a couple of options to move forward:

  1. Replace usages of std::auto_ptr with resip::SharedPtr.
  2. Replace usages of std::auto_ptr with std::shared_ptr or std::unique_ptr as appropriate. This would make C++11 compiler support a requirement.

Both of the suggested options would mean a breaking change where std::auto_ptr is used publicly.

Any opinions or suggestions?

Microphone don't works during calls

Hi,

We've developed a product using the libraries Resiprocate and SipXTapi. The application works for some month.

We've found a problem with the Microphone during the calls, after some update of the Windows 10 SO.
Making some test with an older release Windows 7 SO, the microphone during a call works as expected.

The problem seems to be related to the function WaveInOpen.

I attach some log rows of the SipX library where we think there is the problem:

DEBUG | 20220317-151946.551 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl::CpTopologyGraphFactoryImpl MpInputDeviceManager constructed
INFO | 20220317-151946.551 | midasip | RECON | 9288 | SipXHelper.cxx:41 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl: enabling local audio
DEBUG | 20220317-151946.592 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM: Got IMMDeviceEnumerator!
DEBUG | 20220317-151946.593 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM: windeviceId[0]: {0.0.1.00000000}.{73212a37-94b6-458c-8af6-be7845b479fb} name: Microphone (Realtek(R) Audio)
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::registerDeviceEnumerator: RegisterEndpointNotificationCallback succeeded!
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM:(name="Microphone (Realtek(R) Audio)")
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM found "Microphone (Realtek(R) Audio)" at: 0
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpInputDeviceManager::addDevice
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpInputDeviceManager::addDevice dev: Microphone (Realtek(R) Audio) id: 1
INFO | 20220317-151946.605 | midasip | RECON | 9288 | SipXHelper.cxx:41 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl::CpTopologyGraphFactoryImpl mpInputDeviceManager->addDevice returned deviceId: 1
DEBUG | 20220317-151946.609 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpodWinMM::MpodWinMM(Speakers (Realtek(R) Audio))
ERR | 20220317-151946.609 | midasip | RECON | 9288 | SipXHelper.cxx:47 | SIPxua:Anon:8040: MpidWinMM::getWinDeviceEnumeratpr CoInitialize failed with error: 0000000000000001
DEBUG | 20220317-151946.609 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::registerDeviceEnumerator: RegisterEndpointNotificationCallback succeeded!
DEBUG | 20220317-151946.612 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpOutputDeviceManager::addDevice dev: Speakers (Realtek(R) Audio) id: 1
INFO | 20220317-151946.612 | midasip | RECON | 9288 | SipXHelper.cxx:41 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl::CpTopologyGraphFactoryImpl mpOutputDeviceManager->addDevice returned deviceId: 1
DEBUG | 20220317-151946.612 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpAudioInputConnection::enable() mEnableCounter=0
DEBUG | 20220317-151946.683 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::enableDevice failed (line 454): res = MMSYSERR_INVALPARAM (11):
Invalid parameter passed.

Thanks,
Andrea

Need advice on qop and useAuthInt()

Hello everyone !
Need advices on proper usage of ServerAuthManager.

  1. In 22.4 The Digest Authentication Scheme there is a point 8:
However, servers MUST always send a "qop" parameter in WWW-Authenticate and Proxy-Authenticate header field values.

As of my understanding the base implementation of ServerAuthManager's useAuthInt() returns false by default, which leads to no qop parameter in digest header of response at all. Is there some supposed usage, which conforms to RFC, but still doesn't include qop parameter (i.e. doesn't override base's useAuthInt() to return true) ?

  1. Closely related to (1). As I understand RFC considers legitimate options for qop to be in a form of qop="auth,auth-int" or qop="auth" or qop="auth-int". Would you please suggest if there is a way to somehow realize this kinds scenarios with some methods of ServerAuthManager ? For me it looks like I can get qop="auth,auth-int" or no qop at all (see point 1 above).

Thanks for attention and all hard work on this project.

Multiple crash scenarios involving the offer/answer state and an incoming request

1, Target refresh in the wrong invitesession state causes abort
(this was described in detail in the mailing list but was not concluded, see
https://list.resiprocate.org/archive/resiprocate-devel/msg09021.html
https://list.resiprocate.org/archive/resiprocate-devel/msg09022.html
https://list.resiprocate.org/archive/resiprocate-devel/msg09023.html
)
2, In case of SDP-less reINVITE, after receiving an offer, but failing to call provideAnswer() immediately (because for example, in case of a B2BUA, the other leg has to answer first), meanwhile receiving an UPDATE, InviteSession triggers an assert.

Both cases can be remedied by a well-placed 491.

Using Resip alongside boost asio

I'm trying to build a project with both resip and boost included.
I ran into a class that wants to use both objects based on resip code using its asio copy and boost asio code.
This causes multiple declaration errors.

How should I best get around this problem.

  • replace resips asio dependency with an actual boost dependency ?
  • rename resips asio namespace to be resip specific ?
  • compiler black magic I'm not aware of ? (I'm using Visual Studio 2022 community edition)

resip_assert(dynamic_cast<UdpTransport*>(transport)); from resip\stack\TransportSelector.cxx is failing for AIX platform.

Hi,

We are using 1.12 version of resiprocate library. we are using this library for SIP protocol monitoring client.

Our SIP protocol monitoring client is working fine on all non windows platforms like RHEL,Solaris,zlinux. But its failing on AIX platform at below code in resip\stack\TransportSelector.cxx file:

else if(transport->transport()==UDP)
{
resip_assert(dynamic_cast<UdpTransport*>(transport));
}

Below error is getting reported in our client error logs:
Assertion failed: dynamic_cast<UdpTransport*>(transport), file TransportSelector.cxx, line 185

Could you let us know what could be an issue for only AIX platform?

Thanks and Regards,
Nilam Khamkar

CVE-2021-3672 reported against C-Ares

Hi Folks,

I was wondering if there are plans to upgrade or patch C-Ares due to CVE-2021-3672? According to the CVE a "flaw was found in c-ares library, where a missing input validation check of host names returned by DNS (Domain Name Servers) can lead to output of wrong hostnames which might potentially lead to Domain Hijacking." More information can be found at the link here.

This vulnerability impacts ares_expand_name.c, which appears to be used by Resiprocate. The C-Ares project recommends either upgrading to C-Ares 1.17.2 or applying this patch. It looks like Resiprocate uses an older version of C-Ares with some modifications so the patch might be an easier approach.

Best,
Josh

Repro plugins - control order in the processor chain

Hi,

I found an example on how to approach creation of repro plugins to introduce new functionality, but as I compiled, enabled and loaded new plugin, I saw it being added to the very end of the RequestProcessor chain.

While running some basic SIP tests, I was unable to execute my plugin logic as INVITE never reached it due to the fact that LocationServer monkey was dropping request with 404 Not Found response.

ReproRunner.cxx:1217 | RequestProcessor chain: [StrictRouteFixup, IsTrustedNode, AmIResponsible, StaticRoute, LocationServer]
ExamplePlugin.cpp:30 | ExamplePlugin: onRequestProcessorChainPopulated called

...

ProcessorChain.cxx:95 | Chain invoking RequestProcessor: LocationServer
monkeys/LocationServer.cxx:32 | Monkey handling request: LocationServer; reqcontext = numtrans=1 final=0 req=SipReq:  INVITE [email protected] tid=PjJmPUk.YN4OAXO.a48A8BMau70sLfyfi1 cseq=4318 INVITE [email protected] / 4318 from(wire)
Helper.cxx:374 | Helper::makeResponse(SipReq:  INVITE [email protected] tid=PjJmPUk.YN4OAXO.a48A8BMau70sLfyfi1 cseq=4318 INVITE [email protected] / 4318 from(wire) code=404 reason=
RequestContext.cxx:941 | tid of orig req: PjJmPUk.YN4OAXO.a48A8BMau70sLfyfi1
RequestContext.cxx:976 | Ensuring orig tid matches tid of response: PjJmPUk.YN4OAXO.a48A8BMau70sLfyfi1 == PjJmPUk.YN4OAXO.a48A8BMau70sLfyfi1
RequestContext.cxx:983 | Sending final response.

From docs I can see that:

LocationServer - Fetches locations from the RegistrationPersistenceManager instance (shared with the
registrar) to proxy requests to.

I have disabled both Registrar and PresenceServer:

DisableRegistrar = true
EnablePresenceServer = false

but LocationServer monkey still intercepts requests before they reach my plugin.

  • Is there a way to disable LocationServer monkey from config?
  • Is there a way that I can add my plugin to the RequestProcessor chain BEFORE some of the system (hardcoded) processors such as LocationServer?

Need some way to seed the random number generator on OpenBSD/arm64

# error Need some way to seed the random number generator
is triggered on OpenBSD/arm64. There is arc4random on OpenBSD which does exactly what
stunRand()
is trying to achieve.

A potential fix is given in https://marc.info/?l=openbsd-ports&m=159129306717060&w=2 . Probably a better solution is to check for arc4random in configure instead of hardcoding OpenBSD.

link error undefined reference to `resip::DayOfWeekHash::in_word_set(char const*, unsigned int)

windows link success,but link error on center os platform.

/build/lib/libresip.a(DateCategory.o): In function resip::DateCategory::DayOfWeekFromData(resip::Data const&)': /mnt/resiprocate/resip/stack/DateCategory.cxx:199: undefined reference to resip::DayOfWeekHash::in_word_set(char const*, unsigned int)'
./build/lib/libresip.a(DateCategory.o): In function resip::DateCategory::MonthFromData(resip::Data const&)': /mnt/resiprocate/resip/stack/DateCategory.cxx:216: undefined reference to resip::MonthHash::in_word_set(char const*, unsigned int)'
./build/lib/libresip.a(DateCategory.o): In function resip::DateCategory::DayOfWeekFromData(resip::Data const&)': /mnt/resiprocate/resip/stack/DateCategory.cxx:199: undefined reference to resip::DayOfWeekHash::in_word_set(char const*, unsigned int)'
./build/lib/libresip.a(DateCategory.o): In function resip::DateCategory::MonthFromData(resip::Data const&)': /mnt/resiprocate/resip/stack/DateCategory.cxx:216: undefined reference to resip::MonthHash::in_word_set(char const*, unsigned int)'
./build/lib/libresip.a(Headers.o): In function resip::Headers::getType(char const*, int)': /mnt/resiprocate/resip/stack/Headers.cxx:350: undefined reference to resip::HeaderHash::in_word_set(char const*, unsigned int)'
./build/lib/libresip.a(MethodTypes.o): In function getMethodType': /mnt/resiprocate/resip/stack/MethodTypes.cxx:62: undefined reference to resip::MethodHash::in_word_set(char const*, unsigned int)'
./build/lib/libresip.a(MethodTypes.o): In function resip::getMethodType(char const*, int)': /mnt/resiprocate/resip/stack/MethodTypes.cxx:62: undefined reference to resip::MethodHash::in_word_set(char const*, unsigned int)'
collect2: error: ld returned 1 exit statu

Small improvement

As below DialogUsageManager::makeInviteSession function, we can make the "id" as reference:


SharedPtr<SipMessage> 
DialogUsageManager::makeInviteSession(const NameAddr& target, 
                                      InviteSessionHandle sessionToReplace, 
                                      const SharedPtr<UserProfile>& userProfile, 
                                      const Contents* initialOffer, 
                                      AppDialogSet* ads)
{
   SharedPtr<SipMessage> inv = makeInviteSession(target, userProfile, initialOffer, ads);
   // add replaces header
   resip_assert(sessionToReplace.isValid());
   if(sessionToReplace.isValid())
   {
      CallId replaces;
 //     DialogId id = sessionToReplace->getDialogId();
      **const DialogId & id = sessionToReplace->getDialogId();** // We can use this
      replaces.value() = id.getCallId();
      replaces.param(p_toTag) = id.getRemoteTag();
      replaces.param(p_fromTag) = id.getLocalTag();
      inv->header(h_Replaces) = replaces;
   }
   return inv;
}

"Retry-After" header in 503 responses uses wrong values

When creating the 503 response the value for Retry-After is incorrect.
It is set to getExpectedWaitForIncoming()/1000. However, getExpectedWaitForIncoming() is already reported in seconds. The final division to 1000 will change the value to 0.

std::unique_ptr<SendData> tryLater(make503(*message, getExpectedWaitForIncoming()/1000));

Installing resiprocate on Debian 10

Hi,

I've been trying to install on Debian 10 following the instructions here. I've had a few issues:

  1. Running debuild -rfakeroot -i -us -uc -b --no-lintian gives dpkg-buildpackage: error: unknown option or argument --no-lintian.
  2. Running debuild -rfakeroot -i -us -uc -b give a list of dependancies: build-essential debhelper gperf libasio-dev libboost-dev libc-ares-dev libdb++-dev libpopt-dev libssl1.0-dev default-libmysqlclient-dev libpq-dev libradcli-dev libcppunit-dev autotools-dev libpcre3-dev libsipxtapi-dev libsrtp-dev libcajun-dev python-cxx-dev dh-autoreconf pkg-config libtelepathy-qt5-dev libgloox-dev libqpid-proton-cpp-dev. The packages libssl1.0-dev and libsrtp-dev are no longer available in Debian 10 - they've been replaced with libssl-dev and libsrtp2-dev. After installing those instead and running debuild -rfakeroot -i -us -uc -b -d, installation fails after a while with:
In file included from ../../reflow/FlowManager.hxx:11,
                 from ../../resip/recon/ConversationManager.hxx:23,
                 from ../../resip/recon/UserAgent.hxx:8,
                 from Connection.cxx:23:
../../reflow/MediaStream.hxx:19:10: fatal error: srtp/srtp.h: No such file or directory
 #include <srtp/srtp.h>
          ^~~~~~~~~~~~~
compilation terminated.
...
dpkg-buildpackage: error: fakeroot debian/rules binary subprocess returned exit status 2
debuild: fatal error at line 1182:
dpkg-buildpackage -rfakeroot -us -uc -ui -i -b -d failed

I'm aware that issue 1 is probably just a documentation issue on rtcquickstart.org, and has nothing to do with resiprocate. I'm including it just to document my issues.

Thank you!

EDIT: Just noticed that there is a separate debian/1_1.12.0-1 tag. Attempting installation with that now.

EDIT: Install looks like it's worked, but rtcquickstart.org seems to say configuration should now be in /etc/repro, and I can't find anything there.

EDIT: Didn't realise I had to install created packages! Doing that now ...

EDIT: After installing the created packages, I now have /etc/repro populated and the repro command line utility. I'm going to finish this install, and if all goes smoothly, I'll close this issue.

EDIT: And ... I have a working reSIProcate install! Thank you for being there! Sometimes your just need to speak your thoughts to help you think :)

Thank you to all!

compile errors with c++17

I use reSiprocate 1.12.0 with c++17, and compilation failed with lots of errors , i.e. :
no template named 'auto_ptr' in namespace 'std'

I notice that the 1.13.0 is coming soon, so the temporary solution is that i checkout the master instead of 1.12.0.

my question is:
What is the day do 1.13.0 version to release?
Or can i use the master version to our release version?

Microphone don't work during a call

Hi,

We've developed a product using the libraries Resiprocate and SipXTapi. The application works for some month.

We've found a problem with the Microphone during the calls, after some update of the Windows 10 SO.
Making some test with an older release Windows 7 SO, the microphone during a call works as expected.

I've seen the same problem both in Win32 and in X64.

The problem seems to be related to the function WaveInOpen.

I attach some log rows of the SipX library where we think there is the problem:

DEBUG | 20220317-151946.551 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl::CpTopologyGraphFactoryImpl MpInputDeviceManager constructed
INFO | 20220317-151946.551 | midasip | RECON | 9288 | SipXHelper.cxx:41 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl: enabling local audio
DEBUG | 20220317-151946.592 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM: Got IMMDeviceEnumerator!
DEBUG | 20220317-151946.593 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM: windeviceId[0]: {0.0.1.00000000}.{73212a37-94b6-458c-8af6-be7845b479fb} name: Microphone (Realtek(R) Audio)
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::registerDeviceEnumerator: RegisterEndpointNotificationCallback succeeded!
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM:(name="Microphone (Realtek(R) Audio)")
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::MpidWinMM found "Microphone (Realtek(R) Audio)" at: 0
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpInputDeviceManager::addDevice
DEBUG | 20220317-151946.604 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpInputDeviceManager::addDevice dev: Microphone (Realtek(R) Audio) id: 1
INFO | 20220317-151946.605 | midasip | RECON | 9288 | SipXHelper.cxx:41 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl::CpTopologyGraphFactoryImpl mpInputDeviceManager->addDevice returned deviceId: 1
DEBUG | 20220317-151946.609 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpodWinMM::MpodWinMM(Speakers (Realtek(R) Audio))
ERR | 20220317-151946.609 | midasip | RECON | 9288 | SipXHelper.cxx:47 | SIPxua:Anon:8040: MpidWinMM::getWinDeviceEnumeratpr CoInitialize failed with error: 0000000000000001
DEBUG | 20220317-151946.609 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::registerDeviceEnumerator: RegisterEndpointNotificationCallback succeeded!
DEBUG | 20220317-151946.612 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpOutputDeviceManager::addDevice dev: Speakers (Realtek(R) Audio) id: 1
INFO | 20220317-151946.612 | midasip | RECON | 9288 | SipXHelper.cxx:41 | SIPxua:Anon:8040: CpTopologyGraphFactoryImpl::CpTopologyGraphFactoryImpl mpOutputDeviceManager->addDevice returned deviceId: 1
DEBUG | 20220317-151946.612 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpAudioInputConnection::enable() mEnableCounter=0
DEBUG | 20220317-151946.683 | midasip | RECON | 9288 | SipXHelper.cxx:37 | SIPxua:Anon:8040: MpidWinMM::enableDevice failed (line 454): res = MMSYSERR_INVALPARAM (11):
Invalid parameter passed.

Thanks,
Andrea

operator= in MultipartMixedContents makes an empty copy

The MultipartMixedContents::operator= method iterates over its own mContents vector as the source vector for cloning instead rhs's one and resulting in an empty MultipartMixedContents destination object.

MultipartMixedContents&
MultipartMixedContents::operator=(const MultipartMixedContents& rhs)
{
if (this != &rhs)
{
Contents::operator=(rhs);
clear();

  for (vector<Contents*>::iterator i = mContents.begin(); 
       i != mContents.end(); ++i)
  {
     mContents.push_back( (*i)->clone() );
  }

}
return *this;
}

sipXtapi version to use to compile recon VS 15 solution

I am trying to compile the Visual Studio solution recon_15_0.sln from the branch resiprocate-1.12 (the latest stable build).

The solution refers to projects of sipXtapi with the suffix -msvc8 and extension vcxproj but those do not exist anywhere in the code of sipXtapi.

Using the tag 3.3.0~test18 from this repo https://github.com/sipXtapi/sipXtapi (which is outdate btw) I can open the sipX-msvc8.sln solution file and migrate all the .vcproj projects to a newer version of VS (2019 in my case) so that the projects -msvc8.vcxproj are created, but at this point sipXtapi does not compile.

Otherwise in the solution I can replace the file with the -msvc8 with the .vcxproj file now provided in the master branch of sipXtapi. This however breaks all the references in the projects of the solution.

Wat version of sipXtapi was used to build resiprocate-1.12? (and from which repo git or svn was it taken)

setOverrideHostAndPort not respected when sending OPTIONS response

After calling setOverrideHostAndPort on the UAS, the default values (not overrides) are used in the Contact header when responding to an OPTIONS request. This is problematic when running resiprocate in a containerized enviroment where the local IP address is non routable externally and therefore should not be included in the SIP messages. I realize OPTIONS is out of dialog however advertising inside IP addresses is not desirable.

To test the following code was added to BasicCall.cxx:661

resip::Uri hostPort;
hostPort.host() = "10.10.10.8";
hostPort.port() = 12010;
dumUas->getMasterProfile()->setOverrideHostAndPort(hostPort);

UAS Contact header from test:
sip:127.0.0.1:12010

Is this behavior expected for OPTIONS? It works fine for other messages.

The behavior seems to conflict with the ServerOutOfDialogReq::answerOptions() comment about the master profile settings:

// Return Options response based on current MasterProfile settings - application may need to add SDP Contents before
// sending

Thank you

Trickle ICE support

Hello,

Looking through codebase I've got the impression that usage of Trickle ICE in SIP (as in RFC8840) is not implemented in reSIProcate at the moment. Would someone kindly confirm that ?

If this is the case than it seems that in order to add support one should implement a class for MIME of application/trickle-ice-sdpfrag, akin to DtmfPayloadContents.hxx, SdpContents.hxx etc. Anything else I completely miss that should be done ?

Thanks.
Regards,
Pavel.

does resiprocate support peer to peer call ?

I found it doesn't work when start a call without registration
I my scenario, there is no sip server . each device start p2p call

not sure if it is appropriate asking such question here , do we have a forum ๏ผŸ

ConversationManager::muteMicrophone does not restore microphone volume level

In Windows 10 after disabling and re-enabling the microphone the microphone volume is not restored to the original level. This can be verified in Windows by looking at the volume bar in Sound Settings > Input > Device porperties > Volume; after unmuting the volume level is set to 7.

ConversationManager::muteMicrophone(true);
ConversationManager::muteMicrophone(false);

resiprocate: 1.12
sipXtapi: repo: sipXtapi-svn-mirror@e8e4ad0
OS: Windows 10 Pro build 19042

repro: registered account call fail

Two accounts registered to repro, one call other, faild with 480 Temporarily Unavailable

accounts info๏ผš

AOR Contact User Agent Instance ID Reg ID QValue Path Sync'd? Expires In ย 
sip:[email protected] sip:[email protected]:25090;transport=udp sip mock ย  0 1 ย  false 254s ย 
sip:[email protected] sip:[email protected]:35090;ob MicroSIP/3.20.7 ย  0 1 ย  false 259s ย 

I use default sample repro.config, maybe need modify configure๏ผŸ๏ผŸ

PS
ip phone's "Instance ID" is NULL, i test use the linphone ,which instanceId is not null, can call other account

Repro's handling of Timer C

As far as I can tell, current Repro behaviour when Timer C is fired is to cancel ALL client transactions:

// repro/ResponseContext.cxx
void
ResponseContext::processTimerC()
{
   if (!mRequestContext.mHaveSentFinalResponse)
   {
      InfoLog(<<"Canceling client transactions due to timer C.");
      cancelAllClientTransactions();
   }
}
INFO | 20220118-081343.009 | repro | REPRO:APP | 139697393129024 | RequestContext.cxx:895 | Updating timer C.
INFO | 20220118-081343.009 | repro | REPRO:APP | 139697393129024 | Proxy.cxx:569 | Posting timer C (8sec)
INFO | 20220118-081350.641 | repro | REPRO:APP | 139697393129024 | RequestContext.cxx:660 | RequestContext::process(ApplicationMessage) TimerCMessage(tid=-811889-1-0)
INFO | 20220118-081350.857 | repro | REPRO:APP | 139697393129024 | RequestContext.cxx:660 | RequestContext::process(ApplicationMessage) TimerCMessage(tid=-811889-1-0)
INFO | 20220118-081351.009 | repro | REPRO:APP | 139697393129024 | RequestContext.cxx:660 | RequestContext::process(ApplicationMessage) TimerCMessage(tid=-811889-1-0)
INFO | 20220118-081351.009 | repro | REPRO:APP | 139697393129024 | ResponseContext.cxx:981 | Canceling client transactions due to timer C.
INFO | 20220118-081351.009 | repro | REPRO:APP | 139697393129024 | ResponseContext.cxx:272 | Cancel ALL client transactions: 2 pending, 1 active.

Unless I'm misunderstanding something, that behaviour does not seem to be aligned with RFC3261 which says following:

16.8 Processing Timer C

If timer C should fire, the proxy MUST either reset the timer with
any value it chooses, or terminate the client transaction.

Notice it says terminate the client transaction (singular).

Reason I'm bringing this up is because I'm trying to configure Repro to behave in a way that after a client transaction is terminated due to Timer C, next target in the delivery list is used to route the call to.

So, to summarise:

  1. Is current Repro handling of Timer C valid?
  2. Is it possible to continue routing call to other targets after one of them triggered Timer C?

mingw compilation error

Hi , I build a resiprocate using resip-1.12.0, Compiling environment using msys + mingw4.8.7, There are many duplicate definitions in compilation, as follows
$ g++ -v
Using built-in specs.
COLLECT_GCC=c:\Qt\4.8.7\mingw482_32\bin\g++.exe
COLLECT_LTO_WRAPPER=c:/Qt/4.8.7/mingw482_32/bin/../libexec/gcc/i686-w64-mingw32/4.8.2/lto-wrapper.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-4.8.2/configure --host=i686-w64-mingw32 --build=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32 --with-gxx-include-dir=/mingw32/i686-w64-mingw32/include/c++ --enable-shared --enable-static --disable-multilib --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcxx-time=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --disable-sjlj-exceptions --with-dwarf2 --disable-isl-version-check --disable-cloog-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=i686 --with-tune=generic --with-libiconv --with-system-zlib --with-gmp=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-mpc=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-isl=/c/mingw482/prerequisites/i686-w64-mingw32-static --with-cloog=/c/mingw482/prerequisites/i686-w64-mingw32-static --enable-cloog-backend=isl --with-pkgversion='i686-posix-dwarf-rev3, Built by MinGW-W64 project' --with-bugurl=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -I/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/include -I/c/mingw482/prerequisites/i686-zlib-static/include -I/c/mingw482/prerequisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/c/mingw482/i686-482-posix-dwarf-rt_v3-rev3/mingw32/opt/lib -L/c/mingw482/prerequisites/i686-zlib-static/lib -L/c/mingw482/prerequisites/i686-w64-mingw32-static/lib -Wl,--large-address-aware'
Thread model: posix
gcc version 4.8.2 (i686-posix-dwarf-rev3, Built by MinGW-W64 project)

Lin@DESKTOP-AO6HH3C /e/ThirdPartyLibrary/src/resiprocate-1.12.0
$ make
make all-recursive
make[1]: Entering directory /e/ThirdPartyLibrary/src/resiprocate-1.12.0' Making all in rutil make[2]: Entering directory /e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil'
Making all in dns/ares
make[3]: Entering directory /e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil/dns/ares' make[3]: Nothing to be done for all'.
make[3]: Leaving directory /e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil/dns/ares' Making all in . make[3]: Entering directory /e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil'
depbase=echo hep/HepAgent.lo | sed 's|[^/]*$|.deps/&|;s|\.lo$||';
/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I.. -DRESIP_OSTYPE_MINGW -DRESIP_ARCH_I686 -DRESIP_LARCH_IA32 -D_REENTRANT -DRESIP_TOOLCHAIN_GNU -I .. -I ../rutil/dns/ares -g -O2 -Wall -Wno-deprecated -I/e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil/dns/ares -MT hep/HepAgent.lo -MD -MP -MF $depbase.Tpo -c -o hep/HepAgent.lo hep/HepAgent.cxx &&
mv -f $depbase.Tpo $depbase.Plo
libtool: compile: g++ -DHAVE_CONFIG_H -I. -I.. -DRESIP_OSTYPE_MINGW -DRESIP_ARCH_I686 -DRESIP_LARCH_IA32 -D_REENTRANT -DRESIP_TOOLCHAIN_GNU -I .. -I ../rutil/dns/ares -g -O2 -Wall -Wno-deprecated -I/e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil/dns/ares -MT hep/HepAgent.lo -MD -MP -MF hep/.deps/HepAgent.Tpo -c hep/HepAgent.cxx -DDLL_EXPORT -DPIC -o hep/.libs/HepAgent.o
In file included from ../rutil/hep/ResipHep.hxx:5:0,
from hep/HepAgent.cxx:7:
../rutil/msvc/stdint.h:34:2: error: #error "Use this header only with Microsoft Visual C++ compilers!"
#error "Use this header only with Microsoft Visual C++ compilers!"
^
In file included from ../rutil/hep/ResipHep.hxx:18:0,
from hep/HepAgent.cxx:7:
../rutil/compat.hxx:330:0: warning: "_TRUNCATE" redefined [enabled by default]
#define _TRUNCATE -1
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/crtdefs.h:10:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/wchar.h:9,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/cwchar:44,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/postypes.h:40,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/char_traits.h:40,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:40,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/_mingw.h:514:0: note: this is the location of the previous definition
#define _TRUNCATE ((size_t)-1)
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:38:0: warning: "EWOULDBLOCK" redefined [enabled by default]
#define EWOULDBLOCK WSAEWOULDBLOCK
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:166:0: note: this is the location of the previous definition
#define EWOULDBLOCK 140
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:39:0: warning: "EINPROGRESS" redefined [enabled by default]
#define EINPROGRESS WSAEINPROGRESS
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:158:0: note: this is the location of the previous definition
#define EINPROGRESS 112
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:40:0: warning: "EALREADY" redefined [enabled by default]
#define EALREADY WSAEALREADY
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:106:0: note: this is the location of the previous definition
#define EALREADY 103
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:41:0: warning: "ENOTSOCK" redefined [enabled by default]
#define ENOTSOCK WSAENOTSOCK
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:146:0: note: this is the location of the previous definition
#define ENOTSOCK 128
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:42:0: warning: "EDESTADDRREQ" redefined [enabled by default]
#define EDESTADDRREQ WSAEDESTADDRREQ
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:118:0: note: this is the location of the previous definition
#define EDESTADDRREQ 109
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:43:0: warning: "EMSGSIZE" redefined [enabled by default]
#define EMSGSIZE WSAEMSGSIZE
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:126:0: note: this is the location of the previous definition
#define EMSGSIZE 115
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:44:0: warning: "EPROTOTYPE" redefined [enabled by default]
#define EPROTOTYPE WSAEPROTOTYPE
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:191:0: note: this is the location of the previous definition
#define EPROTOTYPE 136
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:45:0: warning: "ENOPROTOOPT" redefined [enabled by default]
#define ENOPROTOOPT WSAENOPROTOOPT
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:142:0: note: this is the location of the previous definition
#define ENOPROTOOPT 123
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:46:0: warning: "EPROTONOSUPPORT" redefined [enabled by default]
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:178:0: note: this is the location of the previous definition
#define EPROTONOSUPPORT 135
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:48:0: warning: "EOPNOTSUPP" redefined [enabled by default]
#define EOPNOTSUPP WSAEOPNOTSUPP
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:162:0: note: this is the location of the previous definition
#define EOPNOTSUPP 130
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:50:0: warning: "EAFNOSUPPORT" redefined [enabled by default]
#define EAFNOSUPPORT WSAEAFNOSUPPORT
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:82:0: note: this is the location of the previous definition
#define EAFNOSUPPORT 102
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:51:0: warning: "EADDRINUSE" redefined [enabled by default]
#define EADDRINUSE WSAEADDRINUSE
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:86:0: note: this is the location of the previous definition
#define EADDRINUSE 100
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:52:0: warning: "EADDRNOTAVAIL" redefined [enabled by default]
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:90:0: note: this is the location of the previous definition
#define EADDRNOTAVAIL 101
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:53:0: warning: "ENETDOWN" redefined [enabled by default]
#define ENETDOWN WSAENETDOWN
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:130:0: note: this is the location of the previous definition
#define ENETDOWN 116
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:54:0: warning: "ENETUNREACH" redefined [enabled by default]
#define ENETUNREACH WSAENETUNREACH
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:138:0: note: this is the location of the previous definition
#define ENETUNREACH 118
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:55:0: warning: "ENETRESET" redefined [enabled by default]
#define ENETRESET WSAENETRESET
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:134:0: note: this is the location of the previous definition
#define ENETRESET 117
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:56:0: warning: "ECONNABORTED" redefined [enabled by default]
#define ECONNABORTED WSAECONNABORTED
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:102:0: note: this is the location of the previous definition
#define ECONNABORTED 106
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:57:0: warning: "ECONNRESET" redefined [enabled by default]
#define ECONNRESET WSAECONNRESET
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:114:0: note: this is the location of the previous definition
#define ECONNRESET 108
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:58:0: warning: "ENOBUFS" redefined [enabled by default]
#define ENOBUFS WSAENOBUFS
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:98:0: note: this is the location of the previous definition
#define ENOBUFS 119
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:59:0: warning: "EISCONN" redefined [enabled by default]
#define EISCONN WSAEISCONN
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:94:0: note: this is the location of the previous definition
#define EISCONN 113
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:60:0: warning: "ENOTCONN" redefined [enabled by default]
#define ENOTCONN WSAENOTCONN
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:150:0: note: this is the location of the previous definition
#define ENOTCONN 126
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:63:0: warning: "ETIMEDOUT" redefined [enabled by default]
#define ETIMEDOUT WSAETIMEDOUT
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:183:0: note: this is the location of the previous definition
#define ETIMEDOUT 138
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:64:0: warning: "ECONNREFUSED" redefined [enabled by default]
#define ECONNREFUSED WSAECONNREFUSED
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:110:0: note: this is the location of the previous definition
#define ECONNREFUSED 107
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:65:0: warning: "ELOOP" redefined [enabled by default]
#define ELOOP WSAELOOP
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:187:0: note: this is the location of the previous definition
#define ELOOP 114
^
In file included from ../rutil/GenericIPAddress.hxx:11:0,
from ../rutil/hep/HepAgent.hxx:5,
from hep/HepAgent.cxx:8:
../rutil/Socket.hxx:68:0: warning: "EHOSTUNREACH" redefined [enabled by default]
#define EHOSTUNREACH WSAEHOSTUNREACH
^
In file included from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/pthread.h:63:0,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr-default.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/i686-w64-mingw32/bits/gthr.h:148,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/ext/atomicity.h:35,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/bits/basic_string.h:39,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/string:52,
from c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/c++/stdexcept:39,
from hep/HepAgent.cxx:5:
c:/Qt/4.8.7/mingw482_32/i686-w64-mingw32/include/errno.h:122:0: note: this is the location of the previous definition
#define EHOSTUNREACH 110
^
make[3]: *** [hep/HepAgent.lo] Error 1
make[3]: Leaving directory /e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory /e/ThirdPartyLibrary/src/resiprocate-1.12.0/rutil'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/e/ThirdPartyLibrary/src/resiprocate-1.12.0'
make: *** [all] Error 2

Enabling "USE_SIGCOMP" macro for android build

I am building resiprocate for Android architectures using the android-custom-ndk script.

The build is successful.

But when I use the above resiprocate build with example Android app(Just to send a register message), it throws errors

ConnectionBase.cxx:83 | No compression library available:
Connection.cxx:45 | Connection::Connection: new connection created to who: [ V4 0.0.0.0:0 UNKNOWN_TRANSPORT ], is server = 0
ConnectionManager.cxx:34 | ConnectionManager::ConnectionManager() called
InternalTransport.cxx:101 | Failed to create socket: Operation not permitted
BaseException.cxx:20 | BaseException at InternalTransport.cxx:102 Can't create TcpBaseTransport

This is how I am adding transport

m_stack->addTransport(TLS,5061,V4,StunEnabled,Data::Empty,Data::Empty,Data::Empty,SecurityTypes::SSLv23, 0, "","", SecurityTypes::Optional, false, wsConnectionValidator, wsCookieFactory);

We have updated android-custom-ndk script file to include SIGCOMP flag

`autoreconf -i

./configure
--libdir=/libs/${MOD_NAME}
--host=${CROSS_COMPILE}
--with-sysroot=${SYSROOT}
--enable-android
--with-ssl
--with-sigcomp
"$@"`

After building and opening to resiprocate source code in IDE we see that the code inside #ifdef USE_SIGCOMP doesn't get highlighted meaning the above flag USE_SIGCOMP is not set.

Can someone help me to find out a way to enable this macro flag or is there anything else I am missing on.

Thanks

UdpTransport cannot receive message datagrams larger than 8192 bytes

When a SIP message larger than 8192 bytes is received, stack does not handle the message. Instead it prints the following to the log.

INFO | 20220503-085248.385 |  | RESIP:TRANSPORT | 29032 | Transport.cxx:151 |  The message was too large to fit into the specified buffer and was truncated.

RFC 3261 Section 18.1.1 indicates that implementations should be able to handle messages up to the maximum datagram size, which for UDP is 65535 bytes.

DtlsTransport appears to have the same problem. Albeit in slightly different code.

I can see a couple of potential solutions but I'm interested in other's opinions:

  1. Increase UdpTransport::MaxBufferSize to 65535. This should fix both UdpTransport and DtlsTransport with a single change. It would mean that each message consumes 8x the memory though!
  2. Modify UdpTransport::processRxRecv() to use MSG_PEEK|MSG_TRUNC to determine the size of the pending message before allocating the receive buffer. The ability of UdpTransport to reuse the receive buffer if a message wasn't parsed is an added complexity here. DtlsTransport::_read() would require a similar code change, perhaps slightly simpler as it DtlsTransport does not appear to reuse the receive buffer.

The WSS transport is crashed.

I've got a crash when using the WSS transport, but hard to replicate it, I've compared it with a normal log, it's strange that the stack is still called Connection::performReads() after ConnectionBase::~ConnectionBase 0000003171199410.

Update: we can simulate this crash by simply letting the nBytes = -1 after int nBytes = write(data.data + mSendPos, int(data.size() - mSendPos)); in the Connection::performWrite(), say the resip stack will crashed anyway if the write is failed with WSS transport.

Below is the log:

DEBUG | 20220116-114058.399 | callmanager.exe | RESIP:TRANSPORT | 9636 | TcpBaseTransport.cxx:330 | Processing write for [ V4 95.147.149.9:58104 WSS flowKey=15808 transportKey=5 ]
DEBUG | 20220116-114058.399 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionManager.cxx:65 | Found fd 15808
DEBUG | 20220116-114058.402 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:507 | Transportwrite--Up fall through to write
DEBUG | 20220116-114058.477 | callmanager.exe | RESIP:TRANSACTION | 3656 | TuSelector.cxx:70 | Send to TU: DialogUsageManager size=0 

DumTimeout::Retransmit1xx: duration=60 seq=1
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | TcpBaseTransport.cxx:196 | 000000312DC1A480 Received TCP connection from: [ V4 195.194.50.201:18349 WSS transportKey=5 ] mTuple: [ V4 0.0.0.0:10443 WSS transportKey=5 ] as fd=25724
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionManager.cxx:93 | Could not find a connection for [ V4 195.194.50.201:18349 WSS transportKey=5 ]
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionBase.cxx:71 | ConnectionBase::ConnectionBase, who: [ V4 195.194.50.201:18349 WSS transportKey=5 ] 0000003171199410
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionBase.cxx:84 | No compression library available: 0000003171199410
INFO | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | Connection.cxx:45 | Connection::Connection: new connection created to who: [ V4 195.194.50.201:18349 WSS flowKey=25724 transportKey=5 ], is server = 1
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionManager.cxx:187 | ConnectionManager::addConnection() 25724:[ V4 195.194.50.201:18349 WSS flowKey=25724 transportKey=5 ], totalConnections=1847
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionManager.cxx:248 | recycling connections not used in last 21600 seconds
INFO | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:73 | Creating TLS connection for domain sri.net [ V4 195.194.50.201:18349 WSS transportKey=5 ] on 25724
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:80 | Trying to form TLS connection - acting as server
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsBaseTransport.cxx:105 | Using TlsDomain-transport SSL_CTX
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:113 | Not expecting client certificate
DEBUG | 20220116-114058.527 | callmanager.exe | RESIP:TRANSPORT | 9636 | WssConnection.cxx:20 | Creating WSS connection [ V4 195.194.50.201:18349 WSS transportKey=5 ] on 25724
DEBUG | 20220116-114058.552 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionBase.cxx:1058 | Creating buffer for CONN_BASE: 0000003171199410 [ V4 195.194.50.201:18349 WSS flowKey=25724 transportKey=5 ]
INFO | 20220116-114058.552 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:205 | TLS handshake starting (Server mode)
INFO | 20220116-114058.552 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:221 | TLS connected
DEBUG | 20220116-114058.574 | callmanager.exe | RESIP:TRANSACTION | 3656 | TuSelector.cxx:70 | Send to TU: DialogUsageManager size=0 

DumTimeout::StaleCall: duration=180 seq=2
INFO | 20220116-114058.633 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:338 | TLS connected
INFO | 20220116-114058.633 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:696 | TLS sessions set up with TLSv1.3 TLSv1.3 TLS_AES_256_GCM_SHA384 
DEBUG | 20220116-114058.633 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:702 | No peer certificate in TLS connection
INFO | 20220116-114058.633 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:369 | TLS handshake done for peer 
DEBUG | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionBase.cxx:711 | WebSocket upgrade accepted, cookie count = 0
DEBUG | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:507 | Transportwrite--Up fall through to write
ERR | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:51 | Got TLS SSL_write error=5 ret=-1
WARNING | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:54 | no reason found with ERR_get_error_line
INFO | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | Connection.cxx:270 | Write failed on socket: 25724, closing connection
ERR | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:164 | Unexpected error in SSL_shutdown
ERR | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:51 | Got TLS SSL_shutdown error=5 ret=-1
WARNING | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | TlsConnection.cxx:54 | no reason found with ERR_get_error_line
DEBUG | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionManager.cxx:217 | ConnectionManager::removeConnection()
DEBUG | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | ConnectionBase.cxx:115 | ConnectionBase::~ConnectionBase 0000003171199410
DEBUG | 20220116-114058.634 | callmanager.exe | RESIP:TRANSPORT | 9636 | Connection.cxx:428 | Connection::performReads()  read=589
DEBUG | 20220116-114058.677 | callmanager.exe | RESIP:TRANSACTION | 3656 | TuSelector.cxx:70 | Send to TU: DialogUsageManager size=0 

The below is the call stack taken from the dump file.
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.