diff --git a/recorder.py b/recorder.py deleted file mode 100755 index c3372a2..0000000 --- a/recorder.py +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- -# -# Copyright 2010 Maurizio Porrato -# See LICENSE.txt for copyright info - -from __future__ import with_statement -from frn.protocol.client import FRNClient, FRNClientFactory -from frn.user import FRNUser -from twisted.internet import reactor, task -from twisted.internet.defer import DeferredList -from twisted.python import log -import os, string, time, struct -safe_chars = string.ascii_letters+string.digits+' :;.,+-=$@' - -WAV_HEADER = "524946460c06000057415645666d74201400000031000100401f00005906000041000000020040016661637404000000000000006461746100000000".decode('hex') -AUDIO_TIMEOUT = 5.0 - -def sanitizeFilename(name): - r = '' - for c in name: - if c in safe_chars: - r += c - return r - - -class FRNRecorder(FRNClient): - - def getClientName(self, client_id): - if self.clientsById.has_key(client_id): - return self.clientsById[client_id]['on'] - else: - return client_id - - def buildRecordingName(self, client_id): - ts = time.localtime() - opname = sanitizeFilename(self.clients[client_id-1]['on']) - dirname = "/var/spool/grn/recordings/"+time.strftime("%Y%m/%d/%H", ts) - filename = time.strftime("%Y%m%d%H%M%S-", ts) + opname + '.wav' - try: - os.makedirs(dirname) - except OSError: pass - return dirname+'/'+filename - - def textMessageReceived(self, client, message, target): - pass - - def closeFile(self): - size = self.recordingFile.tell()-len(WAV_HEADER) - self.recordingFile.seek(0x30) # fact chunk value - self.recordingFile.write(struct.pack("= 3: - server_name, network_name = sys.argv[2].split(':',1) - account_cfg = acfg.items(sys.argv[1])+[('network', network_name)] - server_cfg = scfg.items(server_name) - server = scfg.get(server_name, 'server') - port = scfg.getint(server_name, 'port') - - d = dict(account_cfg) - user = FRNUser( - EA=d['email'], - PW=d['password'], ON=d['operator'], - BC=d['transmission'], DS=d['description'], - NN=d['country'], CT=d['city'], NT=d['network']) - reactor.connectTCP(server, port, FRNRecorderFactory(user)) - reactor.run() - - -# vim: set et ai sw=4 ts=4 sts=4: diff --git a/twisted/plugins/frnrecorder.py b/twisted/plugins/frnrecorder.py new file mode 100755 index 0000000..d44e27a --- /dev/null +++ b/twisted/plugins/frnrecorder.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# +# Copyright 2010 Maurizio Porrato +# See LICENSE.txt for copyright info + +from __future__ import with_statement +from zope.interface import implements +from twisted.plugin import IPlugin +from twisted.application.service import IServiceMaker +from frn.protocol.client import FRNClient, FRNClientFactory +from frn.user import FRNUser +from twisted.application import internet +from twisted.internet import reactor, task +from twisted.internet.defer import DeferredList +from twisted.python import log, usage +import os, string, time, struct +from os.path import curdir, join as pjoin +from ConfigParser import ConfigParser +safe_chars = string.ascii_letters+string.digits+' :;.,+-=$@' + +WAV_HEADER = "524946460c06000057415645666d74201400000031000100401f00005906000041000000020040016661637404000000000000006461746100000000".decode('hex') +AUDIO_TIMEOUT = 5.0 + +def sanitizeFilename(name): + r = '' + for c in name: + if c in safe_chars: + r += c + return r + + +class FRNRecorder(FRNClient): + + def getClientName(self, client_id): + if self.clientsById.has_key(client_id): + return self.clientsById[client_id]['on'] + else: + return client_id + + def buildRecordingName(self, client_id): + ts = time.localtime() + opname = sanitizeFilename(self.clients[client_id-1]['on']) + dirname = self.factory.recdir+"/"+time.strftime("%Y%m/%d/%H", ts) + filename = time.strftime("%Y%m%d-%H%M%S-", ts) + opname + '.wav' + try: + os.makedirs(dirname) + except OSError: pass + return dirname+'/'+filename + + def textMessageReceived(self, client, message, target): + pass + + def closeFile(self): + size = self.recordingFile.tell()-len(WAV_HEADER) + time = size / 1625.0 + if time > self.factory.mintime: + self.recordingFile.seek(0x30) # fact chunk value + self.recordingFile.write(struct.pack("