/** @function PeerGen() Inserts the new peer or updates if it already exists.
  * @return $Peer return the peer.
  */
 private function PeerGen()
 {
     $Peer = current($this->getClass('PeerManager')->find(array('hash' => bin2hex($_REQUEST['peer_id']))));
     if (!$Peer || !$Peer->isValid()) {
         $Peer = new Peer(array('hash' => bin2hex($_REQUEST['peer_id']), 'agent' => substr($_SERVER['HTTP_USER_AGENT'], 0, 80), 'ip' => ip2long($_SERVER['REMOTE_ADDR']), 'key' => sha1($_REQUEST['key']), 'port' => intval($_REQUEST['port'])));
     } else {
         $Peer->set('hash', bin2hex($_REQUEST['peer_id']))->set('agent', substr($_SERVER['HTTP_USER_AGENT'], 0, 80))->set('ip', ip2long($_SERVER['REMOTE_ADDR']))->set('port', intval($_REQUEST['port']));
     }
     $Peer->save();
     return $Peer;
 }