Re: [OpenSIPStack] Simple Sample for Subscribe
Brought to you by:
joegenbaclor
From: Joegen E. B. <jo...@pl...> - 2006-06-19 13:12:54
|
Hi Martin, Subscribe and Notify will be part of the RFC3265Session* files. These files are yet to be checked into the CVS head when support for PUBLISH and PIDF are finished. I am expecting new development on this subject within the next couple of weeks. As for constructing and sending a SUBSCRIBE, I have attached a sample code that demonstrates creation and sending of SUBSCRIBE using the stack ///////////////////////////////////////////////////////////////////////////////////////////// SIPStack sipStack; sipStack.AddTransport( SIPTransport::UDP, "", 5060); SIPURI uri( "sip:som...@ex..." ); PIPSocket::Address targetAddress; WORD targetPort; if( SIPTransport::Resolve( uri, targetAddress, targetPort ) ) { std::cerr << uri << " does not resolve to an IP Address" << std::endl; } SIPMessage subscribe; BOOL willUseProxy = FALSE; /// create the request line RequestLine requestLine; requestLine.SetMethod( "SUBSCRIBE" ); requestLine.SetRequestURI( uri.AsString() ); subscribe.SetStartLine( requestLine ); Via via; PIPSocket::Address viaHost; WORD viaPort; SIPTransportManager * transportManager = sipStack.GetTransportManager(); if( !transportManager->GetListenerAddress( SIPTransport::UDP, targetAddress, viaHost, viaPort )) return; via.SetAddress( viaHost.AsString() ); via.SetPort( viaPort ); via.SetBranch( ParserTools::GenBranchParameter() ); via.AddParameter( "rport", "" ); subscribe.AppendVia( via ); /// Set From header From from; SIPURI fromURI( "sip:so...@ex..." ); from.SetURI( fromURI ); from.AddParameter( "tag", ParserTools::GenTagParameter() ); subscribe.SetFrom( from ); /// Set To header To to; to.SetURI( uri ); subscribe.SetTo( to ); /// Set the call Id CallId callId; callId.SetHeaderBody( "call-id-123456" ); subscribe.SetCallId( callId ); /// Set the CSeq CSeq cSeq; cSeq.SetMethod( "SUBSCRIBE" ); cSeq.SetSequence( 4711 ); subscribe.SetCSeq( cSeq ); /// Set the contact SIPURI contactURI = fromURI; contactURI.SetHost( via.GetURI().GetHost() ); contactURI.SetPort( via.GetURI().GetPort() ); ContactURI contact( contactURI, "My Display Name" ); subscribe.AppendContact( contact ); Event event( "presence" ); subscribe.SetEvent( event ); TransactionId transactionId; sipStack.FindTransactionAndAddEvent( subscribe, transactionId, FALSE ); while( TRUE ) { SIPStackEvent * event = sipStack.ReadEvent(); if( event->GetType() == SIPStackEvent::Final ) break; else if( event->GetType() == SIPStackEvent::Message ) { SIPMessage msg = ((SIPMessageArrival*)event)->GetMessage(); if( !msg.IsRequest() ) { /// we got a response std::cout << msg << std::endl; if( msg.GetStatusCode() >= 200 ) break; } } } sipStack.Terminate(); ////////////////////////////////////////////////////////////////////////////////////////////// Martin Hillmeier wrote: > Hi, > > can somebody give me a simple sample (few lines of code) how I > can send a SUBSCRIBE > with opensipstack. I'm a newbie and have no idea how to do. > > > Thanks in advance > > Martin Hillmeier > ------------------------------------------------------------------------ > > _______________________________________________ > opensipstack-devel mailing list > ope...@li... > https://lists.sourceforge.net/lists/listinfo/opensipstack-devel > |