aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/IO/SharpCifs/Dcerpc/DcerpcBinding.cs
blob: 2341506642cedf6421a74057156f37ccd3d09960 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// 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 SharpCifs.Dcerpc.Msrpc;
using SharpCifs.Util.Sharpen;

namespace SharpCifs.Dcerpc
{
	public class DcerpcBinding
	{
		private static Hashtable _interfaces;

		static DcerpcBinding()
		{
			_interfaces = new Hashtable();
			_interfaces.Put("srvsvc", Srvsvc.GetSyntax());
			_interfaces.Put("lsarpc", Lsarpc.GetSyntax());
			_interfaces.Put("samr", Samr.GetSyntax());
			_interfaces.Put("netdfs", Netdfs.GetSyntax());
		}

		public static void AddInterface(string name, string syntax)
		{
			_interfaces.Put(name, syntax);
		}

		internal string Proto;

		internal string Server;

		internal string Endpoint;

		internal Hashtable Options;

		internal Uuid Uuid;

		internal int Major;

		internal int Minor;

		internal DcerpcBinding(string proto, string server)
		{
			this.Proto = proto;
			this.Server = server;
		}

		/// <exception cref="SharpCifs.Dcerpc.DcerpcException"></exception>
		internal virtual void SetOption(string key, object val)
		{
			if (key.Equals("endpoint"))
			{
				Endpoint = val.ToString().ToLower();
				if (Endpoint.StartsWith("\\pipe\\"))
				{
					string iface = (string)_interfaces.Get(Runtime.Substring(Endpoint, 6));
					if (iface != null)
					{
						int c;
						int p;
						c = iface.IndexOf(':');
						p = iface.IndexOf('.', c + 1);
						Uuid = new Uuid(Runtime.Substring(iface, 0, c));
						Major = Convert.ToInt32(Runtime.Substring(iface, c + 1, p));
						Minor = Convert.ToInt32(Runtime.Substring(iface, p + 1));
						return;
					}
				}
				throw new DcerpcException("Bad endpoint: " + Endpoint);
			}
			if (Options == null)
			{
				Options = new Hashtable();
			}
			Options.Put(key, val);
		}

		internal virtual object GetOption(string key)
		{
			if (key.Equals("endpoint"))
			{
				return Endpoint;
			}
			if (Options != null)
			{
				return Options.Get(key);
			}
			return null;
		}

		public override string ToString()
		{
		/*	string ret = proto + ":" + server + "[" + endpoint;
			if (options != null)
			{
			    Iterator iter = (Iterator) options.Keys.GetEnumerator();
				while (iter.HasNext())
				{
					object key = iter.Next();
					object val = options.Get(key);
					ret += "," + key + "=" + val;
				}
			}
			ret += "]";
			return ret; */
            return null;
		}
	}
}