The Server Side 2 Example for C
#include "ltmm.h"
#include "ltmm.h" #include "ILMNetSnk2.h" HRESULT AddNetTarget(); IltmmCapture *pCapture; L_MULTIMEDIATEX_API void ServerSide2_Example ( ) { BSTR sUser; BSTR sPassword; long lIndex = 0; long lCount = 0; long lOldConversion; long lConversion; HRESULT hr ; IUnknown* pUnk = NULL; CoInitialize(NULL); hr = CoCreateInstance(&CLSID_ltmmCapture, NULL, CLSCTX_INPROC_SERVER, &IID_IltmmCapture, (void**) &pCapture); if(FAILED(hr)) { //AfxMessageBox("Can't instantiate capture library"); return; } AddNetTarget(); IltmmCapture_GetSubObject (pCapture,ltmmCapture_Object_Sink, &pUnk); if(pUnk) { ILMNetSnk* pSnk = NULL; IUnknown_QueryInterface (pUnk,&IID_ILMNetSnk, (void**) &pSnk); IUnknown_Release (pUnk); if(pSnk) { long lUserCount; BSTR UserName; long i ; long ID; ILMNetSnkConnection* pcon; //Require login with user name and password from the client. ILMNetSnk_put_RequireLogin (pSnk,VARIANT_TRUE); //Get The current connection version. ILMNetSnk_get_ConnectionVersion (pSnk,&lOldConversion); sUser = SysAllocString(L"User1"); sPassword = SysAllocString(L"P12345"); // add User1 to the server with the password "P12345" ILMNetSnk_AddUser(pSnk,sUser, sPassword, &lIndex); // Free the user name and the password SysFreeString(sUser); SysFreeString(sPassword); ILMNetSnk_get_ConnectionVersion (pSnk,&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" ILMNetSnk_AddUser (pSnk,sUser, sPassword, &lIndex); // Free the user name and the password SysFreeString(sUser); SysFreeString(sPassword); // get the count of registered user ILMNetSnk_get_UserCount (pSnk,&lUserCount); for (i = 0 ; i < lUserCount ; i++) { ILMNetSnk_GetUsername (pSnk,i,&UserName); //do something with the name SysFreeString(UserName); } UserName = SysAllocString(L"User2");; //Find the ID of a given user ILMNetSnk_FindUser (pSnk,UserName,&ID); //change the password for the user ID. sPassword = SysAllocString(L"XYZ0"); ILMNetSnk_SetPassword (pSnk,ID,sPassword); SysFreeString(UserName); SysFreeString(sPassword); //get number of connections connected to the server. ILMNetSnk_get_ConnectionCount (pSnk ,&lCount); ILMNetSnk_FindConnection (pSnk,1, &pcon); ILMNetSnkConnection_Release ( pcon ) ; ILMNetSnk_get_LastConnection(pSnk,&pcon); // Check all connections with the server. while(pcon) { ILMNetSnkConnection* pPrev; BSTR bstr; long id; VARIANT_BOOL enabled; ILMNetSnkConnection_get_PrevConnection (pcon,& pPrev); ILMNetSnkConnection_get_ID (pcon,&id); ILMNetSnkConnection_get_Username (pcon,&bstr); SysFreeString(bstr); ILMNetSnkConnection_get_Address (pcon,&bstr); // Enable the connection ILMNetSnkConnection_put_Enabled (pcon ,VARIANT_TRUE); // Check if the connection is enabled ILMNetSnkConnection_get_Enabled (pcon,&enabled); // check if this connection is enabled if(enabled == VARIANT_FALSE) { //if the connection is disabled //close this connection OPTIONAL ILMNetSnkConnection_Close (pcon); } ILMNetSnkConnection_Release(pcon); pcon = pPrev; } {//add a restriction to the client which has the IP = 10.0.0.5 BSTR bstrAddress = SysAllocString(L"10.0.0.5"); //this will not allow him to connect to the server. long lRestrictionCount = 0; // Number of restrictions we have. ILMNetSnk_AddRestriction (pSnk,bstrAddress,&lRestrictionCount); SysFreeString(bstrAddress); // get Number of restriction ILMNetSnk_get_RestrictionCount (pSnk ,&lRestrictionCount); }//add a restriction to the client which has the IP = 10.0.0.5 // Remove User2 from the registered users list. UserName = SysAllocString(L"User2"); ILMNetSnk_FindUser (pSnk,UserName,&ID); ILMNetSnk_RemoveUser (pSnk,ID); SysFreeString(UserName); } ILMNetSnk_CloseAll(pSnk); ILMNetSnk_Release(pSnk); } } HRESULT AddNetTarget() { IltmmTargetFormats* formats; HRESULT hr; BSTR bstr ; long index; hr = IltmmCapture_get_TargetFormats(pCapture, &formats); if(FAILED(hr)) return hr; bstr = SysAllocString(L"Net Server Target"); if(!bstr) { IltmmTargetFormats_Release(formats); return E_OUTOFMEMORY; } hr = IltmmTargetFormats_Find(formats, bstr, &index); if(FAILED(hr)) { IltmmTargetFormats_Release(formats); SysFreeString(bstr); return hr; } if(index == -1) { long count; IltmmTargetFormat* format; hr = IltmmTargetFormats_Add(formats, bstr, -1); SysFreeString(bstr); if(FAILED(hr)) { IltmmTargetFormats_Release(formats); return hr; } hr = IltmmTargetFormats_get_Count(formats, &count); if(FAILED(hr)) { IltmmTargetFormats_Release(formats); return hr; } index = count - 1; hr = IltmmTargetFormats_Item(formats, index, &format); if(FAILED(hr)) { IltmmTargetFormats_Release(formats); return hr; } bstr = SysAllocString(L"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\\{E2B7DE05-38C5-11D5-91F6-00104BDB8FF9}"); if(!bstr) { IltmmTargetFormat_Release(format); IltmmTargetFormats_Remove(formats, index); IltmmTargetFormats_Release(formats); return E_OUTOFMEMORY; } hr = IltmmTargetFormat_put_Sink(format, bstr); SysFreeString(bstr); if(FAILED(hr)) { IltmmTargetFormat_Release(format); IltmmTargetFormats_Remove(formats, index); IltmmTargetFormats_Release(formats); return hr; } bstr = SysAllocString(L"@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\\{E2B7DE01-38C5-11D5-91F6-00104BDB8FF9}"); if(!bstr) { IltmmTargetFormat_Release(format); IltmmTargetFormats_Remove(formats, index); IltmmTargetFormats_Release(formats); return E_OUTOFMEMORY; } hr = IltmmTargetFormat_put_Mux(format, bstr); SysFreeString(bstr); if(FAILED(hr)) { IltmmTargetFormat_Release(format); IltmmTargetFormats_Remove(formats, index); IltmmTargetFormats_Release(formats); return hr; } IltmmTargetFormat_Release(format); } else { SysFreeString(bstr); } IltmmTargetFormats_Release(formats); return S_OK; }