/*
* 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.oncrpc.nfs;
/**
* NFS Server Constants Class
*
* @author gkspencer
*/
public final class NFS {
// Default NFS server port
public static final int DefaultPort = 2049;
// Program and version id
public static final int ProgramId = 100003;
public static final int VersionId = 3;
// RPC procedure ids
public static final int ProcNull = 0;
public static final int ProcGetAttr = 1;
public static final int ProcSetAttr = 2;
public static final int ProcLookup = 3;
public static final int ProcAccess = 4;
public static final int ProcReadLink = 5;
public static final int ProcRead = 6;
public static final int ProcWrite = 7;
public static final int ProcCreate = 8;
public static final int ProcMkDir = 9;
public static final int ProcSymLink = 10;
public static final int ProcMkNode = 11;
public static final int ProcRemove = 12;
public static final int ProcRmDir = 13;
public static final int ProcRename = 14;
public static final int ProcLink = 15;
public static final int ProcReadDir = 16;
public static final int ProcReadDirPlus = 17;
public static final int ProcFsStat = 18;
public static final int ProcFsInfo = 19;
public static final int ProcPathConf = 20;
public static final int ProcCommit = 21;
public static final int ProcMax = 21;
// NFS server status codes
public static final int StsSuccess = 0;
public static final int StsPerm = 1;
public static final int StsNoEnt = 2;
public static final int StsIO = 5;
public static final int StsNxIO = 6;
public static final int StsAccess = 13;
public static final int StsExist = 17;
public static final int StsXDev = 18;
public static final int StsNoDev = 19;
public static final int StsNotDir = 20;
public static final int StsIsDir = 21;
public static final int StsInVal = 22;
public static final int StsFBig = 27;
public static final int StsNoSpc = 28;
public static final int StsROFS = 30;
public static final int StsMLink = 31;
public static final int StsNameTooLong = 63;
public static final int StsNotEmpty = 66;
public static final int StsDQuot = 69;
public static final int StsStale = 70;
public static final int StsRemote = 71;
public static final int StsBadHandle = 10001;
public static final int StsNotSync = 10002;
public static final int StsBadCookie = 10003;
public static final int StsNotSupp = 10004;
public static final int StsTooSmall = 10005;
public static final int StsServerFault = 10006;
public static final int StsBadType = 10007;
public static final int StsJukeBox = 10008;
// Data structure limits
public static final int FileHandleSize = 32; // can be 64 for NFS v3
public static final int WriteVerfSize = 8;
public static final int CreateVerfSize = 8;
public static final int CookieVerfSize = 8;
// File types
public static final int FileTypeReg = 1;
public static final int FileTypeDir = 2;
public static final int FileTypeBlk = 3;
public static final int FileTypeChr = 4;
public static final int FileTypeLnk = 5;
public static final int FileTypeSock = 6;
public static final int FileTypeFifo = 7;
// Filesystem properties
public static final int FileSysLink = 0x0001; // supports hard links
public static final int FileSysSymLink = 0x0002; // supports symbolic links
public static final int FileSysHomogeneuos = 0x0004; // PATHCONF valid for all files
public static final int FileSysCanSetTime = 0x0008; // can set time on server side
// Access mask
public static final int AccessRead = 0x0001;
public static final int AccessLookup = 0x0002;
public static final int AccessModify = 0x0004;
public static final int AccessExtend = 0x0008;
public static final int AccessDelete = 0x0010;
public static final int AccessExecute = 0x0020;
public static final int AccessAll = 0x003F;
// Create mode values
public static final int CreateUnchecked = 1;
public static final int CreateGuarded = 2;
public static final int CreateExclusive = 3;
// Write request stable values
public static final int WriteUnstable = 0;
public static final int WriteDataSync = 1;
public static final int WriteFileSync = 2;
// Set attributes file timestamp settings
public static final int DoNotSetTime = 0;
public static final int SetTimeServer = 1;
public static final int SetTimeClient = 2;
// RPC procedure names
private static final String[] _procNames = { "Null", "GetAttr", "SetAttr", "Lookup", "Access", "ReadLink", "Read",
"Write", "Create", "MkDir", "SymLink", "MkNode", "Remove", "RmDir",
"Rename", "Link", "ReadDir", "ReadDirPlus", "FsStat", "FsInfo",
"PathConf", "Commit" };
/**
* Return a procedure id as a name
*
* @param id int
* @return String
*/
public final static String getProcedureName(int id) {
if ( id < 0 || id > ProcMax)
return null;
return _procNames[id];
}
/**
* Return an error status string for the specified status code
*
* @param sts int
* @return String
*/
public static final String getStatusString(int sts) {
String str = null;
switch ( sts) {
case StsSuccess:
str = "Success status";
break;
case StsAccess:
str = "Access denied";
break;
case StsBadCookie:
str = "Bad cookie";
break;
case StsBadHandle:
str = "Bad handle";
break;
case StsBadType:
str = "Bad type";
break;
case StsDQuot:
str = "Quota exceeded";
break;
case StsPerm:
str = "No permission";
break;
case StsExist:
str = "Already exists";
break;
case StsFBig:
str = "File too large";
break;
case StsInVal:
str = "Invalid argument";
break;
case StsIO:
str = "I/O error";
break;
case StsIsDir:
str = "Is directory";
break;
case StsJukeBox:
str = "Jukebox";
break;
case StsMLink:
str = "Too many hard links";
break;
case StsNameTooLong:
str = "Name too long";
break;
case StsNoDev:
str = "No such device";
break;
case StsNoEnt:
str = "No entity";
break;
case StsNoSpc:
str = "No space left on device";
break;
case StsNotSync:
str = "Update synchronization mismatch";
break;
case StsNotDir:
str = "Not directory";
break;
case StsNotEmpty:
str = "Not empty";
break;
case StsNotSupp:
str = "Not supported";
break;
case StsNxIO:
str = "Nxio";
break;
case StsRemote:
str = "Too many levels of remote in path";
break;
case StsROFS:
str = "Readonly filesystem";
break;
case StsServerFault:
str = "Server fault";
break;
case StsStale:
str = "Stale";
break;
case StsTooSmall:
str = "Too small";
break;
case StsXDev:
str = "Cross device hard link attempted";
break;
}
return str;
}
}