The Server Side Example for C++
#include "ltmm.h"
#include "ILMNetSnk2.h"
HRESULT AddNetTarget();
IltmmCapture *pCapture;
void main()
{
BSTR sUser;
BSTR sPassword;
long lIndex = 0;
BSTR szFileName;
long lOldConversion;
long lConversion;
long lCount = 0;
CoInitialize(NULL);
HRESULT hr = CoCreateInstance(CLSID_ltmmCapture, NULL, CLSCTX_INPROC_SERVER, IID_IltmmCapture, (void**) &pCapture);
if(FAILED(hr))
{
//AfxMessageBox("Can't instantiate capture library");
return;
}
AddNetTarget();
pCapture->EditGraph();
IUnknown* pUnk = NULL;
pCapture->GetSubObject (ltmmCapture_Object_Sink, &pUnk);
if(pUnk)
{
ILMNetSnk* pSnk = NULL;
pUnk->QueryInterface(IID_ILMNetSnk, (void**) &pSnk);
pUnk->Release();
if(pSnk)
{
VARIANT_BOOL vbBool;
pSnk ->get_RequireLogin (& vbBool);
//Require login with user name and password from the client.
pSnk->put_RequireLogin (VARIANT_TRUE);
//Get The current connection version.
pSnk->get_ConnectionVersion (&lOldConversion);
sUser = SysAllocString(L"User1");
sPassword = SysAllocString(L"P12345");
// add User1 to the server with the password "P12345"
pSnk->AddUser (sUser, sPassword, &lIndex);
// Free the user name and the password
SysFreeString(sUser);
SysFreeString(sPassword);
pSnk->get_ConnectionVersion (&lConversion);
if(lConversion != lOldConversion)
{
// the version number is updated after adding User1
}
sUser = SysAllocString(L"User2");
sPassword = SysAllocString(L"ABC123");
// add User2 to the server with the password "ABC123"
pSnk->AddUser (sUser, sPassword, &lIndex);
// Free the user name and the password
SysFreeString(sUser);
SysFreeString(sPassword);
long lUserCount;
// get the count of registered user
pSnk->get_UserCount (&lUserCount);
BSTR UserName;
BSTR Password;
for (long i = 0 ; i < lUserCount ; i++)
{
pSnk->GetPassword
(i,&Password);
//do something with the
password
//..............................
pSnk->GetUsername
(i,&UserName);
//do something with the
name
//..............................
SysFreeString(UserName);
SysFreeString(Password);
}
UserName = SysAllocString(L"User2");;
//Find the ID of a given user
long ID;
pSnk->FindUser
(UserName,&ID);
//change the password for the
user ID.
sPassword = SysAllocString(L"XYZ0");
pSnk->SetPassword
(ID,sPassword);
SysFreeString(UserName);
SysFreeString(sPassword);
//get number of connections connected
to the server.
pSnk->get_ConnectionCount(&lCount);
ILMNetSnkConnection* pcon;
pSnk->FindConnection(1,
&pcon);
pcon->Release();
pSnk->get_FirstConnection
(&pcon);
// Check all connections with the server.
while(pcon)
{
ILMNetSnkConnection*
pnext;
BSTR bstr;
pcon->ILMNetSnkConnection__get_NextConnection
(&pnext);
long id;
pcon->get_ID (&id);
pcon->get_Username (&bstr);
::SysFreeString(bstr);
pcon->get_Address (&bstr);
//Enable the connection
pcon->put_Enabled(VARIANT_TRUE);
// Check if connection is enabled or not.
VARIANT_BOOL
enabled;
pcon->get_Enabled (&enabled);
VARIANT_BOOL
connected;
pcon->get_Connected(&connected);
// check
if this connection is disabled or not connected
if(enabled
== VARIANT_FALSE || connected == VARIANT_FALSE)
{
//if
the connection is disabled
//close
this connection OPTIONAL
pcon->Close
();
}
pcon->Release();
pcon = pnext;
}
//add a restriction to the client
which has the IP = 10.0.0.5
//this will not allow him to
connect to the server.
BSTR bstrAddress = SysAllocString(L"10.0.0.5");
// Number of restrictions we
have.
long lRestrictionCount = 0;
pSnk->AddRestriction(bstrAddress,&lRestrictionCount);
SysFreeString(bstrAddress);
// get Number of restriction
pSnk->get_RestrictionCount
(&lRestrictionCount);
for(i = 0 ; i < lRestrictionCount
; i++)
{
BSTR
bstrRestriction;
pSnk->GetRestriction (i,&bstrRestriction);
// do
something with Restriction
//..............................
//free
the Restriction name
SysFreeString(bstrRestriction);
}
long lRestriction ;
pSnk->FindRestriction
(bstrAddress,&lRestriction);
// Remove the Restriction
from the user
pSnk->RemoveRestriction
(lRestriction);
// Remove User2 from the
registered users list.
UserName = SysAllocString(L"User2");
pSnk->FindUser
(UserName,&ID);
pSnk->RemoveUser(ID);
SysFreeString(UserName);
//Remove all restrctions
pSnk->RemoveAllRestrictions
();
pSnk->CloseAll
();
pSnk->RemoveAllUsers(); }
}
pSnk->Release();
}
}
HRESULT AddNetTarget()
{
IltmmTargetFormats* formats;
HRESULT hr;
hr = pCapture->get_TargetFormats(&formats);
if(FAILED(hr))
return hr;
BSTR bstr = SysAllocString(L"Net Server Target");
if(!bstr)
{
formats->Release();
return E_OUTOFMEMORY;
}
long index;
hr = formats->Find (bstr,
&index);
if(FAILED(hr))
{
formats->Release();
SysFreeString(bstr);
return hr;
}
if(index == -1)
{
hr = formats->Add(bstr, -1);
SysFreeString(bstr);
if(FAILED(hr))
{
formats->Release();
return hr;
}
long count;
hr = formats->get_Count(&count);
if(FAILED(hr))
{
formats->Release();
return hr;
}
index = count - 1;
IltmmTargetFormat* format;
hr = formats->Item(index, &format);
if(FAILED(hr))
{
formats->Release();
return hr;
}
bstr = SysAllocString(L"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\\{E2B7DE05-38C5-11D5-91F6-00104BDB8FF9}");
if(!bstr)
{
format->Release();
formats->Remove(index);
formats->Release();
return E_OUTOFMEMORY;
}
hr = format->put_Sink(bstr);
SysFreeString(bstr);
if(FAILED(hr))
{
format->Release();
formats->Remove(index);
formats->Release();
return hr;
}
bstr = SysAllocString(L"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\\{E2B7DE01-38C5-11D5-91F6-00104BDB8FF9}");
if(!bstr)
{
format->Release();
formats->Remove(index);
formats->Release();
return E_OUTOFMEMORY;
}
hr = format->put_Mux(bstr);
SysFreeString(bstr);
if(FAILED(hr))
{
format->Release();
formats->Remove(index);
formats->Release();
return hr;
}
format->Release();
}
else
{
SysFreeString(bstr);
}
formats->Release();
return S_OK;
}