1 6 7 package com.quikj.application.web.oamp.plugin; 8 9 import com.quikj.server.framework.*; 10 import com.quikj.server.web.*; 11 import com.quikj.application.web.oamp.messaging.*; 12 13 import java.io.*; 14 import java.util.*; 15 16 import org.w3c.dom.*; 18 19 23 public class SystemOAMP extends AceThread implements FeatureHandlerInterface 24 { 25 26 27 public SystemOAMP() throws IOException 28 { 29 super("SystemOAMP"); 30 } 31 32 public void dispose() 33 { 34 interruptWait(AceSignalMessage.SIGNAL_TERM, "disposed"); 36 37 super.dispose(); 38 } 39 40 public ClientParms getClientParms() 41 { 42 return null; 43 } 44 45 public String getFeatureName() 46 { 47 return OAMPSystemMessageParser.OAMP_SYSTEM_FEATURE_NAME; 48 } 49 50 public boolean init(String feature_name, PluginParameters parameters, ClientParms client_parms) 51 { return true; 53 } 54 55 public boolean sendEvent(AceMessageInterface message) 56 { 57 return super.sendMessage(message); 58 } 59 60 public void start() 61 { 62 super.start(); 63 } 64 65 public void run() 66 { 67 while (true) 68 { 69 AceMessageInterface message = waitMessage(); 70 if (message == null) 71 { 72 AceLogger.Instance().log(AceLogger.ERROR, AceLogger.SYSTEM_LOG, 74 getName() 75 + "- SystemOAMP.run() -- A null message was received while waiting for a message - " 76 + getErrorMessage()); 77 78 break; 79 } 80 81 if ((message instanceof AceSignalMessage) == true) 82 { 83 85 AceLogger.Instance().log(AceLogger.INFORMATIONAL, AceLogger.SYSTEM_LOG, 87 getName() 88 + " - SystemOAMP.run() -- A signal " 89 + ((AceSignalMessage)message).getSignalId() 90 + " is received : " 91 + ((AceSignalMessage)message).getMessage()); 92 break; 93 } 94 else if ((message instanceof OAMPMessageEvent) == true) 95 { 96 processMessageEvent((OAMPMessageEvent)message); 97 } 98 else if ((message instanceof EndpointLogoutEvent) == true) 99 { 100 processLogoutEvent((EndpointLogoutEvent)message); 101 } 102 else 103 { 104 AceLogger.Instance().log(AceLogger.WARNING, AceLogger.SYSTEM_LOG, 106 getName() 107 + "- SystemOAMP.run() -- An unexpected event is received : " 108 + message.messageType()); 109 } 110 } 111 } 112 113 private void processMessageEvent(OAMPMessageEvent message) 114 { 115 if (message.isRequest() == true) 116 { 117 Node node = (Node)message.getElement(); 118 OAMPSystemMessageParser parser = new OAMPSystemMessageParser(); 119 if (parser.parse(node, true) == false) 120 { 121 AceLogger.Instance().log(AceLogger.ERROR, 123 AceLogger.SYSTEM_LOG, 124 getName() 125 + "- SystemOAMP.processMessageEvent() -- failed parsing request : " 126 + parser.getErrorMessage()); 127 return; 128 } 129 130 OAMPMessageInterface parsed_msg = parser.getMessage(); 131 if ((parsed_msg instanceof RegistrationRequestMessage) == true) 132 { 133 processLogin((RegistrationRequestMessage)parsed_msg, 134 message); 135 } 136 else 137 { 138 AceLogger.Instance().log(AceLogger.ERROR, 140 AceLogger.SYSTEM_LOG, 141 getName() 142 + "- SystemOAMP.processMessageEvent() -- unsupported request : " 143 + parsed_msg.messageType()); 144 return; 145 } 146 } 147 else 148 { 149 AceLogger.Instance().log(AceLogger.ERROR, 151 AceLogger.SYSTEM_LOG, 152 getName() 153 + "- SystemOAMP.processMessageEvent() -- response reception not supported"); 154 155 return; 156 } 157 } 158 159 private void processLogin(RegistrationRequestMessage message, 160 OAMPMessageEvent event) 161 { 162 AccountElement e = CommunicatorClientList.getInstance().get(message.getAuthCode()); 163 if (e == null) 164 { 165 sendResponse(event.getEndpoint(), 167 event.getRequestId(), 168 event.getUserParm(), 169 AceHTTPMessage.FORBIDDEN, "User authentication failed", null); 170 171 AceLogger.Instance().log(AceLogger.WARNING, 172 AceLogger.USER_LOG, 173 "Unsuccessful login attempt by authcode."); 174 return; 175 } 176 177 RegistrationResponseMessage response = new RegistrationResponseMessage(); 178 response.setLevel(e.getLevel()); 179 response.setAdditionalInfo(e.getAdditionalInfo()); 180 181 event.getClient().setAccountInfo(e); 182 sendResponse(event.getEndpoint(), 183 event.getRequestId(), 184 event.getUserParm(), 185 AceHTTPMessage.OK, "OK", response); 186 187 return; 188 } 189 190 public boolean sendResponse(EndPointInterface endpoint, 191 int request_id, 192 Object user_parm, 193 int response_status, 194 String reason, 195 OAMPMessageInterface message) 196 { 197 if (endpoint.sendEvent(new OAMPMessageEvent(response_status, 198 reason, 199 message, 200 request_id, 201 user_parm)) == false) 202 { 203 AceLogger.Instance().log(AceLogger.ERROR, 205 AceLogger.SYSTEM_LOG, 206 getName() 207 + "- SystemOAMP.sendResponse() -- Could not send login response message to the endpoint " 208 + endpoint); 209 210 return false; 211 } 212 213 return true; 214 } 215 216 217 private void processLogoutEvent(EndpointLogoutEvent message) 218 { 219 } 221 222 private Hashtable pendingDbOps = new Hashtable(); 224 } 225 | Popular Tags |