1. /*
  2. * @(#)CDRInputStreamBase.java 1.14 03/01/23
  3. *
  4. * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.corba.se.internal.iiop;
  8. import java.io.IOException;
  9. import java.io.Serializable;
  10. import java.math.BigDecimal;
  11. import org.omg.CORBA.TypeCode;
  12. import org.omg.CORBA.Principal;
  13. import org.omg.CORBA.Any;
  14. import com.sun.corba.se.internal.core.GIOPVersion;
  15. import com.sun.corba.se.internal.orbutil.ORBConstants;
  16. import com.sun.org.omg.SendingContext.CodeBase;
  17. /**
  18. * Describes CDRInputStream delegates and provides some
  19. * implementation. Non-default constructors are avoided in
  20. * the delegation to separate instantiation from initialization,
  21. * so we use init methods.
  22. */
  23. abstract class CDRInputStreamBase extends java.io.InputStream
  24. {
  25. protected CDRInputStream parent;
  26. public void setParent(CDRInputStream parent) {
  27. this.parent = parent;
  28. }
  29. // EncapsInputStream
  30. public void init(org.omg.CORBA.ORB orb,
  31. BufferManagerRead bufMgr,
  32. boolean littleEndian) {
  33. int size;
  34. if (orb == null)
  35. size = ORBConstants.GIOP_DEFAULT_BUFFER_SIZE;
  36. else
  37. size = ((ORB)orb).getGIOPBufferSize();
  38. ByteBufferWithInfo bbwi = new ByteBufferWithInfo(size);
  39. init(orb,
  40. bbwi.buf,
  41. bbwi.buflen,
  42. littleEndian,
  43. bufMgr);
  44. }
  45. // Required by parent CDRInputStream
  46. public void init(org.omg.CORBA.ORB orb) {
  47. BufferManagerRead bufMgr = BufferManagerFactory.defaultBufferManagerRead();
  48. int size;
  49. if (orb == null)
  50. size = ORBConstants.GIOP_DEFAULT_BUFFER_SIZE;
  51. else
  52. size = ((ORB)orb).getGIOPBufferSize();
  53. ByteBufferWithInfo bbwi = new ByteBufferWithInfo(size);
  54. init(orb,
  55. bbwi.buf,
  56. bbwi.buflen,
  57. false,
  58. bufMgr);
  59. }
  60. public void init(org.omg.CORBA.ORB orb, byte[] data, int size) {
  61. init(orb, data, size, false);
  62. }
  63. public void init(org.omg.CORBA.ORB orb, byte[] data, int size, boolean littleEndian) {
  64. init(orb,
  65. data,
  66. size,
  67. littleEndian,
  68. BufferManagerFactory.defaultBufferManagerRead());
  69. }
  70. public abstract void init(org.omg.CORBA.ORB orb,
  71. byte[] data,
  72. int size,
  73. boolean littleEndian,
  74. BufferManagerRead bufferManager);
  75. // org.omg.CORBA.portable.InputStream
  76. public abstract boolean read_boolean();
  77. public abstract char read_char();
  78. public abstract char read_wchar();
  79. public abstract byte read_octet();
  80. public abstract short read_short();
  81. public abstract short read_ushort();
  82. public abstract int read_long();
  83. public abstract int read_ulong();
  84. public abstract long read_longlong();
  85. public abstract long read_ulonglong();
  86. public abstract float read_float();
  87. public abstract double read_double();
  88. public abstract String read_string();
  89. public abstract String read_wstring();
  90. public abstract void read_boolean_array(boolean[] value, int offset, int length);
  91. public abstract void read_char_array(char[] value, int offset, int length);
  92. public abstract void read_wchar_array(char[] value, int offset, int length);
  93. public abstract void read_octet_array(byte[] value, int offset, int length);
  94. public abstract void read_short_array(short[] value, int offset, int length);
  95. public abstract void read_ushort_array(short[] value, int offset, int length);
  96. public abstract void read_long_array(int[] value, int offset, int length);
  97. public abstract void read_ulong_array(int[] value, int offset, int length);
  98. public abstract void read_longlong_array(long[] value, int offset, int length);
  99. public abstract void read_ulonglong_array(long[] value, int offset, int length);
  100. public abstract void read_float_array(float[] value, int offset, int length);
  101. public abstract void read_double_array(double[] value, int offset, int length);
  102. public abstract org.omg.CORBA.Object read_Object();
  103. public abstract TypeCode read_TypeCode();
  104. public abstract Any read_any();
  105. public abstract Principal read_Principal();
  106. public int read() throws java.io.IOException {
  107. throw new org.omg.CORBA.NO_IMPLEMENT();
  108. }
  109. public abstract java.math.BigDecimal read_fixed();
  110. public org.omg.CORBA.Context read_Context() {
  111. throw new org.omg.CORBA.NO_IMPLEMENT();
  112. }
  113. public abstract org.omg.CORBA.Object read_Object(java.lang.Class clz);
  114. public abstract org.omg.CORBA.ORB orb();
  115. // org.omg.CORBA_2_3.portable.InputStream
  116. public abstract java.io.Serializable read_value();
  117. public abstract java.io.Serializable read_value(java.lang.Class clz);
  118. public abstract java.io.Serializable read_value(org.omg.CORBA.portable.BoxedValueHelper factory);
  119. public abstract java.io.Serializable read_value(java.lang.String rep_id);
  120. public abstract java.io.Serializable read_value(java.io.Serializable value);
  121. public abstract java.lang.Object read_abstract_interface();
  122. public abstract java.lang.Object read_abstract_interface(java.lang.Class clz);
  123. // com.sun.corba.se.internal.core.MarshalInputStream
  124. public abstract void consumeEndian();
  125. public abstract int getPosition();
  126. // org.omg.CORBA.DataInputStream
  127. public abstract java.lang.Object read_Abstract ();
  128. public abstract java.io.Serializable read_Value ();
  129. public abstract void read_any_array (org.omg.CORBA.AnySeqHolder seq, int offset, int length);
  130. public abstract void read_boolean_array (org.omg.CORBA.BooleanSeqHolder seq, int offset, int length);
  131. public abstract void read_char_array (org.omg.CORBA.CharSeqHolder seq, int offset, int length);
  132. public abstract void read_wchar_array (org.omg.CORBA.WCharSeqHolder seq, int offset, int length);
  133. public abstract void read_octet_array (org.omg.CORBA.OctetSeqHolder seq, int offset, int length);
  134. public abstract void read_short_array (org.omg.CORBA.ShortSeqHolder seq, int offset, int length);
  135. public abstract void read_ushort_array (org.omg.CORBA.UShortSeqHolder seq, int offset, int length);
  136. public abstract void read_long_array (org.omg.CORBA.LongSeqHolder seq, int offset, int length);
  137. public abstract void read_ulong_array (org.omg.CORBA.ULongSeqHolder seq, int offset, int length);
  138. public abstract void read_ulonglong_array (org.omg.CORBA.ULongLongSeqHolder seq, int offset, int length);
  139. public abstract void read_longlong_array (org.omg.CORBA.LongLongSeqHolder seq, int offset, int length);
  140. public abstract void read_float_array (org.omg.CORBA.FloatSeqHolder seq, int offset, int length);
  141. public abstract void read_double_array (org.omg.CORBA.DoubleSeqHolder seq, int offset, int length);
  142. // org.omg.CORBA.portable.ValueBase
  143. public abstract String[] _truncatable_ids();
  144. // java.io.InputStream
  145. // REVISIT - should we make these throw UnsupportedOperationExceptions?
  146. // Right now, they'll go up to the java.io versions!
  147. // public abstract int read(byte b[]) throws IOException;
  148. // public abstract int read(byte b[], int off, int len) throws IOException
  149. // public abstract long skip(long n) throws IOException;
  150. // public abstract int available() throws IOException;
  151. // public abstract void close() throws IOException;
  152. public abstract void mark(int readlimit);
  153. public abstract void reset();
  154. // This should return false so that outside users (people using the JDK)
  155. // don't have any guarantees that mark/reset will work in their
  156. // custom marshaling code. This is necessary since they could do things
  157. // like expect obj1a == obj1b in the following code:
  158. //
  159. // is.mark(10000);
  160. // Object obj1a = is.readObject();
  161. // is.reset();
  162. // Object obj1b = is.readObject();
  163. //
  164. public boolean markSupported() { return false; }
  165. // Needed by AnyImpl and ServiceContexts
  166. public abstract CDRInputStreamBase dup();
  167. // Needed by TCUtility
  168. public abstract java.math.BigDecimal read_fixed(short digits, short scale);
  169. // Needed by TypeCodeImpl
  170. public abstract boolean isLittleEndian();
  171. // Needed by IIOPInputStream and other subclasses
  172. public abstract byte[] getByteBuffer();
  173. public abstract void setByteBuffer(byte buffer[]);
  174. public abstract int getBufferLength();
  175. public abstract void setBufferLength(int value);
  176. public abstract int getIndex();
  177. public abstract void setIndex(int value);
  178. public abstract void orb(org.omg.CORBA.ORB orb);
  179. public abstract BufferManagerRead getBufferManager();
  180. public abstract GIOPVersion getGIOPVersion();
  181. abstract CodeBase getCodeBase();
  182. abstract void printBuffer();
  183. abstract void alignOnBoundary(int octetBoundary);
  184. abstract void performORBVersionSpecificInit();
  185. public abstract void resetCodeSetConverters();
  186. }