| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 | 
							- // This code is derived from jcifs smb client library <jcifs at samba dot org>
 
- // Ported by J. Arturo <webmaster at komodosoft dot net>
 
- //  
 
- // This library is free software; you can redistribute it and/or
 
- // modify it under the terms of the GNU Lesser General Public
 
- // License as published by the Free Software Foundation; either
 
- // version 2.1 of the License, or (at your option) any later version.
 
- // 
 
- // This library 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
 
- // Lesser General Public License for more details.
 
- // 
 
- // You should have received a copy of the GNU Lesser General Public
 
- // License along with this library; if not, write to the Free Software
 
- // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
- using System;
 
- using System.Text;
 
- using SharpCifs.Util;
 
- using SharpCifs.Util.Sharpen;
 
- namespace SharpCifs.Netbios
 
- {
 
- 	public class Name
 
- 	{
 
- 		private const int TypeOffset = 31;
 
- 		private const int ScopeOffset = 33;
 
- 		private static readonly string DefaultScope = Config.GetProperty("jcifs.netbios.scope"
 
- 			);
 
- 		internal static readonly string OemEncoding = Config.GetProperty("jcifs.encoding"
 
- 			, Runtime.GetProperty("file.encoding"));
 
- 		public string name;
 
- 		public string Scope;
 
- 		public int HexCode;
 
- 		internal int SrcHashCode;
 
- 		public Name()
 
- 		{
 
- 		}
 
- 		public Name(string name, int hexCode, string scope)
 
- 		{
 
- 			if (name.Length > 15)
 
- 			{
 
- 				name = Runtime.Substring(name, 0, 15);
 
- 			}
 
- 			this.name = name.ToUpper();
 
- 			this.HexCode = hexCode;
 
- 			this.Scope = !string.IsNullOrEmpty(scope) ? scope : DefaultScope;
 
- 			SrcHashCode = 0;
 
- 		}
 
- 		internal virtual int WriteWireFormat(byte[] dst, int dstIndex)
 
- 		{
 
- 			// write 0x20 in first byte
 
- 			dst[dstIndex] = unchecked(0x20);
 
- 			// write name
 
- 			try
 
- 			{
 
- 				byte[] tmp = Runtime.GetBytesForString(name, OemEncoding
 
- 					);
 
- 				int i;
 
- 				for (i = 0; i < tmp.Length; i++)
 
- 				{
 
- 					dst[dstIndex + (2 * i + 1)] = unchecked((byte)(((tmp[i] & unchecked(0xF0))
 
- 						 >> 4) + unchecked(0x41)));
 
- 					dst[dstIndex + (2 * i + 2)] = unchecked((byte)((tmp[i] & unchecked(0x0F)) 
 
- 						+ unchecked(0x41)));
 
- 				}
 
- 				for (; i < 15; i++)
 
- 				{
 
- 					dst[dstIndex + (2 * i + 1)] = unchecked(unchecked(0x43));
 
- 					dst[dstIndex + (2 * i + 2)] = unchecked(unchecked(0x41));
 
- 				}
 
- 				dst[dstIndex + TypeOffset] = unchecked((byte)(((HexCode & unchecked(0xF0)
 
- 					) >> 4) + unchecked(0x41)));
 
- 				dst[dstIndex + TypeOffset + 1] = unchecked((byte)((HexCode & unchecked(0x0F)) + unchecked(0x41)));
 
- 			}
 
- 			catch (UnsupportedEncodingException)
 
- 			{
 
- 			}
 
- 			return ScopeOffset + WriteScopeWireFormat(dst, dstIndex + ScopeOffset);
 
- 		}
 
- 		internal virtual int ReadWireFormat(byte[] src, int srcIndex)
 
- 		{
 
- 			byte[] tmp = new byte[ScopeOffset];
 
- 			int length = 15;
 
- 			for (int i = 0; i < 15; i++)
 
- 			{
 
- 				tmp[i] = unchecked((byte)(((src[srcIndex + (2 * i + 1)] & unchecked(0xFF))
 
- 					 - unchecked(0x41)) << 4));
 
- 				tmp[i] |= unchecked((byte)(((src[srcIndex + (2 * i + 2)] & unchecked(0xFF)
 
- 					) - unchecked(0x41)) & unchecked(0x0F)));
 
- 				if (tmp[i] != unchecked((byte)' '))
 
- 				{
 
- 					length = i + 1;
 
- 				}
 
- 			}
 
- 			try
 
- 			{
 
- 				name = Runtime.GetStringForBytes(tmp, 0, length, OemEncoding
 
- 					);
 
- 			}
 
- 			catch (UnsupportedEncodingException)
 
- 			{
 
- 			}
 
- 			HexCode = ((src[srcIndex + TypeOffset] & unchecked(0xFF)) - unchecked(0x41)) << 4;
 
- 			HexCode |= ((src[srcIndex + TypeOffset + 1] & unchecked(0xFF)) - unchecked(
 
- 				0x41)) & unchecked(0x0F);
 
- 			return ScopeOffset + ReadScopeWireFormat(src, srcIndex + ScopeOffset);
 
- 		}
 
-         internal int ReadWireFormatDos(byte[] src, int srcIndex)
 
-         {
 
-             int length = 15;
 
-             byte[] tmp = new byte[length];
 
-             Array.Copy(src, srcIndex, tmp, 0, length);
 
-             try
 
-             {
 
-                 name = Runtime.GetStringForBytes(tmp, 0, length).Trim();
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-             }
 
-             HexCode = src[srcIndex + length];
 
-             return length + 1;
 
-         }
 
- 		internal virtual int WriteScopeWireFormat(byte[] dst, int dstIndex)
 
- 		{
 
- 			if (Scope == null)
 
- 			{
 
- 				dst[dstIndex] = unchecked(unchecked(0x00));
 
- 				return 1;
 
- 			}
 
- 			// copy new scope in
 
- 			dst[dstIndex++] = unchecked((byte)('.'));
 
- 			try
 
- 			{
 
- 				Array.Copy(Runtime.GetBytesForString(Scope, OemEncoding
 
- 					), 0, dst, dstIndex, Scope.Length);
 
- 			}
 
- 			catch (UnsupportedEncodingException)
 
- 			{
 
- 			}
 
- 			dstIndex += Scope.Length;
 
- 			dst[dstIndex++] = unchecked(unchecked(0x00));
 
- 			// now go over scope backwards converting '.' to label length
 
- 			int i = dstIndex - 2;
 
- 			int e = i - Scope.Length;
 
- 			int c = 0;
 
- 			do
 
- 			{
 
- 				if (dst[i] == '.')
 
- 				{
 
- 					dst[i] = unchecked((byte)c);
 
- 					c = 0;
 
- 				}
 
- 				else
 
- 				{
 
- 					c++;
 
- 				}
 
- 			}
 
- 			while (i-- > e);
 
- 			return Scope.Length + 2;
 
- 		}
 
- 		internal virtual int ReadScopeWireFormat(byte[] src, int srcIndex)
 
- 		{
 
- 			int start = srcIndex;
 
- 			int n;
 
- 			StringBuilder sb;
 
- 			if ((n = src[srcIndex++] & unchecked(0xFF)) == 0)
 
- 			{
 
- 				Scope = null;
 
- 				return 1;
 
- 			}
 
- 			try
 
- 			{
 
- 				sb = new StringBuilder(Runtime.GetStringForBytes(src, srcIndex, n, OemEncoding));
 
- 				srcIndex += n;
 
- 				while ((n = src[srcIndex++] & unchecked(0xFF)) != 0)
 
- 				{
 
- 					sb.Append('.').Append(Runtime.GetStringForBytes(src, srcIndex, n, OemEncoding));
 
- 					srcIndex += n;
 
- 				}
 
- 				Scope = sb.ToString();
 
- 			}
 
- 			catch (UnsupportedEncodingException)
 
- 			{
 
- 			}
 
- 			return srcIndex - start;
 
- 		}
 
- 		public override int GetHashCode()
 
- 		{
 
- 			int result;
 
- 			result = name.GetHashCode();
 
- 			result += 65599 * HexCode;
 
- 			result += 65599 * SrcHashCode;
 
- 			if (Scope != null && Scope.Length != 0)
 
- 			{
 
- 				result += Scope.GetHashCode();
 
- 			}
 
- 			return result;
 
- 		}
 
- 		public override bool Equals(object obj)
 
- 		{
 
- 			Name n;
 
- 			if (!(obj is Name))
 
- 			{
 
- 				return false;
 
- 			}
 
- 			n = (Name)obj;
 
- 			if (Scope == null && n.Scope == null)
 
- 			{
 
- 				return name.Equals(n.name) && HexCode == n.HexCode;
 
- 			}
 
- 			return name.Equals(n.name) && HexCode == n.HexCode && Scope.Equals(n.Scope);
 
- 		}
 
- 		public override string ToString()
 
- 		{
 
- 			StringBuilder sb = new StringBuilder();
 
- 		    //return "";
 
- 			string n = name;
 
- 			// fix MSBROWSE name
 
- 			if (n == null)
 
- 			{
 
- 				n = "null";
 
- 			}
 
- 			else
 
- 			{
 
- 				if (n[0] == unchecked(0x01))
 
- 				{
 
- 					char[] c = n.ToCharArray();
 
- 					c[0] = '.';
 
- 					c[1] = '.';
 
- 					c[14] = '.';
 
- 					n = new string(c);
 
- 				}
 
- 			}
 
- 			sb.Append(n).Append("<").Append(Hexdump.ToHexString(HexCode, 2)).Append(">");
 
- 			if (Scope != null)
 
- 			{
 
- 				sb.Append(".").Append(Scope);
 
- 			}
 
- 			return sb.ToString();
 
- 		}
 
- 	}
 
- }
 
 
  |