Methods Summary |
---|
public void | decode(NdrBuffer buf)
decode_header(buf);
if (ptype != 12 && ptype != 2 && ptype != 3 && ptype != 13)
throw new NdrException("Unexpected ptype: " + ptype);
if (ptype == 2 || ptype == 3) { /* Response or Fault */
alloc_hint = buf.dec_ndr_long();
buf.dec_ndr_short(); /* context id */
buf.dec_ndr_short(); /* cancel count */
}
if (ptype == 3 || ptype == 13) { /* Fault */
result = buf.dec_ndr_long();
} else { /* Bind_ack or Response */
decode_out(buf);
}
|
void | decode_header(NdrBuffer buf)
/* RPC major / minor version */
if (buf.dec_ndr_small() != 5 || buf.dec_ndr_small() != 0)
throw new NdrException("DCERPC version not supported");
ptype = buf.dec_ndr_small();
flags = buf.dec_ndr_small();
if (buf.dec_ndr_long() != 0x00000010) /* Little-endian / ASCII / IEEE */
throw new NdrException("Data representation not supported");
length = buf.dec_ndr_short();
if (buf.dec_ndr_short() != 0)
throw new NdrException("DCERPC authentication not supported");
call_id = buf.dec_ndr_long();
|
public abstract void | decode_out(NdrBuffer buf)
|
public void | encode(NdrBuffer buf)
int start = buf.getIndex();
int alloc_hint_index = 0;
buf.advance(16); /* momentarily skip header */
if (ptype == 0) { /* Request */
alloc_hint_index = buf.getIndex();
buf.enc_ndr_long(0); /* momentarily skip alloc hint */
buf.enc_ndr_short(0); /* context id */
buf.enc_ndr_short(getOpnum());
}
encode_in(buf);
length = buf.getIndex() - start;
if (ptype == 0) {
buf.setIndex(alloc_hint_index);
alloc_hint = length - alloc_hint_index;
buf.enc_ndr_long(alloc_hint);
}
buf.setIndex(start);
encode_header(buf);
buf.setIndex(start + length);
|
void | encode_header(NdrBuffer buf)
buf.enc_ndr_small(5); /* RPC version */
buf.enc_ndr_small(0); /* minor version */
buf.enc_ndr_small(ptype);
buf.enc_ndr_small(flags);
buf.enc_ndr_long(0x00000010); /* Little-endian / ASCII / IEEE */
buf.enc_ndr_short(length);
buf.enc_ndr_short(0); /* length of auth_value */
buf.enc_ndr_long(call_id);
|
public abstract void | encode_in(NdrBuffer buf)
|
public abstract int | getOpnum()
|
public DcerpcException | getResult()
if (result != 0)
return new DcerpcException(result);
return null;
|
public boolean | isFlagSet(int flag)
return (flags & flag) == flag;
|
public void | setFlag(int flag)
flags |= flag;
|
public void | unsetFlag(int flag)
flags &= ~flag;
|