reSIProcate/DialogUsageManager  9694
Classes | Defines | Functions
testSMIMEMessage.cxx File Reference
#include "resip/dum/DialogUsageManager.hxx"
#include "resip/dum/MasterProfile.hxx"
#include "resip/dum/UserProfile.hxx"
#include "resip/dum/ClientAuthManager.hxx"
#include "resip/dum/ClientRegistration.hxx"
#include "resip/dum/ClientPagerMessage.hxx"
#include "resip/dum/ServerPagerMessage.hxx"
#include "resip/dum/RegistrationHandler.hxx"
#include "resip/dum/PagerMessageHandler.hxx"
#include "resip/stack/PlainContents.hxx"
#include "resip/stack/Pkcs7Contents.hxx"
#include "resip/stack/MultipartSignedContents.hxx"
#include "resip/stack/Mime.hxx"
#include "resip/stack/SecurityAttributes.hxx"
#include "resip/stack/Helper.hxx"
#include "rutil/Log.hxx"
#include "rutil/Logger.hxx"
#include "resip/stack/ssl/Security.hxx"
#include <iostream>
#include <string>
#include <sstream>
Include dependency graph for testSMIMEMessage.cxx:

Go to the source code of this file.

Classes

class  TestSMIMEMessageHandler

Defines

#define RESIPROCATE_SUBSYSTEM   Subsystem::TEST

Functions

int main (int argc, char *argv[])

Define Documentation

#define RESIPROCATE_SUBSYSTEM   Subsystem::TEST

Definition at line 35 of file testSMIMEMessage.cxx.


Function Documentation

int main ( int  argc,
char *  argv[] 
)

Definition at line 147 of file testSMIMEMessage.cxx.

References resip::DialogUsageManager::addTransport(), resip::BaseSecurity::encrypt(), finished, resip::Handle< T >::get(), resip::Uri::getAor(), resip::Uri::host(), InfoLog, TestSMIMEMessageHandler::isEnded(), TestSMIMEMessageHandler::isRcvd(), TestSMIMEMessageHandler::isRegistered(), resip::DialogUsageManager::makePagerMessage(), resip::DialogUsageManager::makeRegistration(), resip::SipStack::process(), resip::DialogUsageManager::process(), TestSMIMEMessageHandler::reset(), resip::DialogUsageManager::send(), resip::DialogUsageManager::setClientAuthManager(), resip::DialogUsageManager::setClientPagerMessageHandler(), resip::DialogUsageManager::setClientRegistrationHandler(), resip::DialogUsageManager::setMasterProfile(), resip::DialogUsageManager::setServerPagerMessageHandler(), resip::BaseSecurity::sign(), UDP, resip::NameAddr::uri(), resip::Uri::user(), and V4.

{

   if ( argc < 3 ) {
      cout << "usage: " << argv[0] << " sip:user passwd\n";
      return 0;
   }

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

   NameAddr userAor(argv[1]);
   Data passwd(argv[2]);

   InfoLog(<< "user: " << userAor << ", passwd: " << passwd << "\n");

#ifdef WIN32
   Security* security = new WinSecurity;
#else
   Security* security = new Security;
#endif

   assert(security);

   SipStack clientStack(security);
   DialogUsageManager clientDum(clientStack);
   clientDum.addTransport(UDP, 0, V4);
   //clientDum.addTransport(TCP, 0, V4);
   //clientDum.addTransport(TLS, 0, V4);
   // clientDum.addTransport(UDP, 0, V6);
   // clientDum.addTransport(TCP, 0, V6);
   // clientDum.addTransport(TLS, 0, V6);

   SharedPtr<MasterProfile> clientProfile(new MasterProfile);   
   auto_ptr<ClientAuthManager> clientAuth(new ClientAuthManager());   
   TestSMIMEMessageHandler clientHandler(security);

   clientDum.setClientAuthManager(clientAuth);
   clientDum.setClientRegistrationHandler(&clientHandler);
   clientDum.setClientPagerMessageHandler(&clientHandler);
   clientDum.setServerPagerMessageHandler(&clientHandler);

   clientProfile->setDefaultFrom(userAor);
   clientProfile->setDigestCredential(userAor.uri().host(), userAor.uri().user(), passwd);
   clientProfile->setDefaultRegistrationTime(70);               
   clientProfile->addSupportedMethod(MESSAGE);
   clientProfile->addSupportedMimeType(MESSAGE, Mime("text", "plain"));
   clientProfile->addSupportedMimeType(MESSAGE, Mime("application", "pkcs7-mime"));
   clientProfile->addSupportedMimeType(MESSAGE, Mime("multipart", "signed"));
   clientDum.setMasterProfile(clientProfile);

   SharedPtr<SipMessage> regMessage = clientDum.makeRegistration(userAor);
        
   InfoLog( << *regMessage << "Generated register: " << endl << *regMessage );
   clientDum.send(regMessage);

   int iteration = 0;
   bool finished = false;
   while (!finished) 
   {

      clientHandler.reset();
      
      bool sent = false;
      while (!clientHandler.isEnded() || !clientHandler.isRcvd() )
      {
         clientStack.process(100);
         while (clientDum.process());

         if (!sent && clientHandler.isRegistered())
         {
            try 
            {
               ClientPagerMessageHandle cpmh = clientDum.makePagerMessage(userAor);                     
               Contents* mcontent = new PlainContents(Data("message"));
               auto_ptr<Contents> content;

               switch (iteration) 
               {
                  case 0:
                  {
                     InfoLog( << "Sending PKCS7 encrypted data" );
                     Pkcs7Contents* pkcs7 = security->encrypt(mcontent, userAor.uri().getAor());
                     content = auto_ptr<Contents>(static_cast<Contents *>(pkcs7));
                     break;
                  }
                  case 1:
                  {
                     InfoLog( << "Sending PKCS7 signed data" );
                     MultipartSignedContents* mpc = security->sign(userAor.uri().getAor(), mcontent);
                     content = auto_ptr<Contents>(static_cast<Contents *>(mpc));
                     break;
                  }
                  default:
                  {
                     InfoLog( << "Finished!" );
                     finished = true;
                     break;
                  }
               }
               
               if (finished)
                  break;
               
               cpmh.get()->page(content);
               sent = true;
               
            }
               
            catch (...)
            {
               InfoLog( << "failure to send message at iteration " << iteration );
               break;
            }

         }

      }
      ++iteration;
   }

   return 0;
}

Here is the call graph for this function: