keycloak-federation
公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.freedesktop.dbus.MessageReader クラス
org.freedesktop.dbus.MessageReader 連携図
Collaboration graph

公開メンバ関数

 MessageReader (InputStream in)
 
Message readMessage () throws IOException, DBusException
 
void close () throws IOException
 

非公開変数類

InputStream in
 
byte [] buf = null
 
byte [] tbuf = null
 
byte [] header = null
 
byte [] body = null
 
int [] len = new int[4]
 

詳解

構築子と解体子

◆ MessageReader()

org.freedesktop.dbus.MessageReader.MessageReader ( InputStream  in)
inline
36  {
37  this.in = new BufferedInputStream(in);
38  }
InputStream in
Definition: MessageReader.java:29

関数詳解

◆ close()

void org.freedesktop.dbus.MessageReader.close ( ) throws IOException
inline
190  {
191  if (Debug.debug) Debug.print(Debug.INFO, "Closing Message Reader");
192  in.close();
193  }
InputStream in
Definition: MessageReader.java:29

◆ readMessage()

Message org.freedesktop.dbus.MessageReader.readMessage ( ) throws IOException, DBusException
inline
40  {
41  int rv;
42  /* Read the 12 byte fixed header, retrying as neccessary */
43  if (null == buf) {
44  buf = new byte[12];
45  len[0] = 0;
46  }
47  if (len[0] < 12) {
48  try {
49  rv = in.read(buf, len[0], 12 - len[0]);
50  } catch (SocketTimeoutException STe) {
51  return null;
52  }
53  if (-1 == rv) throw new EOFException(getString("transportReturnedEOF"));
54  len[0] += rv;
55  }
56  if (len[0] == 0) return null;
57  if (len[0] < 12) {
58  if (Debug.debug) Debug.print(Debug.DEBUG, "Only got " + len[0] + " of 12 bytes of header");
59  return null;
60  }
61 
62  /* Parse the details from the header */
63  byte endian = buf[0];
64  byte type = buf[1];
65  byte protover = buf[3];
66  if (protover > Message.PROTOCOL) {
67  buf = null;
68  throw new MessageProtocolVersionException(MessageFormat.format(getString("protocolVersionUnsupported"), new Object[]{protover}));
69  }
70 
71  /* Read the length of the variable header */
72  if (null == tbuf) {
73  tbuf = new byte[4];
74  len[1] = 0;
75  }
76  if (len[1] < 4) {
77  try {
78  rv = in.read(tbuf, len[1], 4 - len[1]);
79  } catch (SocketTimeoutException STe) {
80  return null;
81  }
82  if (-1 == rv) throw new EOFException(getString("transportReturnedEOF"));
83  len[1] += rv;
84  }
85  if (len[1] < 4) {
86  if (Debug.debug) Debug.print(Debug.DEBUG, "Only got " + len[1] + " of 4 bytes of header");
87  return null;
88  }
89 
90  /* Parse the variable header length */
91  int headerlen = 0;
92  if (null == header) {
93  headerlen = (int) Message.demarshallint(tbuf, 0, endian, 4);
94  if (0 != headerlen % 8)
95  headerlen += 8 - (headerlen % 8);
96  } else
97  headerlen = header.length - 8;
98 
99  /* Read the variable header */
100  if (null == header) {
101  header = new byte[headerlen + 8];
102  System.arraycopy(tbuf, 0, header, 0, 4);
103  len[2] = 0;
104  }
105  if (len[2] < headerlen) {
106  try {
107  rv = in.read(header, 8 + len[2], headerlen - len[2]);
108  } catch (SocketTimeoutException STe) {
109  return null;
110  }
111  if (-1 == rv) throw new EOFException(getString("transportReturnedEOF"));
112  len[2] += rv;
113  }
114  if (len[2] < headerlen) {
115  if (Debug.debug) Debug.print(Debug.DEBUG, "Only got " + len[2] + " of " + headerlen + " bytes of header");
116  return null;
117  }
118 
119  /* Read the body */
120  int bodylen = 0;
121  if (null == body) bodylen = (int) Message.demarshallint(buf, 4, endian, 4);
122  if (null == body) {
123  body = new byte[bodylen];
124  len[3] = 0;
125  }
126  if (len[3] < body.length) {
127  try {
128  rv = in.read(body, len[3], body.length - len[3]);
129  } catch (SocketTimeoutException STe) {
130  return null;
131  }
132  if (-1 == rv) throw new EOFException(getString("transportReturnedEOF"));
133  len[3] += rv;
134  }
135  if (len[3] < body.length) {
136  if (Debug.debug) Debug.print(Debug.DEBUG, "Only got " + len[3] + " of " + body.length + " bytes of body");
137  return null;
138  }
139 
140  Message m;
141  switch (type) {
142  case Message.MessageType.METHOD_CALL:
143  m = new MethodCall();
144  break;
145  case Message.MessageType.METHOD_RETURN:
146  m = new MethodReturn();
147  break;
148  case Message.MessageType.SIGNAL:
149  m = new DBusSignal();
150  break;
151  case Message.MessageType.ERROR:
152  m = new Error();
153  break;
154  default:
155  throw new MessageTypeException(MessageFormat.format(getString("messageTypeUnsupported"), new Object[]{type}));
156  }
157  if (Debug.debug) {
158  Debug.print(Debug.VERBOSE, Hexdump.format(buf));
159  Debug.print(Debug.VERBOSE, Hexdump.format(tbuf));
160  Debug.print(Debug.VERBOSE, Hexdump.format(header));
161  Debug.print(Debug.VERBOSE, Hexdump.format(body));
162  }
163  try {
164  m.populate(buf, header, body);
165  } catch (DBusException DBe) {
166  if (AbstractConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, DBe);
167  buf = null;
168  tbuf = null;
169  body = null;
170  header = null;
171  throw DBe;
172  } catch (RuntimeException Re) {
173  if (AbstractConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, Re);
174  buf = null;
175  tbuf = null;
176  body = null;
177  header = null;
178  throw Re;
179  }
180  if (Debug.debug) {
181  Debug.print(Debug.INFO, "=> " + m);
182  }
183  buf = null;
184  tbuf = null;
185  body = null;
186  header = null;
187  return m;
188  }
int [] len
Definition: MessageReader.java:34
byte [] tbuf
Definition: MessageReader.java:31
byte [] buf
Definition: MessageReader.java:30
byte [] header
Definition: MessageReader.java:32
byte [] body
Definition: MessageReader.java:33
InputStream in
Definition: MessageReader.java:29

メンバ詳解

◆ body

byte [] org.freedesktop.dbus.MessageReader.body = null
private

◆ buf

byte [] org.freedesktop.dbus.MessageReader.buf = null
private

◆ header

byte [] org.freedesktop.dbus.MessageReader.header = null
private

◆ in

InputStream org.freedesktop.dbus.MessageReader.in
private

◆ len

int [] org.freedesktop.dbus.MessageReader.len = new int[4]
private

◆ tbuf

byte [] org.freedesktop.dbus.MessageReader.tbuf = null
private

このクラス詳解は次のファイルから抽出されました: