Author: ks156
Date: 2008-12-03 21:29:06 +0100 (Wed, 03 Dec 2008)
New Revision: 3005
Added:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTux/chattertux.py
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStart/chattertux_start
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStop/chattertux_stop
Modified:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/HTTPRessource/ResourceChatterTux.py
Log:
* Modified the chattertux resource to be compatible on Linux. (tried with
manual status from a webbrowser, and all is working).
I thinks the changes are not so important, so I didn't test this resource on
Windows yet.
* Added start and stop shortcuts (daemonized with PIDFILE on
/var/run/chattertux.pid)
* Added chattertux.py to snif the TCP frames. I still have to parse the frames,
and send the status. But it works. ('Impacket' and 'pcapy' are requiered to
use this sniffer).
Added:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTux/chattertux.py
===================================================================
---
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTux/chattertux.py
(rev 0)
+++
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTux/chattertux.py
2008-12-03 20:29:06 UTC (rev 3005)
@@ -0,0 +1,68 @@
+#-*- coding:Utf-8 -*-
+
+import pcapy
+from impacket.ImpactDecoder import EthDecoder as Ethernet
+from threading import Thread
+import time
+import urllib
+
+def searchForIfaces():
+ try:
+ interfaces = pcapy.findalldevs()
+ interfaces.remove('any')
+ interfaces.remove('lo')
+ except pcapy.PcapError, e:
+ interfaces = None
+ return interfaces
+
+class sniffer(Thread):
+ def __init__(self, iface, packetSize, promiscuite, timeout, sniffing,
debug):
+ Thread.__init__(self)
+ self.iface = iface
+ self.packetSize= packetSize
+ self.promiscuite = promiscuite
+ self.timeout = timeout
+ self.sniffing = sniffing
+ self.reader = pcapy.open_live(self.iface,
+ self.packetSize,
+ self.promiscuite,
+ self.timeout)
+ self.DEBUG = debug
+
+ if self.DEBUG:
+ print(self.iface + " : " + self.reader.getnet() + " : " +
self.reader.getmask() )
+
+ def run(self):
+ while self.sniffing:
+ try :
+ ethernet = Ethernet().decode(self.reader.next()[1])
+ ip = ethernet.child()
+ l4 = ip.child()
+ hl = l4.child()
+ text = hl.get_buffer_as_string()
+
+ if self.DEBUG:
+ print( "IP src : " + str(ip.get_ip_src()))
+ print( "IP dst : " + str(ip.get_ip_dst()))
+ print( "layer4 : " + str(self.layer4(l4)))
+ print(hl.get_buffer_as_string())
+ except:
+ pass
+
+ def layer4(self, seg):
+ l4_dic = { 6:'TCP', 17:'UDP' }
+ try :
+ return l4_dic[seg.protocol]
+ except KeyError, e :
+ return None
+
+
+
+if __name__ == '__main__':
+ def run():
+ for iface in searchForIfaces() :
+ sniffIface = sniffer(iface, 1024, 0, 100, True, False)
+ sniffIface.start()
+ from tuxisalive.lib.daemonizer import Daemonizer
+ tuxHttpDaemon = Daemonizer('chattertux', '/var/log', run, True)
+ tuxHttpDaemon.start()
Property changes on:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTux/chattertux.py
___________________________________________________________________
Name: svn:executable
+ *
Name: svn:mime-type
+ text/x-python
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStart/chattertux_start
===================================================================
---
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStart/chattertux_start
(rev 0)
+++
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStart/chattertux_start
2008-12-03 20:29:06 UTC (rev 3005)
@@ -0,0 +1,4 @@
+#!/bin/bash
+if [ ! -a /var/run/chattertux.pid ]; then
+ python $1
+fi
Property changes on:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStart/chattertux_start
___________________________________________________________________
Name: svn:executable
+ *
Added:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStop/chattertux_stop
===================================================================
---
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStop/chattertux_stop
(rev 0)
+++
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStop/chattertux_stop
2008-12-03 20:29:06 UTC (rev 3005)
@@ -0,0 +1,7 @@
+#!/bin/bash
+pid=`cat /var/run/chattertux.pid`
+if [[ ! -z $pid ]]; then
+ kill $pid
+ rm /var/run/chattertux.pid
+fi
+
Property changes on:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/ChatterTuxStop/chattertux_stop
___________________________________________________________________
Name: svn:executable
+ *
Modified:
software_suite_v2/software/http_server_resources/chatter_tux/trunk/HTTPRessource/ResourceChatterTux.py
===================================================================
---
software_suite_v2/software/http_server_resources/chatter_tux/trunk/HTTPRessource/ResourceChatterTux.py
2008-12-03 14:09:19 UTC (rev 3004)
+++
software_suite_v2/software/http_server_resources/chatter_tux/trunk/HTTPRessource/ResourceChatterTux.py
2008-12-03 20:29:06 UTC (rev 3005)
@@ -1,197 +1,214 @@
#
# Only for windows
#
-if os.name == 'nt':
+print 'chatter tux'
+# Get the language installation
+CTLocutor = TUXDROID_DEFAULT_LOCUTOR
- # Get the language installation
- CTLocutor = TUXDROID_DEFAULT_LOCUTOR
+# Default configuration
+CTDefaultConf = {
+ 'active' : True,
+}
- # Default configuration
- CTDefaultConf = {
- 'active' : True,
- }
+# Attempt to read the configuration
+CTMyConfFile = "ResourceChatterTux.conf"
+CTMyConf = TDResourceConf().load(CTMyConfFile, CTDefaultConf)
- # Attempt to read the configuration
- CTMyConfFile = "ResourceChatterTux.conf"
- CTMyConf = TDResourceConf().load(CTMyConfFile, CTDefaultConf)
+# Emoticons configuration
+CHATTERTUX_ATT_PATH = os.path.join(TUXDROID_BASE_PATH, "resources",
+ "attitunes", "chatterTux")
- # Emoticons configuration
- CHATTERTUX_ATT_PATH = os.path.join(TUXDROID_BASE_PATH, "resources",
- "attitunes", "chatterTux")
+CTEmoticonToAttitune = {
+ ':d' : os.path.join(CHATTERTUX_ATT_PATH, "Rire.wav"),
+ 'lol' : os.path.join(CHATTERTUX_ATT_PATH, "LOL.wav"),
+ 'mdr' : os.path.join(CHATTERTUX_ATT_PATH, "MDR.wav"),
+ ';)' : os.path.join(CHATTERTUX_ATT_PATH, "ClinDOeil.wav"),
+ '(h)' : os.path.join(CHATTERTUX_ATT_PATH, "Star.wav"),
+ ':@' : os.path.join(CHATTERTUX_ATT_PATH, "Facher.wav"),
+ ':s' : os.path.join(CHATTERTUX_ATT_PATH, "Confus.wav"),
+ ':$' : os.path.join(CHATTERTUX_ATT_PATH, "Embarrasse.wav"),
+ ":'(" : os.path.join(CHATTERTUX_ATT_PATH, "EnPleurs.wav"),
+ '(a)' : os.path.join(CHATTERTUX_ATT_PATH, "Angel.wav"),
+ '8o|' : os.path.join(CHATTERTUX_ATT_PATH, "Agressif.wav"),
+ '8-|' : os.path.join(CHATTERTUX_ATT_PATH, "PremierDeLaClasse.wav"),
+ '+o(' : os.path.join(CHATTERTUX_ATT_PATH, "Malade.wav"),
+ '<:o)' : os.path.join(CHATTERTUX_ATT_PATH, "Fete.wav"),
+ '|-)' : os.path.join(CHATTERTUX_ATT_PATH, "Endormi.wav"),
+ ':-#' : os.path.join(CHATTERTUX_ATT_PATH, "BoucheCousue.wav"),
+ ':-*' : os.path.join(CHATTERTUX_ATT_PATH, "Secret.wav"),
+ '8-)' : os.path.join(CHATTERTUX_ATT_PATH, "YeuxRoulants.wav"),
+ '(l)' : os.path.join(CHATTERTUX_ATT_PATH, "Coeur.wav"),
+ '(u)' : os.path.join(CHATTERTUX_ATT_PATH, "CoeurBrise.wav"),
+ '(@)' : os.path.join(CHATTERTUX_ATT_PATH, "Chat.wav"),
+ '(&)' : os.path.join(CHATTERTUX_ATT_PATH, "Dog.wav"),
+ '(sn)' : os.path.join(CHATTERTUX_ATT_PATH, "Escargot.wav"),
+ '(s)' : os.path.join(CHATTERTUX_ATT_PATH, "Lune.wav"),
+ '(*)' : os.path.join(CHATTERTUX_ATT_PATH, "Etoile.wav"),
+ '(#)' : os.path.join(CHATTERTUX_ATT_PATH, "Soleil.wav"),
+ '(k)' : os.path.join(CHATTERTUX_ATT_PATH, "Bisou.wav"),
+ '(r)' : os.path.join(CHATTERTUX_ATT_PATH, "ArcEnCiel.wav"),
+ '(})' : os.path.join(CHATTERTUX_ATT_PATH, "AccoladeDroite.wav"),
+ '({)' : os.path.join(CHATTERTUX_ATT_PATH, "AccoladeGauche.wav"),
+ '(6)' : os.path.join(CHATTERTUX_ATT_PATH, "Demoniac.wav"),
+ '(o)' : os.path.join(CHATTERTUX_ATT_PATH, "Horloge.wav"),
+ '(f)' : os.path.join(CHATTERTUX_ATT_PATH, "Rose.wav"),
+ ':|' : os.path.join(CHATTERTUX_ATT_PATH, "EmoticDecu.att"),
+}
+CTEmoticonsKeys = CTEmoticonToAttitune.keys()
- CTEmoticonToAttitune = {
- ':d' : os.path.join(CHATTERTUX_ATT_PATH, "Rire.wav"),
- 'lol' : os.path.join(CHATTERTUX_ATT_PATH, "LOL.wav"),
- 'mdr' : os.path.join(CHATTERTUX_ATT_PATH, "MDR.wav"),
- ';)' : os.path.join(CHATTERTUX_ATT_PATH, "ClinDOeil.wav"),
- '(h)' : os.path.join(CHATTERTUX_ATT_PATH, "Star.wav"),
- ':@' : os.path.join(CHATTERTUX_ATT_PATH, "Facher.wav"),
- ':s' : os.path.join(CHATTERTUX_ATT_PATH, "Confus.wav"),
- ':$' : os.path.join(CHATTERTUX_ATT_PATH, "Embarrasse.wav"),
- ":'(" : os.path.join(CHATTERTUX_ATT_PATH, "EnPleurs.wav"),
- '(a)' : os.path.join(CHATTERTUX_ATT_PATH, "Angel.wav"),
- '8o|' : os.path.join(CHATTERTUX_ATT_PATH, "Agressif.wav"),
- '8-|' : os.path.join(CHATTERTUX_ATT_PATH, "PremierDeLaClasse.wav"),
- '+o(' : os.path.join(CHATTERTUX_ATT_PATH, "Malade.wav"),
- '<:o)' : os.path.join(CHATTERTUX_ATT_PATH, "Fete.wav"),
- '|-)' : os.path.join(CHATTERTUX_ATT_PATH, "Endormi.wav"),
- ':-#' : os.path.join(CHATTERTUX_ATT_PATH, "BoucheCousue.wav"),
- ':-*' : os.path.join(CHATTERTUX_ATT_PATH, "Secret.wav"),
- '8-)' : os.path.join(CHATTERTUX_ATT_PATH, "YeuxRoulants.wav"),
- '(l)' : os.path.join(CHATTERTUX_ATT_PATH, "Coeur.wav"),
- '(u)' : os.path.join(CHATTERTUX_ATT_PATH, "CoeurBrise.wav"),
- '(@)' : os.path.join(CHATTERTUX_ATT_PATH, "Chat.wav"),
- '(&)' : os.path.join(CHATTERTUX_ATT_PATH, "Dog.wav"),
- '(sn)' : os.path.join(CHATTERTUX_ATT_PATH, "Escargot.wav"),
- '(s)' : os.path.join(CHATTERTUX_ATT_PATH, "Lune.wav"),
- '(*)' : os.path.join(CHATTERTUX_ATT_PATH, "Etoile.wav"),
- '(#)' : os.path.join(CHATTERTUX_ATT_PATH, "Soleil.wav"),
- '(k)' : os.path.join(CHATTERTUX_ATT_PATH, "Bisou.wav"),
- '(r)' : os.path.join(CHATTERTUX_ATT_PATH, "ArcEnCiel.wav"),
- '(})' : os.path.join(CHATTERTUX_ATT_PATH, "AccoladeDroite.wav"),
- '({)' : os.path.join(CHATTERTUX_ATT_PATH, "AccoladeGauche.wav"),
- '(6)' : os.path.join(CHATTERTUX_ATT_PATH, "Demoniac.wav"),
- '(o)' : os.path.join(CHATTERTUX_ATT_PATH, "Horloge.wav"),
- '(f)' : os.path.join(CHATTERTUX_ATT_PATH, "Rose.wav"),
- ':|' : os.path.join(CHATTERTUX_ATT_PATH, "EmoticDecu.att"),
- }
- CTEmoticonsKeys = CTEmoticonToAttitune.keys()
-
+if os.name == 'nt':
# Chatter tux exe commands
CTChatterTuxStart = '"%s"' % os.path.join(TUXDROID_BASE_PATH, "resources",
"tuxhttpserver", "chatterTux", "chattertux_start.exe")
CTChatterTuxStop = '"%s"' % os.path.join(TUXDROID_BASE_PATH, "resources",
"tuxhttpserver", "chatterTux", "chattertux_stop.exe")
+else:
+ CTChatterTuxStart = "%s %s" %((os.path.join(TUXDROID_BASE_PATH,
+ "tuxhttpserver", "chatterTux", "chattertux_start")),
+ (os.path.join(TUXDROID_BASE_PATH,
+ "tuxhttpserver", "chatterTux", "chattertux.py")))
+ CTChatterTuxStop = "%s %s" %((os.path.join(TUXDROID_BASE_PATH,
+ "tuxhttpserver", "chatterTux", "chattertux_stop")),
+ (os.path.join(TUXDROID_BASE_PATH,
+ "tuxhttpserver", "chatterTux", "chatterTux.py")))
+ Glb_ResourcesLog.logInfo("%s"%CTChatterTuxStart)
- # If the service is active then load it at the server launch
- if CTMyConf['active']:
- os.system(CTChatterTuxStart)
- # Function to play emoticon asynchronously
- def CTPlayEmoticonAsync(emoticon):
- mediaToPlay = CTEmoticonToAttitune[emoticon]
+# If the service is active then load it at the server launch
+if CTMyConf['active']:
+ ret = os.system(CTChatterTuxStart)
+ Glb_ResourcesLog.logInfo("%d"%ret)
+
+
+# Function to play emoticon asynchronously
+def CTPlayEmoticonAsync(emoticon):
+ mediaToPlay = CTEmoticonToAttitune[emoticon]
+ if os.name == 'nt':
if not os.path.isdir(str(mediaToPlay)):
return
- if mediaToPlay.lower().rfind(".att") != -1:
- Glb_tuxApi.attitune.load(str(CTEmoticonToAttitune[emoticon]))
- Glb_tuxApi.attitune.play()
- elif mediaToPlay.lower().rfind(".wav") != -1:
- Glb_tuxApi.wav.playAsync(str(mediaToPlay))
+ else:
+ if not os.path.isfile(str(mediaToPlay)):
+ return
- # Callback function on chattertux status
- def CTOnChatterStatus(stName, chatName, cmd, value1, value2):
- global CTLocutor
+ if mediaToPlay.lower().rfind(".att") != -1:
+ Glb_tuxApi.attitune.load(str(CTEmoticonToAttitune[emoticon]))
+ Glb_tuxApi.attitune.play()
+ elif mediaToPlay.lower().rfind(".wav") != -1:
+ Glb_tuxApi.wav.playAsync(str(mediaToPlay))
- # reencode the text.
- try:
- u = value2.decode("utf-8")
- value2 = u.encode("cp1252", "replace")
- u = value2.decode("utf-8")
- value2 = u.encode("cp1252", "replace")
- except:
- pass
+# Callback function on chattertux status
+def CTOnChatterStatus(stName, chatName, cmd, value1, value2):
+ global CTLocutor
+ # reencode the text.
+ try:
+ u = value2.decode("utf-8")
+ value2 = u.encode("cp1252", "replace")
+ u = value2.decode("utf-8")
+ value2 = u.encode("cp1252", "replace")
+ except:
+ pass
- # speak the text if begin is "tuxdroid>"
- if value2.find('tuxdroid>') == 0:
- Glb_tuxApi.tts.setLocutor(CTLocutor)
- Glb_tuxApi.tts.setPitch(130)
- Glb_tuxApi.tts.speakPush(value2[9:])
- return
+ # speak the text if begin is "tuxdroid>"
+ if value2.find('tuxdroid>') == 0:
+ Glb_tuxApi.tts.setLocutor(CTLocutor)
+ Glb_tuxApi.tts.setPitch(130)
+ Glb_tuxApi.tts.speakPush(value2[9:])
+ return
- # speak the text if begin is "tuxdroid"
- if value2.find('tuxdroid') == 0:
- Glb_tuxApi.tts.setLocutor(CTLocutor)
- Glb_tuxApi.tts.setPitch(130)
- Glb_tuxApi.tts.speakPush(value2[8:])
- return
+ # speak the text if begin is "tuxdroid"
+ if value2.find('tuxdroid') == 0:
+ Glb_tuxApi.tts.setLocutor(CTLocutor)
+ Glb_tuxApi.tts.setPitch(130)
+ Glb_tuxApi.tts.speakPush(value2[8:])
+ return
- # speak the text if begin is "tux>"
- if value2.find('tux>') == 0:
- Glb_tuxApi.tts.setLocutor(CTLocutor)
- Glb_tuxApi.tts.setPitch(130)
- Glb_tuxApi.tts.speakPush(value2[4:])
- return
+ # speak the text if begin is "tux>"
+ if value2.find('tux>') == 0:
+ Glb_tuxApi.tts.setLocutor(CTLocutor)
+ Glb_tuxApi.tts.setPitch(130)
+ Glb_tuxApi.tts.speakPush(value2[4:])
+ return
- # speak the text if begin is "tux"
- if value2.find('tux') == 0:
- Glb_tuxApi.tts.setLocutor(CTLocutor)
- Glb_tuxApi.tts.setPitch(130)
- Glb_tuxApi.tts.speakPush(value2[3:])
- return
+ # speak the text if begin is "tux"
+ if value2.find('tux') == 0:
+ Glb_tuxApi.tts.setLocutor(CTLocutor)
+ Glb_tuxApi.tts.setPitch(130)
+ Glb_tuxApi.tts.speakPush(value2[3:])
+ return
- # Match emoticons in the text:
- value2 = value2.replace("������", '|')
- value2 = value2.replace("�����", '&')
- value2 = value2.replace("����", '+')
- value2 = value2.lower()
+ # Match emoticons in the text:
+ value2 = value2.replace("������", '|')
+ value2 = value2.replace("�����", '&')
+ value2 = value2.replace("����", '+')
+ value2 = value2.lower()
- for emoticon in CTEmoticonsKeys:
- if value2.find(emoticon) != -1:
- t = threading.Thread(target = CTPlayEmoticonAsync,
- args = [emoticon, ])
- t.start()
- return
+ for emoticon in CTEmoticonsKeys:
+ if value2.find(emoticon) != -1:
+ t = threading.Thread(target = CTPlayEmoticonAsync,
+ args = [emoticon, ])
+ t.start()
+ return
- # Set a callback function to the chattertux status
- Glb_tuxApi.event.handler.register("all", CTOnChatterStatus,
- ["chatter", "MSN", "MSG", None, None])
- # Set the local api event delay to 1 Sec
- Glb_tuxApi.event.setDelay(1.0)
+# Set a callback function to the chattertux status
+Glb_tuxApi.event.handler.register("all", CTOnChatterStatus,
+ ["chatter", "MSN", "MSG", None, None])
+# Set the local api event delay to 1 Sec
+Glb_tuxApi.event.setDelay(1.0)
- # -------------------------------------------------------------------------
- # Resource services
- # -------------------------------------------------------------------------
- # /chatter_tux/start?
- # -------------------------------------------------------------------------
- def funct_chatter_tux_start(id_client, parameters):
- global CTChatterTuxStart
- global CTMyConf
- global CTMyConfFile
+# -------------------------------------------------------------------------
+# Resource services
+# -------------------------------------------------------------------------
+# /chatter_tux/start?
+# -------------------------------------------------------------------------
+def funct_chatter_tux_start(id_client, parameters):
+ global CTChatterTuxStart
+ global CTMyConf
+ global CTMyConfFile
- content_struct = copy.deepcopy(DEFAULT_CONTENT_STRUCT)
- content_struct['root']['result'] = getStrError(E_TDREST_SUCCESS)
+ content_struct = copy.deepcopy(DEFAULT_CONTENT_STRUCT)
+ content_struct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- Glb_ResourcesLog.logInfo("Start ChatterTux service.")
- os.system(CTChatterTuxStart)
- CTMyConf['active'] = True
+ Glb_ResourcesLog.logInfo("Start ChatterTux service.")
+ os.system(CTChatterTuxStart)
+ CTMyConf['active'] = True
- # Save the configuration
- TDResourceConf().store(CTMyConfFile, CTMyConf)
+ # Save the configuration
+ TDResourceConf().store(CTMyConfFile, CTMyConf)
- content = structToXML(content_struct, True)
+ content = structToXML(content_struct, True)
- return DEFAULT_HEADERS, content
+ return DEFAULT_HEADERS, content
- Glb_ServiceContainer.createService('/chatter_tux/start?',
- TDCC_LEVEL_FREE_CLIENT,
- funct_chatter_tux_start,
- "ChatterTux",
- "Start the service.")
+Glb_ServiceContainer.createService('/chatter_tux/start?',
+ TDCC_LEVEL_FREE_CLIENT,
+ funct_chatter_tux_start,
+ "ChatterTux",
+ "Start the service.")
- # -------------------------------------------------------------------------
- # /chatter_tux/stop?
- # -------------------------------------------------------------------------
- def funct_chatter_tux_stop(id_client, parameters):
- global CTChatterTuxStop
- global CTMyConf
- global CTMyConfFile
+# -------------------------------------------------------------------------
+# /chatter_tux/stop?
+# -------------------------------------------------------------------------
+def funct_chatter_tux_stop(id_client, parameters):
+ global CTChatterTuxStop
+ global CTMyConf
+ global CTMyConfFile
- content_struct = copy.deepcopy(DEFAULT_CONTENT_STRUCT)
- content_struct['root']['result'] = getStrError(E_TDREST_SUCCESS)
+ content_struct = copy.deepcopy(DEFAULT_CONTENT_STRUCT)
+ content_struct['root']['result'] = getStrError(E_TDREST_SUCCESS)
- Glb_ResourcesLog.logInfo("Stop ChatterTux service.")
- os.system(CTChatterTuxStop)
- CTMyConf['active'] = False
+ Glb_ResourcesLog.logInfo("Stop ChatterTux service.")
+ os.system(CTChatterTuxStop)
+ CTMyConf['active'] = False
- # Save the configuration
- TDResourceConf().store(CTMyConfFile, CTMyConf)
+ # Save the configuration
+ TDResourceConf().store(CTMyConfFile, CTMyConf)
- content = structToXML(content_struct, True)
+ content = structToXML(content_struct, True)
- return DEFAULT_HEADERS, content
+ return DEFAULT_HEADERS, content
- Glb_ServiceContainer.createService('/chatter_tux/stop?',
- TDCC_LEVEL_FREE_CLIENT,
- funct_chatter_tux_stop,
- "ChatterTux",
- "Stop the service.")
+Glb_ServiceContainer.createService('/chatter_tux/stop?',
+ TDCC_LEVEL_FREE_CLIENT,
+ funct_chatter_tux_stop,
+ "ChatterTux",
+ "Stop the service.")
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn