From 4c06ec3507bfc53051391e8c569aa49b4f5ad507 Mon Sep 17 00:00:00 2001 From: Alexandre Savard <alexandresavard@alexandresavard-desktop.(none)> Date: Tue, 12 Jan 2010 15:40:27 -0500 Subject: [PATCH] [#1722] Not working SdesNegociator unit test --- sflphone-common/src/sip/Pattern.cpp | 25 ++++++++++++++++----- sflphone-common/src/sip/SdesNegotiator.cpp | 11 ++++++--- sflphone-common/test/sdesnegotiatorTest.cpp | 25 +++++++++++++++++++-- sflphone-common/test/sdesnegotiatorTest.h | 7 ++++++ 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/sflphone-common/src/sip/Pattern.cpp b/sflphone-common/src/sip/Pattern.cpp index cc62a6871e..2e7619fd76 100644 --- a/sflphone-common/src/sip/Pattern.cpp +++ b/sflphone-common/src/sip/Pattern.cpp @@ -31,6 +31,8 @@ Pattern::Pattern (const std::string& pattern, const std::string& options) : _count (0), _options (0) { + + printf("Pattern constructor called for %s!\n", pattern.c_str()); // Set offsets _offset[0] = _offset[1] = 0; @@ -137,6 +139,8 @@ std::string Pattern::group (int groupNumber) { const char * stringPtr; + printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str()); + int rc = pcre_get_substring ( _subject.substr (_offset[0]).c_str(), _ovector, @@ -169,6 +173,10 @@ std::string Pattern::group (const std::string& groupName) { const char * stringPtr = NULL; + printf("Pattern::group %s\n", groupName.c_str()); + printf("_subject.substr : %s\n", _subject.substr (_offset[0]).c_str()); + printf("_count : %i\n", _count); + int rc = pcre_get_named_substring ( _re, _subject.substr (_offset[0]).c_str(), @@ -177,10 +185,13 @@ std::string Pattern::group (const std::string& groupName) groupName.c_str(), &stringPtr); + printf("stringPtr : %s\n", stringPtr); + if (rc < 0) { switch (rc) { case PCRE_ERROR_NOSUBSTRING: + printf("Pattern::PCRE_ERROR_NOSUBSTRING\n"); throw std::out_of_range ("Invalid group reference."); case PCRE_ERROR_NOMEMORY: @@ -245,8 +256,9 @@ bool Pattern::matches (void) throw (match_error) bool Pattern::matches (const std::string& subject) throw (match_error) { - //printf("Current offset: %d, old offset: %d", _offset[1], _offset[0]); - //printf("Trying <start>%s<end>", subject.substr(_offset[1]).c_str()); + printf("Pattern::matches\n"); + printf(" Current offset: %d, old offset: %d", _offset[1], _offset[0]); + printf(" Trying <start>%s<end>\n", subject.substr(_offset[1]).c_str()); // Try to find a match for this pattern int rc = pcre_exec ( @@ -263,7 +275,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) if (rc < 0) { _offset[0] = _offset[1] = 0; - //printf("Matching failed with %d", rc); + printf(" Matching failed with %d\n", rc); return false; } @@ -274,7 +286,7 @@ bool Pattern::matches (const std::string& subject) throw (match_error) _offset[1] = _ovector[1] + _offset[0]; } - //printf("Matching succeeded with %d to %d", (int) start(), (int) end()); + printf(" Matching succeeded with %d to %d\n", (int) start(), (int) end()); // Matching succeded but not enough space. if (rc == 0) { @@ -284,7 +296,8 @@ bool Pattern::matches (const std::string& subject) throw (match_error) // Matching succeeded. Keep the number of substrings for // subsequent calls to group(). - _count = rc; + printf("_count: %i = %i\n", _count, rc); + _count = rc; return true; } @@ -300,6 +313,8 @@ std::vector<std::string> Pattern::split (void) tokenStart = start(); substringSplitted.push_back (_subject.substr (tokenEnd + 1, tokenStart - tokenEnd - 1)); + printf("split: %s\n", _subject.substr (tokenEnd + 1, + tokenStart - tokenEnd - 1).c_str()); tokenEnd = end(); } diff --git a/sflphone-common/src/sip/SdesNegotiator.cpp b/sflphone-common/src/sip/SdesNegotiator.cpp index f0b837a453..8e95937832 100644 --- a/sflphone-common/src/sip/SdesNegotiator.cpp +++ b/sflphone-common/src/sip/SdesNegotiator.cpp @@ -20,6 +20,7 @@ #include "Pattern.h" +#include <cstdio> #include <iostream> #include <sstream> #include <algorithm> @@ -101,10 +102,11 @@ void SdesNegotiator::parse (void) // Split the line into its component // that we will analyze further down. - + std::vector<std::string> sdesLine; + *generalSyntaxPattern << (*iter); - std::vector<std::string> sdesLine; - + + try { sdesLine = generalSyntaxPattern->split(); @@ -114,11 +116,14 @@ void SdesNegotiator::parse (void) } catch (match_error& exception) { throw parse_error ("Error while analyzing the SDES line."); } + // Check if the attribute starts with a=crypto // and get the tag for this line *tagPattern << sdesLine.at (0); + printf("sdesLine.at (0).c_str() : %s\n", sdesLine.at (0).c_str()); + try { std::string tag = tagPattern->group ("tag"); std::cout << "tag = " << tag << std::endl; diff --git a/sflphone-common/test/sdesnegotiatorTest.cpp b/sflphone-common/test/sdesnegotiatorTest.cpp index cf21580649..749ef1b0a6 100644 --- a/sflphone-common/test/sdesnegotiatorTest.cpp +++ b/sflphone-common/test/sdesnegotiatorTest.cpp @@ -41,6 +41,19 @@ using std::endl; void SdesNegotiatorTest::setUp() { + // std::string attr("1 AES_CM_128_HMAC_SHA1_32 srtp inline:16/14/AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwd/2^20/1:32"); + + std::string attr("a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:d0RmdmcmVCspeEc3QGZiNWpVLFJhQX1cfHAwJSoj|2^20|1:32"); + + remoteOffer = new std::vector<std::string>(); + remoteOffer->push_back(attr); + + localCapabilities = new std::vector<sfl::CryptoSuiteDefinition>(); + for(int i = 0; i < 3; i++) { + localCapabilities->push_back(sfl::CryptoSuites[i]); + } + + sdesnego = new sfl::SdesNegotiator(*localCapabilities, *remoteOffer); } @@ -48,12 +61,20 @@ void SdesNegotiatorTest::setUp() void SdesNegotiatorTest::tearDown() { + delete remoteOffer; + remoteOffer = NULL; + + delete localCapabilities; + localCapabilities = NULL; + + delete sdesnego; + sdesnego = NULL; + } void SdesNegotiatorTest::testNegotiation() { - - + CPPUNIT_ASSERT(sdesnego->negotiate()); } diff --git a/sflphone-common/test/sdesnegotiatorTest.h b/sflphone-common/test/sdesnegotiatorTest.h index 16c2dfb7f8..119ba9a2c7 100644 --- a/sflphone-common/test/sdesnegotiatorTest.h +++ b/sflphone-common/test/sdesnegotiatorTest.h @@ -29,6 +29,7 @@ #include <sstream> #include <ccrtp/rtp.h> +#include <vector> // pjsip import #include <pjsip.h> @@ -84,6 +85,12 @@ class SdesNegotiatorTest : public CppUnit::TestCase { private: + sfl::SdesNegotiator *sdesnego; + + std::vector<std::string> *remoteOffer; + + std::vector<sfl::CryptoSuiteDefinition> *localCapabilities; + }; /* Register our test module */ -- GitLab