package com.lgnortel.r3.r3nemanager.r3oam;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketTimeoutException;
import java.net.UnknownHostException;
import java.util.logging.Logger;
import com.lgnortel.lib.logger.LoggerUtil;
import com.lgnortel.network.networkview.ErrorInspect;
import com.lgnortel.r3.r3nemanager.r3pdu.CommandExcutor;
import com.lgnortel.r3.r3nemanager.r3pdu.MpHeaderInfo;
import com.lgnortel.r3.r3nemanager.r3pdu.MpHeaderPdu;
import com.lgnortel.r3.r3nemanager.r3pdu.NeConstants;
import com.lgnortel.r3.r3rmi.NeOamIF;
/**
* Copyright (c) 2008 LG-Nortel, Inc. All Rights Reserved.
*
* CONFIDENTIALITY AND LIMITED USE: This software, including any software of third parties embodied herein, contains code, information, data and concepts which are confidential and/or proprietary to LG-Nortel and such third parties. This software is licensed for use solely in accordance with the terms and conditions of the applicable license agreement with LG-Nortel or its authorized distributor, and not for any other use or purpose. No redistribution of this software by any party is permitted.
*
*
*<p>
* Title: PrvSys.java
* </p>
*<p>
* Description: The Command Dispatcher in EA Manager 1100 Server processes a command requested from GUI using this class. This class processes a command for configuring NE information.
* </p>
*<p>
* Copyright: Copyright(c) 2008 LG-NORTEL ALL Rights Reserved
* </p>
*<p>
* Company: LG-Nortel
* </p>
*
*@author OH MOON GUE
*@version 0.1
*@created 2009. 1. 21.
*@modified 2009. 1. 21.
*@product EFA R4.0 EMS
*@sw_block nemanager
*@function_no
*/
public class PrvSys extends CommandExcutor {
/**
* Description: Constructor of this class
*
* @param cmdTag
* : If many clients request with a same command, the command code is equal each other and the cmdTag numbers increase by one.
* @param viewId
* : View ID of GUI
* @param userId
* : Login user ID
* @param nodeId
* : Node ID
* @param shelfId
* : Shelf ID
* @param cmdCode
* : Command code
* @param data
* : A message to be interchanged between EA Manager 1100 GUI and EA Manager 1100 Server
*/
public PrvSys(int cmdTag, int viewId, int userId, int nodeId, int shelfId, int cmdCode, Object[] data) {
this.cmdTag = cmdTag;
this.viewId = viewId;
this.userId = userId;
this.cmdCode = cmdCode;
this.nodeId = nodeId;
this.data = data;
}
/**
* Description: This method hands over a command requested from GUI to the NEIF process to be existed in the MCP board of EAST 1100 and sends a result to perform a command to EA Manager 1100 Server(Command Dispatcher Thread).
*
* @param cmdTag
* : If many clients request with a same command, the command code is equal each other and the cmdTag numbers increase by one.
* @param viewId
* : View ID of GUI
* @param userId
* : Login user ID
* @param nodeId
* : Node ID
* @param shelfId
* : Shelf ID
* @param cmdCode
* : Command code
* @param data
* : A message to be interchanged between EA Manager 1100 GUI and EA Manager 1100 Server
*/
public static void execute(int cmdTag, int viewId, int userId, int nodeId, int shelfId, int cmdCode, Object[] data) {
// Log4J
Logger logger = LoggerUtil.getInstance().getLogger("com.lgnortel.r3.r3nemanager");
String neIpAddr = dbSelecter.getIpAddress(nodeId);
NeOamIF.PrvSysIF inputObject = (NeOamIF.PrvSysIF) data[0];
DatagramSocket socket = null;
byte[] receiveBuffer = new byte[NeConstants.PDU_LENGTH];
byte[] ackBuffer = null;
MpHeaderInfo headerInfo = null;
if (neIpAddr.equals("") || neIpAddr.length() == 0) {
logger.warning("[PRV-SYS] NE IP ADDRESS NOT FOUND !");
cmdDispatcher.cmdResponse(cmdTag, viewId, userId, nodeId, shelfId, cmdCode, data, ErrorInspect.FAILURE);
return;
}
try {
// length
MpHeaderPdu header = new MpHeaderPdu(NeConstants.CODE, NeConstants.PVER, 1, // version
cmdTag, // invokeId
NeConstants.NO_MORE, // moreFlag
0, // seqNo
NeConstants.RTRV_CMD, // cmdType
NeConstants.SEND_CMD, // msgType
NeConstants.NEIF, // channel
shelfId, // sid
userId, neIpAddr, // aganetIp
0, // result
72, // length
cmdCode // commandId
);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream out_stream = new DataOutputStream(baos);
// write header info
out_stream.write(header.getStream(), 0, NeConstants.HEADER_LENGTH);
// write payload( cid,lid)
out_stream.writeInt(0); // objId
out_stream.writeInt(inputObject.shelfId); // sid
out_stream.writeInt(inputObject.slotId); // cid
out_stream.writeInt(inputObject.portId); // lid
out_stream.writeInt(inputObject.sysType); // ontId
out_stream.writeInt(inputObject.mask); // mask
// tid
out_stream.write(inputObject.tid.toUpperCase().getBytes(), 0, inputObject.tid.getBytes().length > 20 ? 20 : inputObject.tid.getBytes().length); // name
if (inputObject.tid.getBytes().length < 20) {
byte[] temp = new byte[20 - inputObject.tid.getBytes().length];
out_stream.write(temp, 0, temp.length);
}
// site
out_stream.write(inputObject.site.toUpperCase().getBytes(), 0, inputObject.site.getBytes().length > 20 ? 20 : inputObject.site.getBytes().length); // name
if (inputObject.site.getBytes().length < 20) {
byte[] temp = new byte[20 - inputObject.site.getBytes().length];
out_stream.write(temp, 0, temp.length);
}
out_stream.writeInt(0); // apd_version_tag
out_stream.writeInt(0); // req_apd_type
out_stream.flush();
out_stream.close();
byte[] sendBuffer = baos.toByteArray();
DataInputStream in_stream = null;
DatagramPacket packet = new DatagramPacket(sendBuffer, sendBuffer.length, InetAddress.getByName(neIpAddr), NeConstants.AGENT_PORT);
socket = new DatagramSocket();
socket.setSoTimeout(NeConstants.TIME_OUT);
socket.send(packet);
packet = new DatagramPacket(receiveBuffer, receiveBuffer.length);
while (true) {
socket.receive(packet);
in_stream = new DataInputStream(new ByteArrayInputStream(receiveBuffer));
// header processing
headerInfo = new MpHeaderInfo(in_stream);
// invokeId
if (headerInfo.getInvokeId() != header.getInvokeId()) {
continue; // .. timeout??
}
// ack
ackBuffer = header.getAckHeaderByte(1, // version
cmdTag, // invokeId
NeConstants.NO_MORE, // moreFlag
0, // seqNo
NeConstants.CMD_ACK, // cmdType
0, // msgType
NeConstants.NEIF, // channel
shelfId, // sid
neIpAddr, // aganetIp
0, // result
0, // length
cmdCode // commandId
);
packet = new DatagramPacket(ackBuffer, ackBuffer.length, InetAddress.getByName(neIpAddr), NeConstants.AGENT_PORT);
socket.send(packet);
if (headerInfo.getResult() != NeConstants.SUCCESS) {
in_stream.close();
socket.close();
cmdDispatcher.cmdResponse(cmdTag, viewId, userId, nodeId, shelfId, cmdCode, data, headerInfo.getResult());
return;
} else {
in_stream.close();
socket.close();
cmdDispatcher.cmdResponse(cmdTag, viewId, userId, nodeId, shelfId, cmdCode, data, ErrorInspect.SUCCESS);
return;
}
}
// send ack
} catch (SocketTimeoutException ste) {
logger.warning("[PRV-SYS]REQUEST TIMED OUT(" + cmdCode + ")");
socket.close();
cmdDispatcher.cmdResponse(cmdTag, viewId, userId, nodeId, shelfId, cmdCode, data, ErrorInspect.SERVER_TIMEOUT_ERR);
return;
} catch (UnknownHostException uhe) {
logger.warning("[PRV-SYS]UNKNOWN HOST (" + cmdCode + ")");
socket.close();
cmdDispatcher.cmdResponse(cmdTag, viewId, userId, nodeId, shelfId, cmdCode, data, ErrorInspect.HOST_UNKNOWN);
return;
} catch (Exception e) {
logger.warning("[PRV-SYS] Exception Occured(" + cmdCode + ")");
socket.close();
cmdDispatcher.cmdResponse(cmdTag, viewId, userId, nodeId, shelfId, cmdCode, data, ErrorInspect.FAILURE);
return;
} finally {
if (socket != null)
socket.close();
}
}
}
|