User's Guide

ePatha License Manager (eLM)
Version 3.1

A Product for the Java™ Platform


Preface
a. Intended Audience
b. Version 3.0 Overview
c. Version 3.1 Upgrade

1. The Standard Edition
1.1  Creating a standard License
1.1.1  The GUI Method
1.1.2  The CLI Method
1.1.3  The API Method

1.2.  Validating a Standard License
1.2.1  The GUI Method
1.2.2  The CLI Method
1.2.3  The API Method

1.3.  Product Distribution
1.3.1  License Distribution
1.3.2  Building Your Product

1.4.  Using License History
1.4.1  Preferences
1.4.2  The History Box
1.4.3  History Actions
1.4.4  Export History to Text File


2. The Enterprise Edition
2.1.  Creating an Internet License
2.1.1  The GUI Method
2.1.2  The CLI Method
2.1.3  Creating an Internet Template
2.1.4  The API Method

2.2.  Validating an Internet License
2.2.1  The GUI Method
2.2.2  The CLI Method
2.2.3  The API Method

2.3.  Internet Licensing Services
2.3.1  The Internet Server
2.3.2  Internet Control Services


A.  API  Reference Section
     1. License
     2. makeLicense
     3. LicenseSet
     4. InternetSet





Preface
a.  Intended Audience
This document is intended for use by users of the ePatha License Manager, version 3.0 and above. It contains important information for anyone using either the Standard or Enterprise Editions. Users should be familiar with the Java language and its standard practices and procedures.

© 2005 ePatha Software, LLC  -  San Rafael, CA  USA
Send any questions or comments to: lic23@epatha.com


b.  Version 3.0 Overview
ePatha License Manager (eLM) Version 3.0 is a major new release of the product formerly known as Java License Manager. In addition to many new options, it improves on the internal license mechanisms, like master license authentication. The eLM is also now available in two the Editions: Standard and Enterprise.

The Standard Edition provides all the features of the eLM 2.2, plus an option to begin temporary license countdowns from the first time the license is used, rather than the from the date the license was issued. It also expands the encryption key size from 32 bits to 64 bits for increased security. Installation and web deployment is now easier, because your master license is now contained within the License.jar file.

The Enterprise Edition provides all the features of the Standard Edition plus the added flexibility of internet verification and management. With this added set of features the user can issue licenses that can later be modified, automatically, over a standard internet (IP) connection, via the special server provided. With this server you can also track a license's minute-to-minute usage. It can also act as your license's date/time provider, so end users cannot set their own platform's clock backwards, to circumvent temporary license expiration. Many new APIs have also been added to support these new features.

c.  Version 3.1 Upgrade
ePatha License Manager (eLM) Version 3.1 is an upgraded version of the product. In addition to some bug fixes and GUI improvements, it adds some new features not found in 3.0.

Both editions of the product now provide a method to save history data to a csv style file, where the delimiter is an or bar ( | ).

The Enterprise Edition now includes features to allow better communications between the host server, and the end user. These methods allow you to specify a browser controlled web page, plain text, or both, during warnings and connection failures. It is also possible to display a client side text box or browser controlled web page when a license has been successfully validated. The previous version only provided a text box during connection failures and warnings.
For more information see Using XML in Defining Messages


1. The Standard Edition
There are 3 methods available for license creation. The resulting license is a 64 bit encrypted file and is the same regardless of the method used.

1.1. Creating a Standard License
There are 3 methods available for license creation. The resulting license is a 64 bit encrypted file and is the same regardless of the method used.

1.1.1 The GUI Method

GUI Screen Shot

To create a new standard license for your product, bring up the eLM (LicenseMe) from your desktop icon. Or, go to a CLI and enter:
java -cp [installation path]License.jar com.alphase.lic.LicenseMe
Be sure to use the explicit location of your eLM installation path, which contains the License.jar in your classpath - e.g. :
java -cp /root/jlm/License.jar com.alphase.lic.LicenseMe
Then:
  1. In the TARGET CUSTOMER section, enter the name of your customer.
  2. In the LICENSED PRODUCT section,
    • Enter the name of your product in the Name field.
    • From the Version selection fields, select the version and sub version for the product you're going to license. Version and Sub Version are separated by a dot. Your choices for each range from 0 to 15.
    • Select any Options that may apply to your product by checking the corresponding check box. The meaning and function of each option is completely up to you. For clarity, the options may be assigned different titles via the Assign Option Titles... selection in the Options menu. For example you may designate option #1 to turn on a management option in your product, so you would rename Option 1 to "Management".
  3. In the LICENSE RESTRICTIONS section, select the license Duration: either Permanent or Temporary.
  4. If temporary is selected, the Expires in _ days field is enabled, as is the Start on first use option.
    • Enter any number of days into the Expires in _ days field, except zero. To create a pre expired license, precede the number in the Expires in _ days field by a minus ( - ) sign.
    • Check the Start on first use option if you want the countdown to begin when the license is first used. Otherwise, the countdown begins when the license is created.
  5. In the LICENSE FILE section, enter the name and location of the license file you wish to create. You may enter it directly, or use the Find... button to help you find a location &/or file.
  6. Finally click on Create License button. When the operation is complete, you will see an appropriate message in the area at the bottom of the window.

Categorized Data
The Categorized Data fields in the LICENSED PRODUCT section, are optional. They are used to assign your own text to one of 3 possible categories: Free Form, Delimited and Option Paired.
Start on first use
When this option is enabled for temporary licenses, it tells the license verifier to look for a separate file containg the start date on the client's (end user's) platform. If it cannot find it, it creates a new one containing the current date. After that it always uses this date in the countdown process. The name and location of this file remains unpublished for obvious reasons. eLM users can obtain this information on a "need to know" basis. Even so, this does not guarentee that an end user could not invalidate this methodology. Users concerned with this issue should consider using the Enterprise Edition, where start and expire dates can be controlled absolutely.
Additional Menu Choices

1.1.2  The CLI Method
To create a license in a CLI environment, call the CreateLicense application via

java -cp [installation path]License.jar com.alphase.lic.CreateLicense [arguments...]
Where the following arguments are required in the order listed:
  1. product
  2. customer
  3. version.subversion:options
  4. days[F]
  5. license filename
The third argument (version.subversion:options) is formatted as v.s:pppppppp, where v is a version number, s is a sub version and each p specifies a selected option number.
The fourth argument (expiration days) is specified as a signed integer, where 0 represents a permanent license, a positive value represents a temporary license good for n days and a negative value represents an expired temporary license, expired -n days ago.
The optional F directly after the integer forces temporary licenses to start the countdown on First use.

In addition, you can supply categorized data as an optional 6th argument, in the form:
CAT=n:data
where n is the category type, defined as:

When complete, a verification, or error message, will be displayed, like:

File "Bluetooth.jkey" created.
or
Invalid format of 3rd argument ( Ver.Subver:options ) File "Bluetooth.jkey" NOT created.

Using the CLI is the easiest way to create licenses quickly, in unattended batch mode.


Example 1
:
To create a temporary license (Bluetooth.jkey) supporting version 1.3 of the "Excelsior" product for customer "Bluetooth Inc" that will expire in 30 days and include options #1 and #7, enter:
java -cp "C:\Program Files\lic\License.jar" com.alphase.lic.CreateLicense "Excelsior" "Bluetooth Inc" 1.3:17 30 Bluetooth.jkey
Example 2:
To create a temporary license (Bluetooth.jkey) supporting version 1.3 of the "Excelsior" product for customer "Bluetooth Inc" that will expire in 10 days after its first useage and without options, enter:
java -cp /root/bin/apps/lic/License.jar com.alphase.lic.CreateLicense "Excelsior" "Bluetooth Inc" 1.3:0 10F Bluetooth.jkey
Example 3:
To create a permanent license (QA7.jkey) supporting version 2.13 of the "Police App" product for customer "NYPD Blue" that will assign option paired letters (A-H), but with no options turned on, enter:
java -cp C:\products\lic\License.jar com.alphase.lic.CreateLicense "Police App" "NYPD Blue" 2.13:0 0 QA7.jkey 3 /A/B/C/D/E/F/G/H


1.1.3 The API Method
To create a standard license from within your Java server side code, use the makeLicense class. This method is easy and flexible. The class essentially calls for you to create a new instance of the makeLicense class and then issue as many licenses as you like using the createFile method. At any time you can change any of the license arguments while leaving the others set as before. An example program (ApiExample.java) is provided with the eLM and shown here, as well.

Important:
When creating licenses from your own Java server, you must define your classpath to include the location of your License.jar file.

import com.alphase.lic.makeLicense;

public class  ApiExample  {
    public static void main (String args[])
    {
    int  ix, iix, len=1, ival, ver=0, subver=0, days=0;
    String prod=null, cust=null, file;
    boolean  options[];
    options = new boolean[8];
    for (ix=0; ix < 7; ix++)
        {
        try { len = args[ix].length(); }
        catch (ArrayIndexOutOfBoundsException e) { break; }
        if  ( len == 0 )
        break;
        if  ( args[ix].startsWith("product=") )
        prod = args[ix].substring(8);
        else if  ( args[ix].startsWith("customer=") )
        cust = args[ix].substring(9);
        else if  ( args[ix].startsWith("version=") )
        {
        try { ver = Integer.parseInt(args[ix].substring(8)); }
        catch(NumberFormatException nfex)  { ver = 0; }
        }
        else if  ( args[ix].startsWith("subver=") )
        {
        try { subver = Integer.parseInt(args[ix].substring(7)); }
        catch(NumberFormatException nfex)  { subver = 0; }
        }
        else if  ( args[ix].startsWith("days=") )
        {
        try { days = Integer.parseInt(args[ix].substring(5)); }
        catch(NumberFormatException nfex)  { days = 0; }
        }
        else if  ( args[ix].startsWith("options=") )
        {
        for (iix=0; iix < (len-8); iix++)
            {
            try { ival = Integer.parseInt(args[ix].substring((8+iix), (8+iix+1)); }
            catch(NumberFormatException nfex)  { ival = 0; }
            if  ( ival < 1 || ival > 8 )
            break;
            options[ival-1] = true;
            }
        }
        }

    makeLicense lic = new makeLicense(prod, cust, ver, subver, options, days);
    if  ( lic.Condition != 0 )
        System.out.println("Initial error: " +lic.getErrorMessage());
    if  ( lic.createFile("mylic1.key") )
        System.out.println("mylic1.key created");
    else
        System.out.println(lic.getErrorMessage());

    // From here on, we can just change specific parameters and issue licenses
    lic.resetVersion(ver+1);
    lic.resetSubVersion(subver+1);
    lic.resetDays(days+1);

    if  ( lic.createFile("mylic2.key") )
        System.out.println("mylic2.key created");
    else
        System.out.println(lic.getErrorMessage());

    lic.resetCustomer("Rolls Royce");
    if  ( lic.createFile("mylic3.key") )
        System.out.println("mylic3.key created");
    else
        System.out.println(lic.getErrorMessage());
    }
}

1.2. Validating a Standard License
An existing license may be validated using any one of 3 methods.

1.2.1 The GUI Method
To validate a version 3.x license from the GUI, select the Load License... option from the File menu. A file selection box will appear where you can select the license file to load. You can also click the Find... button to initiate a file selection box. Then, when the name file name is displayed in the LICENSE FILE button entry line, click the Load button to verify it.
Regardless of the method used, when the license is loaded a message on the bottom will inform you if this is a valid license and, if so, its version. If its not valid an appropriate error message will be displayed on the bottom line.

GUI Validation
 

1.2.2 The CLI Method
To validate a license directly from your command line interface (without invoking the GUI) use the LicenseCheck application class.
If you are invoking this class from the License.jar file, supplied by eLM, just supply the license file as the only argument.

Example 1: a valid license checked at your own site :

java -cp C:\jlm\License.jar com.alphase.lic.LicenseCheck acme.key

Checking file: acme.key with seed: 5092871131520912556
Internet verification is NOT implemented.
Valid, active license:
       eLM Version: 3 Standard version
       Creation Date : 2005-May-04 12:43:44
       Expiration Date: 2005-Jul-03 12:44:13
       Start countdown on 1st use: true

       Product: Hammer Maker
       Customer: Acme Cartoons
       Free form data: Requested by Wiley Coyote
       Version: 1.0
       Options: 1=true 2=false 3=false 4=false 5=false 6=false 7=false 8=false


If you are invoking this class from your own application on a client's platform, supply the license file as the first argument and your license ID (seed value) as the second argument. Example 2:  an invalid license checked at a client's site:

java -cp C:\jlm\Distribution.jar com.alphase.lic.LicenseCheck acme2.key 5092871131520912556
Checking file: acme2.key key is specified
Internet verification is NOT implemented.
Invalid license file:
Corrupt File.

1.2.3 The API Method
Perhaps the most important method of validation, is validation from within your own Java code. Since you won't be distributing your master key with your user generated keys, you will need to supply your unique master key value. This is required to begin the decryption process. As a licensed eLM user, you can view your unique seed value whenever you're using the GUI, by selecting the Show Seed Value item from the Options menu. 

To validate a license from within your application, you must include the following in your Java code:

import com.alphase.lic.*;

The actual classes you'll be using are contained in the Distribution.jar file.

Next, create an instance of the License class, using your unique seed value as an argument of type long. (Note: If you own only one licensed copy of the License Manager, all licenses created by you will have the same master ID.).
public License (long yourMasterID)
Then, to check the validity of a license file, call the verifyLicenseFile method, passing the full path to your license file.
public boolean verifyLicenseFile(String filespec)
Important. Expired licenses are considered valid (unless they are invalid for some other reason), so the verifyLicenseFile method will return true, on a valid, but expired license file.

If the license file is valid, LicenseVal will contain a positive number where bits 12-15 contain the license version, bits 8-11 contain the license sub-version and bits 0-7 represent the boolean Option settings. You are encouraged, however, to use the getVersion, getSubVersion and getOption APIs to get this information instead, as future versions of the eLM may not support the LicenseVal field for this purpose.

If the license file is not valid, LicenseVal will contain a negative number, which will correspond to one of the following errors : 

Error # Description
-1
Missing license specification
-2
Unable to read license.
-3
Product line is missing
-4
Customer line is missing
-5
Missing Master ID
-6
Invalid or corrupt License
-7
Corrupt Internet License
-8
License did not pass Internet Server validation

To determine if, an otherwise valid license, has expired you should always use the isExpired method. Of course, you can also examine the contents of ExDate yourself and make the calculation, bearing in mind that if the license is permanent, the ExDate  field will contain "none".

Example 1:

import com.alphase.lic.License;
...
long seed = 70815655514486903811;
License thisLic = new License(seed);
if  ( thisLic.verifyLicenseFile("/OurProduct/cr.jkey") )
    {
    if ( thisLic.getVersion() > 1  &&  thisLic.getOption(2) )
       { do my special stuff }
    else
       { do other stuff }
    }
else
    { // tell the user the license is invalid
    String msg = thisLic.getErrorMessage()
    ...
    }

Example 2:

import com.alphase.lic.License;
...
License myLic = new License(70815655514486903811);
if  ( myLic.verifyLicenseFile("/root/etc/Bluetooth.lic") )
    {
    System.out.println("License OK for Version " +
                       String.valueOf(myLic.Version) +"." +
                       String.valueOf(myLic.SubVersion))
    System.out.print("Valid options are: ");
    for (i=0; i < 8; i++)
        if  ( myLic.getOption(i) )
            System.out.print(String.valueOf(i) +" ")
    if  ( myLic.isExpired() )
        System.out.println("License Expired " +myLic.getExpireDate());
    else if  ( ! myLic.isTemporary() )
        System.out.println("License will expire: " +myLic.getExpireDate());
    }
else
    System.out.println("License error: #" +thisLic.getErrorMessage());

1.3. Product Distribution
1.3.1 License Distribution
The purpose of the eLM is to allow the Java developer to create and validate their own licenses. Usually, the validation portion will be initiated at an end user's site from within their Java application. To that end, certain Java classes within com.alphase.lic  need to be redistributed to end users with the developer's application. Other classes, like LicenseMe may not be redistributed to end users, or anyone else. For more specific details refer to the Java License Manager license agreement.. To insure only the proper classes get included with your product, always include the Distribution.jar provided, and never the License.jar. In other words, when distributing your application,  you can extract and/or include only those classes found in the Distribution.jar file.

1.3.2 Building Your Product
The following describes how to build your application using the methods in the Distribution.jar file.

Assume you are building a Java application for Bluetooth.org and have set up the directory structure under the Test directory. The result would look something like this

Directory Setup

Your source code would be in the Bluetooth sub-directory. So you would move the Distribution.jar file to the Test directory. Then, when you wanted to compile your Java code in the Bluetooth sub-directory, you would point your classpath back up to the Distribution.jar, like this:

$ Test\org\Bluetooth> javac -classpath ..\..\Distribution.jar  myApplication.java

When your own code is finished and you are ready to build your jar file for distribution, you'll need to include the classes from our jar file. The easy way is to do the following from the Test directory:

$ Test> jar -fx Distribution.jar

This will build the required sub directories and extract the classes. The result will look something like this

Directories After Extraction

Notice the directory structure from the Distribution.jar has been instantiated under Test.
Now you can create your own, distributable jar file as follows:

$ Test> jar -c0f Bluetooth.jar org/Bluetooth/*.class com/alphase/lic/*.class

If you list your new jar file, it will look like this:
$ Test> jar -tf Bluetooth.jar
META-INF/
META-INF/MANIFEST.MF
org/Bluetooth/myApplication.class
com/alphase/lic/License.class
com/alphase/lic/LicenseCheck.class
com/alphase/lic/InternetSet.class
com/alphase/lic/Ranch.class
com/alphase/lic/SecureStreamIn.class
com/alphase/lic/SecureStreamOut.class
com/alphase/lic/DistInfo.class
com/alphase/lic/TextButton.class
com/alphase/lic/SimpleBrowser.class
com/alphase/lic/xmlReader.class
If you use the ttest.java code as your application in the above example, you will be able to validate licenses created by you as follows:
$ Test> java -cp Bluetooth.jar org.Bluetooth.ttest my.jkey 5795566236731177
Checking : my.jkey  seed: 5795566236731177
License OK for Version 1.3
Valid options are: 1 Expiration Date: none
-----------------------------------------------
My Java Product
My Customer ID
1
3
none
        [0]: true
        [1]: false
        [2]: false
        [3]: false
        [4]: false
        [5]: false
        [6]: false
        [7]: false

1.4. Using License History  As the name implies, License History provides the eLM user with a method to review all of the valid licenses created by your organization. While the collection of this history is optional, it is highly recommended and is enabled by default. Use the LicenseMe GUI to view and/or alter the  history.

1.4.1 Preferences
To set your history collection preferences, select Preferences... from the History menu of LicenseMe. Here you can turn history collection on or off. You can also specify which of the creation interfaces you want to collect. There is also a check box to allow you to permanently turn off the warning box during history deletions. By default all types of histories are collected and you are warned before deleting any item in the History box.

History Preferences

1.4.2 The History Box
When you select View/Edit... from the History menu of LicenseMe, the History box shown below appears. The number of entries in the database is shown next to the Refresh button, as #nnn. Each row in the table, represents a license issued by your copy of the eLM. The Via column indicates the interface used to create the license (API, GUI or CLI). The actual files used to control this information are maintained in your eLM target directory. Never alter or remove any files in the eLM target directory.
The box, of course, can be stretched to any size in the normal way you resize windows on your platform. Columns widths will adjust in proportion to their original size. Individual column widths can also be adjusted by a click and drag, while positioned over the lines between the column headings. The cursor should change appearance when positioned over these column lines, so you know when to click.
History Standard View


The columns themselves can also be repositioned, so the display order is changed. To do this, click on a column heading (not over a dividing line) then just drag the column to another position. In the example below, Expiration Date was dragged from column 7 to column 2. Then Customer was dragged to column 3. Notice also that the Show Table Help check box has been deselected, allowing for more table viewing space.

Altered display order

Important: History box location and size, column widths and column order can all be saved for future sessions by selecting Save Settings from the File menu of LicenseMe, but only after you have closed the History box, by clicking on the Close button.

Sorting
You can also sort the table using one, or more, keys. To sort by a primary key, just click and release on a column heading you want as the primary key. The rows will be immediately sorted into ascending order based on the column selected. A blue arrow, outlined in red, will confirm this selection. To change the order to descending, just click on the column heading again. To return to the original order, click on the heading a third time. In the example below, a single click on the Version column heading sorts the rows into the correct presidential order.

Sorted Table

To specify a minor sort key, just click and release on the column heading you want to designate as the minor key, while holding down the Ctrl key. The rows will be immediately resorted into ascending order, within the column selected as the primary key. A blue arrow will confirm this selection. To change the minor sort key order to descending, just click on the column heading again, while holding down the Ctrl key. To return to the original order, click on the heading a third time, while holding down the Ctrl key. Additional minor keys can be specified in the same way, with each lesser key being designated by a lighter color blue arrow.


1.4.3 History Actions
In addition to viewing the licenses created by the eLM, you can also initiate some actions from the History box.

To repopulate the main LicenseMe box with the information contained in a history entry, just select the row of interest and click Load. If multiple rows were selected, the first selected row will be loaded.

To reissue one or more licenses,  select the row(s) of interest and click the Reissue button. All the selected licenses will be reissued and the history box will be updated showing the new Issue Dates. No other information will change in the selected row(s), including the Via data. For example, API generated licenses will continue to show as Via API even after reissuing them from the History box.

To permanently delete entries from the historical database, select the row(s) to remove and click Delete. Unless you set your preferences to exclude deletion warnings, you will see a confirmation box. If you click Yes, the items will be removed.

Licenses created via the CLI or API are collected in a separate file and merged with the main history file when the History box is first opened. After the initial merge, new licenses created by the API or CLI will not show up in your History box, unless you delete one or more items. To force the History box to perform another merge and display all licenses in the History box, use the Refresh button. You can do this as often as you like.

1.4.4 Export History to Text File
To export your history into a csv style file, where the delimiter is an or bar ( | ), just select the Export function from your History menu

and create a file which will include a column header record, followed by the history data - one (cr/lf) record per history row.



2. The Enterprise Edition
An Internet License can only be created from eLM's Enterprise Edition. Using it opens a whole new dimension to licensing by allowing a license producer (you) to track the usage of license consumers (your distributed products). It also allows the license producer to alter and rewrite a license after it has been distributed.

When you create an internet license you create a standard license extended by a set of internet paramaters. With these internet parameters you can direct the license consumer what to do during license validation; like whether or not to allow usage without an internet connection. The Enterprise Edition itself, includes a multi-threaded server, which provides the interface between the license producer and license consumers. Just like standard licenses, internet licenses can be created and validated via all 3 interfaces. And since the internet license is also a standard license, the remaining sections discussing the Enterprise Edition will focus only on the internet specifics. So you should be familiar with all aspects of the Standard Edition before continuing.

When an Internet License is created you provide it an IP address to be used during license validation. This is the address you assigned to your Internet License Server. After the license consumer validates the standard portion of an Internet License, it uses the IP address it finds to make a connection to the Internet License Server. If it is unable to do so, it checks to see if the validated license indicated a mandatory, or optional, connection. If it was mandatory, the license consumer is presented with an invalid license. If it was optional, the license consumer is presented with the valid, standard portion of the license. If the IP connection was successful, license control is passed to the Internet License Server, which looks up the current settings for the license and issues appropriate directions to the license consumer. These instructions may include rewriting the original license file. It also records all these actions in the license database for later review.



2.1. Creating an Internet License

2.1.1 The GUI Method

GUI Screen Shot

To create a new internet license for your product, bring up the eLM as you would for a standard license - i.e.
java -cp [installation path]License.jar com.alphase.lic.LicenseMe
Specify an Internet Template file as the final, optional argument if you want to include a set of predefined internet options. Or, you can just name the file std.int and put it in the current default directory before starting LicenseMe to load a set of predefined internet options. Again, it's an optional specification.

You'll notice a new Internet Verification section. Enter all the required fields to create a standard license. Then, before clicking the Settings... button to establish the internet settings, consider selecting the Defer Verification option. This option supresses internet checking at the end of the internet description process. Select this option if your Internet License Server. is not active.
Then click on the Settings... button to activate the Internet Verification box.



Depending on your setup and whether you used an Internet Template file, some of these fields may be pre populated. In any case, follow these steps to complete the internet license.

In the CONNECTION REQUIREMENTS section

  1. Enter the IP Address and Port# fields that describe your server. You define these when you setup your Internet License Server
  2. Select the connection style: First Use Only, Always Required or When Available. As the term implies, licenses are always denied if an IP connection to your server fails and Always Required had been selected. Use this selection if you want to keep close tabs on license usage. Likewise, licenses are always provided if an IP connection to your server fails and When Available had been selected. This selection is most useful if you want to keep approximate usage statistics, but do not want your users to ever be denied access. First Use Only is useful to get a snapshot each license consumer's environment, but don't need on-going statistics.
  3. Select Notify user if unavailable if you want the license consumer to popup a message window when the IP connection is unavailable. You can display the standard message, or define one of your own, by clicking the Message... button.

In the LICENSE CONSTRAINTS section,

  1. Select the Supply current date/time from server if you want to insure temporary licenses expire accurately, based on the license producer's clock, rather than the license consumer's clock.
    Note: using this option assumes that your eLM server is operational and that the license consumer has an active internet connection. Otherwise, the license consumer's clock will be used as the current date and the first use date or embedded license creation date will be used as the start date.
  2. If you select the Expire license after ____ connections, be sure to enter the number in the connection limit field, which, as you might expect, is dependent on the connection type. Only successful server connections are counted toward this limit.
  3. The Remind after ____ connections usually used in conjunction with the previous option. The number entered in this threshold field should be less than the limit defined in the previous option. When selected, the license consumer will popup a message window each time a license is used after the threshold is reached and before the expire limit is reached. You can display the standard message, or define one of your own, by clicking the Message... button.
    Note: there are two special symbols that can be included in your message: <limit> and <cnt>. <limit> refers to the limit defined in the previous previous option and <cnt> refers to the current number of connections recorded. These symbols will be replaced, by the license consumer, with actual values before each message is displayed.

In the SUBSTITUTE LICENSE ATTRIBUTES section,

  1. If the Replace license on next connection option is selected, you'll need to assign the new values by clicking the License... button to the right. The box that appears looks just like a standard license box, except the there is no Internet Verification section. When you have described the new license, click Save, then select the connection style. The connection style options are just like the ones explained earlier, but with an added option of None which, if selected, will convert this license to a standard license when it is rewritten.

Click on the Save button when you're done. What happens next depends on whether you selected the Defer Verification option earlier. If it was not selected, the process will attempt to test the Internet Server assigned in CONNECTION REQUIREMENTS. If the Defer Verification option were selected, no such IP connection would be attempted.


Using XML in Defining Messages

When you select any of the Message Button buttons, a predefined text window will appear, where you can enter the plain text you want to be displayed on the client platform when the specified condition occurs. For example:



You can also select the XML Setup Button button to define a more sophisticated user interaction. As follows:



The xml default text is as follows

<xml>
<http>
Replace this line with a web page address (e.g. www.epatha.com/message.html)
</http><browser><type>
Replace this line with NATIVE or SIMPLE
</type><x>150</x><y>50</y><width>500</width><height>400</height>
</browser>
<text><data>
Replace this line with text to be displayed in modal box; or remove for NO modal box(use | for new line)
</data><x>150</x><y>50</y>
</text>
</xml>
This script allows you to define whether you want a client side browser launched or whether you want a client side, modal text window launched. Either, or both, can be defined. Specifically:
  1. The <http> tag specifies the web page that will appear in the browser. Remove the data, or the entire tag to tell the license client not to launch a browser.
  2. If you're using a web page, the <browser> tag defines the type of browser. To launch the client user's normal browser, define the <type> tag as NATIVE. To launch a simplified, HTML-only, browser, define the <type> tag as SIMPLE.
  3. If you selected the SIMPLE browser, you can also specify its screen location (via the <X> & <Y> tags) and its size (via the <width> & <height> tags).
    If you selected the NATIVE browser, you cannot specify either location or size of the browser (i.e. the tags will be ignored).
  4. The <text> tag is defined to tell the license client to launch a modal text window. Remove the data, or the entire text tag to tell the license client not to launch a modal text box.
  5. If you're using a modal text box, you can also specify its screen location (via the <X> & <Y> tags).


2.1.2  The CLI Method
Creating an internet license in a CLI environment is the same as creating a standard license with the addition of a 6th or 7th paramaeter, which names the internet template file. The internet template file itself can be created via the CLI by calling the CreateInetTemplate class. After creating an internet template file, just call the CreateLicense application via:

java -cp [installation path]License.jar com.alphase.lic.CreateLicense [arguments...]
and provide the following arguments in the order listed:
  1. product
  2. customer
  3. version.subversion:options
  4. days[F]
  5. license filename
  6. CAT=n:data (optional)
  7. INET=filespec

2.1.3 Creating an Internet Template
An internet template file describes the internet portion of a license. It can be created in the CLI via:

java -cp [installation path]License.jar com.alphase.lic.CreateInetTemplate [arguments...]
You can provide up to 9 argumets. The first 3 are required and must be provided in the order shown:
  1. Internet Socket, in the form host.domain:port or localhost:port
  2. Connection Type, in the form of a single digit, where:
    1 = First use only
    2 = Required
    3 = When available
  3. Filename of the template file you want to create
All other arguments are optional and can be in any order:
  • Affirm "Notify message if connection is unavailable" by entering INN=, for the standard message, or INN="message..." for a custom message.
  • Affirm "Use Date Server" by entering UDS
  • Affirm "Expire license after nnn connections", by entering EXP:nnn
  • Affirm "Remind after nnn connections", by entering REM=nnn, for the standard message, or REM=nnn:"message..." for a custom message.
  • To "Replace license on next connection", enter SUB=connType=product=customer=ver.sver:options=daysF=catType:catData.
    Here connType can be 0, 1, 2 or 3, where 0 recreates a standard license. To leave any item unchanged, use a *. For example SUB=*=*=*=*=21=* only replaces the Days field with 21.
  • Affirm "Issue Express Message on next connection" by entering MSG="message...".
In the example below, an internet template file called std.int is created, using the date server on port 333 of "folly.com.uk", when it is available, and substituting a permanent license upon first use. Assume the java classpath has been already defined to include [installation path]License.jar:
java com.alphase.lic.CreateInetTemplate folly.com.uk:333 3 std.int UDS SUB=*=*=*=*=0=*

In the next example, an internet template file called std.int is created, using port 333 of "folly.com.uk", when it is available, to accumulate end user statistics. It also provides for an express message.
java com.alphase.lic.CreateInetTemplate folly.com.uk:333 3 std.int MSG="Please buy our product"


2.1.4 The API Methods
Similar to the CLI methodology, you create an internet license from within your Java server side code, by creating an internet template, known as an InternetSet, and then use the makeLicense class to complete the process. Like the standard license, this method essentially calls for you to create a new instance of the makeLicense class and then issue as many licenses as you like using the createFile method. At any time you can change any of the license's standard or internet arguments while leaving the others set as before. An example program (ApiExample2.java) is provided with the eLM and shown here, as well.

import com.alphase.lic.makeLicense;
public class ApiExample {
    public static void main (String args[])
    {
    int ix, iix, len=1, ival, ver=0, subver=0, days=0;
    String prod=null, cust=null, file;
    boolean options[], sofu;
    options = new boolean[8];
    for (ix=0; ix < 8; ix++)
       {
       try { len = args[ix].length(); }
       catch (ArrayIndexOutOfBoundsException e) { break; }
       if ( len == 0 )
       break;
       if ( args[ix].startsWith("product=") )
       prod = args[ix].substring(8);
       else if ( args[ix].startsWith("customer=") )
       cust = args[ix].substring(9);
       else if ( args[ix].startsWith("version=") )
       {
       try { ver = Integer.parseInt(args[ix].substring(8)); }
       catch(NumberFormatException nfex) { ver = 0; }
       }
       else if ( args[ix].startsWith("subver=") )
       {
       try { subver = Integer.parseInt(args[ix].substring(7)); }
       catch(NumberFormatException nfex) { subver = 0; }
       }
       else if ( args[ix].startsWith("days=") )
       {        try { days = Integer.parseInt(args[ix].substring(5)); }
       catch(NumberFormatException nfex) { days = 0; }
       }
       else if ( args[ix].equals("SOFU") )
       {
       sofu = true;
       }
       else if ( args[ix].startsWith("options=") )
       {
       for (iix=0; iix < (len-8); iix++)        {
       try { ival = Integer.parseInt(args[ix].substring((8+iix), (8+iix+1))); }
       catch(NumberFormatException nfex) { ival = 0; }
       if ( ival < 1 || ival > 8 )
       break;
       options[ival-1] = true;
       }

    makeLicense lic = new makeLicense(prod, cust, ver, subver, options, days, sofu);
    if ( lic.Condition != 0 )
       System.out.println("Initial error: " +lic.getErrorMessage());
    if ( lic.createFile("mylic1.key") )
       System.out.println("mylic1.key created");
    else
       System.out.println(lic.getErrorMessage());

    // Add Internet
    InternetSet ins = new InternetSet("uspo.gov", 122, InternetSet.WHENEVER);
    lic.resetInternet(ins);

    if ( lic.createFile("inter.key") )
       System.out.println("inter.key created");
    else
       System.out.println(lic.getErrorMessage());
    }
}
2.2. Validating an Internet License
Like a standard license, an existing internet license may be validated via the GUI, CLI or API.

2.2.1 The GUI Method
You validate a version 3.x internet license from the GUI just as you would a standard license. If the license is valid, you can then click on the Settings... button to view internet values; however, if you have not selected the Defer Verification option when the license is loaded, all the internet options will be applied during verification, which may be very problematic, especially if you have indicated a substitute license!

GUI Validation
 


2.2.2 The CLI Method
As with the Standard Edition, to validate a license directly from your command line interface (without invoking the GUI) use the LicenseCheck application class.

If you are invoking this class from the License.jar file, supplied by eLM, just enter the license file as the first argument and NoNet as argument #2.
If you do not specify NoNet the license will go through the normal internet verification process.

Example 1: a valid license checked at your own site :

java -cp C:\jlm\License.jar com.alphase.lic.LicenseCheck acme.key NoNet

Checking file: acme.key with seed: 5092871131520912556
Internet verification is NOT implemented.
Valid, active license:
       eLM Version: 3 Standard version
       Creation Date : 2005-May-04 12:43:44
       Expiration Date: 2005-Jul-03 12:44:13
       Start countdown on 1st use: true

       Product: Hammer Maker
       Customer: Acme Cartoons
       Free form data: Requested by Wiley Coyote
       Version: 1.0
       Options: 1=true 2=false 3=false 4=false 5=false 6=false 7=false 8=false

       Internet Options:
       Socket: cat.com:777
       Connection style: When Available
       Warn when IP not available
       Use date server when available
       No connection limit
       No connection reminders
       Use Express message: This is the message we want...
       No substitute license

To validate a license from a client side environment, specify your seed key as argument #2. If you specify both NoNet and a seed key, the NoNet argument will be ignored. This insures client side activities cannot bypass internet checking.


2.2.3 The API Method
Validating an internet license is no different than validating a standard license. There is, of course, the extra internet information, which you can obtain by using the getInternet method of the License class.


2.3. Internet Licensing Services
elm provides two separate services to facilitate internet licensing: the Internet License Server and Internet Control Services.

2.3.1 The Internet Server
The Internet License Server provides the interaction for all your internet licenses. To use this properly, you must have permanent internet connection with a static IP address, or a dynamically routed domain name. Of course you can use a third party internet provider as your proxy if you like. The important point here is that the distributed license consumers are able to locate the server address and port you defined during license creation.
You can also have more than one server running in the same environment, provided they have different port assignments. This may be useful if you have more than one master license and wish to control them separately.
To start the server in a CLI environment, enter:
java -cp [installation path]License.jar com.alphase.lic.InternetServer IP Address:Port
For example :
java -cp /root/bin/elm/License.jar com.alphase.lic.InternetServer 192.168.1.3:777
You can add trace as an optional second argument if you want to log the server's actions. Servers can also be started from a GUI environment using elm's Internet Control Services below.

2.3.2 Internet Control Services
Internet Control Services allow you to define and operate Internet Servers, control internet license assignments and review license usage statistics.
To start Internet Control Services, enter:
java -cp [installation path]License.jar com.alphase.lic.InternetMe

The top section, SERVER CONTROL, allows you to define new servers by specifying their IP address & port and clicking Add Server. Once added they will be saved in a control file. Then, after selecting them in the pull down choice bar, you can Start, Stop, Test or Remove them via the buttons provided.
When a server is started in this manner it will continue to run only the while Internet Control Services window is active.

The second section, LICENSE CONTROL, is more involved and allows you to view internet licenses or license history and redefine existing licenses. To view and activate the license list, click the Show button.



At this point, you may want to expand the size of your window and adjust the column sizes for easier viewing. The columns are also movable and sortable, using the same methodology as are described in the History Box. This collection is different than the standard history box however, in that you cannot turn off new license collection as you can with standard history.
You can, however, delete entries after they are created, by selecting them and clicking the Enable trash button, then clicking the (now renamed) Remove button. This is deliberately made more involved than a single click, because, once a license is removed in this way, you can never exercise internet control over it again. Once the trash has been enabled, the next action must be remove, or the trash button will be disabled again with your next action.

To view a license's history, select the license(s) of interest and click the View Logs button.





To edit a license, select a single license of interest and click the Edit button. The windows for editing look and act just as the ones described in The GUI Method.





A. API Reference Section
The following describes the APIs available to the eLM user.



public class   License
com.alphase.lic
|
+--License
The License class interprets and validates all components of a license file. To create an instance, you must provide the master ID that was used to create your licenses. You can then call the verifyLicenseFile method on any license files to determine its validity and settings.

Field Summary
public int LicenseVal
public static int data categories


Constructor Summary
License ( )
License (String keyname)
License (long masterID)
License (int masterID)


Method Summary
public boolean verifyLicenseFile (String filespec)
Process a potential license file
public boolean verifyLicense (InputStream ins)
Process a potential license via its opened stream. Use this when your license is in your application jar file.
public String getProduct ( )
public String getCustomer ( )
public int getVersion ( )
public int getSubVersion ( )
public Date getExpirationDate ( )
public String getExpireDate ( )
Get the expiration date in the form: MM/dd/yyyy HH:mm:ss
public boolean getOption (int option)
Returns a specific option setting
public int getCatDataType ( )
Get the license's data category
public String getOptionValue (int option)
Gets the option value if the license's Category Data is OPTION_PAIRED.
public String getDelimitedValue (int index)
Gets the delimited value if the license's Category Data is DELIMITED
public String getFreeValue ( )
Gets the delimited value if the license's Category Data is FREE_FORM
public boolean isExpired ( )
True if the license is expired, otherwise, false.
public boolean isTemporary ( )
True if the license is temporary, otherwise, false.
public boolean isTempFirstUse ( )
True if the license is temporary with countdown based on first use, otherwise, false.
public boolean isInetEnabled ( )
True if the license is an Internet license, otherwise, false.
public InternetSet getInternet ( )
Returns the license's InternetSet, or null.
public String getErrorMessage ( )
Returns the last error message.
public void logServerMessage (String msg)
Writes the message into this license's internet server log file.


Field Detail

LicenseVal

public int LicenseVal
After license validation contains a positive number for a valid license and one of the following, for an invalid license:
-1 Missing file specification
-2 Missing file
-3 Missing Product
-4 Missing Customer
-5 Missing Master ID
-6 Invalid or corrupt License
-7 Corrupt Internet License
-8 License did not pass Internet Server validation



data categories

Possible types of Categorized Data:
public static int  NONE
public static int  FREE_FORM
public static int  DELIMITED
public static int  OPTION_PAIRED


Constructor Detail

License

public License()



License

public License (String keyname)

-For advanced users only-
Use this constructor when you have multiple master licenses in your License.jar file. Specify the name of the one you want to use for this license.



License

public License (long masterID)



License

public License (int masterID)

To construct a version 2.2, 32 bit License


Method Detail


verifyLicenseFile

public boolean  verifyLicenseFile (String filespec)

Process a potential license file



verifyLicense

public boolean  verifyLicense (InputStream ins)

Process a potential license via its opened stream



getProduct

public String  getProduct ()

Return the license's product



getCustomer

public String  getCustomer ()

Return the license's customer id



getVersion

public int  getVersion ()

Return the licensed product's version



getSubVersion

public int  getSubVersion ()

Return the licensed product's sub version



getExpirationDate

public Date  getExpirationDate ()

Return the license's expiration date, or null.



getExpireDate

public String  getExpireDate ()

Return the license's expiration date in the form (MM/dd/yyyy HH:mm:ss), or null.



getOption

public boolean  getOption (int optionNbr)

Return the option setting of this license's option number (1 - 8).



getCatDataType

public int  getCatDataType ()

Return the license's Categorized Data type.



getOptionValue

public String  getOptionValue (int optionNbr)

Return the value associated with this option number (1 - 8), if Categorized Data Type is OPTION_PAIRED, otherwise, null.



getDelimitedValue

public String  getDelimitedValue (int token)

Return this license's Categorized Data token, if Categorized Data Type is DELIMITED, otherwise, null.



getFreeValue

public String  getFreeValue ()

Return this license's Categorized Data if the Categorized Data Type is FREE_FORM, otherwise, null.



isExpired

public boolean  isExpired ()

Returns true if this license is expired, otherwise, false.



isTemporary

public boolean isTemporary ()

Returns true if this license is temporary, otherwise, false.



isTempFirstUse

public boolean  isTempFirstUse ()

Returns true if this license is temporary and affirms the Start on First Use option, otherwise, false.



isInetEnabled

public boolean  isInetEnabled ()

Returns true if this license is an Internet license, otherwise, false.



getInternet

public InternetSet  getInternet ()

Return the InternetSet associated with this license, or null, if it has none.



getErrorMessage

public String  getErrorMessage ()

Return the last error message marked on this license.



logServerMessage

public void  logServerMessage (String message)

Writes this message into this license's internet server log file.



public  makeLicense
com.alphase.lic
|
+--makeLicense
The makeLicense class is provided to allow you to create licenses from within your Java code. To do this it must have access to your License.jar file, which also contains your master license. It is both legal and expected that you may have to move this file to a different location to properly use this facility. However, it is not legal to move these items outside of your organization. For more information, refer to the eLM License Agreement.

Field Summary
public int Condition


Constructor Summary
makeLicense (String product, String customer, int version, int subversion)
makeLicense (String product, String customer, int version, int subversion, boolean option[], int days)
makeLicense (String product, String customer, int version, int subversion, boolean option[], int days, boolean StartOnFirstUse)
makeLicense (LicenseSet ls)
makeLicense (LicenseSet ls, String alternate_key)


Method Summary
public void setHistory (boolean state)
To force history collection on/off during API license creation
public boolean setHistory (boolean state, String history_location)
To force history collection on/off during API license creation and provide new history file directory.
public boolean resetCatData (int dataType, String data)
Reset Categorized data.
public void resetProduct (String product)
public void resetCustomer (String customer)
public void resetVersion (int version)
public void resetSubVersion (int subVersion)
public void resetOptions ( boolean option[] )
Set the option array
public void resetDays (int days)
public void resetDays (int days, boolean startOnFirstUse))
public void resetInternet (InternetSet ins))
public void useInternet ( boolean tell )
public boolean createFile (String licenseFile)
public String getErrorMessage ( )
Returns the latest error message


Field Detail

Condition

public int Condition
After license creation contains one of the following:
-1 I/O error creating license file
0 Successful license file creation
1 Invalid master license
2 Product is missing
3 Customer is missing
4 Version number is invalid
5 SubVersion number is invalid
6 Bad Option array
7 The absolute value of Days exceeds 32,767
8 Invalid Categorized data type
9 Invalid Categorized data
10 Not authorized to make Internet License
11 Can't write server side Internet data


Constructor Detail

makeLicense

public makeLicense (String product, String customer, int version, int subversion)

Creates an instance of the class with the specified settings for a permanent license with all Options preset to false. It also sets the Condition variable as required. The Categorized Data Type is set to NONE.



makeLicense

public makeLicense (String product, String customer, int version, int subversion, boolean option[], int days)



makeLicense

public makeLicense (String product, String customer, int version, int subversion, boolean option[], int day, boolean startOnFirstUse)



makeLicense

public makeLicense (LicenseSet ls)





makeLicense

public makeLicense (LicenseSet, String alternate_key)

-For advanced users only-
Use this constructor when you have multiple master licenses in your License.jar file. Specify the name


Method Detail


setHistory

public void  setHistory (boolean collect)

collect: Forces history collection on/off during API license creation.


setHistory

public void  setHistory (boolean collect, String historyLocation)

collect: Forces history collection on/off during API license creation and provide new history file directory.
historyLocation: use directory location including a final separator, or use null to force a reset to the original home of history


resetCatData

public boolean  resetCatData (int type, String data)

type: Use License.NONE, License.FREE_FORM, License.DELIMITED or License.OPTION_PAIRED
data: Rules on type: for DELIMITED and OPTION_PAIRED, begin with the delimiter. OPTION_PAIRED data must contain 8 delimiters. FREE_FORM data must contain at least one byte.
Returns: true, unless the Type is invalid, or the Data is invalid for the Type specified.


resetProduct

public void  resetProduct (String product)

Sets the license to the new product name.
product: can contain anything, except null.


resetCustomer

public void resetCustomer (String customer)

Sets the license to the new customer.
customer: can contain anything, except null.


resetVersion

public void  resetVersion (int version)

version: 0 - 15


resetSubVersion

public void  resetSubVersion (int subversion)

subversion: 0 - 15


resetOptions

public void  resetOptions (boolean options[])

options: An array of 8 options


resetDays

public void  resetDays (int days)

days: Sets the license to expire in this many days. Postive or negative values are permitted, but the absolute value can not exceed 32,767. If zero is used, a permanent license will be created.


resetDays

public void  resetDays (int days, boolean startOnFirstUse)

days: Sets the license to expire in this many days. Postive or negative values are permitted, but the absolute value can not exceed 32,767. If zero is used, a permanent license will be created.
startOnFirstUse: true or false


resetInternet

public void  resetInternet (InternetSet ins)

Reset the internet portion of the license to the values defined here.



useInternet

public void  useInternet (boolean value)

Turn internet usage off or on.



createFile

public boolean  createFile (String keyfile)

Create a new license.
keyfile: Filename of license.
Returns: true, if the keyfile was successfully created: false if it was not.
Also sets the Condition variable.


getErrorMessage

public String  getErrorMessage ()

Returns the text associated with the Condition variable.




public class   LicenseSet
com.alphase.lic
|
+--LicenseSet
The LicenseSet class is a support class that provides for construction of a portable set of license data.

Field Summary
none N/A


Constructor Summary
LicenseSet (String customer, String product, int version, int subVersion, int options, int days, boolean startOnFirstUse)


Method Summary

none


Field Detail

none




Constructor Detail

LicenseSet

public LicenseSet (String customer, String product, int version, int subVersion, int options, int days, boolean startOnFirstUse)
customer: Any String
product: Any String
version: 0 - 15
subVersion: 0 - 15
options: An integer whose low order 8 bits correspond to boolean options 1-8
days: Days until license will expire.
Postive or negative values are permitted, but the absolute value can not exceed 32,767. If zero is used, a permanent license will be created.
startOnFirstUse: true or false


Method Detail


none





public class   InternetSet
com.alphase.lic
|
+--InternetSet
The InternetSet class is a support class that provides for construction of a portable set of license data for Internet licenses.

Field Summary
none N/A


Constructor Summary
InternetSet (String host, int port, int connectionType)


Method Summary
public void setNotify (boolean notify, String message)
public void setExpress (boolean notify, String message)
public void setDurationReminder (boolean notify, int count, String message)
public void setConnectionLimit (boolean notify, int connectionLimit)
public void useDateServer (boolean use)
public void replaceWithSubstitute (boolean replace)
public void setTempSubstitute (String product, String customer, int categorizedDataType, String categorizedData, boolean options[], int version, int subVersion, int days, boolean startOnFirstUse)
public void setPermSubstitute (String product, String customer, int categorizedDataType, String categorizedData, boolean options[], int version, int subVersion)
public void setSubsituteConnection (int connectionType)


Field Detail

Internet Connection Type

static int
Use one of these 4 values to describe the Internet Connection Type:
NEVER, FIRST, ALWAYS, WHENEVER

Constructor Detail

InternetSet

public InternetSet (String host, int port, int connectionType)
host: domain name or "localhost"
port: 1 - 65,536
connectionType: Internet Connection Type


Method Detail


setNotify

public void  setNotify (boolean notify, String message)

Set the connection failure notification option.
notify: true or false
message: set to null to use the standard message, or supply your own text or xml message here


setExpress

public void  setExpress (boolean notify, String message)

Set the express message notification option.
notify: true or false
message: supply your own text or xml message here


setDurationReminder

public void  setDurationReminder (boolean notify, int count, String message)

Set the connection limit notification option.
notify: true or false
count: the connection limit, after which a message is displayed
message: set to null to use the standard message, or supply your own text or xml message here


setConnectionLimit

public void  setConnectionLimit (boolean limit, int connectionLimit)

Set the connection failure notification option.
limit: true or false
connectionLimit: the connection limit, after which the license expires


useDateServer

public void  useDateServer (boolean use)

Set the license to use the internet date service of the license producer.
use: true or false


replaceWithSubstitute

public void  replaceWithSubstitute (boolean replace)

Set the license to replace itself with the pre-defines substitute on the next internet connection.
replace: true or false


setTempSubstitute

public void  setTempSubstitute (String product, String customer, int categorizedDataType, String categorizedData, boolean options[], int version, int subVersion, int days, boolean startOnFirstUse)

Define a temporary license as this license's substitute license.
product: Any String
customer: Any String
categorizedDataTyp: Use a data type category
categorizedData: Any appropriately formatted String
options: An array of 8 boolean options 1-8
version: 0 - 15
subVersion: 0 - 15
days: Days until license will expire.
Postive or negative values are permitted, but the absolute value can not exceed 32,767. If zero is used, a permanent license will be created.
startOnFirstUse: true or false


setPermSubstitute

public void  setPermSubstitute (String product, String customer, int categorizedDataType, String categorizedData, boolean options[], int version, int subVersion)

Define a permanent license as this license's substitute license.
product: Any String
customer: Any String
categorizedDataTyp: Use a data type category
categorizedData: Any appropriately formatted String
options: An array of 8 boolean options 1-8
version: 0 - 15
subVersion: 0 - 15


setSubsituteConnection

public void  setSubsituteConnection (int connectionType)

Set the substitute license to use this internet connection type.
connectionType: Internet Connection Type




For any problems or suggestions, please email us at lic23@alphase.com.
™ Sun, Sun Microsystems, the Sun Logo and Java are trademarks or registered trademarks of Sun Microsystems, Inc. in the United States and other countries.


© 2005 by ePatha Software, LLC