1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import os
23 import gst
24
25 from flumotion.component import feedcomponent
26 from flumotion.common import log, messages, errors
27 from twisted.internet.protocol import ServerFactory, Protocol
28 from twisted.internet import defer, reactor
29
30
32 """ Dumb Protocol, doesn't do anything """
33
35 """ Stop reading/writing """
36 if self.factory.component.currentTransport:
37
38 self.transport.loseConnection()
39 return
40 self.transport.stopReading()
41 self.transport.stopWriting()
42 self.factory.component.setUnixTransport(self.transport)
43
44
45
46 -class UnixDomainDumbFactory(ServerFactory):
47
48 protocol = DumbProtocol
49
50 - def __init__(self, component):
52
53
54 -class UnixDomainProvider(feedcomponent.ParseLaunchComponent, log.Loggable):
55
57 self.factory = None
58 self.socketPath = None
59 self.currentTransport = None
60
62 props = self.config['properties']
63 self.socketPath = props.get('path')
64 feedcomponent.ParseLaunchComponent.do_setup(self)
65
66 - def setUnixTransport(self, transport):
67 self.debug("got transport %r [fd:%d]" % (transport, transport.fileno()))
68 self.currentTransport = transport
69
70
71 fdsrc = self.pipeline.get_by_name("fdsrc")
72 fdsrc.props.fd = transport.fileno()
73
74
75
76 self.link()
77
78 - def get_pipeline_string(self, properties):
79 """ return the pipeline """
80 return 'fdsrc name=fdsrc ! gdpdepay'
81
85
86 - def do_start(self, clocking):
87 self.factory = UnixDomainDumbFactory(self)
88 if clocking:
89 self.set_master_clock(*clocking)
90
91
92 self.pipeline.set_state(gst.STATE_READY)
93
94
95 if os.path.exists(self.socketPath):
96 os.unlink(self.socketPath)
97
98 self.log("Starting to listen on UNIX : %s" % self.socketPath)
99 reactor.listenUNIX(self.socketPath, self.factory)
100
101
102 return defer.succeed(None)
103