home *** CD-ROM | disk | FTP | other *** search
- unit CSheriff;
-
- interface
-
- uses Windows, SysUtils, SlsApi;
-
- type
- TSecrets = array[0..3,0..17] of byte;
-
- TSheriff = class(TObject)
- private
- { Private declarations }
- m_hLicence: SLS_HANDLE;
- m_lLastError: HRESULT;
- m_szProductID: array[0..32] of Char;
- m_szUserName: array[0..256] of Char;
- m_arySecrets: array[0..3] of SLS_SECRET;
- m_bSecretsSet:Boolean;
-
- public
- { Public declarations }
- constructor Create(pszProductID:PChar;pszUserName:PChar);
- destructor Destroy; virtual;
- {attributes}
- {inteface}
- function Succeeded:Boolean;
- procedure SetSecrets(arySecrets:TSecrets);
- function GetLastError:HRESULT;
- procedure GetLastErrorMessage(var strError:string);
-
- {API interface}
- function QueryLicenceInfo(var licInfo:SLS_LICENCE_INFO):Boolean;
- function GetReference(var strReference:string):Boolean;
- function SetLicence(pszReference:PChar;lpszLicenceKey:PChar):Boolean;
-
- function Register(pszProductName:PChar;
- pszLicencePath:PChar):Boolean;
- function License(vLicence:SLS_LICENCE):Boolean;
- function Request(vRequest:SLS_REQUEST;var vPermit:SLS_PERMIT):Boolean;
- function Update(vUpdate:SLS_UPDATE;var vPermit:SLS_PERMIT):Boolean;
- function Release(vRelease:SLS_RELEASE):Boolean;
-
- //Attribute
- function IsProductInstalled:Boolean;
- function IsProductRegistered:Boolean;
- function IsLicenceDefined:Boolean;
- function IsLicenceValid:Boolean;
-
- end;
-
- implementation
-
- constructor TSheriff.Create(pszProductID:PChar;pszUserName:PChar);
- begin
- inherited Create;
- StrCopy(m_szProductID,pszProductID);
- StrCopy(m_szUserName,pszUserName);
- m_hLicence:=0;
- m_lLastError:=SLS_SUCCESS;
- m_bSecretsSet:=false;
- end;
-
- destructor TSheriff.Destroy;
- begin
- Inherited Destroy;
- end;
-
- function TSheriff.Succeeded:Boolean;
- begin
- Succeeded:=m_lLastError=0;
- end;
-
- procedure TSheriff.SetSecrets(arySecrets:TSecrets);
- var i,j:Integer;
- begin
- for i:=0 to 3 do
- begin
- for j:=0 to 17 do
- m_arySecrets[i].Secret[j]:=char(arySecrets[i,j]);
- for j:=18 to 31 do
- m_arySecrets[i].Secret[j]:=char(0);
- end;
-
- m_bSecretsSet:=TRUE;
- end;
-
- function TSheriff.GetLastError:HRESULT;
- begin
- GetLastError:=m_lLastError;
- end;
-
- procedure TSheriff.GetLastErrorMessage(var strError:string);
- var szErrorMessage:array[0..255] of char;
- begin
- SLS_GetErrorMessage(m_lLastError,szErrorMessage);
- strError:=szErrorMessage;
- end;
-
- {API interface}
- function TSheriff.QueryLicenceInfo(var licInfo:SLS_LICENCE_INFO):Boolean;
- begin
- m_lLastError:=SLS_QueryLicenceInfo(m_szProductID,licInfo);
- QueryLicenceInfo:=SUCCEEDED;
- end;
-
- function TSheriff.GetReference(var strReference:string):Boolean;
- var szReference:array[0..127] of char;
- begin
- m_lLastError:=SLS_GetReference(m_szProductID,szReference);
- strReference:=szReference;
- GetReference:=SUCCEEDED;
- end;
-
- function TSheriff.SetLicence(pszReference:PChar;lpszLicenceKey:PChar):Boolean;
- begin
- m_lLastError:=SLS_SetLicence(m_szProductID,pszReference,lpszLicenceKey);
- SetLicence:=SUCCEEDED;
- end;
-
- function TSheriff.Register(pszProductName:PChar;
- pszLicencePath:PChar):Boolean;
- begin
- m_lLastError:=SLS_Register(m_szProductID,pszProductName,pszLicencePath);
- Register:=Succeeded;
- end;
-
- function TSheriff.License(vLicence:SLS_LICENCE):Boolean;
- var Challenge:SLS_CHALLENGE;
- begin
- if(m_bSecretsSet=false)then
- begin
- {Secrets Undefined}
- m_lLastError:=SLS_E_BAD_SECRET;
- License:=false;
- exit;
- end;
-
- {Create Challenge}
- m_lLastError:=SLS_CreateChallenge(@m_arySecrets,4,@vLicence,SizeOf(SLS_LICENCE),Challenge);
- if(SUCCEEDED) then
- m_lLastError:=SLS_Licenses(m_szProductID,vLicence,Challenge);
-
- License:=SUCCEEDED;
- end;
-
- function TSheriff.Request(vRequest:SLS_REQUEST;var vPermit:SLS_PERMIT):Boolean;
- var Challenge:SLS_CHALLENGE;
- begin
- vPermit.UnitsGranted:=0;
- vPermit.AccessKey:=0;
-
- if(m_bSecretsSet) then
- begin
- {Create Challenge}
- m_lLastError:=SLS_CreateChallenge(@m_arySecrets,4,@vRequest,sizeof(SLS_REQUEST),Challenge);
- if(SUCCEEDED) then
- begin
- m_lLastError:=SLS_Requests(m_szProductID,m_szUserName,vRequest,vPermit,m_hLicence,Challenge);
- if(SUCCEEDED) then
- begin
- {Verify Challenge}
- m_lLastError:=SLS_VerifyChallenge(@m_arySecrets,4,@vPermit,sizeof(SLS_PERMIT),Challenge);
- end;
- end;
- end else
- begin
- {No Challenge}
- Challenge.Protocol:=SLS_NO_PROTOCOL;
- m_lLastError:=SLS_Requests(m_szProductID,m_szUserName,vRequest,vPermit,m_hLicence,Challenge);
- end;
-
- Request:=SUCCEEDED;
- end;
-
- function TSheriff.Update(vUpdate:SLS_UPDATE;var vPermit:SLS_PERMIT):Boolean;
- var Challenge:SLS_CHALLENGE;
- begin
- vPermit.UnitsGranted:=0;
- vPermit.AccessKey:=0;
-
- if(m_bSecretsSet) then
- begin
- {Create Challenge}
- m_lLastError:=SLS_CreateChallenge(@m_arySecrets,4,@vUpdate,sizeof(SLS_UPDATE),Challenge);
- if(SUCCEEDED) then
- begin
- m_lLastError:=SLS_Updates(m_szProductID,m_hLicence,vUpdate,vPermit,Challenge);
- if(SUCCEEDED) then
- begin
- {Verify Challenge}
- m_lLastError:=SLS_VerifyChallenge(@m_arySecrets,4,@vPermit,sizeof(SLS_PERMIT),Challenge);
- end;
- end;
- end else
- begin
- {No Challenge}
- Challenge.Protocol:=SLS_NO_PROTOCOL;
- m_lLastError:=SLS_Updates(m_szProductID,m_hLicence,vUpdate,vPermit,Challenge);
- end;
-
- Update:=SUCCEEDED;
- end;
-
- function TSheriff.Release(vRelease:SLS_RELEASE):Boolean;
- var Challenge:SLS_CHALLENGE;
- begin
- if(m_bSecretsSet) then
- begin
- {Create Challenge}
- SLS_CreateChallenge(@m_arySecrets,4,@vRelease,sizeof(SLS_RELEASE),Challenge);
- end else
- begin
- //No Challenge
- Challenge.Protocol:=SLS_NO_PROTOCOL;
- end;
-
- m_lLastError:=SLS_Releases(m_szProductID,m_hLicence,vRelease,Challenge);
-
- Release:=SUCCEEDED;
- end;
-
- //Attribute
- function TSheriff.IsProductInstalled:Boolean;
- begin
- m_lLastError:=SLS_IsProductInstalled(m_szProductID);
- IsProductInstalled:=SUCCEEDED;
- end;
-
- function TSheriff.IsProductRegistered:Boolean;
- var licInfo:SLS_LICENCE_INFO;
- begin
- m_lLastError:=SLS_QueryLicenceInfo(m_szProductID,licInfo);
- IsProductRegistered:=SUCCEEDED;
- end;
-
- function TSheriff.IsLicenceDefined:Boolean;
- var licInfo:SLS_LICENCE_INFO;
- begin
- m_lLastError:=SLS_QueryLicenceInfo(m_szProductID,licInfo);
- if(SUCCEEDED=false)then
- IsLicenceDefined:=FALSE
- else
- if(licInfo.State=SLS_STATE_UNDEFINED) or (licInfo.State=SLS_STATE_BAD) then
- IsLicenceDefined:=FALSE
- else
- IsLicenceDefined:=TRUE;
- end;
-
- function TSheriff.IsLicenceValid:Boolean;
- var licInfo:SLS_LICENCE_INFO;
- begin
- m_lLastError:=SLS_QueryLicenceInfo(m_szProductID,licInfo);
- if(SUCCEEDED=false)then
- IsLicenceValid:=FALSE
- else
- if(licInfo.State=SLS_STATE_OK) then
- IsLicenceValid:=TRUE
- else
- IsLicenceValid:=FALSE;
- end;
-
- end.
-
-