rename all jvm-only files to jvm.cs
[mono.git] /
1 using System;\r
2 using System.Net;\r
3 \r
4 namespace System.Net.Sockets\r
5 {\r
6         /// <summary>\r
7         /// Summary description for GHStreamSocket.\r
8         /// </summary>\r
9         internal class GHStreamSocketSSL : GHSocket\r
10         {\r
11                 java.net.Socket jSocket;\r
12 \r
13                 public GHStreamSocketSSL(java.net.Socket sslSocket)\r
14                 {\r
15                         jSocket = sslSocket;\r
16                 }\r
17 \r
18                 public override int GetHashCode ()\r
19                 {\r
20                         if (jSocket == null)\r
21                                 return -1;\r
22 \r
23                         return jSocket.ToString().GetHashCode();\r
24                 }\r
25 \r
26                 public int Available_internal(out int error)\r
27                 {\r
28                         error = 0;\r
29                         int r = 0;\r
30 \r
31                         if (jSocket == null || !jSocket.isConnected())\r
32                         {\r
33                                 return r;\r
34                         }\r
35 \r
36                         try\r
37                         {\r
38                                 r = jSocket.getInputStream().available();\r
39                         }\r
40                         catch (Exception e)\r
41                         {\r
42                                 error = 10054; //WSAECONNRESET (Connection reset by peer)\r
43                                 r = 0;\r
44 #if DEBUG\r
45                                 Console.WriteLine("Caught exception during Available_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
46 #endif\r
47                         }\r
48 \r
49                         return r;\r
50                 }\r
51 \r
52                 public void Blocking_internal(bool block, out int error)\r
53                 {\r
54                         //SVETA: see in the non-blocking io\r
55                         error = 0;\r
56 \r
57                         if (block == false)\r
58                                 throw new NotSupportedException();\r
59                 }\r
60 \r
61                 public EndPoint LocalEndPoint_internal(out int error)\r
62                 {\r
63                         error = 0;\r
64                         java.net.InetSocketAddress localAddr = null;\r
65 \r
66                         try\r
67                         {\r
68                                 localAddr = (java.net.InetSocketAddress)jSocket.getLocalSocketAddress();\r
69                         }\r
70                         catch (Exception e)\r
71                         {\r
72                                 localAddr = null;\r
73 #if DEBUG\r
74                                 Console.WriteLine("Caught exception during LocalEndPoint_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
75 #endif\r
76                         }\r
77 \r
78                         if (localAddr == null || localAddr.getAddress() == null || localAddr.getPort() < 0)\r
79                         {\r
80                 return null;\r
81                         }\r
82 \r
83                         IPHostEntry lipa = Dns.Resolve(localAddr.getHostName());\r
84                         IPEndPoint ret = new IPEndPoint(lipa.AddressList[0], localAddr.getPort());\r
85                         return ret;\r
86                 }\r
87 \r
88                 public EndPoint RemoteEndPoint_internal(out int error)\r
89                 {\r
90                         error = 0;\r
91                         java.net.InetSocketAddress remoteAddr = null;\r
92 \r
93                         if (jSocket == null || !jSocket.isBound())\r
94                         {\r
95                                 return null;\r
96                         }\r
97 \r
98                         try\r
99                         {\r
100                                 remoteAddr = (java.net.InetSocketAddress)jSocket.getRemoteSocketAddress();\r
101                         }\r
102                         catch (Exception e)\r
103                         {\r
104                                 remoteAddr = null;\r
105 #if DEBUG\r
106                                 Console.WriteLine("Caught exception during RemoteEndPoint_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
107 #endif\r
108                         }\r
109 \r
110                         if (remoteAddr == null || remoteAddr.getAddress() == null || remoteAddr.getPort() <= 0)\r
111                         {\r
112                                 error = 10057; //WSAENOTCONN (Socket is not connected)\r
113                                 return null;\r
114                         }\r
115 \r
116                         IPHostEntry lipa = Dns.Resolve(remoteAddr.getHostName());\r
117                         IPEndPoint ret = new IPEndPoint(lipa.AddressList[0], remoteAddr.getPort());\r
118                         return ret;\r
119                 }\r
120 \r
121                 public GHSocket Accept_internal(out int error)\r
122                 {\r
123                         error = 10022; //WSAEINVAL (Invalid argument)\r
124                         return null;\r
125                 }\r
126 \r
127                 public void Bind_internal(EndPoint sa, out int error)\r
128                 {\r
129                         error = 0;\r
130                         IPEndPoint addr = sa as IPEndPoint;\r
131                         if (addr == null)\r
132                         {\r
133                                 error = 10044; //WSAESOCKTNOSUPPORT (Socket type not supported)\r
134                                 return;\r
135                         }\r
136 \r
137                         if (jSocket == null || jSocket.isBound() || jSocket.isConnected())\r
138                         {\r
139                                 error = 10022; //WSAEINVAL (Invalid argument)\r
140                                 return;\r
141                         }\r
142 \r
143                         try\r
144                         {\r
145                                 jSocket.bind(new java.net.InetSocketAddress(java.net.InetAddress.getByName(addr.Address.ToString()),\r
146                                                                                                 addr.Port));\r
147                         }\r
148                         catch (Exception e)\r
149                         {\r
150                                 error = 10048; //WSAEADDRINUSE (Address already in use)\r
151 #if DEBUG\r
152                                 Console.WriteLine("Caught exception during Bind_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
153 #endif\r
154                         }\r
155                 }\r
156 \r
157                 public void Close_internal(out int error)\r
158                 {\r
159                         error = 0;\r
160 \r
161                         try\r
162                         {\r
163                                 if (jSocket != null)\r
164                                 {\r
165                                         jSocket.close();\r
166                                         jSocket = null;\r
167                                 }\r
168                         }\r
169                         catch (Exception e)\r
170                         {\r
171                                 error = 10022; //WSAEINVAL (Invalid argument)\r
172 #if DEBUG\r
173                                 Console.WriteLine("Caught exception during Close_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
174 #endif\r
175                         }\r
176                 }\r
177 \r
178                 public void Connect_internal(EndPoint sa, out int error)\r
179                 {\r
180                         error = 0;\r
181 \r
182                         IPEndPoint addr = sa as IPEndPoint;\r
183                         if (addr == null)\r
184                         {\r
185                                 error = 10044; //WSAESOCKTNOSUPPORT (Socket type not supported)\r
186                                 return;\r
187                         }\r
188 \r
189                         if (jSocket == null)\r
190                         {\r
191                                 error = 10022; //WSAEINVAL (Invalid argument)\r
192                                 return;\r
193                         }\r
194 \r
195                         if (jSocket.isConnected())\r
196                         {\r
197                                 error = 10056; //WSAEISCONN (Socket is already connected)\r
198                                 return;\r
199                         }\r
200 \r
201                         try\r
202                         {\r
203                                 jSocket.connect(new java.net.InetSocketAddress(\r
204                                                                         java.net.InetAddress.getByName(addr.Address.ToString()), \r
205                                                                         addr.Port));\r
206                         }\r
207                         catch (Exception e)\r
208                         {                               \r
209                                 error = 10061; //WSAECONNREFUSED (Connection refused)\r
210 #if DEBUG\r
211                                 Console.WriteLine("Caught exception during Connect_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
212 #endif\r
213                         }\r
214                 }\r
215 \r
216                 public void Listen_internal(int backlog, out int error)\r
217                 {\r
218                         error = 10022; //WSAEINVAL (Invalid argument)\r
219                         return;\r
220                 }\r
221 \r
222                 public bool Poll_internal (SelectMode mode, int timeout, Socket source, out int error)\r
223                 {\r
224                         error = 0;\r
225                         throw new NotImplementedException();\r
226                 }\r
227 \r
228                 public int Receive_internal(byte[] buffer,      int offset,     int count, SocketFlags flags,\r
229                         out int error)\r
230                 {\r
231                         error = 0;\r
232                         int ret = 0;\r
233 \r
234                         if (jSocket == null || !jSocket.isConnected())\r
235                         {\r
236                                 error = 10057; //WSAENOTCONN (Socket is not connected)\r
237                                 return ret;\r
238                         }\r
239 \r
240                         try\r
241                         {\r
242                                 ret = jSocket.getInputStream().read(vmw.common.TypeUtils.ToSByteArray(buffer), offset, count);\r
243                                 if (ret < 0) ret = 0;\r
244                         }\r
245                         catch (Exception e)\r
246                         {\r
247                                 error = 10054; //WSAECONNRESET (Connection reset by peer)\r
248                                 ret = 0;\r
249 #if DEBUG\r
250                                 Console.WriteLine("Caught exception during Receive_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
251 #endif\r
252                         }\r
253 \r
254                         return ret;\r
255                 }\r
256 \r
257                 public int RecvFrom_internal(byte[] buffer, int offset, int count,      SocketFlags flags,\r
258                         ref SocketAddress sockaddr, out int error)\r
259                 {\r
260                         return Receive_internal(buffer, offset, count, flags, out error);\r
261                 }\r
262 \r
263                 public int Send_internal(byte[] buf, int offset, int count, SocketFlags flags,\r
264                         out int error)\r
265                 {\r
266                         error = 0;\r
267                         int ret = 0;\r
268 \r
269                         if (jSocket == null || !jSocket.isConnected())\r
270                         {\r
271                                 error = 10057; //WSAENOTCONN (Socket is not connected)\r
272                                 return ret;\r
273                         }\r
274 \r
275                         try\r
276                         {\r
277                                 jSocket.getOutputStream().write(vmw.common.TypeUtils.ToSByteArray(buf), offset, count);\r
278                                 ret = count;\r
279                         }\r
280                         catch (Exception e)\r
281                         {\r
282                                 error = 10054; //WSAECONNRESET (Connection reset by peer)\r
283                                 ret = 0;\r
284 #if DEBUG\r
285                                 Console.WriteLine("Caught exception during Send_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
286 #endif\r
287                         }\r
288 \r
289                         return ret;\r
290                 }\r
291 \r
292                 public int SendTo_internal(byte[] buffer, int offset, int count,\r
293                         SocketFlags flags,      SocketAddress sa, out int error)\r
294                 {\r
295                         return Send_internal(buffer, offset, count, flags, out error);\r
296                 }\r
297 \r
298                 public void SetSocketOption_internal (SocketOptionLevel level,\r
299                         SocketOptionName name, object obj_val,\r
300                         byte [] byte_val, int int_val, out int error)\r
301                 {\r
302                         error = 0;\r
303 \r
304                         if (byte_val != null)\r
305                         {\r
306                                 error = -1;\r
307                                 throw new NotImplementedException();\r
308                         }\r
309 \r
310                         if (jSocket == null)\r
311                         {\r
312                                 error = 10022; //WSAEINVAL (Invalid argument)\r
313                                 return;\r
314                         }\r
315 \r
316                         switch (level)\r
317                         {\r
318                                 case SocketOptionLevel.IPv6:\r
319                                         error = 10042; //WSAENOPROTOOPT (Bad protocol option)\r
320                                         return;\r
321                                 case SocketOptionLevel.IP:\r
322                                         if (name != SocketOptionName.NoDelay)\r
323                                         {\r
324                                                 error = 10042; //WSAENOPROTOOPT (Bad protocol option)\r
325                                                 return;\r
326                                         }\r
327                                         break;\r
328                                 case SocketOptionLevel.Udp:\r
329                                         if (name == SocketOptionName.NoDelay)\r
330                                         {\r
331                                                 error = 10042; //WSAENOPROTOOPT (Bad protocol option)\r
332                                         }\r
333                                         else\r
334                                         {\r
335                                                 error = 10022; //WSAEINVAL (Invalid argument)\r
336                                         }\r
337                                         return;\r
338                                 case SocketOptionLevel.Tcp:\r
339                                         if (name != SocketOptionName.NoDelay)\r
340                                         {\r
341                                                 error = 10022; //WSAEINVAL (Invalid argument)\r
342                                                 return;\r
343                                         }\r
344                                         break;\r
345                         }\r
346 \r
347                         try\r
348                         {\r
349                                 bool bval = false;\r
350                                 int ival = 0;\r
351                                 switch (name)\r
352                                 {\r
353                                         case SocketOptionName.DontLinger:\r
354                                                 jSocket.setSoLinger(false, 0);\r
355                                                 break;\r
356                                         case SocketOptionName.Linger:\r
357                                                 LingerOption lval = obj_val as LingerOption;\r
358                                                 if (lval != null)\r
359                                                 {\r
360                                                         jSocket.setSoLinger(lval.Enabled, lval.LingerTime);\r
361                                                 }\r
362                                                 else\r
363                                                 {\r
364                                                         error = 10022; //WSAEINVAL (Invalid argument)\r
365                                                 }\r
366                                                 break;\r
367                                         case SocketOptionName.KeepAlive:\r
368                                                 if (obj_val != null)\r
369                                                 {\r
370                                                         bval = ((int)obj_val == 0)?false:true;\r
371                                                 }\r
372                                                 else\r
373                                                 {\r
374                                                         bval = (int_val == 0)?false:true;\r
375                                                 }\r
376                                                 jSocket.setKeepAlive(bval);\r
377                                                 break;\r
378                                         case SocketOptionName.NoDelay:\r
379                                                 if (obj_val != null)\r
380                                                 {\r
381                                                         bval = ((int)obj_val == 0)?false:true;\r
382                                                 }\r
383                                                 else\r
384                                                 {\r
385                                                         bval = (int_val == 0)?false:true;\r
386                                                 }\r
387                                                 jSocket.setTcpNoDelay(bval);\r
388                                                 break;\r
389                                         case SocketOptionName.ReceiveBuffer:\r
390                                                 ival = int_val;\r
391                                                 if (obj_val != null)\r
392                                                 {\r
393                                                         ival = (int) obj_val;\r
394                                                 }\r
395                                                 jSocket.setReceiveBufferSize(ival);\r
396                                                 break;\r
397                                         case SocketOptionName.ReceiveTimeout:\r
398                                                 ival = int_val;\r
399                                                 if (obj_val != null)\r
400                                                 {\r
401                                                         ival = (int) obj_val;\r
402                                                 }\r
403                                                 jSocket.setSoTimeout(ival);\r
404                                                 break;\r
405                                         case SocketOptionName.ReuseAddress:\r
406                                                 if (obj_val != null)\r
407                                                 {\r
408                                                         bval = ((int)obj_val == 0)?false:true;\r
409                                                 }\r
410                                                 else\r
411                                                 {\r
412                                                         bval = (int_val == 0)?false:true;\r
413                                                 }\r
414                                                 jSocket.setReuseAddress(bval);\r
415                                                 break;\r
416                                         case SocketOptionName.SendBuffer:\r
417                                                 ival = int_val;\r
418                                                 if (obj_val != null)\r
419                                                 {\r
420                                                         ival = (int) obj_val;\r
421                                                 }\r
422                                                 jSocket.setSendBufferSize(ival);\r
423                                                 break;\r
424                                         case SocketOptionName.OutOfBandInline:\r
425                                                 if (obj_val != null)\r
426                                                 {\r
427                                                         bval = ((int)obj_val == 0)?false:true;\r
428                                                 }\r
429                                                 else\r
430                                                 {\r
431                                                         bval = (int_val == 0)?false:true;\r
432                                                 }\r
433                                                 jSocket.setOOBInline(bval);\r
434                                                 break;\r
435                                         default:\r
436                                                 error = 10022; //WSAEINVAL (Invalid argument)\r
437                                                 break;\r
438                                 }\r
439                         }\r
440                         catch (Exception e)\r
441                         {\r
442                                 error = 10022; //WSAEINVAL (Invalid argument)\r
443                                 obj_val = null;\r
444                         }\r
445                 }\r
446 \r
447                 public void GetSocketOption_obj_internal(SocketOptionLevel level, SocketOptionName name, \r
448                         out object obj_val, out int error)\r
449                 {\r
450                         obj_val = null;\r
451                         error = 0;\r
452 \r
453                         if (jSocket == null)\r
454                         {\r
455                                 error = 10022; //WSAEINVAL (Invalid argument)\r
456                                 return;\r
457                         }\r
458 \r
459                         switch (level)\r
460                         {\r
461                                 case SocketOptionLevel.IPv6:\r
462                                         error = 10042; //WSAENOPROTOOPT (Bad protocol option)\r
463                                         return;\r
464                                 case SocketOptionLevel.IP:\r
465                                         if (name != SocketOptionName.NoDelay)\r
466                                         {\r
467                                                 error = 10042; //WSAENOPROTOOPT (Bad protocol option)\r
468                                                 return;\r
469                                         }\r
470                                         break;\r
471                                 case SocketOptionLevel.Udp:\r
472                                         if (name == SocketOptionName.NoDelay)\r
473                                         {\r
474                                                 error = 10042; //WSAENOPROTOOPT (Bad protocol option)\r
475                                         }\r
476                                         else\r
477                                         {\r
478                                                 error = 10022; //WSAEINVAL (Invalid argument)\r
479                                         }\r
480                                         return;\r
481                                 case SocketOptionLevel.Tcp:\r
482                                         if (name != SocketOptionName.NoDelay)\r
483                                         {\r
484                                                 error = 10022; //WSAEINVAL (Invalid argument)\r
485                                                 return;\r
486                                         }\r
487                                         break;\r
488                         }\r
489 \r
490                         try\r
491                         {\r
492                                 bool bval = false;\r
493                                 int ival = 0;\r
494                                 switch (name)\r
495                                 {\r
496                                         case SocketOptionName.DontLinger:\r
497                                                 ival = jSocket.getSoLinger();\r
498                                                 if (ival == -1)\r
499                                                 {\r
500                                                         obj_val = 1;\r
501                                                 }\r
502                                                 else\r
503                                                 {\r
504                                                         obj_val = 0;\r
505                                                 }\r
506                                                 break;\r
507                                         case SocketOptionName.Linger:\r
508                                                 ival = jSocket.getSoLinger();\r
509                                                 if (ival == -1)\r
510                                                 {\r
511                                                         ival = 0;\r
512                                                 }\r
513                                                 LingerOption ret = new LingerOption((ival != 0), ival);\r
514                                                 obj_val = ret;\r
515                                                 break;\r
516                                         case SocketOptionName.KeepAlive:\r
517                                                 bval = jSocket.getKeepAlive();\r
518                                                 obj_val = ((bval)?1:0);\r
519                                                 break;\r
520                                         case SocketOptionName.NoDelay:\r
521                                                 bval = jSocket.getTcpNoDelay();\r
522                                                 obj_val = ((bval)?1:0);\r
523                                                 break;\r
524                                         case SocketOptionName.ReceiveBuffer:\r
525                                                 ival = jSocket.getReceiveBufferSize();\r
526                                                 obj_val = ival;\r
527                                                 break;\r
528                                         case SocketOptionName.ReceiveTimeout:\r
529                                                 ival = jSocket.getSoTimeout();\r
530                                                 obj_val = ival;\r
531                                                 break;\r
532                                         case SocketOptionName.ReuseAddress:\r
533                                                 bval = jSocket.getReuseAddress();\r
534                                                 obj_val = ((bval)?1:0);\r
535                                                 break;\r
536                                         case SocketOptionName.SendBuffer:\r
537                                                 ival = jSocket.getSendBufferSize();\r
538                                                 obj_val = ival;\r
539                                                 break;\r
540                                         case SocketOptionName.OutOfBandInline:\r
541                                                 bval = jSocket.getOOBInline();\r
542                                                 obj_val = ((bval)?1:0);\r
543                                                 break;\r
544                                         default:\r
545                                                 error = 10022; //WSAEINVAL (Invalid argument)\r
546                                                 break;\r
547                                 }\r
548                         }\r
549                         catch (Exception e)\r
550                         {\r
551                                 error = 10022; //WSAEINVAL (Invalid argument)\r
552                                 obj_val = null;\r
553                         }\r
554                 }\r
555                 \r
556                 public void GetSocketOption_arr_internal(SocketOptionLevel level, SocketOptionName name, \r
557                         ref byte[] byte_val, out int error)\r
558                 {\r
559                         error = -1;\r
560                         throw new NotImplementedException();\r
561                 }\r
562 \r
563                 public int WSAIoctl (int ioctl_code, byte [] input, byte [] output, out int error)\r
564                 {\r
565                         error = -1;\r
566                         throw new NotImplementedException();\r
567                 }\r
568 \r
569                 public void Shutdown_internal(SocketShutdown how, out int error)\r
570                 {\r
571                         error = 0;\r
572 \r
573                         if (jSocket == null || !jSocket.isConnected())\r
574                         {\r
575                                 error = 10057; //WSAENOTCONN (Socket is not connected)\r
576                                 return;\r
577                         }\r
578 \r
579                         try\r
580                         {\r
581                                 switch (how)\r
582                                 {\r
583                                         case SocketShutdown.Receive: \r
584                                                                 jSocket.shutdownInput();\r
585                                                                 break;\r
586                                         case SocketShutdown.Send: \r
587                                                                                 jSocket.shutdownOutput();\r
588                                                                                 break;\r
589                                         case SocketShutdown.Both: \r
590                                                                                 jSocket.shutdownInput();\r
591                                                                                 jSocket.shutdownOutput();\r
592                                                                                 break;\r
593                                 }\r
594                         }\r
595                         catch (Exception e)\r
596                         {\r
597                                 error = 10022; //WSAEINVAL (Invalid argument)\r
598 #if DEBUG\r
599                                 Console.WriteLine("Caught exception during Shutdown_internal - {0}: {1}\n{2}", e.GetType(), e.Message, e.StackTrace);\r
600 #endif\r
601                         }\r
602                 }\r
603 \r
604                 public void RegisterSelector(java.nio.channels.Selector selector, int mode, Socket source, out int error)\r
605                 {\r
606                         throw new InvalidOperationException();\r
607                 }\r
608 \r
609                 public bool CheckConnectionFinished()\r
610                 {\r
611                         throw new InvalidOperationException();\r
612                 }\r
613 \r
614                 public GHSocket ChangeToSSL(EndPoint remote_end)\r
615                 {\r
616                         return this;\r
617                 }\r
618 \r
619         }\r
620 }\r