def handleConnection(data, addr):
    o = pickle.loads(data)  #recieves mapRegister messages
    print repr(o)  # prints array('i', [1, 3, 2])
    if (o.msg_type == MSG_MAP_REGISTER):
        print 'READ MapRegister: %s (mask: %s), RLOCsp: %s' % (o.eid, o.mask,
                                                               o.rloc_sp)
        if verifySign(o):
            print '****Testing ALPHA'
            test, ts, xtr_id = verifyAlpha(o)

            #**TODO: VERIFICATION OF ROA
            #TEST IF THE XTR_ID BELONGS THE THE RLOC THAT BELONGS TO AN ASN

            if test == 1:  #verifyAlpha(o)[0]:
                print 'EID Validated: ', o.eid
                ans = MapReply(o.eid, o.mask, ts, xtr_id)
                ans.generateSign()
            else:
                ans = ErrorMessage('alpha INCORRECT for EID %s' %
                                   o.eid.toStr())
        else:
            ans = ErrorMessage('signature INCORRECT for EID %s' %
                               o.eid.toStr())

    else:
        ans = ErrorMessage('Message Unknown for MAP Server')

    sock.sendto(pickle.dumps(ans), addr)
def sendMapRegister(servReq):  #servReg: ServiceRequest sent from client
    """TODO: DEFINE ROA AND CREATE THE MAP REGISTER MESSAGE USING THE RLOC AND XTR_ID
  CONTAINDED IN IT
  Here, I am defining the xtr_id and the RLOC by hand. The xtr_id must be the sames as
  the one used by the client to achieve the Registration
  """

    mapReg = MapRegister(servReq.eid,
                         servReq.mask,
                         servReq.alpha,
                         '9.9.9.9',
                         xtr_id=b'qwertyuiop123456',
                         ra_sp=b'authorized')

    mapReg.generateSign()

    sockms = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    sockms.sendto(pickle.dumps(mapReg), (UDP_IP, 4005))
    received = sockms.recv(1024)
    sockms.close()

    answer = pickle.loads(received)  #MapReply answer
    print repr(answer)
    if (answer.msg_type == MSG_MAP_REPLY):
        if verifySign(answer):
            otp_to_ack[(answer.eid.toStr() + '/' + str(answer.mask))] = [
                answer.eid, answer.mask, answer.otp
            ]
            return (ServiceReply(answer.eid, answer.mask,
                                 answer.beta))  # otp=0, ack=0,beta=0):
        else:
            return (ErrorMessage('MapReply signature INCORRECT%s' %
                                 o.eid.toStr()))
    else:
        return answer
    def sendMapRegister(servReq):  #servReg: ServiceRequest sent from client

        mapReg = MapRegister(servReq.eid, servReq.mask, servReq.alpha,
                             '9.9.9.9')
        mapReg.generateSign()
        #mapReg.mask = 0
        sockms = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        sockms.sendto(pickle.dumps(mapReg), (UDP_IP, 4005))
        received = sockms.recv(1024)
        sockms.close()

        answer = pickle.loads(received)  #MapReply answer
        print repr(answer)
        if (answer.msg_type == MSG_MAP_REPLY):
            if self.verifySign(answer):
                self.otp_to_ack[(answer.eid.toStr() + '/' +
                                 str(answer.mask))] = [
                                     answer.eid, answer.mask, answer.otp
                                 ]
                return (ServiceReply(answer.eid, answer.mask,
                                     answer.beta))  # otp=0, ack=0,beta=0):
            else:
                return (ErrorMessage('MapReply signature INCORRECT%s' %
                                     o.eid.toStr()))
        else:
            return answer