Changeset 20

Show
Ignore:
Timestamp:
02/07/04 11:57:42 (5 years ago)
Author:
jajcus
Message:

- configuration file validation

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/jjigw.py

    r14 r20  
    1717from pyxmpp.jabber.muc import MucPresence,MucX,MucUserX,MucItem,MUC_NS 
    1818 
     19class JJIGWFatalError(RuntimeError): 
     20    pass 
     21 
    1922class ConnectConfig: 
    2023    def __init__(self,node): 
     
    3134        self.servers=[] 
    3235        for s in servers: 
    33             self.servers.append((s.getContent(),6667)) 
    34         self.default_encoding="iso-8859-2" 
     36            server=s.getContent() 
     37            port=s.prop("port") 
     38            try: 
     39                port=int(port) 
     40                if port<1 or port>65535: 
     41                    raise ValueError 
     42            except ValueError: 
     43                print >>sys.stderr,"Bad port value: %r, using default: 6667" % (port,) 
     44                port=6667 
     45            self.servers.append((server,port)) 
     46        self.default_encoding=node.prop("encoding") 
    3547    def get_servers(self): 
    3648        r=self.servers 
     
    4052class Config: 
    4153    def __init__(self,filename): 
    42         self.doc=libxml2.parseFile(filename) 
     54        self.doc=None 
     55        parser=libxml2.createFileParserCtxt(filename) 
     56        parser.validate(1) 
     57        parser.parseDocument() 
     58        if not parser.isValid(): 
     59            raise JJIGWFatalError,"Invalid configuration" 
     60        self.doc=parser.doc() 
    4361        self.connect=ConnectConfig(self.doc.xpathEval("jjit/connect")[0]) 
    4462        self.network=NetworkConfig(self.doc.xpathEval("jjit/network")[0]) 
    4563    def __del__(self): 
    46         self.doc.freeDoc() 
    47  
     64        if self.doc: 
     65            self.doc.freeDoc() 
    4866 
    4967evil_characters_re=re.compile(r"[\000-\010\013\014\016-\037]") 
     
    11641182        return 1 
    11651183 
    1166  
    1167 config=Config("jjigw.xml") 
    1168  
    1169 print "creating component..." 
    1170 c=Component(config) 
    1171  
    1172 print "starting..." 
    1173 c.run(1) 
     1184try: 
     1185    config=Config("jjigw.xml") 
     1186 
     1187    print "creating component..." 
     1188    c=Component(config) 
     1189 
     1190    print "starting..." 
     1191    c.run(1) 
     1192except JJIGWFatalError,e: 
     1193    print e 
     1194    print "Aborting." 
     1195    sys.exit(1) 
    11741196 
    11751197# vi: sw=4 ts=8 sts=4