From bd2c285a1d15dffbd42f8702200fd9d550726491 Mon Sep 17 00:00:00 2001 From: bjschuma Date: Thu, 17 Dec 2009 22:30:27 -0500 Subject: [PATCH] Took newer version of ocarina2 and renamed to scion --- src/base/__init__.py | 2 + src/base/bt/__init__.py | 4 ++ src/base/bt/__init__.pyc | Bin 0 -> 187 bytes src/base/bt/file.py | 44 +++++++++++++++++++ src/base/bt/file.pyc | Bin 0 -> 1629 bytes src/base/bt/message.py | 22 ++++++++++ src/base/bt/message.pyc | Bin 0 -> 961 bytes src/base/bt/proc.py | 30 +++++++++++++ src/base/bt/proc.pyc | Bin 0 -> 962 bytes src/base/loader.py | 54 +++++++++++++++++++++++ src/base/loader.pyc | Bin 0 -> 1835 bytes src/base/manager.py | 90 +++++++++++++++++++++++++++++++++++++++ src/base/manager.pyc | Bin 0 -> 2701 bytes src/base/ocarina.py | 44 +++++++++++++++++++ src/base/settings.py | 65 ++++++++++++++++++++++++++++ src/base/settings.pyc | Bin 0 -> 1756 bytes src/core/example.py | 24 +++++++++++ src/core/example.pyc | Bin 0 -> 776 bytes src/ocarina | 4 ++ 19 files changed, 383 insertions(+) create mode 100644 src/base/__init__.py create mode 100644 src/base/bt/__init__.py create mode 100644 src/base/bt/__init__.pyc create mode 100644 src/base/bt/file.py create mode 100644 src/base/bt/file.pyc create mode 100644 src/base/bt/message.py create mode 100644 src/base/bt/message.pyc create mode 100644 src/base/bt/proc.py create mode 100644 src/base/bt/proc.pyc create mode 100644 src/base/loader.py create mode 100644 src/base/loader.pyc create mode 100644 src/base/manager.py create mode 100644 src/base/manager.pyc create mode 100644 src/base/ocarina.py create mode 100644 src/base/settings.py create mode 100644 src/base/settings.pyc create mode 100644 src/core/example.py create mode 100644 src/core/example.pyc create mode 100644 src/ocarina diff --git a/src/base/__init__.py b/src/base/__init__.py new file mode 100644 index 00000000..1c5f26fb --- /dev/null +++ b/src/base/__init__.py @@ -0,0 +1,2 @@ + +#__all__ = ["bt"] \ No newline at end of file diff --git a/src/base/bt/__init__.py b/src/base/bt/__init__.py new file mode 100644 index 00000000..fbe1ed4c --- /dev/null +++ b/src/base/bt/__init__.py @@ -0,0 +1,4 @@ +# This is the base tools package +# It contains various tools needed by the base layer of ocarina2 + +__all__ = ["proc", "message"] \ No newline at end of file diff --git a/src/base/bt/__init__.pyc b/src/base/bt/__init__.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e0e0ee6eec6861bfe234244cde43099eb3111d15 GIT binary patch literal 187 zcmcckiI?k?sfKql0~9a;X$K%K761|{K*Y$9&cqM}WH2!VYcK-^OIUzJK~a8k2|JLH zn_66)n4apV!3dH9iNwbz=H$f3YXF%H2%^{=$kort&rQ`&$|_FID9ugOcS$YIF3B&@ z&reP)%FIhN(l0Jb)=x?-1}Z7hkB`sH%PfhH*DI(j;Q;Ej$<0qG%}KQb*fgc5S?`rHx4QELr^#%`A{Syp}HSx5fws6t+*hf%HfntWb94iCb1*$MidE7 z?XTm;U*QkHn@Q42p*LcA*Rwn8*_rp=?yukLji1NC$Asoj4d3@@W`Himt7u5nQItB= zaVV`&r?Qw=GLJP?8dhmkqfU)fTB95M;8N;}u}0~d7PrN zHel$hNt~xsqf6^ym<)6>ykIA<`dm)6q?Va9E5-T{kBpX}Q3Wdkv{`44V12oH0Xv?+;j%->tO%JYQCsB-o;rIF2o$$x zltxUcd4$eS3vK+ourodb*7OoG!lXbRvC@QHQG2V%wHU=j=Mq>nAhPd`;=YL(hZQKE z>F)6+&taH{=)k$Nt(s~blK1Z6{soo*&)Mk*=nN8WsXk+ZW1TH7gM}bOwo<#4$oyDV z`3Ta*NnWWqIQYoCL_e4BwyG()3uVi~?D1tIB*=}^?Z#6(D9UbEj()eB##Up%`Hi(P zabM3)oaE0~MSQVFtpA8l$sGe?{ny3wc3h;>k$%TIHXOXET;)1VwNdrzp6k_`&A)wv BEa3nE literal 0 HcmV?d00001 diff --git a/src/base/bt/message.py b/src/base/bt/message.py new file mode 100644 index 00000000..5f5577be --- /dev/null +++ b/src/base/bt/message.py @@ -0,0 +1,22 @@ + + +__author__="bjschuma" +__date__ ="$Dec 5, 2009 6:46:13 PM$" + +import os +import inspect +import settings + + +# Print an error message +def error(text): + lineno = str(inspect.currentframe().f_back.f_lineno) + filename = inspect.currentframe().f_back.f_code.co_filename + filename = filename.rsplit(os.sep,1)[1] + print filename,"("+lineno+"):",text + +# Print general text to the screen +def write(text,verbose=False): + if (verbose==False) or (settings.get("verbose")==True): + print text + diff --git a/src/base/bt/message.pyc b/src/base/bt/message.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7e43fdc5a7ca719dabf3a5114bd1c98b5ad441d GIT binary patch literal 961 zcmb_aO>fgc5S_K1gp?u*sI`}ptT)LviPzel@FAtA z^w)9YukZ(8W|IhU2HX2~cI^3hZ~Wuut)1_u>3ap6t48}PTK*kD0WcsGFc45gP{c5e zU_i#&j$sgQ?F0r16bW2YNDXuyiW*!~V1uJB(mG|s8wA5kuO^Fm?hom3e5O_F^ik`i z-G1Kcbf0y)PoB0uemFM2=sH(|K8ZK$HSJy!AUy(11SK|3+Hr+BbU!LGS`tD=4u)kkL1jhy0ja=vW3Q*9Ao9k%yhX8alV=vL@sCj zx{|I^u87aQ45Y_hSK+xV1h2;e(pWfMEs*;eW7O#3O?Dzhqgrp!+=?^HI-J$-`N zTzj97_2cRr^60g5)-fZ``9U0teQ_idH?>`15^Zvjcr=X52&(%a)-z#^$s4oRHbDeg zO93KC%NfptcAvEyTCaoHq3)Y}=5>&ZHZpJ&s*%W#|F4#PgdpVor)FEimrUd(N= UnCX|{=VShLQIB>7-AS|Y8#nyK^Z)<= literal 0 HcmV?d00001 diff --git a/src/base/bt/proc.py b/src/base/bt/proc.py new file mode 100644 index 00000000..b423f024 --- /dev/null +++ b/src/base/bt/proc.py @@ -0,0 +1,30 @@ +# Manages process-related tasks + +__author__="bjschuma" +__date__ ="$Dec 5, 2009 6:33:50 PM$" + +import settings +from message import write + +# Set our process name to name +def setname(name): + # Set the process name (thank you exaile.py) + # This only works on linux2 machines + message = "Attempting to set process name to ocarina2..." + if settings.settings["ARCH"] == 'linux2': + try: + import ctypes + libc = ctypes.CDLL('libc.so.6') + libc.prctl(15,name, 0, 0, 0) + message += "success!" + except: + try: + import dl + libc = dl.open('/lib/libc.so.6') + name+="\0" + libc.call('prctl',15, name, 0, 0, 0) # 15 is PR_SET_NAME + message += "success!" + except: + message += "failed." + + write(message,True) \ No newline at end of file diff --git a/src/base/bt/proc.pyc b/src/base/bt/proc.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ead5cf0d97b2977ea86805dbfc9dbaa70b6e95ce GIT binary patch literal 962 zcmbVK&2G~`5T3Oiw@uTZ142~dU{DV^fE~3;5fwr}azLUKWRR$Gu^fBby0K%|yAec6 zPvMPtiXw5~1$YQv0KVBYLWmodcRXXyeDlpW{{C~L`L)}AmC()Q;Q0(kbzxGX0j!{b zpwyz&rjbPhIJg}e*_1mpa7d&L`i#^DXS{2>sMM=4!wZ$1Pl{OGL9pAGiPwGL?R7ej zy@SL3{ljj@d;5Af`-SVcEx4!w^RdpfOgQ9d9jAw*e!zgpl^{)&!MA7!-7YLDzmS-| zU_zifLW)H*i!xAb&>W#nGn+D-QkQ0^Te-RC4H7eqwMvfw`r+~$2_dF$mN*VwIW%)9 z!%%BW9F#YaP6pAXbp0Pt_ixZ^2IVd-)8+D-PSEINEJ)}T!UyOyw;&)vw+)PVtRBKX z*IE{p&ci4p)S|mzssov+?B9o)J~8nRuA^ zs`L-CEkqCwTJmnxBw@gNY7;?_XG1=VOwHmimQmG-&eaOS(>Tjz>bDuwEElYppfX(( zJ*}iNOnUvJqmWmpEtoVnFUv}fjg!QA9-3V<>-Y6UwoNWaJR4LYDnKkglOg-2im8R% zxs9_hY9C&3UKTP~{$@d6s*x_MU@1LeJ(3Mo2Z1^sGj8h|@DYXU;uXGq%>w}dTP zVoU6ZO?V5xDeju+wzc@Fxgd(-i9RpuC^9lcQ5tI*MInnHvY2MPa2wtqw#NH!%Dk^9 UMVU@=`P7DQ7U&AsYKd+8H%pGi&j0`b literal 0 HcmV?d00001 diff --git a/src/base/loader.py b/src/base/loader.py new file mode 100644 index 00000000..3e7a7604 --- /dev/null +++ b/src/base/loader.py @@ -0,0 +1,54 @@ +# This class is used to load plugins + +import sys +from bt.message import write +from bt.file import * + + +class PluginLoader: + def __init__(self): + # Plugins are added to this array upon loading + self.plugins = [] + + + def clearPlugins(self): + self.plugins = [] + + + # Load plugins from a directory + def loaddir(self, dir): + exists = checkDir(dir) + # Exit now if the directory doesn't exist + if exists == False: + return + write("Loading plugins from " + dir, True) + + # Add the directory to our import path + sys.path.append(dir) + modlist = ls(dir) + for mod in modlist: + split = mod.rsplit('.',1) + # Check for things we should not import + if split[0]=="__init__": + continue + elif split[1]=="pyc": + continue + # Load the module into our module array + write("Attempting to load "+mod, True) + self.loadmod(split[0]) + + + # Call with a module name to import + # Adds the imported module to a list + def loadmod(self,mod): + __import__(mod) + plugin = sys.modules[mod] + plugin.__name__ = mod + self.plugins += [plugin] + + + # Load specific plugin + def loadpath(self, path): + write("Loading " + path) + + diff --git a/src/base/loader.pyc b/src/base/loader.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e38036b78ae3ab36e64a17a8abaeb790abcd511f GIT binary patch literal 1835 zcmb_cO>fgc5S_8}(L^n3i%?0P#_A0aeJYgs6lf*WRYvII;0=MJuJJ z^3ynRD0kQ0bG!AJ$Yf#prtVv&pE{Q%I;GJnNYQuy5iQjI-P<<2Pb7j4$U&VIcFGIe| zPe*q8wn#ElT>+8pmsoBa!T;F2^Ht;EHPCe5^)JrGMGw242(H0=?KJ)|Bu_lKPk3U}eX zaTOaaww;9=AQlJjGXgcG7rX8jq_ECTNBw!z`$ttV=_4tkO)Ju3Q7lYCLg2=E>Tcrs z!h16*z1;LgUz*&Hx^hT7r^hB8@7PKi|2oN?iD4y_f@r@wHR{QoJ2jMvKlW1Pq%6%e zLlQ)}Q%mK_+%7y0IF#c>x1lQpb#r~HEN~#Il)&AC zAYKkuxXEkbDlc=JTD%^tahtL5R0c`eWGRClLAhcOqs|sAV(JN*SokyyWilHUga~NF z^f(w|x}|5*ja{8-FO|k9P0FIeFvY^*Me?V)ar04|CKH2Qi5-d1y2a9TEn402YnLTn zgTn_{PFhdg4)aL%%sO&LyMyED0H5JF>Y^H~$BbR_IBc{xfNvljN6qmAm0DKQm#} literal 0 HcmV?d00001 diff --git a/src/base/manager.py b/src/base/manager.py new file mode 100644 index 00000000..110145c8 --- /dev/null +++ b/src/base/manager.py @@ -0,0 +1,90 @@ + + +__author__="bjschuma" +__date__ ="$Dec 8, 2009 8:40:36 AM$" + +import sys +from bt.message import write + +class Manager: + def __init__(self): + write("Creating plugin manager", True) + self.enabled = [] + # Map plugin name to dictionary + self.disabled = [] + + + def addPlugins(self, plugins): + # Add each plugin to the disabled list + for plugin in plugins: + write("Adding plugin: " + str(plugin), True) + self.disabled += [plugin] + # If we are adding a core plugin, activate it right away + if(plugin.__type__=="core"): + self.enablePlugin(plugin.__name__) + + + # Move plugin from old[index] to new + # Return the plugin + def movePlugin(self, index, old, new): + plugin = old.pop(index) + index = len(new) + new += [plugin] + return plugin,index + + + # Disable a plugin, return index of disabled plugin + def disablePlugin(self,name): + index = self.findPlugin(name, self.enabled) + if index > -1: + write("Disabling plugin: "+name) + plugin,index = self.movePlugin(index, self.enabled, self.disabled) + plugin.close() + return index + + + # Move a plugin to the enabled list, return number of plugins enabled + def enablePlugin(self,name): + index = self.findPlugin(name, self.disabled) + if index > -1: + write("Enabling plugin: "+name,True) + plugin,index = self.movePlugin(index, self.disabled, self.enabled) + plugin.open() + return True + + + # Return first location where plugin.__name__ == name + def findPlugin(self,name,array): + write("Finding plugin: "+name,True) + for i in range(len(array)): + if array[i].__name__ == name: + return i + return -1 + + + # Disable the plugin, reload it, reenable it + def reloadPlugin(self,name): + # Check if plugin has been loaded + if (name in sys.modules) == False: + write("Plugin not loaded: "+name, True) + return + reenable = self.disablePlugin(name) + + #import sys + #write(sys.modules["example"]) + #return + #reenable = self.disablePlugin(name) + #index = self.findPlugin(name, self.disabled) + #write("Reloading plugin: "+name) + #plugin = self.disabled[index] + #print plugin + #reload(plugin) + # Only reenable if a plugin was disabled + #if reenable == True: + # self.enablePlugin(name) + + + + +global manager +manager = Manager() \ No newline at end of file diff --git a/src/base/manager.pyc b/src/base/manager.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5f128a6553fa801552c492fb57dc855d3b94cfc9 GIT binary patch literal 2701 zcmb`JT~FLb6o$`uKVT^&5E5uE+HO-S?M0PE(2oT5BMCIE6a}@WQq*lD%dCgRuxoET zrU41A=&$Qt|4RQr`@UzKETne{z>JUW@yt2Tyypym|1&r9*B6~9eW`vLxIRF0KcY)S zdgzVxj3j|1H8~8V2Lpd~IjqUBF1@;#q#?5XT=Va^WsI=G5ki9&+|B!Ok!JB)*A@Nl zZtQHgTKMkxL?@4;G)v1Un&Grf&S~aME9ld6hD+oc@-B?y-{jQD*7F@X3nuZO26Ap> zxx@t|fT5n&1P=#Bz6v5WQ}7PtAdvi~jz}9EkT&_Dc`>E!nG)lg+wMC0he96 z8YhWg-7VnG(I*L}q-mDTjbPsN85Uh9@J%$ghK_L1Lt949>H?9S*3?$xw61K=fVR#- zdjX_I4Q;F7N=7!$$9f&wti$O;jg(fJCH7d~<-XlZCZL0&+Bq&=uh{*4%D3;IE*%M=WUsjU2X_H{Y0$?t)H z3BRog6n2hfGY%&nGTGKz;%>m)(ww@euZ{xZj_rYv_dleYDz)$yEtMF%{xEme=dOOn zag4S?%p@AxKff2AK zRKf5Ks>s-iD!#fzmFoVURqGN|md|jB9kF?o+zQW=*fg*6F=VQ+i8JJRaFr;-_b_1> z?E<|8Pmj)UVO}>m;t4um+9|iHydSR%B#4lK2MWaB*7J`jHsY$uZGwYXQQsQS8_1X! zEAkAItq{3+%=#F*x(G+r=#!Jlt5r;oxFXI5HYCuH<>C!6IwUTN_yo>jo8LWab%X9> zt_shBSwwxhX;)O!#<)o(SK(-tFRU;8 z?+!;#k;2kF@9iVHrbR7SG7F|*IxRfWohn&AqR2ZOMWL#nXPK8fomDCNjJSi_iGOOn z?NJ``^q?D#b-Za>Q?1$7bZZ8`Ex!a^soaZ?%Kf~+`N$xmD2YoPhvA2>2JDu1N7gy~ nYvnm}YQGQFzbv@F;P>0QtgC7*Frhr*s!_EM!A8h=C_+_Jf|9B&MN5)aRwZlM9h>!KceOKi zgM|A~`s@1EztTU@o^x!&dlj!|=G^Ao&;0#Qwer_X@B0wTUxm(ZXqlG^i0H2{0=f#3 zgRX<9fNnwPMU09Vm(VRiv0O>;GP>mjUdCt*<8^e`7dYurqGzGgMb};Fub^9j-oOJ8 zY$962pJcI$XkCCBB3FPdL?q@S-o~(utV((}o^VSyH*uy*h^o+aJUCEVA>Ki}i>QVN zvfjXwvIpHjw8cV9Y=CcX<1DIUpaj_=Rb=X!AiFqYfn6L#4GbNmHPTIf?Xgys(9)y} zv2ljcJzY zrP2ZkjP#vH2V^rHg4(y~M7LL-w_j^BvT4>%!yu27;G}KxuzeF4-Cn6}Wp|cU4YY00 zVc0Izqod3^XZq)~k)xC+@^#;mvs5PQFh;4I69<$*zI`b{`8tTm?Pfn7>(i#kdVEP$ zk)U_^RQpU?U%IZaZLn{4jj?hv+!xX2Rslo1CH1^nt@PGUv;oP3EQ^Gg_3knTgNInA0a>>7bHo!_KJdmMwL(`QHuXzmQz zq(RIFGcqL=O*3mZ2z;Zd3G4-Tq%V!dxu2MU$8yqGVomOoU?{*iO$IBjhJLo94ZqXz%r+z-mI6 zcVk-uGi(*P`*dJnW1Ivu~RU-IXw24Pi99o|X?X#fIYJ7g6e11w6?Z8}dgPHnc z79A{WPC=B)oV@1p5Ea3Ag0gB#owH{WW)sc|qHzDyy=yt>`Ok dD*8%p!7aIExABFlIy-7lRaCW5b?U0-{0E!KSzG`B literal 0 HcmV?d00001 diff --git a/src/core/example.py b/src/core/example.py new file mode 100644 index 00000000..cef74541 --- /dev/null +++ b/src/core/example.py @@ -0,0 +1,24 @@ +# This is a simple test plugin, to make sure everything is working + +__author__="bjschuma" +__date__ ="$Dec 7, 2009 9:12:00 AM$" + +__name__="test" +__type__="core" +__opt__=[] + +from bt.message import write + + +# Called every time the plugin is enabled +def open(): + write("Example plugin has been started",True) + + +def close(): + write("Example plugin has been stopped") + pass + + +def run(): + pass diff --git a/src/core/example.pyc b/src/core/example.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d6ebcfcc06df0e2bbc2a4adb00b87ffaddee370 GIT binary patch literal 776 zcmb7>%}&BV5XWZ=EiH)#z39yzIB+n4B*s9D(WoZ_2lUiSQ@R^K`<3oC${C-|o3G*v z=*&WBB*Da{{qKBr_P4X2UwieB^VUNM>!*V2HGXo4!T~%~1|9=$fM)=&fLDPj#;d^b zHQ~jC$O6v-#w~cqL=AXN8#ZuT8xC*>9$R(nsBDzUvkYfN9LQsIns*{}FHYTFx7&C7 zgR|bC+jVb-O;x3GA(b}5G#B%4d|HgcCdz9*SK=4) z{}#kqB-|`2rt`#|1=5`ek+@O?xe{Dgj%f;d->19~Ep(t1d5CVi-65ooSaoY>3tgUO zBH72Zr2T+x=*ZP{lw8p**+0YC}UeLpDFEX{pi-@5PfK#7f$1aax8MMh3d|CMG6ZR#*l u?N~?|Oocx7m<}|yNT_lPbk`JYEWM0VUPR)Gcx3~{VwQm)YNP5@9rFh(XN^z* literal 0 HcmV?d00001 diff --git a/src/ocarina b/src/ocarina new file mode 100644 index 00000000..538c2c48 --- /dev/null +++ b/src/ocarina @@ -0,0 +1,4 @@ +#!/bin/bash + +# This is a simple shell script for properly starting ocarina +cd base && `which python` ocarina.py $* \ No newline at end of file