reSIProcate/DialogUsageManager  9694
Classes | Defines | Functions
testRequestValidationHandler.cxx File Reference
#include "resip/stack/SdpContents.hxx"
#include "resip/stack/PlainContents.hxx"
#include "resip/stack/SipMessage.hxx"
#include "resip/stack/ShutdownMessage.hxx"
#include "resip/stack/SipStack.hxx"
#include "resip/dum/ClientAuthManager.hxx"
#include "resip/dum/ClientInviteSession.hxx"
#include "resip/dum/ClientRegistration.hxx"
#include "resip/dum/DialogUsageManager.hxx"
#include "resip/dum/DumShutdownHandler.hxx"
#include "resip/dum/InviteSessionHandler.hxx"
#include "resip/dum/RequestValidationHandler.hxx"
#include "resip/dum/MasterProfile.hxx"
#include "resip/dum/RegistrationHandler.hxx"
#include "resip/dum/ServerInviteSession.hxx"
#include "resip/dum/ServerOutOfDialogReq.hxx"
#include "resip/dum/OutOfDialogHandler.hxx"
#include "resip/dum/AppDialog.hxx"
#include "resip/dum/AppDialogSet.hxx"
#include "rutil/Log.hxx"
#include "rutil/Logger.hxx"
#include "rutil/Random.hxx"
#include "rutil/WinLeakCheck.hxx"
#include <sstream>
#include <time.h>
Include dependency graph for testRequestValidationHandler.cxx:

Go to the source code of this file.

Classes

class  TestInviteSessionHandler

Defines

#define RESIPROCATE_SUBSYSTEM   Subsystem::TEST

Functions

int main (int argc, char **argv)

Define Documentation

#define RESIPROCATE_SUBSYSTEM   Subsystem::TEST

Definition at line 28 of file testRequestValidationHandler.cxx.


Function Documentation

int main ( int  argc,
char **  argv 
)

Definition at line 236 of file testRequestValidationHandler.cxx.

References resip::DialogUsageManager::addTransport(), resip::Log::Cout, resip::Data::data(), resip::Log::Debug, resip::DialogUsageManager::getMasterProfile(), h_RequestLine, resip::Log::initialize(), resip::DialogUsageManager::makeOutOfDialogRequest(), resip::SipStack::process(), resip::DialogUsageManager::process(), resip::DialogUsageManager::send(), resip::DialogUsageManager::setClientAuthManager(), resip::DialogUsageManager::setInviteSessionHandler(), resip::DialogUsageManager::setMasterProfile(), resip::DialogUsageManager::setRequestValidationHandler(), resip::Data::size(), resip::TCP, type, and resip::UDP.

{
   Log::initialize(Log::Cout, resip::Log::Debug, argv[0]);

   NameAddr uacAor("sip:127.0.0.1:17298");
   NameAddr uasAor("sip:127.0.0.1:17299");

   SdpContents* dummySdp;
   HeaderFieldValue* hfv;
   Data* txt;

   txt = new Data("v=0\r\n"
                  "o=1900 369696545 369696545 IN IP4 192.168.2.15\r\n"
                  "s=X-Lite\r\n"
                  "c=IN IP4 192.168.2.15\r\n"
                  "t=0 0\r\n"
                  "m=audio 8000 RTP/AVP 8 3 98 97 101\r\n"
                  "a=rtpmap:8 pcma/8000\r\n"
                  "a=rtpmap:3 gsm/8000\r\n"
                  "a=rtpmap:98 iLBC\r\n"
                  "a=rtpmap:97 speex/8000\r\n"
                  "a=rtpmap:101 telephone-event/8000\r\n"
                  "a=fmtp:101 0-15\r\n");

   hfv = new HeaderFieldValue(txt->data(), (unsigned int)txt->size());
   Mime type("application", "sdp");
   dummySdp = new SdpContents(*hfv, type);

   //set up UAC
   SipStack stackUac;
   DialogUsageManager* dumUac = new DialogUsageManager(stackUac);
   dumUac->addTransport(UDP, 17298);
   dumUac->addTransport(TCP, 17298);

   SharedPtr<MasterProfile> uacMasterProfile(new MasterProfile);
   auto_ptr<ClientAuthManager> uacAuth(new ClientAuthManager);
   dumUac->setMasterProfile(uacMasterProfile);
   dumUac->setClientAuthManager(uacAuth);

   TestInviteSessionHandler uac("UAC");
   dumUac->setInviteSessionHandler(&uac);
   dumUac->setRequestValidationHandler(&uac);

   dumUac->getMasterProfile()->setDefaultFrom(uacAor);

   //set up UAS
   SipStack stackUas;
   DialogUsageManager* dumUas = new DialogUsageManager(stackUas);
   dumUas->addTransport(UDP, 17299);
   dumUas->addTransport(TCP, 17299);
   
   SharedPtr<MasterProfile> uasMasterProfile(new MasterProfile);
   std::auto_ptr<ClientAuthManager> uasAuth(new ClientAuthManager);
   dumUas->setMasterProfile(uasMasterProfile);
   dumUas->setClientAuthManager(uasAuth);

   dumUas->getMasterProfile()->setDefaultFrom(uasAor);

   TestInviteSessionHandler uas("UAS");
   dumUas->setInviteSessionHandler(&uas);
   dumUas->setRequestValidationHandler(&uas);

   // First test: invalid method
   dumUac->send(dumUac->makeOutOfDialogRequest(uasAor, MESSAGE));

   // Second test: invalid scheme
   SharedPtr<SipMessage> invalidSchemeMsg = dumUac->makeOutOfDialogRequest(uasAor, OPTIONS);
   invalidSchemeMsg->header(h_RequestLine).uri().scheme() = "tel";
   dumUac->send(invalidSchemeMsg);

   // !fjoanis! TODO: Add more tests

   assert(uas.mInvalidMethod == 0);
   assert(uas.mInvalidScheme == 0);
   assert(uas.mInvalidRequiredOptions == 0);
   assert(uas.m100RelNotSupportedByRemote == 0);
   assert(uas.mInvalidContentType == 0);
   assert(uas.mInvalidContentEncoding == 0);
   assert(uas.mInvalidContentLanguage == 0);
   assert(uas.mInvalidAccept == 0);

   assert(uac.mInvalidMethod == 0);
   assert(uac.mInvalidScheme == 0);
   assert(uac.mInvalidRequiredOptions == 0);
   assert(uac.m100RelNotSupportedByRemote == 0);
   assert(uac.mInvalidContentType == 0);
   assert(uac.mInvalidContentEncoding == 0);
   assert(uac.mInvalidContentLanguage == 0);
   assert(uac.mInvalidAccept == 0);  
 
   // Now give them some cycles
   for(int i=0;i<10;i++)
   {
     {
        stackUac.process(50);
        while(dumUac->process());
     }
     {
        stackUas.process(50);
        while(dumUas->process());
     }
   }

   assert(uas.mInvalidMethod == 1);
   assert(uas.mInvalidScheme == 1);
   assert(uas.mInvalidRequiredOptions == 0);
   assert(uas.m100RelNotSupportedByRemote == 0);
   assert(uas.mInvalidContentType == 0);
   assert(uas.mInvalidContentEncoding == 0);
   assert(uas.mInvalidContentLanguage == 0);
   assert(uas.mInvalidAccept == 0);

   assert(uac.mInvalidMethod == 0);
   assert(uac.mInvalidScheme == 0);
   assert(uac.mInvalidRequiredOptions == 0);
   assert(uac.m100RelNotSupportedByRemote == 0);
   assert(uac.mInvalidContentType == 0);
   assert(uac.mInvalidContentEncoding == 0);
   assert(uac.mInvalidContentLanguage == 0);
   assert(uac.mInvalidAccept == 0);

   delete dumUac; 
   delete dumUas;
   delete dummySdp;
   delete txt;
   delete hfv;

   cout << "!!!!!!!!!!!!!!!!!! Successful !!!!!!!!!! " << endl;
#if defined(WIN32) && defined(_DEBUG) && defined(LEAK_CHECK) 
   }
#endif

}

Here is the call graph for this function: