File: OciServiceHandle.cs

package info (click to toggle)
mono 6.14.1%2Bds2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,282,732 kB
  • sloc: cs: 11,182,461; xml: 2,850,281; ansic: 699,123; cpp: 122,919; perl: 58,604; javascript: 30,841; asm: 21,845; makefile: 19,602; sh: 10,973; python: 4,772; pascal: 925; sql: 859; sed: 16; php: 1
file content (142 lines) | stat: -rw-r--r-- 2,937 bytes parent folder | download | duplicates (10)
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
// 
// OciServiceHandle.cs 
//  
// Part of managed C#/.NET library System.Data.OracleClient.dll
//
// Part of the Mono class libraries at
// mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci
//
// Assembly: System.Data.OracleClient.dll
// Namespace: System.Data.OracleClient.Oci
// 
// Author: 
//     Tim Coleman <tim@timcoleman.com>
//     Daniel Morgan <monodanmorg@yahoo.com>
//         
// Copyright (C) Tim Coleman, 2003
// Copyright (C) Daniel Morgan, 2009
// 

//#define ORACLE_DATA_ACCESS

using System;
using System.Runtime.InteropServices;

namespace System.Data.OracleClient.Oci {
	internal sealed class OciServiceHandle : OciHandle
	{
		#region Fields

		bool disposed = false;
		OciSessionHandle session;
		OciServerHandle server;

		OciErrorHandle errorHandle;

#if ORACLE_DATA_ACCESS
		static readonly uint OCI_AUTH = 8;
#endif

		#endregion // Fields

		#region Constructors

		public OciServiceHandle (OciHandle parent, IntPtr handle)
			: base (OciHandleType.Service, parent, handle)
		{
		}

		#endregion // Constructors

		#region Properties

		public OciErrorHandle ErrorHandle {
			get { return errorHandle; }
			set { errorHandle = value; }
		}

		#endregion // Properties

		#region Methods

		protected override void Dispose (bool disposing)
		{
			if (!disposed) {
				try {
					if (disposing) {
						//if (server != null)
						//	server.Dispose ();
						//if (session != null)
						//	session.Dispose ();
					}
					disposed = true;
				} finally {
					base.Dispose (disposing);
				}
			}
		}

		public bool SetServer (OciServerHandle handle)
		{
			server = handle;
			int status = OciCalls.OCIAttrSet (this,
							HandleType,
							server,
							0,
							OciAttributeType.Server,
							ErrorHandle);
			return (status == 0);
		}

		public bool SetSession (OciSessionHandle handle)
		{
			session = handle;
			int status = OciCalls.OCIAttrSet (this,
							HandleType,
							session,
							0,
							OciAttributeType.Session,
							ErrorHandle);
			return (status == 0);
		}

#if ORACLE_DATA_ACCESS
		byte[] UnicodeToCharSet (string s)
		{
			int rsize = 0;
			byte [] buffer;
			
			// Get size of buffer
			OciCalls.OCIUnicodeToCharSet (Parent, null, s, out rsize);
			
			// Fill buffer
			buffer = new byte[rsize];
			OciCalls.OCIUnicodeToCharSet (Parent, buffer, s, out rsize);

			return buffer;
		}

		internal bool ChangePassword (string new_password, OciErrorHandle error) 
		{			
			if (!session.SetCredentialAttributes (error))
				return false;

			byte[] ub = UnicodeToCharSet (session.Username
			byte[] opb = UnicodeToCharSet (session.Password);
			byte[] npb = UnicodeToCharSet (new_password);

			int status = OciCalls.OCIPasswordChange (this, error, ub, ub.Length, opb, opb.Length, npb, npb.Length, OCI_AUTH);
			
			if (status == 0) {
				session.Password = new_password;
				return true;
			}
				
			return false;
		}
#endif

		#endregion // Methods
	}
}