com.cisco.provisioning.cpe.extensions.configuration
Class CableHomeTFTPFile

java.lang.Object
  extended by com.cisco.provisioning.cpe.extensions.configuration.AbstractTFTPFile
      extended by com.cisco.provisioning.cpe.extensions.configuration.DOCSISTFTPFile
          extended by com.cisco.provisioning.cpe.extensions.configuration.CableHomeTFTPFile
All Implemented Interfaces:
com.cisco.csrc.encode.Encodable, com.cisco.csrc.util.Displayable, TFTPFile, Externalizable, Serializable

public class CableHomeTFTPFile
extends DOCSISTFTPFile

CableHome TFTP file. This class provides an implementation of a TFTPFile interface for named or unamed CableHome files. This file provides for the ability to build a CableHome file dynamically by adding top-level OptionValue instances. During the generation() method the OptionValue instances are processed into a binary configuration. The mix() method provides for the dynamic mixing of a CableHome configuration file (Firewall file URL, Firewall file hash, PS file hashC). The mix algorithm is controlled by the presence of device-specific properties in either the CableHomeTFTPFile properties map or global properties set in the map given on the mix() method invocation. Multiple constructors are provided, but the expected use case is that the null-arg constructor is used, followed by multiple calls to the add() method to build the CableHomeTFTPFile dynamically. Please make a note that there is no special generate() method for this sub class. Instead, the corresponding method from the super class will be utilized.

See Also:
AbstractTFTPFile, TFTPFile, OptionValue, DOCSISTFTPFile, Serialized Form

Constructor Summary
CableHomeTFTPFile()
          No-arg constructor.
CableHomeTFTPFile(byte[] fileBytes)
          Use this constructor when no filename tag is used and the configuration file bytes is known at construction time.
CableHomeTFTPFile(String filename)
          Use this constructor when the filename is known at construction time, but the configuration file contents are created later.
CableHomeTFTPFile(String filename, byte[] fileBytes)
          Use this constructor when the filename and configuration file bytes are known at construction time.
 
Method Summary
 void add(List<OptionValue> optionValueList)
          Add the option values contained in the given list to the CableHome configuration.
 void add(OptionValue optionValue)
          Add the specified option value to the CableHome configuration.
static byte[] calcSHAmic(byte[] data)
          Calculate SHA-1 digest ( the CH MIC ).
 void decode(ByteArrayInputStream in, com.cisco.csrc.encode.DataDecoder decoder)
          Decodes object's data and sets object's variables.
 void display(PrintWriter output, String prefix, List<String> options, boolean verbose)
          Display the contents of this object for debugging.
 void encode(ByteArrayOutputStream out, com.cisco.csrc.encode.DataEncoder encoder)
          Encodes object's data.
 boolean equals(Object object)
          Indicates whether some other object is "equal to" this one.
 void generate()
          Perform post-processing on DOCSIS configuration data.
 String getFirewallFileName()
          Returns the firewall file name for this Cable Home TFTP configuration.
 int hashCode()
          Returns the hashcode for this CableHomeTFTPFile.
 void mix(String ipAddress, CSRCProperties csrcProp)
          Perform DPE mixing.
 String paramString()
          Returns a string representing the state of the TFTPFile object.
 void readExternal(ObjectInput in)
          Externalizable interface.
 void setFirewallFileName(String fileName)
          Sets the firewall file name for this Cable Home TFTP configuration.
 void writeExternal(ObjectOutput out)
          Externalizable interface.
 
Methods inherited from class com.cisco.provisioning.cpe.extensions.configuration.DOCSISTFTPFile
calcCMTSmicUsingMD5, calcCMTSmicUsingMMH, catByteArrays, clear, getOptionValueList, size, validate
 
Methods inherited from class com.cisco.provisioning.cpe.extensions.configuration.AbstractTFTPFile
getFile, getFilename, getProperties, getProperty, setProperty, toString
 
Methods inherited from class java.lang.Object
getClass, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CableHomeTFTPFile

public CableHomeTFTPFile()
No-arg constructor. Not all TFTPFile objects will have a filename tag or know their configuration file data at construction time. It is expected that addtional methods will be provided by the subclass to create the configuration data.


CableHomeTFTPFile

public CableHomeTFTPFile(String filename)
Use this constructor when the filename is known at construction time, but the configuration file contents are created later.

Parameters:
filename -

CableHomeTFTPFile

public CableHomeTFTPFile(byte[] fileBytes)
Use this constructor when no filename tag is used and the configuration file bytes is known at construction time.

Parameters:
fileBytes -

CableHomeTFTPFile

public CableHomeTFTPFile(String filename,
                         byte[] fileBytes)
Use this constructor when the filename and configuration file bytes are known at construction time.

Parameters:
filename -
fileBytes -
Method Detail

add

public void add(OptionValue optionValue)
Add the specified option value to the CableHome configuration. Only top-level CableHome option values can be added to the configuration.

Overrides:
add in class DOCSISTFTPFile
Parameters:
optionValue - option value
Throws:
IllegalArgumentException - if OptionValue is null or if OptionValue is not a top-level option

add

public void add(List<OptionValue> optionValueList)
Add the option values contained in the given list to the CableHome configuration. This is a convenience method to allow the caller to build a list of option value instances and add them to the CableHome configuration in one step. The list must contain only OptionValue instances and each of those OptionValue instances may only be a top level option.

Overrides:
add in class DOCSISTFTPFile
Parameters:
optionValueList - list of option values
Throws:
IllegalArgumentException - if list is null, list contains something other than top-level OptionValue instances

generate

public void generate()
              throws InvalidConfigException
Perform post-processing on DOCSIS configuration data. Required interface. For DOCSIS configuration the generate() method causes the binary DOCSIS configuration to be generated. This involves iterating over the OptionValue instances and constructing the top-level TLV's for option values that have sub-options. Subsequent calls to getBinaryConfiguration() will retreive a binary BLOB containing the DOCSIS configuration binary.

Specified by:
generate in interface TFTPFile
Overrides:
generate in class DOCSISTFTPFile
Throws:
InvalidConfigException - if any errors are encountered during the generation.

mix

public void mix(String ipAddress,
                CSRCProperties csrcProp)
         throws InvalidConfigException
Perform DPE mixing. This method is invoked prior to the file being sent to the device. Perform any mixing operations required. Optional.

Specified by:
mix in interface TFTPFile
Overrides:
mix in class DOCSISTFTPFile
Parameters:
ipAddress - of the device requesting the TFTP file
csrcProp - relevant to mixing operation
Throws:
InvalidConfigException - if any errors are encountered during the mixing.

paramString

public String paramString()
Returns a string representing the state of the TFTPFile object. This method is intended to be used only for debugging purposes, and the content and format of the returned string may vary between implementations. The returned string may be empty but may not be null.

Overrides:
paramString in class DOCSISTFTPFile
Returns:
String

display

public void display(PrintWriter output,
                    String prefix,
                    List<String> options,
                    boolean verbose)
Display the contents of this object for debugging.

The output from this method is expected to be easier to read, with possibly less detail than is produced by toString. The output can be multi-line if that makes it easier to read.

Specified by:
display in interface com.cisco.csrc.util.Displayable
Overrides:
display in class DOCSISTFTPFile
Parameters:
output - the resulting output is written to this parameter.
prefix - string to output before each line, usually blanks to indent this output to show association with parent object.
options - list of string options to control output.
verbose - true indicates detailed output desired.

setFirewallFileName

public void setFirewallFileName(String fileName)
Sets the firewall file name for this Cable Home TFTP configuration.

Parameters:
fileName - Name of the firewall file. This name must match exactly with the name specified while adding the file in to DB

getFirewallFileName

public String getFirewallFileName()
Returns the firewall file name for this Cable Home TFTP configuration.

Returns:
filename

hashCode

public int hashCode()
Returns the hashcode for this CableHomeTFTPFile.

Overrides:
hashCode in class DOCSISTFTPFile
Returns:
the hashcode for this CableHomeTFTPFile.

equals

public boolean equals(Object object)
Indicates whether some other object is "equal to" this one. We override this method to compare all the fields of DHCPData.

Overrides:
equals in class DOCSISTFTPFile
Parameters:
object - to compare
Returns:
true if equal

readExternal

public void readExternal(ObjectInput in)
                  throws IOException,
                         ClassNotFoundException
Externalizable interface. The object implements the readExternal method to restore its contents by calling the methods of DataInput for primitive types and readObject for objects, strings and arrays. The readExternal method must read the values in the same sequence and with the same types as were written by writeExternal.

Specified by:
readExternal in interface Externalizable
Overrides:
readExternal in class DOCSISTFTPFile
Parameters:
in - the stream to read data from in order to restore the object
Throws:
IOException - if I/O errors occur
ClassNotFoundException - If the class for an object being restored cannot be found.

writeExternal

public void writeExternal(ObjectOutput out)
                   throws IOException
Externalizable interface. The object implements the writeExternal method to save its contents by calling the methods of DataOutput for its primitive values or calling the writeObject method of ObjectOutput for objects, strings, and arrays.

Specified by:
writeExternal in interface Externalizable
Overrides:
writeExternal in class DOCSISTFTPFile
Parameters:
out - the stream to write the object to
Throws:
IOException - Includes any I/O exceptions that may occur

encode

public void encode(ByteArrayOutputStream out,
                   com.cisco.csrc.encode.DataEncoder encoder)
Encodes object's data.

Specified by:
encode in interface com.cisco.csrc.encode.Encodable
Overrides:
encode in class DOCSISTFTPFile
Parameters:
out - the output stream to write to
encoder - the encoder to use

decode

public void decode(ByteArrayInputStream in,
                   com.cisco.csrc.encode.DataDecoder decoder)
Decodes object's data and sets object's variables.

Specified by:
decode in interface com.cisco.csrc.encode.Encodable
Overrides:
decode in class DOCSISTFTPFile
Parameters:
in - the input stream to write to
decoder - the decoder to use

calcSHAmic

public static byte[] calcSHAmic(byte[] data)
                         throws NoSuchAlgorithmException,
                                NoSuchProviderException
Calculate SHA-1 digest ( the CH MIC ).

Parameters:
data - the data to be processed
Returns:
the SHA-1 digest
Throws:
NoSuchAlgorithmException
NoSuchProviderException