/*
* Copyright (C) 2006-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.jlan.smb.dcerpc.info;
import org.alfresco.jlan.smb.dcerpc.DCEBuffer;
import org.alfresco.jlan.smb.dcerpc.DCEBufferException;
import org.alfresco.jlan.smb.dcerpc.DCEReadable;
import org.alfresco.jlan.smb.dcerpc.DCEWriteable;
/**
* Server Information Class
*
* @author gkspencer
*/
public class ServerInfo implements DCEWriteable, DCEReadable {
// Information levels supported
public static final int InfoLevel0 = 0;
public static final int InfoLevel1 = 1;
public static final int InfoLevel101 = 101;
public static final int InfoLevel102 = 102;
// Server platform ids
public final static int PLATFORM_OS2 = 400;
public final static int PLATFORM_NT = 500;
// Information level
private int m_infoLevel;
// Server information
private int m_platformId;
private String m_name;
private int m_verMajor;
private int m_verMinor;
private int m_srvType;
private String m_comment;
/**
* Default constructor
*/
public ServerInfo() {
}
/**
* Class constructor
*
* @param lev int
*/
public ServerInfo(int lev) {
m_infoLevel = lev;
}
/**
* Get the information level
*
* @return int
*/
public final int getInformationLevel() {
return m_infoLevel;
}
/**
* Get the server name
*
* @return String
*/
public final String getServerName() {
return m_name;
}
/**
* Get the server comment
*
* @return String
*/
public final String getComment() {
return m_comment;
}
/**
* Get the server platform id
*
* @return int
*/
public final int getPlatformId() {
return m_platformId;
}
/**
* Get the servev major version
*
* @return int
*/
public final int getMajorVersion() {
return m_verMajor;
}
/**
* Get the server minor version
*
* @return int
*/
public final int getMinorVersion() {
return m_verMinor;
}
/**
* Get the server type flags
*
* @return int
*/
public final int getServerType() {
return m_srvType;
}
/**
* Set the server name
*
* @param name String
*/
public final void setServerName(String name) {
m_name = name;
}
/**
* Set the server comment
*
* @param comment String
*/
public final void setComment(String comment) {
m_comment = comment;
}
/**
* Set the information level
*
* @param lev int
*/
public final void setInformationLevel(int lev) {
m_infoLevel = lev;
}
/**
* Set the server platform id
*
* @param id int
*/
public final void setPlatformId(int id) {
m_platformId = id;
}
/**
* Set the server type flags
*
* @param typ int
*/
public final void setServerType(int typ) {
m_srvType = typ;
}
/**
* Set the server version
*
* @param verMajor int
* @param verMinor int
*/
public final void setVersion(int verMajor, int verMinor) {
m_verMajor = verMajor;
m_verMinor = verMinor;
}
/**
* Clear the string values
*/
protected final void clearStrings() {
// Clear the string values
m_name = null;
m_comment = null;
}
/**
* Read the server information from the DCE/RPC buffer
*
* @param buf DCEBuffer
* @exception DCEBufferException
*/
public void readObject(DCEBuffer buf)
throws DCEBufferException {
// Clear the string values
clearStrings();
// Read the server information details
m_infoLevel = buf.getInt();
buf.skipPointer();
// Unpack the server information
switch (getInformationLevel()) {
// Information level 0
case InfoLevel0:
if ( buf.getPointer() != 0)
m_name = buf.getString(DCEBuffer.ALIGN_INT);
break;
// Information level 101/1
case InfoLevel1:
case InfoLevel101:
m_platformId = buf.getInt();
buf.skipPointer();
m_verMajor = buf.getInt();
m_verMinor = buf.getInt();
m_srvType = buf.getInt();
buf.skipPointer();
m_name = buf.getString(DCEBuffer.ALIGN_INT);
m_comment = buf.getString();
break;
// Level 102
case InfoLevel102:
break;
}
}
/**
* Read the strings for this object from the DCE/RPC buffer
*
* @param buf DCEBuffer
* @exception DCEBufferException
*/
public void readStrings(DCEBuffer buf)
throws DCEBufferException {
// Not required
}
/**
* Write a server information structure
*
* @param buf DCEBuffer
* @param strBuf DCEBuffer
*/
public void writeObject(DCEBuffer buf, DCEBuffer strBuf) {
// Output the server information structure
buf.putInt(getInformationLevel());
buf.putPointer(true);
// Output the required information level
switch(getInformationLevel()) {
// Information level 0
case InfoLevel0:
buf.putPointer(getServerName() != null);
if ( getServerName() != null)
strBuf.putString(getServerName(), DCEBuffer.ALIGN_INT, true);
break;
// Information level 101/1
case InfoLevel1:
case InfoLevel101:
buf.putInt(getPlatformId());
buf.putPointer(true);
buf.putInt(getMajorVersion());
buf.putInt(getMinorVersion());
buf.putInt(getServerType());
buf.putPointer(true);
strBuf.putString(getServerName(), DCEBuffer.ALIGN_INT, true);
strBuf.putString(getComment() != null ? getComment() : "", DCEBuffer.ALIGN_INT, true);
break;
// Level 102
case InfoLevel102:
break;
}
}
/**
* Return the server information as a string
*
* @return String
*/
public String toString() {
return "";
}
}