class sequencer(Closure): #ensure singleton _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(sequencer, cls).__new__(cls, *args, **kwargs) return cls._instance def __init__(self, configFileName): self.appConfigFileName = configFileName self.loadConfigFile() self.handle = CCN() self.getApplicationKey() #nameCrypto self.state = NameCrypto.new_state() self.cryptoKey = NameCrypto.generate_application_key(self.cfg.fixtureKey, self.cfg.appName) def loadConfigFile(self): command = "import "+self.appConfigFileName+" as appCfg" exec(command) self.appCfg = appCfg; self.cfg = appCfg; def getApplicationKey(self): print("getting application key for "+self.appCfg.appName) key = Key() keyFile = self.appCfg.keyFile key.fromPEM(filename=keyFile) self.appKey = key self.key = key def start(self): print "starting "+self.cfg.appName #self.allWhite() #self.allBlack() #self.spazz() def spazz(self): for i in range(1,500000): self.allWhite() self.allBlack() def allWhite(self): for d in self.cfg.names: if d['name'] != "incandescent": print d['name'] self.buildAndSendInterest(d['name'],255,255,255) def allBlack(self): for d in self.cfg.names: if d['name'] != "incandescent": print d['name'] self.buildAndSendInterest(d['name'],0,0,0) def sendAllLights(self,r,g,b): for d in self.cfg.names: if d['name'] != "incandescent": self.buildAndSendInterest(d['name'],r,g,b) return def hx(self, inum): num = hex(inum)[2:] if (len(num) == 1): num = '0'+num #print num return str(num) def buildAndSendInterest(self,device,r,g,b): rx = self.hx(r) gx = self.hx(g) bx = self.hx(b) CLI = device+"/setRGB/"+rx+gx+bx #print CLI self.sendSignedInterest(CLI) def sendInterest(self,command): n = Name.Name(self.cfg.appPrefix) print("\nInterest espressing for "+str(n)) n += command i = Interest.Interest() print("Interest sending to "+str(n)) co = self.handle.get(n,i,20) if not not co: #if co is not empty, print result for debugging print("content: "+str(co.content)) pass def sendSignedInterest(self,command): fullURI = self.cfg.appPrefix + command #print fullURI i = Interest() #build keyLocator to append to interest for NameCrypto on upcall keyLoc = pyccn.KeyLocator(self.key) keyLocStr = _pyccn.dump_charbuf(keyLoc.ccn_data) nameAndKeyLoc = Name(str(fullURI)) #print("there are "+str(len(nameAndKeyLoc))+" components") nameAndKeyLoc += keyLocStr #print("there are "+str(len(nameAndKeyLoc))+" components after adding keyLocStr") t0 = time() authName = NameCrypto.authenticate_command(self.state, nameAndKeyLoc, self.cfg.appName, self.cryptoKey) t1 = time() #print "elapsed sign", t1-t0 #print authName.components t0 = time() co = self.handle.expressInterest(authName,self) t1 = time()
from pyccn import CCN, Name c = CCN() print(c) n = Name() print(n) n = Name("ccnx:/ccnx/ping") print(n) co = c.get(n) print(co) #this shouldn't cause segfault print(n) n = Name("ccnx:/ccnx/some_nonexisting_name") co = c.get(n, None, 100) #this shouldn't cause segfault! print(co)
class sequencer(Closure): def __init__(self, configFileName): self.appConfigFileName = configFileName self.loadConfigFile() self.handle = CCN() self.getApplicationKey() #nameCrypto self.state = NameCrypto.new_state() self.cryptoKey = NameCrypto.generate_application_key(self.cfg.fixtureKey, self.cfg.appName) self.count = 0 def loadConfigFile(self): command = "import "+self.appConfigFileName+" as appCfg" exec(command) self.appCfg = appCfg; self.cfg = appCfg; def getApplicationKey(self): #print("getting application key for "+self.appCfg.appName) key = Key() keyFile = self.appCfg.keyFile key.fromPEM(filename=keyFile) self.appKey = key self.key = key def start(self): #print "starting "+self.cfg.appName self.startTime = time.time() #self.play() #self.send() #self.discoProfile() #self.disco() #self.mobileDisco() #self.discoArt() #self.allWhite() self.allBlack() #self.spazz() def spazz(self): for i in range(1,500000): self.allWhite() self.allBlack() def allWhite(self): for d in self.cfg.names: if d['name'] != "incandescent": print d['name'] self.buildAndSendInterest(d['name'],255,255,255) def allBlack(self): for d in self.cfg.names: if d['name'] != "incandescent": print d['name'] self.buildAndSendInterest(d['name'],0,0,0) self.buildAndSendArtInterest('incandescent',0,) def disco(self): print "fading..." for d in self.cfg.names: if d['name'] != "incandescent": print d['name'] r = b = g = 0 #red for i in range(0,85): r=i self.buildAndSendInterest(d['name'],r*3,g*3,b*3) for i in range(0,85): r=0 g=i self.buildAndSendInterest(d['name'],r*3,g*3,b*3) for i in range(0,85): g=0 b=i self.buildAndSendInterest(d['name'],r*3,g*3,b*3) self.buildAndSendInterest(d['name'],0,0,0) self.buildAndSendInterest(d['name'],255,255,255) self.buildAndSendInterest(d['name'],0,0,0) self.buildAndSendInterest(d['name'],255,255,255) self.buildAndSendInterest(d['name'],0,0,0) self.buildAndSendInterest(d['name'],0,0,0) return def discoProfile(self): print "fading..." for d in self.cfg.names: if d['name'] != "incandescent": print d['name'] r = b = g = 0 #red for i in range(0,85): r=i self.buildAndSendInterest(d['name'],r*3,g*3,b*3) for i in range(0,85): r=0 g=i self.buildAndSendInterest(d['name'],r*3,g*3,b*3) for i in range(0,85): g=0 b=i self.buildAndSendInterest(d['name'],r*3,g*3,b*3) self.buildAndSendInterest(d['name'],0,0,0) self.buildAndSendInterest(d['name'],255,255,255) self.buildAndSendInterest(d['name'],0,0,0) self.buildAndSendInterest(d['name'],255,255,255) self.buildAndSendInterest(d['name'],0,0,0) self.buildAndSendInterest(d['name'],0,0,0) print "DONE" self.sendSignedInterest("whatever/profileStop/000000") self.endTime = time.time() print "total time is ",(self.endTime - self.startTime) print "number of interests is ",self.count print "average time per interest is ",((self.endTime - self.startTime)/self.count) return def mobileDisco(self): print "fading around" for i in range(0,85): r = b = g = 0 #red for i in range(0,85): r=i self.sendValToAllLights(r*3,g*3,b*3) for i in range(0,85): r=0 g=i self.sendValToAllLights(r*3,g*3,b*3) for i in range(0,85): g=0 b=i self.sendValToAllLights(r*3,g*3,b*3) self.sendValToAllLights(0,0,0) self.sendValToAllLights(255,255,255) self.sendValToAllLights(0,0,0) self.sendValToAllLights(255,255,255) self.sendValToAllLights(0,0,0) sys.exit() def sendValToAllLights(self,r,g,b): for d in self.cfg.names: self.buildAndSendInterest(d['name'],r,g,b) def discoArt(self): print "fading..." for d in self.cfg.names: if d['name'] == "incandescent": print d['name'] r = b = g = 0 #red for i in range(0,250): r=i self.buildAndSendArtInterest(d['name'],r) self.discoArt() def hx(self, inum): num = hex(inum)[2:] if (len(num) == 1): num = '0'+num #print num return str(num) def buildAndSendInterest(self,device,r,g,b): #rx = hex(r)[2:] #gx = hex(g)[2:] #bx = hex(b)[2:] rx = self.hx(r) gx = self.hx(g) bx = self.hx(b) #CLI = self.cfg.interestPrefix+device+"/rgb-8bit-hex/"+rx+gx+bx CLI = device+"/setRGB/"+rx+gx+bx #print CLI self.sendSignedInterest(CLI) #living-room-right-wall/rgb-8bit-hex/d2741d #interestPrefix #ccnx:/ndn/ucla.edu/apps/lighting/TV1/fixture/living-room-right-wall/rgb-8bit-hex/d2741d def buildAndSendArtInterest(self,device,r): rx = self.hx(r) #gx = hex(g)[2:] #bx = hex(b)[2:] #rx = self.hx(r) #CLI = self.cfg.interestPrefix+device+"/rgb-8bit-hex/"+rx+gx+bx CLI = device+"/setBrightness/"+rx #print CLI self.sendSignedInterest(CLI) #living-room-right-wall/rgb-8bit-hex/d2741d #interestPrefix #ccnx:/ndn/ucla.edu/apps/lighting/TV1/fixture/living-room-right-wall/rgb-8bit-hex/d2741d def sendInterest(self,command): n = Name(self.cfg.appPrefix) print("\nInterest espressing for "+str(n)) n += command #fullURI = self.cfg.interestPrefix + command #print fullURI i = Interest.Interest() #n = Name.Name([fullURI]) #this does not parse correctly #n = Name.Name(fullURI) print("Interest sending to "+str(n)) co = self.handle.get(n,i,200) if not not co: #if co is not empty, print result for debugging print("content: "+str(co.content)) def sendSignedInterest(self,command): self.count = self.count +1 time.sleep(self.cfg.refreshInterval) fullURI = self.cfg.appPrefix + command #print fullURI i = Interest() #self.state = NameCrypto.new_state() #build keyLocator to append to interest for NameCrypto on upcall keyLoc = pyccn.KeyLocator(self.key) keyLocStr = _pyccn.dump_charbuf(keyLoc.ccn_data) nameAndKeyLoc = Name(str(fullURI)) #print("there are "+str(len(nameAndKeyLoc))+" components") nameAndKeyLoc += keyLocStr #print("there are "+str(len(nameAndKeyLoc))+" components after adding keyLocStr") #symmetric authName = NameCrypto.authenticate_command(self.state, nameAndKeyLoc, self.cfg.appName, self.cryptoKey) #asymmetric #authName = NameCrypto.authenticate_command_sig(self.state, nameAndKeyLoc, self.cfg.appName, self.key) #print authName.components co = self.handle.expressInterest(authName,self)