Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The following code example demonstrates how to create an outgoing session when the client is behind a NAT. The operations in the Initialize RTC code example must be performed before using this example.
Note This example does not contain error checking or releases appropriate for real code.
C++ Code Example
//-------------------------------
//Outgoing call from behind a NAT
//-------------------------------
HRESULT hr = S_OK;
BSTR bstrLocalURI = NULL;
BSTR bstrDestURI = NULL;
RTC_SESSION_TYPE enSessionType;
IRTCSession *pIRTCSession = NULL;
IRTCSessionPortManagement *pSessionPortManagement;
IRTCPortManager *pIRTCPortManager;
IRTCProfile *pIRTCProfile = NULL;
IRTCClient2 *pIRTCClient;
enSessionType = // Specify session type
// Get the URI to call; this can be a sip: or a tel: URI.
// Machines behind a NAT cannot register with Server;
// therefore, the profile will be NULL.
bstrDestURI = ::SysAllocString(L"sip:someone@microsoft.com");
// CoCreate and initialize RTCClient. See the "Initialize
// RTC" code example.
// Cocreate and initialize the echo client.
// QueryInterface for pIRTCPortManager.
// Create the session with the specified session type
// and local URI.
hr = pIRTCClient->CreateSession( enSessionType,
bstrLocalURI,
pIRTCProfile,
RTCCS_FORCE_PROFILE,
&pIRTCSession );
// If (hr != S_OK), process the error here.
// Query for the IRTCSessionPortManagement interface.
hr = pIRTCSession->QueryInterface(IID_IRTCSessionPortManagement),
(void **) &pSessionPortManagement);
// If (hr != S_OK), process the error here.
//Set the port manager on the session.
hr = pSessionPortManagement->SetPortManager(pIRTCPortManager);
// Release the pointer to IRTCSessionPortManagement
// because we no longer need it.
if(pSessionPortManagement)
{
pSessionPortManagement->Release();
pSessionPortManagement=NULL;
}
IRTCParticipant *pIRTCParticipant = NULL;
hr = pIRTCSession->AddParticipant( bstrDestURI,
NULL,
&pIRTCParticipant );
// RTC calls into the IRTCPortManager::GetMapping()
// method to get the SIP and media ports.
// If (hr != S_OK), process the error here.
...
// Free all the strings allocated with SysFreeString().
//Release all pointers.
if(pIRTCSession)
{
pIRTCSession->Release();
pIRTCSession=NULL;
}
if(pIRTCPortManager)
{
pIRTCPortManager->Release();
pIRTCPortManager=NULL;
}
if(pIRTCClient)
{
pIRTCClient->Release();
pIRTCClient=NULL;
}
if(pIRTCParticipant)
{
pIRTCParticipant->Release();
pIRTCParticipant=NULL;
}
Visual Basic Code Example
'-------------------------------
'Outgoing call from behind a NAT
'-------------------------------
Dim bstrLocalURI As String '(for example, someone@microsoft.com)
Dim bstrDestURI As String '(for example, someone@microsoft.com)
Dim enSessionType As RTC_SESSION_TYPE
Dim objSession As IRTCSession
Dim objSessionPortManagement As IRTCSessionPortManagement
Dim objPortManager As IRTCPortManager
Dim objProfile As IRTCProfile
Dim objRTCClient As IRTCClient2
Dim objParticipant As IRTCParticipant
bstrLocalURI = vbNullString
bstrDestURI = vbNullString
Set objSession = Nothing
Set objSessionPortManagement = Nothing
Set objProfile = Nothing
'enSessionType = 'Specify session type
'CoCreate and initialize RTCClient.
'Cocreate and initialize your implementation of the port manager.
'Create the session with the specified session type and local URI.
Set objSession = objRTCClient.CreateSession(enSessionType, _
bstrLocalURI, _
objProfile, _
0)
'If (Err.Number), process the error here.
Set objSessionPortManagement = objSession
'Set the port manager for the session.
Call objSessionPortManagement.SetPortManager(objPortManager)
'Add a participant to the session.
Set objParticipant = objSession.AddParticipant(bstrDestURI, vbNullString)
'RTC calls into the Port Manager's GetMapping() implementation
'to obtain the SIP and media ports.
' Use VB error handling to catch failures.
...