Mono.Zeroconf – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 //
2 // ServiceRef.cs
3 //
4 // Authors:
5 // Aaron Bockover <abockover@novell.com>
6 //
7 // Copyright (C) 2006-2007 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 //
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 //
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28  
29 using System;
30 using System.Threading;
31 using System.Collections;
32 using System.Runtime.InteropServices;
33  
34 namespace Mono.Zeroconf.Providers.Bonjour
35 {
36 public struct ServiceRef
37 {
38 public static readonly ServiceRef Zero;
39  
40 private IntPtr raw;
41  
42 public ServiceRef(IntPtr raw)
43 {
44 this.raw = raw;
45 }
46  
47 public void Deallocate()
48 {
49 Native.DNSServiceRefDeallocate(Raw);
50 }
51  
52 public ServiceError ProcessSingle()
53 {
54 return Native.DNSServiceProcessResult(Raw);
55 }
56  
57 public void Process()
58 {
59 while(ProcessSingle() == ServiceError.NoError);
60 }
61  
62 public int SocketFD {
63 get {
64 return Native.DNSServiceRefSockFD(Raw);
65 }
66 }
67  
68 public IntPtr Raw {
69 get {
70 return raw;
71 }
72 }
73  
74 public override bool Equals(object o)
75 {
76 if(!(o is ServiceRef)) {
77 return false;
78 }
79  
80 return ((ServiceRef)o).Raw == Raw;
81 }
82  
83 public override int GetHashCode()
84 {
85 return Raw.GetHashCode();
86 }
87  
88 public static bool operator ==(ServiceRef a, ServiceRef b)
89 {
90 return a.Raw == b.Raw;
91 }
92  
93 public static bool operator !=(ServiceRef a, ServiceRef b)
94 {
95 return a.Raw != b.Raw;
96 }
97  
98 public static explicit operator IntPtr(ServiceRef value)
99 {
100 return value.Raw;
101 }
102  
103 public static explicit operator ServiceRef(IntPtr value)
104 {
105 return new ServiceRef(value);
106 }
107 }
108 }