1 19 20 package jcifs.dcerpc; 21 22 import jcifs.dcerpc.ndr.*; 23 24 public class DcerpcBind extends DcerpcMessage { 25 26 static final String [] result_message = { 27 "0", 28 "DCERPC_BIND_ERR_ABSTRACT_SYNTAX_NOT_SUPPORTED", 29 "DCERPC_BIND_ERR_PROPOSED_TRANSFER_SYNTAXES_NOT_SUPPORTED", 30 "DCERPC_BIND_ERR_LOCAL_LIMIT_EXCEEDED" 31 }; 32 33 static String getResultMessage(int result) { 34 return result < 4 ? 35 result_message[result] : 36 "0x" + jcifs.util.Hexdump.toHexString(result, 4); 37 } 38 public DcerpcException getResult() { 39 if (result != 0) 40 return new DcerpcException(getResultMessage(result)); 41 return null; 42 } 43 44 DcerpcBinding binding; 45 int max_xmit, max_recv; 46 47 DcerpcBind(DcerpcBinding binding, DcerpcHandle handle) { 48 this.binding = binding; 49 max_xmit = handle.max_xmit; 50 max_recv = handle.max_recv; 51 ptype = 11; 52 flags = DCERPC_FIRST_FRAG | DCERPC_LAST_FRAG; 53 } 54 55 public int getOpnum() { 56 return 0; 57 } 58 public void encode_in(NdrBuffer buf) throws NdrException { 59 buf.enc_ndr_short(max_xmit); 60 buf.enc_ndr_short(max_recv); 61 buf.enc_ndr_long(0); 62 buf.enc_ndr_small(1); 63 buf.enc_ndr_small(0); 64 buf.enc_ndr_short(0); 65 buf.enc_ndr_short(0); 66 buf.enc_ndr_small(1); 67 buf.enc_ndr_small(0); 68 binding.uuid.encode(buf); 69 buf.enc_ndr_short(binding.major); 70 buf.enc_ndr_short(binding.minor); 71 DCERPC_UUID_SYNTAX_NDR.encode(buf); 72 buf.enc_ndr_long(2); 73 } 74 public void decode_out(NdrBuffer buf) throws NdrException { 75 buf.dec_ndr_short(); 76 buf.dec_ndr_short(); 77 buf.dec_ndr_long(); 78 int n = buf.dec_ndr_short(); 79 buf.advance(n); 80 buf.align(4); 81 buf.dec_ndr_small(); 82 buf.align(4); 83 result = buf.dec_ndr_short(); 84 buf.dec_ndr_short(); 85 buf.advance(20); 86 } 87 } 88 | Popular Tags |