package iax.protocol.peer.command.send; import iax.protocol.frame.InfoElement; import iax.protocol.frame.ProtocolControlFrame; import iax.protocol.peer.Peer; import iax.protocol.util.Converter; import iax.protocol.util.FrameUtil; /** * Sends a register release */ public class RegRel implements PeerCommandSend { private Peer peer; private ProtocolControlFrame regauthFrame; /** * Constructor * @param peer peer for sending the frame * @param regauthFrame register auth frame that needs a register release frame or null if there isn�t this frame */ public RegRel(Peer peer) { this.peer = peer; this.regauthFrame = null; } /** * Constructor * @param peer peer for sending the frame * @param regauthFrame register auth frame that needs a register release frame or null if there isn�t this frame */ public RegRel(Peer peer, ProtocolControlFrame regauthFrame) { this.peer = peer; this.regauthFrame = regauthFrame; } public void run() { try { if (regauthFrame != null) { String userName = regauthFrame.getUserName(); int auth = regauthFrame.getAuthMethods(); String challenge = regauthFrame.getChallenge(); if (userName.equals(peer.getUserName())) { String password = peer.getPassword(); ProtocolControlFrame regrelFrame = new ProtocolControlFrame(Peer.PEER_SRCCALLNO, false, regauthFrame.getSrcCallNo(), peer.getTimestamp(), regauthFrame.getIseqno(), regauthFrame.getOseqno()+1, false, ProtocolControlFrame.REGREL_SC); regrelFrame.setUserName(userName); switch (auth) { case InfoElement.MD5_V: password = Converter.byteArrayToHexString(FrameUtil.md5(challenge.getBytes(), password.getBytes())); regrelFrame.setMD5Result(password); break; case InfoElement.RSA_V: //TODO: Calcular el RSA del password. // pcf.setRSAResult() break; case InfoElement.PLAIN_V: regrelFrame.setMD5Result(password); break; default: break; } peer.handleSendFrame(regrelFrame); } } else { ProtocolControlFrame regrelFrame = new ProtocolControlFrame(Peer.PEER_SRCCALLNO, false, 0, peer.getTimestamp(), 0, 0, false, ProtocolControlFrame.REGREL_SC); regrelFrame.setUserName(peer.getUserName()); peer.handleSendFrame(regrelFrame); } } catch (Exception e) { e.printStackTrace(); } } }