#!/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: