/* * Copyright 2011 Future Systems * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.krakenapps.pcap.decoder.rpce; import org.krakenapps.pcap.decoder.browser.AnnounceRequestBrowser; import org.krakenapps.pcap.decoder.browser.BecomeBackupBrowser; import org.krakenapps.pcap.decoder.browser.DomainAnnouncementBrowser; import org.krakenapps.pcap.decoder.browser.ElectionBrowserRequest; import org.krakenapps.pcap.decoder.browser.GetBackupListRequest; import org.krakenapps.pcap.decoder.browser.GetBackupListResponse; import org.krakenapps.pcap.decoder.browser.HostAnnounceBrowser; import org.krakenapps.pcap.decoder.browser.LocalMasterAnnouncementBrowser; import org.krakenapps.pcap.decoder.browser.MasterAnnouncementBrowser; import org.krakenapps.pcap.decoder.browser.ResetstateRequestBrowser; import org.krakenapps.pcap.decoder.rpce.packet.UdpPDUInterface; import org.krakenapps.pcap.decoder.rpce.rr.BrowserType; import org.krakenapps.pcap.decoder.rpce.tcppacket.association.TcpPDUInterface; import org.krakenapps.pcap.decoder.smb.SmbProcessor; import org.krakenapps.pcap.util.Buffer; import org.krakenapps.pcap.util.ByteOrderConverter; public class RpcDecoder implements SmbProcessor{ @Override public void processUdp(Buffer b) { RpcUdpPacket udpP = new RpcUdpPacket(); RpcUdpHeader header = new RpcUdpHeader(); // header UdpPacketTypeMapper mapper = new UdpPacketTypeMapper(); UdpPDUInterface data; // data header.parse(b); udpP.setHeader(header); data = mapper.getPDU(udpP.getHeader().getpType()); data.parse(b , header); udpP.setData(data); //System.out.println(udpP); // add browser protocol } @Override public void processTcpRx(Buffer b) { RpcTcpPacket tcpP = new RpcTcpPacket(); RpcTcpHeader header = new RpcTcpHeader(); TcpPacketTypeMapper mapper = new TcpPacketTypeMapper(); TcpPDUInterface data; header.parse(b); tcpP.setHeader(header); data = mapper.getPDU(tcpP.getHeader().getPtype()); data.parse(b , header); tcpP.setData(data); //System.out.println(tcpP); } @Override public void processTcpTx(Buffer b) { RpcTcpPacket tcpP = new RpcTcpPacket(); RpcTcpHeader header = new RpcTcpHeader(); TcpPacketTypeMapper mapper = new TcpPacketTypeMapper(); TcpPDUInterface data; header.parse(b); tcpP.setHeader(header); //System.out.println(tcpP.getHeader().getPtype()); data = mapper.getPDU(tcpP.getHeader().getPtype()); data.parse(b , header); tcpP.setData(data); //System.out.println(tcpP); } @Override public void processMailslot(Buffer b) { RpcUdpPacket udpP = new RpcUdpPacket(); RpcUdpHeader header = null; UdpPDUInterface data; // data BrowserType opCode; b.mark(); opCode = BrowserType.parse(ByteOrderConverter.swap(b.getShort()) & 0xffff); b.reset(); switch(opCode){ case HostAnnouncement: data = new HostAnnounceBrowser(); data.parse(b, header); break; case AnnouncementRequest: data = new AnnounceRequestBrowser(); data.parse(b, header); break; case RequestElection: data = new ElectionBrowserRequest(); data.parse(b, header); break; case GetBackupListRequest: data = new GetBackupListRequest(); data.parse(b, header); break; case GetBackupListResponse: data = new GetBackupListResponse(); data.parse(b, header); break; case BecomeBackup: data = new BecomeBackupBrowser(); data.parse(b, header); break; case DomainAnnouncement: data = new DomainAnnouncementBrowser(); data.parse(b, header); break; case MasterAnnouncement: data = new MasterAnnouncementBrowser(); data.parse(b, header); break; case ResetStateRequest: data = new ResetstateRequestBrowser(); data.parse(b, header); break; case LocalMasterAnnouncement: data = new LocalMasterAnnouncementBrowser(); data.parse(b, header); break; default: throw new IllegalArgumentException(); } udpP.setHeader(header); udpP.setData(data); //System.out.println(udpP.getData()); } }