#!/usr/bin/python
from xml.dom import minidom, Node

def handleNlriPrefix(elem):
    NlriAddr = elem.getElementsByTagName("ADDRESS")[0].childNodes[0].data
    print "   " + NlriAddr

def handleNlri(elem):
    for e_Prefix in elem.getElementsByTagName("PREFIX"):
        handleNlriPrefix(e_Prefix)

def handleUpdateMsg(elem):
    for e_Nlri in elem.getElementsByTagName("NLRI"):
        handleNlri(e_Nlri)

def handleAttributeAsPath(elem):
    e_AsPath = elem.getElementsByTagName("AS_PATH")[0]
    e_AsSeg = e_AsPath.getElementsByTagName("AS_SEG")[0]
    AsPath = []
    for e_As in e_AsSeg.getElementsByTagName("AS"):
        AsPath.append(e_As.childNodes[0].data)
    print "   " + " ".join(AsPath)
    

def handleAttribute(elem):
    AttrType = elem.getElementsByTagName("TYPE")[0].childNodes[0].data
    if AttrType == "AS_PATH":
        handleAttributeAsPath(elem)

def handlePathAttribute(elem):
    for e_attr in elem.getElementsByTagName("ATTRIBUTE"):
        handleAttribute(e_attr)    

def handleAsciiMsg(elem):
    handlePathAttribute(elem.getElementsByTagName("PATH_ATTRIBUTES")[0])
    handleUpdateMsg(elem.getElementsByTagName("UPDATE")[0])

def handleBgpmonSeq(elem):
    pass

def handleTime(dom):
    #print dom.getAttribute("datetime")
    pass

def handlePeering(elem):
    # Src
    e_SrcAddr = elem.getElementsByTagName("SRC_ADDR")[0]
    DstAfType = e_SrcAddr.getElementsByTagName("AFI")[0].childNodes[0].data
    SrcAddress = e_SrcAddr.getElementsByTagName("ADDRESS")[0].childNodes[0].data
    SrcAs = elem.getElementsByTagName("SRC_AS")[0].childNodes[0].data
    # Dst
    e_DstAddr = elem.getElementsByTagName("DST_ADDR")[0]
    DstAfType = e_DstAddr.getElementsByTagName("AFI")[0].childNodes[0].data
    DstAddress = e_DstAddr.getElementsByTagName("ADDRESS")[0].childNodes[0].data
    DstAs = elem.getElementsByTagName("DST_AS")[0].childNodes[0].data
    print SrcAddress + "(AS " + SrcAs + ") -> " + DstAddress + "(AS " + DstAs + ")"

def handleBgpMessage(dom):
    MsgType = dom.getElementsByTagName("BGP_MONITOR_MESSAGE")[0].getAttribute("type")
    if MsgType == "UPDATE":
        handleBgpmonSeq(dom.getElementsByTagName("BGPMON_SEQ")[0])
        handleTime(dom.getElementsByTagName("TIME")[0])
        handlePeering(dom.getElementsByTagName("PEERING")[0])
        handleAsciiMsg(dom.getElementsByTagName("ASCII_MSG")[0])
    elif MsgType == "KEEPALIVE":
        pass
            
if __name__ == '__main__':
    dom = minidom.parse('data2')
    handleBgpMessage(dom)

